From 8478eac7ed90660486fbe20a701b9ddabac6f2e8 Mon Sep 17 00:00:00 2001 From: mage2-team <mage2-team@magento.com> Date: Fri, 25 Oct 2013 06:24:06 -0700 Subject: [PATCH] 2.0.0.0-dev49 * Various improvements: * Unified Area configuration * Moved EventManager to Magento\Event lib component * Moved FrontController, Routers, Base Actions to Magento\App * Created Magento\App component in library * Declared public interfaces for View component into library * Plushe theme is set as the default theme * Refactor the Blacklist Pattern in the Integrity Test Suite's ClassesTest to Replace Blacklist.php Files * Removed JavaScript unit test TreeSuggestTest.prototype.testBind as obsolete * Introduced ability to register a template engine to process template files having certain extension * Removed support of the Twig template engine along with the corresponding component from the library * Removed layout flag that forced template blocks to output rendered content directly to a browser bypassing the response object * Moved out responsibility of rendering template debugging hints from the template block to the plugin and decorator for a template engine * Fixed bugs: * Fixed inability to create product if multiple attributes are assigned to attribute set * Fixed inability to create a new widget instance * Fixed error on Customers Segments Conditions tab while the 'Number of Orders' condition is chosen * Fixed blank page when placing order via Ogone * Fixed various UI issues in Admin Panel with layout, aligning, buttons and fields * Fixed static tests failing to verify themes files --- CHANGELOG.md | 23 + .../Resource/System/Message/Collection.php | 4 +- .../AdminNotification/Model/Survey.php | 6 +- .../Model/System/Message/Baseurl.php | 6 +- .../Model/System/Message/CacheOutdated.php | 6 +- .../Model/System/Message/Survey.php | 6 +- .../Block/Catalog/Category/Helper/Image.php | 4 +- .../Form/Renderer/Config/YearRange.php | 5 +- .../Block/Catalog/Helper/Form/Wysiwyg.php | 6 +- .../Catalog/Product/Edit/Tab/Super/Config.php | 6 +- .../Catalog/Product/Helper/Form/Category.php | 6 +- .../Catalog/Product/Helper/Form/Gallery.php | 6 +- .../Block/Cms/Page/Edit/Tab/Content.php | 4 +- .../Magento/Adminhtml/Block/Page/Head.php | 4 +- .../Block/Sales/Items/AbstractItems.php | 2 +- .../Magento/Adminhtml/Controller/Customer.php | 2 +- .../Controller/Sales/Order/Shipment.php | 8 +- .../Magento/Adminhtml/Controller/Sitemap.php | 4 +- .../Adminhtml/Controller/System/Backup.php | 4 +- .../Adminhtml/Controller/System/Store.php | 2 +- .../Catalog/Product/Edit/Action/Attribute.php | 34 +- .../Adminhtml/Helper/Dashboard/Data.php | 8 +- .../Adminhtml/Helper/Dashboard/Order.php | 8 +- .../Adminhtml/Model/Email/Template.php | 8 +- .../Adminhtml/Model/Sales/Order/Create.php | 6 +- app/code/Magento/Adminhtml/etc/di.xml | 7 +- .../view/adminhtml/dashboard/index.phtml | 10 +- .../adminhtml/system/cache/additional.phtml | 6 +- .../Magento/Authorizenet/Model/Directpost.php | 8 +- .../Backend/App/Area/FrontNameResolver.php | 66 + .../Backend/App/Request/PathInfoProcessor.php | 65 + .../{Model => App}/Router/NoRouteHandler.php | 8 +- app/code/Magento/Backend/Block/Context.php | 30 +- .../Config/Form/Field/Regexceptions.php | 2 - .../Form/Fieldset/Modules/DisableOutput.php | 6 +- .../Backend/Block/Template/Context.php | 42 +- .../Widget/Grid/Column/Renderer/Currency.php | 10 +- .../Backend/Block/Widget/Grid/Export.php | 2 +- .../Backend/Block/Widget/Grid/Extended.php | 2 +- .../Backend/Controller/AbstractAction.php | 4 +- .../Magento/Backend/Controller/Context.php | 24 +- .../Magento/Backend/Controller/Factory.php | 2 +- .../Controller/Router/DefaultRouter.php | 22 +- app/code/Magento/Backend/Helper/Data.php | 77 +- app/code/Magento/Backend/Model/Auth.php | 20 +- app/code/Magento/Backend/Model/Config.php | 6 +- .../Model/Config/Backend/Admin/Custompath.php | 32 - .../Model/Config/Backend/Admin/Robots.php | 6 +- .../Config/Backend/Admin/Usecustompath.php | 84 - .../Backend/Model/Config/Backend/File.php | 8 +- .../Backend/Model/Config/ScopeDefiner.php | 6 +- app/code/Magento/Backend/Model/Locale.php | 14 +- .../Magento/Backend/Model/Menu/Config.php | 6 +- app/code/Magento/Backend/Model/Menu/Item.php | 8 +- app/code/Magento/Backend/Model/Observer.php | 17 +- app/code/Magento/Backend/Model/Url.php | 16 +- app/code/Magento/Backend/Model/Url/Proxy.php | 2 +- app/code/Magento/Backend/etc/adminhtml/di.xml | 2 +- .../Magento/Backend/etc/adminhtml/system.xml | 2 +- app/code/Magento/Backend/etc/di.xml | 27 +- .../system/config/form/field/array.phtml | 216 +- .../adminhtml/widget/grid/column_set.phtml | 2 +- app/code/Magento/Backup/Helper/Data.php | 28 +- .../Magento/Backup/Model/Fs/Collection.php | 8 +- app/code/Magento/Backup/Model/Observer.php | 6 +- .../Magento/Bundle/Model/Product/Price.php | 4 +- .../Magento/Bundle/Model/Product/Type.php | 4 +- .../Bundle/Model/Resource/Price/Index.php | 6 +- .../Sales/Order/Pdf/Items/Creditmemo.php | 4 +- .../Model/Sales/Order/Pdf/Items/Invoice.php | 4 +- .../Model/Sales/Order/Pdf/Items/Shipment.php | 4 +- app/code/Magento/Bundle/etc/di.xml | 9 +- app/code/Magento/Captcha/Helper/Data.php | 12 +- app/code/Magento/Captcha/Model/Observer.php | 10 +- app/code/Magento/Catalog/Helper/Product.php | 8 +- .../Catalog/Helper/Product/Options.php | 2 +- .../Magento/Catalog/Helper/Product/View.php | 6 +- app/code/Magento/Catalog/Model/Category.php | 10 +- .../Category/Attribute/Backend/Image.php | 8 +- app/code/Magento/Catalog/Model/Design.php | 6 +- .../Catalog/Model/Layer/Filter/Item.php | 6 +- app/code/Magento/Catalog/Model/Product.php | 6 +- .../Magento/Catalog/Model/Product/Action.php | 6 +- .../Model/Product/Attribute/Backend/Media.php | 12 +- .../Product/Attribute/Source/Inputtype.php | 6 +- .../Magento/Catalog/Model/Product/Image.php | 10 +- .../Catalog/Model/Product/Image/View.php | 6 +- .../Catalog/Model/Product/Media/Config.php | 10 +- .../Model/Product/Option/Type/File.php | 14 +- .../Magento/Catalog/Model/Product/Status.php | 6 +- .../Model/Product/Type/AbstractType.php | 6 +- .../Model/Product/Type/Configurable.php | 4 +- .../Catalog/Model/Product/Type/Grouped.php | 4 +- .../Catalog/Model/Product/Type/Price.php | 6 +- .../Magento/Catalog/Model/Product/Url.php | 4 +- .../Catalog/Model/Resource/Category.php | 6 +- .../Category/Attribute/Collection.php | 4 +- .../Catalog/Model/Resource/Category/Flat.php | 6 +- .../Resource/Category/Flat/Collection.php | 4 +- .../Catalog/Model/Resource/Category/Tree.php | 6 +- .../Collection/AbstractCollection.php | 4 +- .../Model/Resource/Layer/Filter/Price.php | 6 +- .../Product/Attribute/Backend/Image.php | 8 +- .../Resource/Product/Attribute/Collection.php | 4 +- .../Model/Resource/Product/Collection.php | 4 +- .../Product/Collection/AssociatedProduct.php | 4 +- .../Product/Compare/Item/Collection.php | 4 +- .../Model/Resource/Product/Flat/Indexer.php | 6 +- .../Product/Indexer/Eav/AbstractEav.php | 6 +- .../Resource/Product/Indexer/Eav/Source.php | 4 +- .../Product/Indexer/Price/DefaultPrice.php | 6 +- .../Resource/Product/Option/Collection.php | 4 +- .../Configurable/Attribute/Collection.php | 4 +- .../Grouped/AssociatedProductsCollection.php | 4 +- app/code/Magento/Catalog/etc/di.xml | 89 +- .../Block/Adminhtml/Form/Field/Minsaleqty.php | 2 - .../Model/Resource/Stock/Item/Collection.php | 4 +- app/code/Magento/CatalogInventory/etc/di.xml | 4 +- .../CatalogRule/Model/Resource/Rule.php | 6 +- .../Model/Rule/Action/Collection.php | 4 +- .../Magento/CatalogRule/Model/Rule/Job.php | 6 +- app/code/Magento/CatalogRule/etc/di.xml | 11 +- .../Magento/CatalogSearch/Model/Fulltext.php | 6 +- .../CatalogSearch/Model/Resource/Advanced.php | 6 +- .../Model/Resource/Advanced/Collection.php | 4 +- .../CatalogSearch/Model/Resource/Fulltext.php | 6 +- .../Model/Resource/Fulltext/Collection.php | 4 +- .../Model/Resource/Query/Collection.php | 4 +- .../Model/Resource/Search/Collection.php | 4 +- app/code/Magento/CatalogSearch/etc/di.xml | 15 - app/code/Magento/Centinel/Helper/Data.php | 10 +- app/code/Magento/Centinel/Model/Service.php | 12 +- .../Magento/Centinel/etc/adminhtml/di.xml | 8 - app/code/Magento/Checkout/Block/Cart.php | 6 +- .../Checkout/Block/Cart/AbstractCart.php | 2 +- .../Checkout/Block/Multishipping/Overview.php | 2 +- app/code/Magento/Checkout/Controller/Cart.php | 2 +- .../Checkout/Controller/Multishipping.php | 2 +- .../Controller/Multishipping/Address.php | 6 +- .../Magento/Checkout/Controller/Onepage.php | 2 +- app/code/Magento/Checkout/Helper/Data.php | 6 +- app/code/Magento/Checkout/Model/Cart.php | 6 +- app/code/Magento/Checkout/Model/Session.php | 2 +- .../Checkout/Model/Type/Multishipping.php | 6 +- .../Magento/Checkout/Model/Type/Onepage.php | 12 +- app/code/Magento/Checkout/etc/di.xml | 29 +- app/code/Magento/Cms/Controller/Router.php | 38 +- app/code/Magento/Cms/Helper/Page.php | 20 +- .../Magento/Cms/Helper/Wysiwyg/Images.php | 16 +- app/code/Magento/Cms/Model/Page.php | 6 +- .../Cms/Model/Resource/Page/Collection.php | 4 +- app/code/Magento/Cms/Model/Wysiwyg/Config.php | 6 +- .../Cms/Model/Wysiwyg/Images/Storage.php | 8 +- app/code/Magento/Cms/etc/di.xml | 52 +- app/code/Magento/Connect/Helper/Data.php | 14 +- .../Connect/Model/Extension/Collection.php | 4 +- .../App/FrontController/Plugin/Install.php | 72 + .../Plugin/RequestPreprocessor.php | 184 + .../Core/App/Request/PathInfoProcessor.php | 67 + .../Core/App/Request/RewriteService.php | 69 + .../{Model => App}/Router/NoRouteHandler.php | 8 +- app/code/Magento/Core/Block/AbstractBlock.php | 35 +- app/code/Magento/Core/Block/Context.php | 56 +- app/code/Magento/Core/Block/Template.php | 104 +- .../Magento/Core/Block/Template/Context.php | 56 +- .../Magento/Core/Controller/Front/Router.php | 104 - app/code/Magento/Core/Controller/Index.php | 1 - .../Core/Controller/Request/HttpProxy.php | 764 -- .../Magento/Core/Controller/Response/Http.php | 141 - .../Magento/Core/Controller/Varien/Action.php | 28 +- .../Core/Controller/Varien/Action/Context.php | 42 +- .../Magento/Core/Controller/Varien/Front.php | 413 - .../Core/Controller/Varien/Router/Base.php | 58 +- .../Magento/Core/Helper/AbstractHelper.php | 6 +- app/code/Magento/Core/Helper/Context.php | 24 +- app/code/Magento/Core/Helper/Css.php | 8 +- app/code/Magento/Core/Helper/Data.php | 12 +- .../Core/Helper/File/Storage/Database.php | 6 +- app/code/Magento/Core/Helper/Http.php | 8 +- app/code/Magento/Core/Helper/Theme.php | 44 +- app/code/Magento/Core/Helper/Translate.php | 14 +- app/code/Magento/Core/Helper/Url.php | 4 +- .../Magento/Core/Model/AbstractEntryPoint.php | 10 +- app/code/Magento/Core/Model/AbstractModel.php | 4 +- app/code/Magento/Core/Model/AbstractShell.php | 8 +- app/code/Magento/Core/Model/App.php | 151 +- app/code/Magento/Core/Model/App/Area.php | 16 +- app/code/Magento/Core/Model/App/Emulation.php | 4 +- app/code/Magento/Core/Model/App/Proxy.php | 561 - app/code/Magento/Core/Model/AppInterface.php | 23 +- .../Core/Model/Cache/Frontend/Factory.php | 12 +- app/code/Magento/Core/Model/Cache/State.php | 4 +- app/code/Magento/Core/Model/Config.php | 56 +- .../Core/Model/Config/FileResolver.php | 8 +- .../Model/Config/FileResolver/Primary.php | 8 +- .../Core/Model/Config/Modules/Reader.php | 12 +- .../Magento/Core/Model/Config/Primary.php | 20 +- .../Magento/Core/Model/Config/Resource.php | 7 + .../Config/Section/Processor/Placeholder.php | 6 +- .../Config/Section/Reader/DefaultReader.php | 6 +- .../Model/Config/Section/Reader/Store.php | 6 +- .../Model/Config/Section/Reader/Website.php | 6 +- .../Core/Model/Config/ValidationState.php | 2 +- app/code/Magento/Core/Model/Context.php | 16 +- app/code/Magento/Core/Model/Cookie.php | 24 +- .../Core/Model/DataService/Path/Request.php | 12 +- app/code/Magento/Core/Model/Design.php | 4 +- .../Core/Model/Design/Backend/Exceptions.php | 6 +- .../Core/Model/Design/Backend/Theme.php | 6 +- .../Core/Model/Design/Fallback/Factory.php | 18 +- .../Core/Model/Design/Fallback/Rule/Theme.php | 4 +- .../FileResolution/Strategy/Fallback.php | 12 +- .../Strategy/Fallback/CachingProxy.php | 40 +- .../FileResolution/Strategy/FileInterface.php | 4 +- .../Strategy/LocaleInterface.php | 4 +- .../Strategy/View/NotifiableInterface.php | 6 +- .../FileResolution/Strategy/ViewInterface.php | 4 +- .../Design/FileResolution/StrategyPool.php | 20 +- app/code/Magento/Core/Model/Email.php | 8 +- .../Magento/Core/Model/Email/Template.php | 10 +- .../Model/Email/Template/Config/Reader.php | 6 +- .../Core/Model/Email/Template/Filter.php | 15 +- .../Magento/Core/Model/EntryPoint/Cron.php | 8 +- .../Magento/Core/Model/EntryPoint/Http.php | 17 +- .../Magento/Core/Model/EntryPoint/Media.php | 2 +- .../Core/Model/Event/Config/SchemaLocator.php | 71 - app/code/Magento/Core/Model/File/Storage.php | 6 +- app/code/Magento/Core/Model/Layout.php | 109 +- .../Model/Layout/Argument/AbstractHandler.php | 18 +- .../Layout/Argument/Handler/ArrayHandler.php | 6 +- .../Model/Layout/Argument/Handler/Helper.php | 4 +- .../Model/Layout/Argument/Handler/Object.php | 4 +- .../Model/Layout/Argument/Handler/Options.php | 4 +- .../Model/Layout/Argument/Handler/String.php | 4 +- .../Model/Layout/Argument/Handler/Url.php | 8 +- .../Layout/Argument/HandlerInterface.php | 4 +- .../Core/Model/Layout/Argument/Processor.php | 8 +- app/code/Magento/Core/Model/Layout/File.php | 8 +- .../Core/Model/Layout/File/Factory.php | 4 +- .../Model/Layout/File/Source/Aggregated.php | 8 +- .../Core/Model/Layout/File/Source/Base.php | 10 +- .../Source/Decorator/ModuleDependency.php | 8 +- .../File/Source/Decorator/ModuleOutput.php | 2 +- .../Layout/File/Source/Override/Base.php | 10 +- .../Layout/File/Source/Override/Theme.php | 10 +- .../Core/Model/Layout/File/Source/Theme.php | 10 +- .../Model/Layout/File/SourceInterface.php | 4 +- app/code/Magento/Core/Model/Layout/Merge.php | 40 +- app/code/Magento/Core/Model/Locale.php | 12 +- .../Locale/Hierarchy/Config/FileResolver.php | 8 +- app/code/Magento/Core/Model/Logger.php | 8 +- app/code/Magento/Core/Model/ModuleManager.php | 6 +- app/code/Magento/Core/Model/ObjectManager.php | 15 +- .../ObjectManager/ConfigLoader/Primary.php | 6 +- .../Model/ObjectManager/DefinitionFactory.php | 2 +- app/code/Magento/Core/Model/Observer.php | 4 +- .../Core/Model/Page/Asset/MergeService.php | 16 +- .../Model/Page/Asset/MergeStrategy/Direct.php | 6 +- .../Magento/Core/Model/Page/Asset/Merged.php | 10 +- .../Core/Model/Page/Asset/MinifyService.php | 16 +- .../Config/Value/Collection/Scoped.php | 4 +- .../Db/Collection/AbstractCollection.php | 6 +- .../Core/Model/Resource/Layout/Update.php | 4 +- .../Magento/Core/Model/Resource/Session.php | 6 +- .../Magento/Core/Model/Resource/Setup.php | 6 +- .../Core/Model/Resource/Setup/Context.php | 30 +- .../Core/Model/Resource/Setup/Migration.php | 12 +- .../Core/Model/Resource/Theme/Collection.php | 6 +- .../Model/Resource/Theme/File/Collection.php | 4 +- .../Magento/Core/Model/Resource/Translate.php | 6 +- .../Core/Model/Resource/Type/Db/Pdo/Mysql.php | 6 +- .../Model/Resource/Url/Rewrite/Collection.php | 4 +- .../Core/Model/Session/AbstractSession.php | 8 +- .../Magento/Core/Model/Session/Context.php | 50 +- app/code/Magento/Core/Model/Store.php | 34 +- .../Magento/Core/Model/Store/Storage/Db.php | 6 +- .../Core/Model/Store/StorageFactory.php | 12 +- app/code/Magento/Core/Model/StoreManager.php | 8 +- app/code/Magento/Core/Model/Template.php | 6 +- .../TemplateEngine/Decorator/DebugHints.php | 103 + .../Core/Model/TemplateEngine/Factory.php | 44 +- .../TemplateEngine/Plugin/DebugHints.php | 87 + .../Handler.php => TemplateEngine/Pool.php} | 37 +- .../Core/Model/TemplateEngine/Twig.php | 106 - .../TemplateEngine/Twig/CommonFunctions.php | 228 - .../Twig/EnvironmentFactory.php | 112 - .../Model/TemplateEngine/Twig/Extension.php | 118 - .../TemplateEngine/Twig/FullFileName.php | 121 - .../TemplateEngine/Twig/LayoutFunctions.php | 164 - app/code/Magento/Core/Model/Theme.php | 28 +- .../Magento/Core/Model/Theme/Collection.php | 16 +- .../Magento/Core/Model/Theme/CopyService.php | 40 +- .../Core/Model/Theme/Customization.php | 4 +- .../Core/Model/Theme/Customization/Path.php | 22 +- .../Core/Model/Theme/Domain/Factory.php | 4 +- .../Core/Model/Theme/Domain/Physical.php | 10 +- .../Core/Model/Theme/Domain/Staging.php | 4 +- .../Core/Model/Theme/Domain/Virtual.php | 6 +- app/code/Magento/Core/Model/Theme/File.php | 2 +- .../Core/Model/Theme/FileInterface.php | 4 +- .../Core/Model/Theme/FlyweightFactory.php | 12 +- app/code/Magento/Core/Model/Theme/Image.php | 4 +- .../Magento/Core/Model/Theme/Image/Path.php | 10 +- .../Magento/Core/Model/Theme/Observer.php | 10 +- .../Magento/Core/Model/Theme/Registration.php | 14 +- app/code/Magento/Core/Model/Translate.php | 16 +- .../Magento/Core/Model/Translate/Inline.php | 8 +- .../Core/Model/Translate/InlineParser.php | 8 +- app/code/Magento/Core/Model/Url.php | 54 +- app/code/Magento/Core/Model/Url/Rewrite.php | 19 +- app/code/Magento/Core/Model/View/Config.php | 4 +- .../Core/Model/View/DeployedFilesManager.php | 2 +- app/code/Magento/Core/Model/View/Design.php | 2 +- .../Magento/Core/Model/View/Design/Proxy.php | 8 +- .../Magento/Core/Model/View/Publisher.php | 16 +- app/code/Magento/Core/Model/View/Service.php | 25 +- app/code/Magento/Core/Model/View/Url.php | 14 +- .../data-upgrade-1.6.0.10-1.6.0.11.php | 2 +- .../data-upgrade-1.6.0.12-1.6.0.13.php | 2 +- app/code/Magento/Core/etc/di.xml | 51 +- app/code/Magento/Core/functions.php | 6 +- .../Core/view/adminhtml/prototype/magento.css | 2 +- app/code/Magento/Cron/etc/di.xml | 3 - .../Magento/CurrencySymbol/Helper/Data.php | 8 +- .../Model/System/Currencysymbol.php | 6 +- .../CurrencySymbol/view/adminhtml/grid.phtml | 48 +- .../Magento/Customer/Controller/Account.php | 2 +- app/code/Magento/Customer/Helper/Data.php | 10 +- app/code/Magento/Customer/Model/Address.php | 4 +- .../Model/Address/AbstractAddress.php | 6 +- app/code/Magento/Customer/Model/Customer.php | 8 +- .../Model/Resource/Customer/Collection.php | 4 +- app/code/Magento/Customer/Model/Session.php | 2 +- app/code/Magento/Customer/etc/di.xml | 27 +- .../Block/Adminhtml/Editor/Container.php | 2 +- .../Adminhtml/Editor/Toolbar/Buttons/Edit.php | 6 +- .../Adminhtml/Editor/Toolbar/Buttons/Save.php | 2 +- .../Adminhtml/Editor/Tools/Code/Custom.php | 2 +- .../Editor/Tools/QuickStyles/Backgrounds.php | 2 +- .../Editor/Tools/QuickStyles/Buttons.php | 2 +- .../Editor/Tools/QuickStyles/Fonts.php | 2 +- .../Editor/Tools/QuickStyles/Header.php | 2 +- .../Editor/Tools/QuickStyles/Tips.php | 2 +- .../DesignEditor/Block/Adminhtml/Theme.php | 4 +- .../SelectorList/AbstractSelectorList.php | 2 +- .../Adminhtml/System/Design/Editor.php | 14 +- .../Adminhtml/System/Design/Editor/Tools.php | 8 +- .../Controller/Varien/Router/Standard.php | 52 +- app/code/Magento/DesignEditor/Helper/Data.php | 8 +- .../Editor/Tools/Controls/Configuration.php | 34 +- .../Model/Editor/Tools/Controls/Factory.php | 12 +- .../QuickStyles/Form/Renderer/Factory.php | 8 +- .../Tools/QuickStyles/ImageUploader.php | 2 +- .../Magento/DesignEditor/Model/Observer.php | 2 +- app/code/Magento/DesignEditor/Model/State.php | 4 +- .../DesignEditor/Model/Url/NavigationMode.php | 10 +- app/code/Magento/DesignEditor/etc/di.xml | 2 +- .../view/adminhtml/css/styles.css | 1 + .../Model/Currency/DefaultLocator.php | 4 +- .../Model/Resource/Country/Collection.php | 4 +- .../Model/Resource/Region/Collection.php | 4 +- app/code/Magento/Directory/etc/di.xml | 9 +- .../Magento/Downloadable/Helper/Download.php | 12 +- app/code/Magento/Downloadable/Model/Link.php | 14 +- .../Downloadable/Model/Product/Type.php | 4 +- .../Sales/Order/Pdf/Items/AbstractItems.php | 4 +- .../Sales/Order/Pdf/Items/Creditmemo.php | 4 +- .../Model/Sales/Order/Pdf/Items/Invoice.php | 4 +- .../Magento/Downloadable/Model/Sample.php | 10 +- app/code/Magento/Downloadable/etc/di.xml | 4 +- .../Eav/Model/Attribute/Data/AbstractData.php | 8 +- .../Magento/Eav/Model/Attribute/Data/Date.php | 4 +- .../Magento/Eav/Model/Attribute/Data/File.php | 10 +- .../Eav/Model/Attribute/Data/Multiline.php | 4 +- .../Eav/Model/Attribute/Data/Multiselect.php | 4 +- .../Eav/Model/Attribute/Data/Select.php | 4 +- .../Magento/Eav/Model/Attribute/Data/Text.php | 4 +- .../Entity/Collection/AbstractCollection.php | 6 +- app/code/Magento/Eav/Model/Form.php | 12 +- .../Model/Resource/Attribute/Collection.php | 4 +- .../Entity/Attribute/Grid/Collection.php | 4 +- .../Entity/Attribute/Option/Collection.php | 4 +- .../Resource/Form/Attribute/Collection.php | 4 +- .../Resource/Form/Fieldset/Collection.php | 4 +- app/code/Magento/Eav/etc/di.xml | 9 +- .../Magento/GiftMessage/Helper/Message.php | 17 +- app/code/Magento/GiftMessage/etc/di.xml | 4 +- .../Block/Adminhtml/Shipping/Merchant.php | 51 +- app/code/Magento/GoogleCheckout/Model/Api.php | 6 +- .../GoogleCheckout/Model/Api/Xml/Callback.php | 6 +- .../GoogleCheckout/Model/Api/Xml/Checkout.php | 6 +- .../Magento/GoogleCheckout/Model/Payment.php | 2 +- app/code/Magento/GoogleCheckout/etc/di.xml | 19 +- .../Model/Observer/AbstractSave.php | 6 +- .../Model/Observer/Block/Category/Tab.php | 10 +- .../Model/Resource/Item/Collection.php | 4 +- app/code/Magento/GoogleShopping/etc/di.xml | 4 +- .../Block/Adminhtml/Import/Edit/Form.php | 1 + app/code/Magento/ImportExport/Helper/Data.php | 8 +- .../ImportExport/Model/AbstractModel.php | 6 +- .../Magento/ImportExport/Model/Export.php | 4 +- .../Magento/ImportExport/Model/Import.php | 4 +- .../Model/Import/Entity/Product.php | 14 +- app/code/Magento/ImportExport/etc/di.xml | 5 - app/code/Magento/Index/Model/Indexer.php | 6 +- app/code/Magento/Index/Model/Lock/Storage.php | 8 +- app/code/Magento/Index/Model/Process.php | 6 +- app/code/Magento/Index/Model/Shell.php | 4 +- .../Model/System/Message/IndexOutdated.php | 6 +- app/code/Magento/Index/etc/di.xml | 14 +- .../Magento/Install/Controller/Action.php | 18 +- app/code/Magento/Install/Controller/Index.php | 20 +- .../Magento/Install/Controller/Wizard.php | 18 +- app/code/Magento/Install/Model/Config.php | 6 +- .../Install/Model/EntryPoint/Upgrade.php | 4 +- app/code/Magento/Install/Model/Installer.php | 22 +- .../Install/Model/Installer/Config.php | 26 +- .../Install/Model/Installer/Console.php | 22 +- .../Install/Model/Installer/Filesystem.php | 6 +- app/code/Magento/Install/Model/Wizard.php | 4 +- app/code/Magento/Log/Model/Resource/Log.php | 6 +- .../Resource/Visitor/Online/Collection.php | 4 +- .../Visitor/Online/Grid/Collection.php | 4 +- app/code/Magento/Log/Model/Shell.php | 6 +- app/code/Magento/Log/Model/Visitor.php | 6 +- app/code/Magento/Log/etc/di.xml | 15 - app/code/Magento/Newsletter/Helper/Data.php | 6 +- app/code/Magento/Newsletter/Model/Queue.php | 4 +- .../Model/Resource/Problem/Collection.php | 4 +- .../Model/Resource/Queue/Collection.php | 4 +- .../Model/Resource/Subscriber/Collection.php | 4 +- .../Magento/Newsletter/Model/Template.php | 10 +- app/code/Magento/Newsletter/etc/di.xml | 4 +- app/code/Magento/Oauth/Helper/Data.php | 6 +- app/code/Magento/Oauth/Model/Consumer.php | 6 +- app/code/Magento/Oauth/Model/Token.php | 6 +- app/code/Magento/Ogone/Block/Placeform.php | 2 +- app/code/Magento/Ogone/Model/Api.php | 14 +- app/code/Magento/Ogone/Model/Config.php | 19 +- app/code/Magento/Page/Block/Html/Head.php | 6 +- app/code/Magento/Page/Block/Html/Header.php | 8 +- app/code/Magento/Page/Block/Html/Welcome.php | 6 +- app/code/Magento/Page/Block/Js/Components.php | 8 +- app/code/Magento/Page/Helper/Layout.php | 6 +- .../Magento/Paygate/Model/Authorizenet.php | 8 +- app/code/Magento/Payment/Helper/Data.php | 6 +- .../Payment/Model/Method/AbstractMethod.php | 6 +- app/code/Magento/Payment/Model/Method/Cc.php | 10 +- .../Magento/Payment/Model/Method/Free.php | 4 +- app/code/Magento/Payment/etc/di.xml | 15 - .../Magento/Paypal/Controller/Express.php | 4 +- .../Controller/Express/AbstractExpress.php | 6 +- .../Paypal/Controller/Payflowadvanced.php | 4 +- .../Magento/Paypal/Controller/Standard.php | 2 +- app/code/Magento/Paypal/Helper/Hss.php | 6 +- app/code/Magento/Paypal/Model/Cart.php | 6 +- app/code/Magento/Paypal/Model/Cert.php | 8 +- app/code/Magento/Paypal/Model/Direct.php | 20 +- app/code/Magento/Paypal/Model/Express.php | 10 +- app/code/Magento/Paypal/Model/Hostedpro.php | 16 +- app/code/Magento/Paypal/Model/Ipn.php | 6 +- .../Magento/Paypal/Model/Method/Agreement.php | 10 +- app/code/Magento/Paypal/Model/Payflowlink.php | 12 +- app/code/Magento/Paypal/Model/Payflowpro.php | 20 +- .../Paypal/Model/Payment/Transaction.php | 6 +- .../Paypal/Model/Report/Settlement.php | 8 +- app/code/Magento/Paypal/Model/Standard.php | 10 +- app/code/Magento/Paypal/etc/di.xml | 4 +- app/code/Magento/PaypalUk/Model/Express.php | 8 +- app/code/Magento/Persistent/Helper/Data.php | 8 +- .../Magento/Persistent/Helper/Session.php | 8 +- .../Magento/Persistent/Model/Observer.php | 32 +- .../Persistent/Model/Observer/Session.php | 2 +- .../Persistent/Model/Persistent/Config.php | 16 +- app/code/Magento/Persistent/etc/di.xml | 5 - app/code/Magento/ProductAlert/Helper/Data.php | 6 +- .../Model/Resource/Rating/Collection.php | 4 +- .../Model/Resource/Rating/Grid/Collection.php | 4 +- .../Rating/Option/Vote/Collection.php | 4 +- .../Model/Resource/Customer/Collection.php | 4 +- .../Model/Resource/Order/Collection.php | 4 +- .../Model/Resource/Product/Collection.php | 4 +- .../Index/Collection/AbstractCollection.php | 4 +- .../Resource/Product/Lowstock/Collection.php | 4 +- .../Model/Resource/Quote/Collection.php | 2 +- .../Report/Product/Viewed/Collection.php | 4 +- .../Resource/Review/Customer/Collection.php | 4 +- .../Model/Resource/Wishlist/Collection.php | 4 +- app/code/Magento/Reports/etc/di.xml | 4 +- .../Magento/Review/Controller/Product.php | 6 +- .../Model/Resource/Review/Collection.php | 4 +- .../Resource/Review/Product/Collection.php | 4 +- app/code/Magento/Review/Model/Review.php | 6 +- app/code/Magento/Rss/Controller/Catalog.php | 6 +- app/code/Magento/Rss/Controller/Order.php | 6 +- .../Rule/Model/Action/AbstractAction.php | 6 +- .../Magento/Rule/Model/Action/Collection.php | 4 +- .../Model/Condition/AbstractCondition.php | 2 +- .../Magento/Rule/Model/Condition/Context.php | 10 +- .../Sales/Block/Items/AbstractItems.php | 2 +- .../Magento/Sales/Controller/Download.php | 8 +- app/code/Magento/Sales/Helper/Guest.php | 8 +- app/code/Magento/Sales/Helper/Reorder.php | 8 +- .../Magento/Sales/Model/Convert/Order.php | 6 +- .../Magento/Sales/Model/Convert/Quote.php | 6 +- app/code/Magento/Sales/Model/Observer.php | 6 +- app/code/Magento/Sales/Model/Order.php | 6 +- .../Magento/Sales/Model/Order/Address.php | 4 +- .../Magento/Sales/Model/Order/Creditmemo.php | 6 +- .../Magento/Sales/Model/Order/Invoice.php | 6 +- app/code/Magento/Sales/Model/Order/Item.php | 6 +- .../Magento/Sales/Model/Order/Payment.php | 6 +- .../Sales/Model/Order/Payment/Transaction.php | 6 +- .../Sales/Model/Order/Pdf/AbstractPdf.php | 8 +- .../Sales/Model/Order/Pdf/Creditmemo.php | 4 +- .../Magento/Sales/Model/Order/Pdf/Invoice.php | 4 +- .../Model/Order/Pdf/Items/AbstractItems.php | 12 +- .../Items/Creditmemo/DefaultCreditmemo.php | 4 +- .../Pdf/Items/Invoice/DefaultInvoice.php | 4 +- .../Pdf/Items/Shipment/DefaultShipment.php | 4 +- .../Sales/Model/Order/Pdf/Shipment.php | 4 +- .../Model/Order/Pdf/Shipment/Packaging.php | 10 +- .../Sales/Model/Order/Pdf/Total/Factory.php | 3 +- .../Sales/Model/Order/Total/Config/Base.php | 2 +- .../Method/Billing/AbstractAgreement.php | 4 +- app/code/Magento/Sales/Model/Quote.php | 6 +- .../Magento/Sales/Model/Quote/Address.php | 4 +- .../Model/Quote/Address/Total/Collector.php | 2 +- .../Model/Quote/Address/Total/Discount.php | 6 +- app/code/Magento/Sales/Model/Quote/Item.php | 6 +- .../Magento/Sales/Model/Quote/Payment.php | 6 +- .../Resource/Billing/Agreement/Collection.php | 4 +- .../Model/Resource/Order/AbstractOrder.php | 6 +- .../Sales/Model/Resource/Order/Address.php | 4 +- .../Sales/Model/Resource/Order/Collection.php | 4 +- .../Sales/Model/Resource/Order/Payment.php | 4 +- .../Resource/Order/Payment/Collection.php | 4 +- .../Model/Resource/Quote/Item/Collection.php | 4 +- .../Resource/Quote/Payment/Collection.php | 4 +- .../Report/Bestsellers/Collection.php | 4 +- .../Report/Collection/AbstractCollection.php | 4 +- .../Report/Invoiced/Collection/Invoiced.php | 4 +- .../Report/Invoiced/Collection/Order.php | 4 +- .../Resource/Report/Order/Collection.php | 4 +- .../Report/Refunded/Collection/Order.php | 4 +- .../Report/Refunded/Collection/Refunded.php | 4 +- .../Report/Shipping/Collection/Order.php | 4 +- .../Report/Shipping/Collection/Shipment.php | 4 +- .../Sales/Model/Resource/Sale/Collection.php | 6 +- .../Magento/Sales/Model/Service/Quote.php | 6 +- app/code/Magento/Sales/etc/di.xml | 89 +- app/code/Magento/Sales/i18n/de_DE.csv | 6 +- app/code/Magento/Sales/i18n/en_US.csv | 6 +- app/code/Magento/Sales/i18n/es_ES.csv | 6 +- app/code/Magento/Sales/i18n/fr_FR.csv | 6 +- app/code/Magento/Sales/i18n/nl_NL.csv | 6 +- app/code/Magento/Sales/i18n/pt_BR.csv | 6 +- app/code/Magento/Sales/i18n/zh_CN.csv | 6 +- .../SalesRule/Model/Quote/Discount.php | 6 +- .../Model/Resource/Report/Collection.php | 4 +- .../Model/Resource/Rule/Collection.php | 4 +- app/code/Magento/SalesRule/Model/Rule.php | 6 +- .../Model/Rule/Action/Collection.php | 4 +- .../Model/Rule/Condition/Combine.php | 6 +- .../Magento/SalesRule/Model/Validator.php | 6 +- app/code/Magento/SalesRule/etc/di.xml | 24 +- app/code/Magento/Sitemap/Model/Sitemap.php | 14 +- .../Magento/Tax/Model/Calculation/Rate.php | 6 +- .../Magento/Tax/Model/Calculation/Rule.php | 6 +- .../Resource/Calculation/Rate/Collection.php | 4 +- .../Tax/Model/Resource/Report/Collection.php | 4 +- app/code/Magento/Tax/etc/di.xml | 14 +- .../Adminhtml/System/Design/Theme/Edit.php | 4 +- .../Design/Theme/Edit/Form/Element/Image.php | 4 +- .../System/Design/Theme/Edit/Tab/General.php | 6 +- .../Adminhtml/System/Design/Theme.php | 12 +- app/code/Magento/Theme/Model/Config.php | 8 +- .../Theme/Model/Config/Customization.php | 12 +- .../Magento/Theme/Model/Theme/SingleFile.php | 4 +- .../{Core/Model => }/Url/Validator.php | 2 +- app/code/Magento/User/Model/User.php | 8 +- app/code/Magento/User/etc/adminhtml/di.xml | 1 + app/code/Magento/User/etc/di.xml | 19 +- .../Magento/Webapi/Controller/Request.php | 17 +- .../Magento/Webapi/Controller/Response.php | 2 +- app/code/Magento/Webapi/Controller/Rest.php | 18 +- .../Webapi/Controller/Rest/Request.php | 15 +- app/code/Magento/Webapi/Controller/Soap.php | 21 +- .../Webapi/Controller/Soap/Request.php | 14 - .../Model/Acl/Role/InRoleUserUpdater.php | 4 +- .../Webapi/Model/Acl/Role/UsersUpdater.php | 10 +- .../Webapi/Model/Acl/User/RoleUpdater.php | 4 +- app/code/Magento/Webapi/Model/Soap/Config.php | 8 +- app/code/Magento/Webapi/Model/Soap/Server.php | 29 +- app/code/Magento/Webapi/etc/di.xml | 6 +- .../etc => Webapi/etc/webapi_rest}/di.xml | 6 +- .../Magento/Webapi/etc/webapi_soap/di.xml | 28 + .../Model/Resource/Event/Collection.php | 4 +- .../Webhook/Model/Resource/Job/Collection.php | 4 +- .../Resource/Subscription/Collection.php | 4 +- .../Resource/Subscription/Grid/Collection.php | 4 +- app/code/Magento/Weee/Model/Observer.php | 6 +- app/code/Magento/Weee/etc/di.xml | 4 +- .../Instance/Edit/Chooser/Container.php | 21 +- .../Widget/Instance/Edit/Chooser/Layout.php | 22 +- .../Widget/Instance/Edit/Tab/Main.php | 6 +- .../Widget/Instance/Edit/Tab/Settings.php | 8 +- .../Controller/Adminhtml/Widget/Instance.php | 17 +- .../Widget/Model/Config/FileResolver.php | 8 +- .../Widget/Instance/Options/Types.php | 2 +- .../Magento/Widget/Model/Template/Filter.php | 9 +- .../Magento/Widget/Model/Widget/Instance.php | 56 +- app/code/Magento/Widget/etc/di.xml | 4 +- .../Widget/view/adminhtml/instance/js.phtml | 6 +- .../adminhtml_widget_instance_block.xml | 1 + .../Magento/Wishlist/Controller/Index.php | 2 +- app/code/Magento/Wishlist/Helper/Data.php | 6 +- .../Model/Resource/Item/Collection.php | 4 +- .../Model/Resource/Item/Collection/Grid.php | 4 +- app/code/Magento/Wishlist/Model/Wishlist.php | 6 +- app/code/Magento/Wishlist/etc/di.xml | 8 - .../adminhtml/magento_backend/css/admin.css | 78 +- .../adminhtml/magento_backend/css/debug.css | 31 +- .../adminhtml/magento_backend/css/pages.css | 123 +- .../adminhtml/magento_backend/mui/form.css | 1 + .../catalog/product/view/backbutton.phtml | 26 + .../catalog/product/view/customize.phtml | 32 + .../catalog/product/view/summary.phtml | 91 + .../catalog/product/view/title.phtml | 31 + .../catalog/product/view/type/bundle.phtml | 59 + .../view/type/bundle/option/checkbox.phtml | 53 + .../view/type/bundle/option/multi.phtml | 50 + .../view/type/bundle/option/radio.phtml | 70 + .../view/type/bundle/option/select.phtml | 61 + .../product/view/type/bundle/options.phtml | 55 + .../magento_plushe/Magento_Bundle/js/slide.js | 99 + .../catalog_product_view_type_bundle.xml | 113 + .../layout/override/checkout_cart_index.xml | 37 + .../layout/override/default.xml | 44 + .../layout/review_product_list.xml | 28 + .../order/creditmemo/items/renderer.phtml | 314 + .../sales/order/invoice/items/renderer.phtml | 330 + .../sales/order/items/renderer.phtml | 354 + .../sales/order/shipment/items/renderer.phtml | 109 + .../magento_plushe/Magento_Captcha/captcha.js | 70 + .../Magento_Captcha/default.phtml | 59 + .../override/checkout_onepage_index.xml | 60 + .../override/customer_account_create.xml | 40 + .../customer_account_forgotpassword.xml | 40 + .../override/customer_account_login.xml | 40 + .../magento_plushe/Magento_Captcha/onepage.js | 40 + .../Magento_Catalog/category/title.phtml | 42 + .../Magento_Catalog/category/view.phtml | 63 + .../category/widget/link/link_block.phtml | 26 + .../category/widget/link/link_inline.phtml | 26 + .../magento_plushe/Magento_Catalog/js/list.js | 74 + .../Magento_Catalog/layer/filter.phtml | 46 + .../Magento_Catalog/layer/state.phtml | 61 + .../Magento_Catalog/layer/view.phtml | 57 + .../layout/catalog_category_view.xml | 35 + .../layout/catalog_product_compare_index.xml | 33 + .../layout/catalog_product_view.xml | 40 + .../catalog_product_view_type_grouped.xml | 27 + .../Magento_Catalog/layout/default.xml} | 22 +- .../layout/override/catalog_category_view.xml | 92 + .../catalog_category_view_type_default.xml | 30 + .../catalog_category_view_type_layered.xml | 30 + .../catalog_product_compare_index.xml | 31 + .../layout/override/catalog_product_view.xml | 145 + ...catalog_product_view_type_configurable.xml | 39 + .../catalog_product_view_type_grouped.xml | 31 + .../catalog_product_view_type_simple.xml | 31 + .../catalog_product_view_type_virtual.xml | 31 + .../layout/override/default.xml | 48 + .../Magento_Catalog/navigation/left.phtml | 59 + .../product/compare/link.phtml | 39 + .../product/compare/list.phtml | 150 + .../product/compare/sidebar.phtml | 79 + .../Magento_Catalog/product/image.phtml | 31 + .../product/image_with_borders.phtml | 32 + .../Magento_Catalog/product/list.phtml | 126 + .../Magento_Catalog/product/list/items.phtml | 272 + .../product/list/toolbar.phtml | 111 + .../Magento_Catalog/product/listing.phtml | 123 + .../Magento_Catalog/product/view/addto.phtml | 48 + .../product/view/addtocart.phtml | 93 + .../product/view/attribute.phtml | 59 + .../product/view/attributes.phtml | 47 + .../product/view/base-image.phtml | 153 + .../product/view/description.phtml | 32 + .../product/view/details.phtml | 42 + .../Magento_Catalog/product/view/form.phtml | 62 + .../product/view/gallery.phtml | 77 + .../Magento_Catalog/product/view/mailto.phtml | 31 + .../product/view/options.phtml | 43 + .../product/view/options/js.phtml | 88 + .../product/view/options/type/date.phtml | 79 + .../product/view/options/type/default.phtml | 29 + .../product/view/options/type/file.phtml | 88 + .../product/view/options/type/select.phtml | 44 + .../product/view/options/type/text.phtml | 61 + .../product/view/options/wrapper.phtml | 36 + .../product/view/options/wrapper/bottom.phtml | 9 +- .../Magento_Catalog/product/view/price.phtml | 27 + .../product/view/price_clone.phtml | 27 + .../Magento_Catalog/product/view/rating.phtml | 26 + .../product/view/tierprices.phtml | 219 + .../product/view/type/default.phtml | 39 + .../product/view/type/grouped.phtml | 97 + .../view/type/options/configurable.phtml | 54 + .../product/widget/link/link_block.phtml | 26 + .../product/widget/link/link_inline.phtml | 26 + .../widget/new/column/new_default_list.phtml | 70 + .../widget/new/column/new_images_list.phtml | 47 + .../widget/new/column/new_names_list.phtml | 43 + .../product/widget/new/content/new_grid.phtml | 120 + .../product/widget/new/content/new_list.phtml | 121 + .../Magento_CatalogSearch/advanced/form.phtml | 129 + .../advanced/result.phtml | 61 + .../Magento_CatalogSearch/form.mini.phtml | 88 + .../layout/catalogsearch_advanced_index.xml | 28 + .../layout/catalogsearch_advanced_result.xml | 33 + .../layout/catalogsearch_result_index.xml | 35 + .../layout/catalogsearch_term_popular.xml | 33 + .../override/catalogsearch_result_index.xml | 46 + .../Magento_CatalogSearch/result.phtml | 53 + .../Magento_CatalogSearch/term.phtml | 35 + .../Magento_Checkout/cart.phtml | 37 + .../Magento_Checkout/cart/coupon.phtml | 69 + .../Magento_Checkout/cart/form.phtml | 107 + .../cart/item/configure/updatecart.phtml | 60 + .../Magento_Checkout/cart/item/default.phtml | 293 + .../Magento_Checkout/cart/methods.phtml | 42 + .../Magento_Checkout/cart/minicart.phtml | 137 + .../Magento_Checkout/cart/noItems.phtml | 31 + .../Magento_Checkout/cart/shipping.phtml | 126 + .../cart/sidebar/default.phtml | 352 + .../Magento_Checkout/cart/totals.phtml | 49 + .../Magento_Checkout/js/opcheckout.js | 494 + .../layout/checkout_cart_index.xml | 49 + .../layout/checkout_multishipping.xml | 27 + ...kout_multishipping_address_editaddress.xml | 34 + ...kout_multishipping_address_editbilling.xml | 34 + ...out_multishipping_address_editshipping.xml | 34 + ...ckout_multishipping_address_newbilling.xml | 34 + ...kout_multishipping_address_newshipping.xml | 34 + ...ut_multishipping_address_selectbilling.xml | 36 + .../checkout_multishipping_addresses.xml | 33 + .../layout/checkout_multishipping_billing.xml | 36 + .../checkout_multishipping_overview.xml | 33 + .../checkout_multishipping_shipping.xml | 33 + .../layout/checkout_multishipping_success.xml | 32 + .../layout/checkout_onepage_paymentmethod.xml | 31 + .../layout/checkout_onepage_review.xml | 30 + .../Magento_Checkout/layout/default.xml | 28 + .../layout/override/checkout_cart_index.xml | 59 + ...heckout_multishipping_customer_address.xml | 31 + .../override/checkout_onepage_additional.xml | 34 + .../override/checkout_onepage_failure.xml | 36 + .../override/checkout_onepage_index.xml | 72 + .../override/checkout_onepage_success.xml | 36 + .../layout/override/default.xml | 39 + .../multishipping/address/select.phtml | 60 + .../multishipping/addresses.phtml | 92 + .../multishipping/agreements.phtml | 49 + .../multishipping/billing.phtml | 98 + .../multishipping/billing/items.phtml | 52 + .../multishipping/item/default.phtml | 47 + .../Magento_Checkout/multishipping/link.phtml | 26 + .../multishipping/overview.phtml | 186 + .../multishipping/overview/item.phtml | 216 + .../multishipping/shipping.phtml | 118 + .../multishipping/state.phtml | 38 + .../multishipping/success.phtml | 45 + .../Magento_Checkout/onepage.phtml | 94 + .../Magento_Checkout/onepage/billing.phtml | 212 + .../Magento_Checkout/onepage/failure.phtml | 28 + .../Magento_Checkout/onepage/link.phtml | 28 + .../Magento_Checkout/onepage/login.phtml | 154 + .../Magento_Checkout/onepage/payment.phtml | 43 + .../Magento_Checkout/onepage/progress.phtml | 114 + .../onepage/review/button.phtml | 26 + .../onepage/review/info.phtml | 65 + .../onepage/review/item.phtml | 238 + .../onepage/review/totals.phtml | 46 + .../Magento_Checkout/onepage/shipping.phtml | 144 + .../onepage/shipping_method.phtml | 40 + .../onepage/shipping_method/available.phtml | 63 + .../Magento_Checkout/success.phtml | 58 + .../Magento_Checkout/total/default.phtml | 37 + .../Magento_Cms/default/footerbanners.phtml | 37 + .../Magento_Cms/default/home.phtml | 53 + .../Magento_Cms/layout/override/default.xml | 36 + .../Magento_Cms/layout/override/print.xml | 4 +- .../Magento_Contacts/form.phtml | 70 + .../layout/contacts_index_index.xml | 28 + .../layout/override/default.xml | 36 + .../magento_plushe/Magento_Core/text.phtml | 35 + .../Magento_Customer/account/customer.phtml | 37 + .../account/dashboard/address.phtml | 51 + .../account/dashboard/hello.phtml | 31 + .../account/dashboard/info.phtml | 58 + .../Magento_Customer/account/link/back.phtml | 28 + .../Magento_Customer/account/navigation.phtml | 38 + .../Magento_Customer/address/book.phtml | 110 + .../Magento_Customer/address/button.phtml | 32 + .../Magento_Customer/address/edit.phtml | 164 + .../Magento_Customer/form/address.phtml | 155 + .../form/changepassword.phtml | 68 + .../Magento_Customer/form/confirmation.phtml | 59 + .../Magento_Customer/form/edit.phtml | 129 + .../form/forgotpassword.phtml | 57 + .../Magento_Customer/form/login.phtml | 82 + .../Magento_Customer/form/newsletter.phtml | 45 + .../Magento_Customer/form/register.phtml | 234 + .../form/resetforgottenpassword.phtml | 59 + .../layout/customer_account.xml | 35 + .../Magento_Customer/layout/default.xml | 38 + .../override/customer_account_create.xml | 42 + .../layout/override/customer_account_edit.xml | 36 + .../customer_account_forgotpassword.xml | 45 + .../override/customer_account_index.xml | 40 + .../override/customer_account_login.xml | 41 + .../override/customer_address_index.xml | 34 + .../Magento_Customer/newcustomer.phtml | 44 + .../Magento_Customer/widget/dob.phtml | 84 + .../Magento_Customer/widget/gender.phtml | 37 + .../Magento_Customer/widget/name.phtml | 112 + .../Magento_Customer/widget/taxvat.phtml | 31 + .../controls/image_sizing.xml | 787 ++ .../controls/quick_styles.xml | 1118 ++ .../Magento_Directory/currency.phtml | 54 + .../layout/override/catalog_category_view.xml | 7 +- .../override/catalogsearch_advanced_index.xml | 26 + .../catalogsearch_advanced_result.xml | 26 + .../override/catalogsearch_result_index.xml | 26 + .../layout/override/default.xml | 33 + .../catalog/product/links.phtml | 68 + .../catalog/product/samples.phtml | 44 + .../catalog/product/type.phtml | 41 + .../checkout/cart/item/default.phtml | 305 + .../checkout/multishipping/item/default.phtml | 57 + .../checkout/onepage/review/item.phtml | 247 + .../checkout/onepage/review/item_down.phtml | 246 + .../customer/products/list.phtml | 75 + ...catalog_product_view_type_downloadable.xml | 36 + .../layout/override/checkout_cart_index.xml | 30 + .../items/renderer/downloadable.phtml | 315 + .../invoice/items/renderer/downloadable.phtml | 305 + .../order/items/renderer/downloadable.phtml | 327 + .../Magento_GiftMessage/inline.phtml | 301 + .../layout/override/default.xml | 30 + .../override/newsletter_manage_index.xml | 33 + .../Magento_Newsletter/subscribe.phtml | 62 + .../magento_plushe/Magento_Page/1column.phtml | 60 + .../Magento_Page/2columns-left.phtml | 66 + .../Magento_Page/2columns-right.phtml | 66 + .../Magento_Page/3columns.phtml | 69 + .../magento_plushe/Magento_Page/blank.phtml | 31 + .../magento_plushe/Magento_Page/empty.phtml | 55 + .../Magento_Page/html/block.phtml | 31 + .../Magento_Page/html/breadcrumbs.phtml | 42 + .../Magento_Page/html/copyright.phtml | 28 + .../Magento_Page/html/head.phtml | 36 + .../Magento_Page/html/header.phtml | 52 + .../Magento_Page/html/notices.phtml | 90 + .../Magento_Page/html/pager.phtml | 119 + .../Magento_Page/html/title.phtml | 42 + .../Magento_Page/html/topmenu.phtml | 42 + .../Magento_Page/layout/default.xml | 100 + .../Magento_Page/layout/override/default.xml | 168 + .../Magento_Page/layout/override/print.xml | 39 + .../Magento_Page/link/current.phtml | 40 + .../magento_plushe/Magento_Page/page.phtml | 57 + .../magento_plushe/Magento_Page/popup.phtml | 48 + .../magento_plushe/Magento_Page/print.phtml | 57 + .../Magento_Page/switch/languages.phtml | 54 + .../Magento_Page/switch/stores.phtml | 59 + .../Magento_PageCache/layout/default.xml | 28 + .../Magento_Paypal/express/review.phtml | 111 + .../express/review/address.phtml | 143 + .../express/review/details.phtml | 55 + .../express/review/shipping/method.phtml | 56 + .../Magento_Paypal/express/shortcut.phtml | 70 + .../layout/override/catalog_product_view.xml | 42 + .../layout/override/default.xml | 33 + .../override/checkout_onepage_index.xml | 35 + .../override/customer_account_create.xml | 31 + .../override/customer_account_login.xml | 31 + .../Magento_Persistent/remember_me.phtml | 41 + .../remember_me_tooltip.phtml | 58 + .../Magento_Rating/detailed.phtml | 45 + .../layout/catalog_product_view.xml | 36 + .../layout/override/default.xml | 31 + .../Magento_Reports/layout/override/print.xml | 26 + .../Magento_Reports/product_compared.phtml | 44 + .../Magento_Reports/product_viewed.phtml | 44 + .../column/compared_default_list.phtml | 58 + .../compared/content/compared_grid.phtml | 125 + .../compared/content/compared_list.phtml | 125 + .../viewed/column/viewed_default_list.phtml | 63 + .../widget/viewed/content/viewed_grid.phtml | 129 + .../widget/viewed/content/viewed_list.phtml | 128 + .../Magento_Review/customer/list.phtml | 82 + .../Magento_Review/customer/recent.phtml | 50 + .../Magento_Review/customer/view.phtml | 78 + .../magento_plushe/Magento_Review/form.phtml | 110 + .../Magento_Review/helper/summary.phtml | 66 + .../Magento_Review/helper/summary_short.phtml | 65 + .../layout/catalog_product_view.xml | 43 + .../override/customer_account_index.xml | 30 + .../layout/override/review_product_view.xml | 35 + .../layout/review_product_list.xml | 33 + .../layout/review_product_view.xml | 28 + .../Magento_Review/product/view/list.phtml | 74 + .../Magento_Review/redirect.phtml | 32 + .../magento_plushe/Magento_Review/view.phtml | 64 + .../billing/agreement/view.phtml | 101 + .../Magento_Sales/billing/agreements.phtml | 91 + .../Magento_Sales/guest/form.phtml | 75 + .../override/customer_account_index.xml | 30 + .../Magento_Sales/layout/override/default.xml | 38 + .../layout/override/sales_guest_view.xml | 51 + .../override/sales_order_creditmemo.xml | 49 + .../override/sales_order_info_links.xml | 61 + .../layout/override/sales_order_invoice.xml | 49 + .../override/sales_order_printorder.xml | 45 + .../sales_order_printordercreditmemo.xml | 41 + .../sales_order_printorderinvoice.xml | 41 + .../layout/override/sales_order_view.xml | 48 + .../Magento_Sales/order/comments.phtml | 42 + .../Magento_Sales/order/creditmemo.phtml | 35 + .../order/creditmemo/items.phtml | 72 + .../creditmemo/items/renderer/default.phtml | 315 + .../Magento_Sales/order/history.phtml | 66 + .../Magento_Sales/order/info.phtml | 77 + .../Magento_Sales/order/info/buttons.phtml | 45 + .../Magento_Sales/order/invoice.phtml | 35 + .../Magento_Sales/order/invoice/items.phtml | 69 + .../invoice/items/renderer/default.phtml | 295 + .../Magento_Sales/order/items.phtml | 79 + .../order/items/renderer/default.phtml | 317 + .../Magento_Sales/order/print.phtml | 98 + .../order/print/creditmemo.phtml | 117 + .../Magento_Sales/order/print/invoice.phtml | 115 + .../Magento_Sales/order/print/shipment.phtml | 123 + .../Magento_Sales/order/recent.phtml | 76 + .../Magento_Sales/order/shipment.phtml | 35 + .../Magento_Sales/order/shipment/items.phtml | 105 + .../Magento_Sales/order/view.phtml | 73 + .../Magento_Sales/recurring/profiles.phtml | 38 + .../Magento_Sales/reorder/sidebar.phtml | 85 + .../Magento_Sales/success.phtml | 63 + .../override/sendfriend_product_send.xml | 36 + .../Magento_Sendfriend/send.phtml | 118 + .../Magento_Shipping/tracking/popup.phtml | 174 + .../Magento_Tax/checkout/grandtotal.phtml | 57 + .../Magento_Tax/checkout/shipping.phtml | 65 + .../Magento_Tax/checkout/subtotal.phtml | 56 + .../Magento_Tax/checkout/tax.phtml | 80 + .../layout/override/default.xml | 26 + .../Magento_Widget/layout/override/print.xml | 26 + .../Magento_Wishlist/button/share.phtml | 28 + .../Magento_Wishlist/button/tocart.phtml | 29 + .../Magento_Wishlist/button/update.phtml | 29 + .../Magento_Wishlist/item/column/cart.phtml | 57 + .../Magento_Wishlist/item/column/image.phtml | 33 + .../Magento_Wishlist/item/column/info.phtml | 40 + .../Magento_Wishlist/item/column/remove.phtml | 28 + .../item/configure/addto.phtml | 37 + .../Magento_Wishlist/item/list.phtml | 53 + .../override/wishlist_index_configure.xml | 39 + .../wishlist_index_configure_type_bundle.xml | 113 + ...list_index_configure_type_configurable.xml | 39 + .../wishlist_index_configure_type_grouped.xml | 31 + .../wishlist_index_configure_type_simple.xml | 26 + .../layout/override/wishlist_index_index.xml | 65 + .../layout/override/wishlist_shared_index.xml | 30 + .../Magento_Wishlist/shared.phtml | 79 + .../Magento_Wishlist/sharing.phtml | 67 + .../Magento_Wishlist/sidebar.phtml | 71 + .../Magento_Wishlist/view.phtml | 81 + .../frontend/magento_plushe/css/print.css | 158 + .../frontend/magento_plushe/css/styles.css | 10859 ++++++++++++++++ .../frontend/magento_plushe/fonts/.htaccess | 13 + .../magento_plushe/fonts/icons/icons.dev.svg | 99 + .../magento_plushe/fonts/icons/icons.eot | Bin 0 -> 4344 bytes .../magento_plushe/fonts/icons/icons.svg | 99 + .../magento_plushe/fonts/icons/icons.ttf | Bin 0 -> 4188 bytes .../magento_plushe/fonts/icons/icons.woff | Bin 0 -> 5220 bytes .../magento_plushe/fonts/marvel/OFL.txt | 93 + .../marvel/marvel-400-normal-webfont.eot | Bin 0 -> 19062 bytes .../marvel/marvel-400-normal-webfont.svg | 213 + .../marvel/marvel-400-normal-webfont.ttf | Bin 0 -> 42136 bytes .../marvel/marvel-400-normal-webfont.woff | Bin 0 -> 21960 bytes .../sourcesanspro-200-normal-webfont.eot | Bin 0 -> 24029 bytes .../sourcesanspro-200-normal-webfont.svg | 245 + .../sourcesanspro-200-normal-webfont.ttf | Bin 0 -> 54196 bytes .../sourcesanspro-200-normal-webfont.woff | Bin 0 -> 26796 bytes .../sourcesanspro-400-normal-webfont.eot | Bin 0 -> 24107 bytes .../sourcesanspro-400-normal-webfont.svg | 245 + .../sourcesanspro-400-normal-webfont.ttf | Bin 0 -> 54820 bytes .../sourcesanspro-400-normal-webfont.woff | Bin 0 -> 26984 bytes .../sourcesanspro-600-normal-webfont.eot | Bin 0 -> 24228 bytes .../sourcesanspro-600-normal-webfont.svg | 245 + .../sourcesanspro-600-normal-webfont.ttf | Bin 0 -> 54012 bytes .../sourcesanspro-600-normal-webfont.woff | Bin 0 -> 27116 bytes .../sourcesanspro-700-normal-webfont.eot | Bin 0 -> 23844 bytes .../sourcesanspro-700-normal-webfont.svg | 245 + .../sourcesanspro-700-normal-webfont.ttf | Bin 0 -> 53496 bytes .../sourcesanspro-700-normal-webfont.woff | Bin 0 -> 26700 bytes .../magento_plushe/images/banner1.jpg | Bin 0 -> 27699 bytes .../magento_plushe/images/banner2.jpg | Bin 0 -> 20777 bytes .../magento_plushe/images/banner3.jpg | Bin 0 -> 11208 bytes .../magento_plushe/images/banner4.jpg | Bin 0 -> 18920 bytes .../magento_plushe/images/blog_bg.png | Bin 0 -> 2999 bytes .../magento_plushe/images/header-bg.jpg | Bin 0 -> 21105 bytes .../magento_plushe/images/info_photo.jpg | Bin 0 -> 7859 bytes .../frontend/magento_plushe/images/loader.gif | Bin 0 -> 477 bytes .../frontend/magento_plushe/images/logo.gif | Bin 0 -> 3454 bytes .../magento_plushe/images/logo_notext.gif | Bin 0 -> 1964 bytes .../magento_plushe/images/main_image1.jpg | Bin 0 -> 147971 bytes .../magento_plushe/images/social-links.png | Bin 0 -> 7564 bytes .../magento_plushe/images/texture.png | Bin 0 -> 81548 bytes .../magento_plushe/js/extra-options.js | 59 + app/design/frontend/magento_plushe/js/head.js | 356 + .../magento_plushe/js/jquery.dropdowns.js | 108 + .../frontend/magento_plushe/js/matchMedia.js | 162 + .../magento_plushe/js/navigation-menu.js | 459 + .../frontend/magento_plushe/js/selectivizr.js | 567 + .../frontend/magento_plushe/js/sticky.js | 61 + app/design/frontend/magento_plushe/js/tabs.js | 169 + .../frontend/magento_plushe/js/theme.js | 115 + .../magento_plushe/less/clearless/all.less | 36 + .../magento_plushe/less/clearless/arrows.less | 172 + .../magento_plushe/less/clearless/grids.less | 186 + .../less/clearless/helpers.less | 248 + .../magento_plushe/less/clearless/icons.less | 327 + .../magento_plushe/less/clearless/resets.less | 307 + .../less/clearless/settings.less | 50 + .../less/clearless/sprites.less | 75 + .../less/clearless/typography.less | 66 + .../magento_plushe/less/lib/buttons.less | 136 + .../magento_plushe/less/lib/forms.less | 919 ++ .../magento_plushe/less/lib/grids.less | 384 + .../magento_plushe/less/lib/icons.less | 205 + .../magento_plushe/less/lib/messages.less | 214 + .../magento_plushe/less/lib/navigation.less | 658 + .../magento_plushe/less/lib/sections.less | 203 + .../magento_plushe/less/lib/snippets.less | 142 + .../frontend/magento_plushe/less/styles.less | 5180 ++++++++ .../magento_plushe/less/styles/base.less | 429 + .../magento_plushe/less/styles/magento.less | 1549 +++ .../frontend/magento_plushe/less/vars.less | 131 + .../frontend/magento_plushe/media/preview.jpg | Bin 0 -> 113913 bytes app/design/frontend/magento_plushe/theme.xml | 33 + app/design/frontend/magento_plushe/view.xml | 298 + app/etc/di.xml | 97 +- .../Magento/TestFramework/Application.php | 48 +- .../Magento/TestFramework/Cookie.php | 12 +- .../TestFramework/Helper/Bootstrap.php | 9 +- .../Magento/TestFramework/Helper/Config.php | 2 +- .../Magento/TestFramework/Request.php | 2 +- .../Magento/TestFramework/Response.php | 3 +- .../TestCase/AbstractConfigFiles.php | 6 +- .../TestCase/AbstractController.php | 21 +- .../TestCase/AbstractIntegrity.php | 2 +- .../Magento/Test/ApplicationTest.php | 4 +- .../testsuite/Magento/Test/CookieTest.php | 7 +- .../Magento/Test/Helper/BootstrapTest.php | 15 +- .../Magento/Test/ObjectManagerTest.php | 6 +- .../testsuite/Magento/Test/RequestTest.php | 3 +- .../testsuite/Magento/Test/ResponseTest.php | 2 +- .../Test/TestCase/ControllerAbstractTest.php | 13 +- .../Product/Attribute/Set/Toolbar/AddTest.php | 2 +- .../Product/Edit/Tab/Options/OptionTest.php | 2 +- .../Edit/Tab/Options/Type/SelectTest.php | 2 +- .../Edit/Tab/Super/Config/MatrixTest.php | 4 +- .../Product/Edit/Tab/Super/ConfigTest.php | 6 +- .../Product/Edit/Tab/Super/SettingsTest.php | 2 +- .../Block/Catalog/Product/Edit/TabsTest.php | 6 +- .../Block/Catalog/Product/EditTest.php | 2 +- .../Helper/Form/Gallery/ContentTest.php | 2 +- .../Catalog/Product/Options/AjaxTest.php | 2 +- .../Block/Cms/Page/Edit/Tab/DesignTest.php | 4 +- .../Adminhtml/Block/Dashboard/GraphTest.php | 2 +- .../Block/Newsletter/Queue/Edit/FormTest.php | 4 +- .../Block/Newsletter/SubscriberTest.php | 2 +- .../Magento/Adminhtml/Block/Page/HeadTest.php | 2 +- .../Adminhtml/Block/Page/HeaderTest.php | 2 +- .../Block/Promo/Catalog/Edit/Tab/MainTest.php | 2 +- .../Block/Promo/Quote/Edit/Tab/LabelsTest.php | 2 +- .../Block/Promo/Quote/Edit/Tab/MainTest.php | 2 +- .../Block/Rating/Edit/Tab/FormTest.php | 2 +- .../Block/Report/Filter/FormTest.php | 2 +- .../Report/Sales/Bestsellers/GridTest.php | 2 +- .../Block/Report/Sales/Coupons/GridTest.php | 2 +- .../Block/Report/Sales/Invoiced/GridTest.php | 2 +- .../Block/Report/Sales/Refunded/GridTest.php | 2 +- .../Block/Report/Sales/Sales/GridTest.php | 2 +- .../Block/Report/Sales/Shipping/GridTest.php | 2 +- .../Block/Report/Sales/Tax/GridTest.php | 2 +- .../Block/Sales/Items/AbstractTest.php | 2 +- .../Sales/Order/Create/Form/AbstractTest.php | 2 +- .../Block/System/Account/Edit/FormTest.php | 2 +- .../System/Design/Edit/Tab/GeneralTest.php | 2 +- .../Block/System/Store/DeleteTest.php | 2 +- .../System/Store/Edit/Form/GroupTest.php | 2 +- .../System/Store/Edit/Form/StoreTest.php | 2 +- .../System/Store/Edit/Form/WebsiteTest.php | 2 +- .../Adminhtml/Block/System/Store/EditTest.php | 4 +- .../Block/System/Variable/EditTest.php | 4 +- .../Block/Tax/Rate/ImportExportTest.php | 2 +- .../Magento/Adminhtml/Block/TemplateTest.php | 2 +- .../Urlrewrite/Catalog/Category/TreeTest.php | 2 +- .../Urlrewrite/Catalog/Edit/FormTest.php | 2 +- .../Urlrewrite/Catalog/Product/GridTest.php | 2 +- .../Urlrewrite/Cms/Page/Edit/FormTest.php | 2 +- .../Block/Urlrewrite/Cms/Page/GridTest.php | 4 +- .../Block/Urlrewrite/Edit/FormTest.php | 2 +- .../Block/Widget/Form/ContainerTest.php | 2 +- .../Block/Widget/Grid/Massaction/ItemTest.php | 2 +- .../Adminhtml/Block/Widget/GridTest.php | 2 +- .../Adminhtml/Block/Widget/TabsTest.php | 2 +- .../Catalog/Product/AttributeTest.php | 2 +- .../Magento/App/FrontControllerTest.php | 91 + .../Block/Directpost/IframeTest.php | 2 +- .../Backend/Block/System/Config/FormStub.php | 2 +- .../Backend/Block/System/Config/FormTest.php | 20 +- .../Magento/Backend/Block/TemplateTest.php | 2 +- .../Backend/Block/Widget/ContainerTest.php | 2 +- .../Magento/Backend/Block/Widget/FormTest.php | 2 +- .../Block/Widget/Grid/ColumnSetTest.php | 2 +- .../Block/Widget/Grid/ContainerTest.php | 2 +- .../Block/Widget/Grid/ExtendedTest.php | 4 +- .../Block/Widget/Grid/MassactionTest.php | 8 +- .../Magento/Backend/Block/Widget/GridTest.php | 8 +- .../Backend/Controller/AbstractActionTest.php | 4 +- .../Controller/Router/DefaultRouterTest.php | 6 +- .../Router/Validator/DefaultTest.php | 19 - .../Magento/Backend/Helper/DataTest.php | 6 +- .../Backend/Model/Auth/SessionTest.php | 4 +- .../Model/Config/Backend/Admin/RobotsTest.php | 6 +- .../Magento/Backend/Model/ConfigTest.php | 2 +- .../Magento/Backend/Model/LocaleTest.php | 2 +- .../Magento/Backend/Model/MenuTest.php | 2 +- .../Magento/Backend/Model/ObserverTest.php | 4 +- .../Magento/Backend/Model/UrlTest.php | 8 +- .../Backend/Model/_files/no_robots_txt.php | 2 +- .../Backend/Model/_files/robots_txt.php | 2 +- .../Tab/Bundle/Option/Search/GridTest.php | 2 +- .../Edit/Tab/Bundle/Option/SearchTest.php | 2 +- .../Magento/Bundle/Controller/ProductTest.php | 3 +- .../Captcha/Block/Captcha/DefaultTest.php | 5 +- .../Magento/Catalog/Block/Layer/ViewTest.php | 2 +- .../Catalog/Block/Product/AbstractTest.php | 12 +- .../Backend/Grid/ColumnSetTest.php | 2 +- .../Catalog/Block/Product/ListTest.php | 4 +- .../Magento/Catalog/Block/Product/NewTest.php | 6 +- .../Product/ProductList/CrosssellTest.php | 4 +- .../Block/Product/ProductList/RelatedTest.php | 4 +- .../Block/Product/ProductList/ToolbarTest.php | 2 +- .../Block/Product/View/AdditionalTest.php | 2 +- .../Block/Product/View/OptionsTest.php | 2 +- .../Product/View/Type/ConfigurableTest.php | 2 +- .../Catalog/Block/Product/ViewTest.php | 2 +- .../Catalog/Controller/CategoryTest.php | 2 +- .../Catalog/Controller/ProductTest.php | 2 +- .../Catalog/Helper/Product/ViewTest.php | 4 +- .../Magento/Catalog/Model/DesignTest.php | 4 +- .../Model/Layer/Filter/AttributeTest.php | 4 +- .../Model/Layer/Filter/CategoryTest.php | 4 +- .../Model/Layer/Filter/DecimalTest.php | 6 +- .../Catalog/Model/Layer/Filter/ItemTest.php | 6 +- .../Filter/Price/AlgorithmAdvancedTest.php | 2 +- .../Catalog/Model/Layer/Filter/PriceTest.php | 6 +- .../Model/Product/Type/AbstractTest.php | 2 +- .../testsuite/Magento/Catalog/WidgetTest.php | 8 +- .../Block/Advanced/ResultTest.php | 5 +- .../CatalogSearch/Block/ResultTest.php | 2 +- .../Magento/CatalogSearch/Block/TermTest.php | 2 +- .../Checkout/Block/Cart/Item/RendererTest.php | 2 +- .../Checkout/Block/Cart/SidebarTest.php | 2 +- .../Magento/Checkout/Block/CartTest.php | 6 +- .../Block/Multishipping/OverviewTest.php | 4 +- .../Block/Onepage/Payment/MethodsTest.php | 2 +- .../testsuite/Magento/Cms/Block/BlockTest.php | 2 +- .../Magento/Cms/Block/Widget/BlockTest.php | 2 +- .../Magento/Cms/Controller/RouterTest.php | 14 +- .../testsuite/Magento/Cms/Helper/PageTest.php | 2 +- .../Magento/Cms/Helper/Wysiwyg/ImagesTest.php | 6 +- .../Magento/Cms/Model/Wysiwyg/ConfigTest.php | 2 +- .../Cms/Model/Wysiwyg/Images/StorageTest.php | 4 +- .../testsuite/Magento/Code/GeneratorTest.php | 12 +- .../Magento/Core/Block/AbstractBlockTest.php | 30 +- .../Magento/Core/Block/TemplateTest.php | 19 +- .../Magento/Core/Block/Text/ListTest.php | 5 +- .../testsuite/Magento/Core/Block/TextTest.php | 2 +- .../Core/Controller/Request/HttpTest.php | 193 - .../Core/Controller/Varien/ActionTest.php | 12 +- .../Core/Controller/Varien/FrontTest.php | 141 - .../Controller/Varien/Router/BaseTest.php | 2 +- .../Magento/Core/Model/App/AreaTest.php | 32 +- .../Magento/Core/Model/App/EmulationTest.php | 2 +- .../testsuite/Magento/Core/Model/AppTest.php | 13 +- .../Magento/Core/Model/ConfigTest.php | 34 - .../Core/Model/DataService/ConfigTest.php | 14 +- .../Core/Model/DataService/LayoutTest.php | 8 +- .../FileResolution/Strategy/FallbackTest.php | 4 +- .../Magento/Core/Model/DesignTest.php | 2 +- .../Core/Model/Email/Template/FilterTest.php | 6 +- .../Magento/Core/Model/Email/TemplateTest.php | 6 +- .../Core/Model/Fieldset/Config/ReaderTest.php | 20 +- .../Magento/Core/Model/File/StorageTest.php | 2 +- .../Core/Model/LayoutDirectivesTest.php | 14 +- .../Magento/Core/Model/LayoutTest.php | 17 +- .../Core/Model/Page/Asset/MergedTest.php | 10 +- .../Resource/Db/Collection/AbstractTest.php | 2 +- .../Core/Model/Resource/Layout/UpdateTest.php | 4 +- .../Magento/Core/Model/Resource/SetupTest.php | 4 +- .../Model/Resource/Theme/CollectionTest.php | 16 +- .../Magento/Core/Model/RouterListTest.php | 8 +- .../Core/Model/Session/AbstractTest.php | 2 +- .../Magento/Core/Model/StoreTest.php | 10 +- .../Core/Model/TemplateEngine/TwigTest.php | 88 - .../Core/Model/Theme/CollectionTest.php | 5 +- .../Core/Model/Theme/Domain/VirtualTest.php | 16 +- .../Magento/Core/Model/Theme/FileTest.php | 4 +- .../Core/Model/Theme/RegistrationTest.php | 2 +- .../Core/Model/Theme/ValidatorTest.php | 2 +- .../Magento/Core/Model/ThemeTest.php | 11 +- .../Core/Model/Translate/InlineParserTest.php | 2 +- .../Core/Model/Translate/InlineTest.php | 4 +- .../Magento/Core/Model/TranslateTest.php | 12 +- .../Magento/Core/Model/Url/RewriteTest.php | 24 +- .../testsuite/Magento/Core/Model/UrlTest.php | 9 +- .../Magento/Core/Model/View/DesignTest.php | 62 +- .../Core/Model/View/FileSystemTest.php | 4 +- .../Core/Model/View/PublicationTest.php | 46 +- .../testsuite/Magento/Core/Utility/Layout.php | 8 +- .../Magento/Core/Utility/LayoutTest.php | 6 +- .../Magento/Core/_files/layout_update.php | 4 +- .../Block/Account/Dashboard/InfoTest.php | 2 +- .../Customer/Block/Widget/GenderTest.php | 2 +- .../Model/Config/QuickStylesTest.php | 6 +- .../Tools/Controls/ConfigurationTest.php | 10 +- .../DesignEditor/Model/ObserverTest.php | 10 +- .../DesignEditor/Model/Theme/ChangeTest.php | 7 +- .../Model/Translate/InlineVdeTest.php | 8 +- .../Model/_files/design/themes.php | 2 +- .../_files/design_editor_active.php | 6 +- .../Edit/Tab/Downloadable/LinksTest.php | 8 +- .../Edit/Tab/Downloadable/SamplesTest.php | 6 +- .../Downloadable/Controller/ProductTest.php | 2 +- .../Attribute/Edit/Main/AbstractTest.php | 2 +- .../Magento/Filesystem/Adapter/LocalTest.php | 4 +- .../GiftMessage/Block/Message/InlineTest.php | 2 +- .../Block/Adminhtml/Items/ProductTest.php | 8 +- .../Magento/Image/Adapter/InterfaceTest.php | 2 +- .../Block/Adminhtml/Export/Edit/FormTest.php | 2 +- .../Block/Adminhtml/Export/FilterTest.php | 2 +- .../Block/Adminhtml/Import/Edit/FormTest.php | 2 +- .../Model/Import/Entity/ProductTest.php | 4 +- .../Magento/Index/Model/Process/FileTest.php | 6 +- .../Magento/Install/Controller/WizardTest.php | 14 +- .../testsuite/Magento/Install/IndexTest.php | 4 +- .../Magento/Install/Model/ConfigTest.php | 20 +- .../Install/Model/Installer/ConfigTest.php | 10 +- .../Magento/Install/Model/InstallerTest.php | 10 +- .../Magento/Newsletter/Model/QueueTest.php | 6 +- .../ObjectManager/Config/Reader/DomTest.php | 2 +- .../ObjectManager/_files/config_merged.xml | 4 +- .../ObjectManager/_files/config_one.xml | 2 +- .../ObjectManager/_files/config_two.xml | 4 +- .../Page/Block/Html/BreadcrumbsTest.php | 2 +- .../Magento/Page/Block/Html/FooterTest.php | 4 +- .../Magento/Page/Block/Html/HeadTest.php | 4 +- .../Magento/Payment/Block/InfoTest.php | 2 +- .../Paypal/Block/Express/ReviewTest.php | 2 +- .../Magento/Paypal/Model/VoidTest.php | 4 +- .../ProductAlert/Block/Email/StockTest.php | 2 +- .../Driver/Standard/Output/FirebugTest.php | 6 +- .../Magento/Rss/Block/Order/StatusTest.php | 2 +- .../Magento/Rss/Controller/CatalogTest.php | 2 +- .../Sales/Block/Order/CommentsTest.php | 2 +- .../Block/Order/Creditmemo/ItemsTest.php | 5 +- .../Sales/Block/Order/Invoice/ItemsTest.php | 5 +- .../Block/Order/PrintOrder/CreditmemoTest.php | 2 +- .../Block/Order/PrintOrder/InvoiceTest.php | 2 +- .../Sales/Block/Order/Shipment/ItemsTest.php | 2 +- .../Magento/Sales/Block/Order/TotalsTest.php | 2 +- .../Block/Recurring/Profile/ViewTest.php | 5 +- .../Magento/Test/Integrity/LayoutTest.php | 40 +- .../Integrity/Modular/AclConfigFilesTest.php | 4 +- .../Modular/BlockInstantiationTest.php | 2 +- .../Integrity/Modular/DiConfigFilesTest.php | 8 +- .../Modular/EventConfigFilesTest.php | 2 +- .../Integrity/Modular/LayoutFilesTest.php | 2 +- .../Modular/ServiceCallsConfigFilesTest.php | 2 +- .../Modular/SystemConfigFilesTest.php | 6 +- .../Integrity/Modular/TemplateFilesTest.php | 6 +- .../Integrity/Modular/ViewConfigFilesTest.php | 2 +- .../Test/Integrity/Modular/ViewFilesTest.php | 4 +- .../Integrity/Theme/TemplateFilesTest.php | 4 +- .../Test/Integrity/Theme/ViewFilesTest.php | 12 +- .../Test/Integrity/Theme/XmlFilesTest.php | 10 +- .../Test/Integrity/ViewFileReferenceTest.php | 12 +- .../Tools/Layout/Reference/ProcessorTest.php | 4 +- .../Design/Theme/Edit/Tab/GeneralTest.php | 9 +- .../System/Design/ThemeControllerTest.php | 8 +- .../Theme/Model/Wysiwyg/StorageTest.php | 10 +- .../Block/Adminhtml/Dhl/UnitofmeasureTest.php | 2 +- .../Magento/User/Block/Role/Grid/UserTest.php | 2 +- .../Magento/User/Block/Role/Tab/EditTest.php | 2 +- .../Model => View}/Layout/ElementTest.php | 8 +- .../Layout}/_files/_layout_update.xml | 0 .../Block/Adminhtml/AbstractFormTest.php | 4 +- .../Adminhtml/Role/Edit/Tab/MainTest.php | 6 +- .../Adminhtml/Role/Edit/Tab/ResourceTest.php | 6 +- .../Adminhtml/User/Edit/Tab/MainTest.php | 6 +- .../Block/Adminhtml/User/Edit/TabsTest.php | 6 +- .../Webapi/Block/Adminhtml/User/EditTest.php | 5 +- .../Magento/Webapi/Model/Soap/ServerTest.php | 22 +- .../Block/Adminhtml/Subscription/EditTest.php | 8 +- .../Subscription/Grid/CollectionTest.php | 12 +- .../Webhook/Model/Subscription/ConfigTest.php | 14 +- .../Instance/Edit/Chooser/ContainerTest.php | 2 +- .../Instance/Edit/Chooser/LayoutTest.php | 6 +- .../Instance/Edit/Tab/Main/LayoutTest.php | 8 +- .../Widget/Instance/Edit/Tab/MainTest.php | 13 +- .../Adminhtml/Widget/Instance/EditTest.php | 8 +- .../Adminhtml/Widget/InstanceTest.php | 11 +- .../Magento/Widget/Model/Config/DataTest.php | 22 +- .../Widget/Model/Config/FileResolverTest.php | 6 +- .../Widget/Model/Config/ReaderTest.php | 20 +- .../Widget/Model/Widget/ConfigTest.php | 2 +- .../Widget/Model/Widget/InstanceTest.php | 2 +- .../Magento/Widget/Model/WidgetTest.php | 12 +- .../Magento/Wishlist/Block/AbstractTest.php | 2 +- .../Customer/Wishlist/Item/ColumnTest.php | 5 +- .../Customer/Wishlist/Item/OptionsTest.php | 2 +- .../Block/Customer/Wishlist/ItemsTest.php | 2 +- .../mage/suggest/tree-suggest-test.js | 27 - .../Magento/TestFramework/Application.php | 2 +- .../Magento/TestFramework/Utility/Classes.php | 33 +- .../Magento/TestFramework/Utility/Files.php | 68 +- dev/tests/static/phpunit.xml.dist | 3 - .../Magento/Test/Integrity/ClassesTest.php | 51 +- .../Test/Integrity/Di/ConfigurationTest.php | 104 + .../Test/Integrity/NamespaceBlacklist.php | 80 - .../Test/Integrity/ReferenceBlacklist.php | 65 - .../Integrity/_files/blacklist/namespace.txt | 46 + .../Integrity/_files/blacklist/reference.txt | 28 + .../Magento/Test/Legacy/ObsoleteCodeTest.php | 2 +- .../Test/Legacy/_files/obsolete_classes.php | 39 +- .../Legacy/_files/obsolete_config_nodes.php | 4 +- .../Test/Legacy/_files/obsolete_constants.php | 15 +- .../Test/Legacy/_files/obsolete_methods.php | 37 +- .../Legacy/_files/obsolete_properties.php | 20 +- .../Test/Php/_files/blacklist/common.txt | 3 - .../Php/_files/phpcpd/blacklist/common.txt | 1 - .../Test/Php/_files/whitelist/common.txt | 11 +- .../Magento/Test/Twig/TwigExtensionTest.php | 57 - .../Magento/Test/Block/Adminhtml.php | 18 +- .../Helper/ObjectManagerTest.php | 14 +- .../Model/System/Message/BaseurlTest.php | 2 +- .../System/Message/CacheOutdatedTest.php | 2 +- .../Adminhtml/Controller/CacheTest.php | 14 +- .../Adminhtml/Controller/CustomerTest.php | 12 +- .../Controller/Sales/Order/CreditmemoTest.php | 10 +- .../Controller/System/AccountTest.php | 10 +- .../Magento/Adminhtml/DashboardTest.php | 86 +- .../Magento/App/Action/ForwardTest.php | 55 + .../testsuite/Magento/App/AreaListTest.php | 95 + .../Model => App}/Dir/VerificationTest.php | 28 +- .../Magento/App/FrontControllerTest.php | 105 + .../Module/Declaration/Converter/DomTest.php | 6 +- .../_files/converted_valid_module.php | 0 .../Converter/_files/valid_module.xml | 0 .../app/code/Module/Four/etc/module.xml | 0 .../_files/app/code/Module/One/etc/module.xml | 0 .../app/code/Module/Three/etc/module.xml | 0 .../_files/app/code/Module/Two/etc/module.xml | 0 .../_files/app/etc/custom/module.xml | 0 .../Module/Declaration/FileResolverTest.php | 12 +- .../Declaration/Reader/FilesystemTest.php | 18 +- .../Module/Dir/ReverseResolverTest.php | 14 +- .../{Core/Model => App}/Module/DirTest.php | 12 +- .../Module/data/module_first_setup/.gitignore | 0 .../data/module_second_setup/.gitignore | 0 .../Module/sql/module_first_setup/.gitignore | 0 .../Module/ResourceResolverTest.php | 6 +- .../Magento/App/Request/HttpTest.php | 255 + .../Magento/App/Response/HttpTest.php} | 36 +- .../Magento/App/ResponseFactoryTest.php | 60 + .../{Core/Model/Db => App}/UpdaterTest.php | 31 +- .../App/Area/FrontNameResolverTest.php | 65 + .../Area/Request/PathInfoProcessorTest.php | 83 + .../Backend/Block/Store/SwitcherTest.php | 68 +- .../Backend/Block/System/Config/EditTest.php | 2 +- .../System/Config/Form/Field/ExportTest.php | 2 +- .../Block/System/Config/Form/FieldsetTest.php | 2 +- .../Backend/Block/System/Config/FormTest.php | 2 +- .../Backend/Block/System/Config/TabsTest.php | 2 +- .../Grid/Column/Renderer/CurrencyTest.php | 66 +- .../Block/Widget/Grid/MassactionTest.php | 4 +- .../Block/Widget/Grid/SerializerTest.php | 4 +- .../Magento/Backend/Block/Widget/GridTest.php | 39 +- .../Adminhtml/System/Config/SaveTest.php | 16 +- .../Magento/Backend/Helper/DataTest.php | 75 +- .../Magento/Backend/Model/AuthTest.php | 86 + .../Model/Config/Backend/BaseurlTest.php | 4 +- .../Model/Config/Backend/EncryptedTest.php | 2 +- .../Model/Config/Backend/SecureTest.php | 4 +- .../Backend/Model/Config/ScopeDefinerTest.php | 2 +- .../Config/Structure/Element/FieldTest.php | 2 +- .../Magento/Backend/Model/ConfigTest.php | 2 +- .../Magento/Backend/Model/Menu/ConfigTest.php | 2 +- .../Magento/Backend/Model/Menu/ItemTest.php | 2 +- .../Model/Router/NoRouteHandlerTest.php | 16 +- .../Magento/Backend/Model/UrlTest.php | 56 +- .../testsuite/Magento/Backup/MediaTest.php | 4 +- .../testsuite/Magento/Backup/NomediaTest.php | 2 +- .../testsuite/Magento/Backup/SnapshotTest.php | 2 +- .../Magento/Captcha/Helper/DataTest.php | 6 +- .../Magento/Captcha/Model/ObserverTest.php | 6 +- .../Magento/Catalog/Model/ObserverTest.php | 2 +- .../Product/Attribute/Backend/MediaTest.php | 4 +- .../Model/Product/Type/ConfigurableTest.php | 2 +- .../Model/Product/Type/GroupedTest.php | 2 +- .../Catalog/Model/Product/Type/SimpleTest.php | 2 +- .../Model/Product/Type/VirtualTest.php | 2 +- .../Model/Resource/Category/TreeTest.php | 2 +- .../CatalogRule/Model/Rule/JobTest.php | 2 +- .../Checkout/Block/Cart/Item/RendererTest.php | 2 +- .../Magento/Checkout/Block/Cart/LinkTest.php | 2 +- .../Magento/Checkout/Block/LinkTest.php | 2 +- .../Magento/Checkout/Controller/CartTest.php | 6 +- .../Cms/Model/Wysiwyg/Images/StorageTest.php | 4 +- .../Magento/Config/Reader/FilesystemTest.php | 4 +- .../Magento/Config/ValidationStateTest.php | 6 +- .../Area/Request/PathInfoProcessorTest.php | 111 + .../FrontController/Plugin/InstallTest.php | 78 + .../Plugin/RequestPreprocessorTest.php | 158 + .../Core/App/Request/RewriteServiceTest.php | 82 + .../Magento/Core/Block/AbstractBlockTest.php | 2 +- .../Magento/Core/Block/TemplateTest.php | 130 +- .../Core/Controller/Request/HttpTest.php | 13 +- .../Core/Controller/Response/HttpTest.php | 14 +- .../Controller/Varien/AbstractActionTest.php | 30 +- .../Controller/Varien/Action/FactoryTest.php | 6 +- .../Controller/Varien/Action/ForwardTest.php | 23 +- .../Controller/Varien/Action/RedirectTest.php | 23 +- .../Magento/Core/Helper/CookieTest.php | 12 +- .../testsuite/Magento/Core/Helper/CssTest.php | 2 +- .../Magento/Core/Helper/HttpTest.php | 4 +- .../Magento/Core/Helper/ThemeTest.php | 68 +- .../Magento/Core/Model/App/StateTest.php | 14 +- .../testsuite/Magento/Core/Model/AppTest.php | 30 +- .../Core/Model/Cache/Frontend/FactoryTest.php | 6 +- .../Magento/Core/Model/Cache/StateTest.php | 2 +- .../Model/Config/FileResolver/PrimaryTest.php | 4 +- .../Core/Model/Config/FileResolverTest.php | 4 +- .../Core/Model/Config/Modules/ReaderTest.php | 13 +- .../Magento/Core/Model/Config/PrimaryTest.php | 6 +- .../Section/Processor/PlaceholderTest.php | 2 +- .../Section/Reader/DefaultReaderTest.php | 2 +- .../Model/Config/Section/Reader/StoreTest.php | 2 +- .../Config/Section/Reader/WebsiteTest.php | 2 +- .../Magento/Core/Model/ConfigTest.php | 4 +- .../Model/DataService/Path/RequestTest.php | 5 +- .../Model/Design/Fallback/FactoryTest.php | 12 +- .../Model/Design/Fallback/Rule/ThemeTest.php | 4 +- .../FileResolution/Strategy/FallbackTest.php | 4 +- .../FileResolution/StrategyPoolTest.php | 14 +- .../testsuite/Magento/Core/Model/DirTest.php | 64 +- .../Email/Template/Config/ReaderTest.php | 4 +- .../Core/Model/EntryPoint/CronTest.php | 8 +- .../Core/Model/EntryPoint/MediaTest.php | 8 +- .../Core/Model/File/Storage/RequestTest.php | 2 +- .../Layout/Argument/AbstractHandlerTest.php | 4 +- .../Layout/Argument/Handler/ArrayTest.php | 4 +- .../Layout/Argument/Handler/BooleanTest.php | 4 +- .../Layout/Argument/Handler/HelperTest.php | 4 +- .../Layout/Argument/Handler/NumberTest.php | 4 +- .../Layout/Argument/Handler/ObjectTest.php | 4 +- .../Layout/Argument/Handler/OptionsTest.php | 4 +- .../Layout/Argument/Handler/StringTest.php | 4 +- .../Model/Layout/Argument/Handler/UrlTest.php | 4 +- .../Model/Layout/Argument/ProcessorTest.php | 2 +- .../Core/Model/Layout/File/FactoryTest.php | 2 +- .../Core/Model/Layout/File/ListTest.php | 4 +- .../Layout/File/Source/AggregateTest.php | 4 +- .../Model/Layout/File/Source/BaseTest.php | 4 +- .../Source/Decorator/ModuleDependencyTest.php | 4 +- .../Source/Decorator/ModuleOutputTest.php | 2 +- .../Layout/File/Source/Override/BaseTest.php | 4 +- .../Layout/File/Source/Override/ThemeTest.php | 10 +- .../Model/Layout/File/Source/ThemeTest.php | 4 +- .../Magento/Core/Model/Layout/FileTest.php | 2 +- .../Magento/Core/Model/Layout/MergeTest.php | 4 +- .../Hierarchy/Config/FileResolverTest.php | 6 +- .../Magento/Core/Model/LoggerTest.php | 4 +- .../Magento/Core/Model/ModuleManagerTest.php | 2 +- .../Core/Model/NoRouteHandlerListTest.php | 16 +- .../Magento/Core/Model/ObserverTest.php | 2 +- .../Model/Page/Asset/MergeServiceTest.php | 18 +- .../Page/Asset/MergeStrategy/DirectTest.php | 2 +- .../Core/Model/Page/Asset/MergedTest.php | 2 +- .../Model/Page/Asset/MinifyServiceTest.php | 12 +- .../Core/Model/Resource/Db/AbstractTest.php | 2 +- .../Resource/Layout/Link/CollectionTest.php | 2 +- .../Resource/Layout/Update/CollectionTest.php | 2 +- .../Core/Model/Resource/SessionTest.php | 2 +- .../Model/Resource/Setup/MigrationTest.php | 12 +- .../Magento/Core/Model/RouterListTest.php | 4 +- .../Core/Model/Store/StorageFactoryTest.php | 10 +- .../Magento/Core/Model/StoreManagerTest.php | 2 +- .../Decorator/DebugHintsTest.php | 57 + .../Core/Model/TemplateEngine/FactoryTest.php | 86 +- .../TemplateEngine/Plugin/DebugHintsTest.php | 123 + .../Core/Model/TemplateEngine/PoolTest.php | 58 + .../Twig/CommonFunctionsTest.php | 220 - .../Twig/EnvironmentFactoryTest.php | 115 - .../TemplateEngine/Twig/ExtensionTest.php | 113 - .../TemplateEngine/Twig/FullFileNameTest.php | 151 - .../Twig/LayoutFunctionsTest.php | 214 - .../Twig/_files/twig_templates/READEME.txt | 2 - .../Core/Model/TemplateEngine/TwigTest.php | 100 - .../Magento/Core/Model/TemplateTest.php | 2 +- .../Core/Model/Theme/CopyServiceTest.php | 2 +- .../Model/Theme/Customization/PathTest.php | 8 +- .../Core/Model/Theme/Domain/PhysicalTest.php | 2 +- .../Core/Model/Theme/Image/PathTest.php | 4 +- .../testsuite/Magento/Core/Model/UrlTest.php | 19 +- .../Core/Model/View/Design/ProxyTest.php | 4 +- .../Core/Model/View/FileSystemTest.php | 6 +- .../Magento/Core/Model/View/UrlTest.php | 8 +- .../Magento/Cron/Model/ObserverTest.php | 30 +- .../Magento/Customer/Model/CustomerTest.php | 6 +- .../Magento/Customer/Service/CustomerTest.php | 2 +- .../Block/Adminhtml/Editor/ContainerTest.php | 2 +- .../Editor/Tools/Files/ContentTest.php | 4 +- .../Adminhtml/System/Design/EditorTest.php | 8 +- .../Controller/Varien/Router/StandardTest.php | 97 +- .../Magento/DesignEditor/Helper/DataTest.php | 3 +- .../Magento/DesignEditor/Model/StateTest.php | 2 +- .../DesignEditor/Model/Theme/ContextTest.php | 2 +- .../Model/Url/NavigationModeTest.php | 95 +- .../Model/Currency/DefaultLocatorTest.php | 2 +- .../Model/Resource/Country/CollectionTest.php | 2 +- .../Downloadable/Model/Product/TypeTest.php | 2 +- .../Model => }/Event/Config/ConverterTest.php | 8 +- .../Model => }/Event/Config/DataTest.php | 10 +- .../Event/Config/SchemaLocatorTest.php | 20 +- .../{Core/Model => }/Event/Config/XsdTest.php | 4 +- .../Config}/_files/event_config.php | 0 .../Config}/_files/event_config.xml | 0 .../Config}/_files/event_invalid_config.xml | 0 .../Config/_files/invalidEventsXmlArray.php | 0 .../Event/Config/_files/valid_events.xml | 0 .../Magento/Event/EventFactoryTest.php | 59 + .../Event/Invoker/InvokerDefaultTest.php | 14 +- .../{Core/Model => }/Event/ManagerStub.php | 4 +- .../{Core/Model => }/Event/ManagerTest.php | 28 +- .../Model/Observer/Block/Category/TabTest.php | 2 +- .../Model/Observer/Category/SaveTest.php | 2 +- .../Model/Observer/CmsPage/DeleteTest.php | 2 +- .../Model/Observer/CmsPage/SaveTest.php | 2 +- .../Model/Observer/Product/SaveTest.php | 2 +- .../Block/SiteVerificationTest.php | 2 +- .../Magento/Http/Handler/CompositeTest.php | 116 - .../Magento/ImportExport/Model/ExportTest.php | 2 +- .../Magento/Index/Model/Lock/StorageTest.php | 4 +- .../Install/Model/EntryPoint/ConsoleTest.php | 4 +- .../Install/Model/EntryPoint/UpgradeTest.php | 8 +- .../Install/Model/Installer/ConfigTest.php | 4 +- .../testsuite/Magento/Log/Model/ShellTest.php | 2 +- .../Magento/Newsletter/Model/TemplateTest.php | 4 +- .../Magento/Oauth/Helper/DataTest.php | 10 +- .../Magento/Oauth/Helper/ServiceTest.php | 4 +- .../Mapper/_files/mapped_simple_di_config.php | 4 +- .../Config/Mapper/_files/simple_di_config.xml | 4 +- .../testsuite/Magento/Ogone/Model/ApiTest.php | 4 +- .../Magento/Page/Block/Html/HeaderTest.php | 6 +- .../Magento/Page/Block/Link/CurrentTest.php | 111 +- .../Magento/Page/Block/SwitchTest.php | 53 +- .../Payment/Model/Method/BanktransferTest.php | 2 +- .../Model/Method/CashondeliveryTest.php | 2 +- .../Block/Recurring/Profile/GridTest.php | 6 +- .../Profile/Related/Orders/GridTest.php | 6 +- .../RecurringProfile/FormRendererTest.php | 3 +- .../Sales/Model/Order/Pdf/AbstractTest.php | 2 +- .../Sales/Model/Order/Pdf/InvoiceTest.php | 2 +- .../Model/Order/Pdf/Total/FactoryTest.php | 2 +- .../Magento/Sales/Model/Order/StatusTest.php | 4 +- .../Tools/View/Generator/CopyRuleTest.php | 2 +- .../View/Generator/ThemeDeploymentTest.php | 2 +- .../System/Design/Theme/Tab/CssTest.php | 2 +- .../Adminhtml/Wysiwyg/Files/ContentTest.php | 4 +- .../Adminhtml/System/Design/ThemeTest.php | 4 +- .../Magento/Theme/Helper/StorageTest.php | 4 +- .../Theme/Model/Config/CustomizationTest.php | 4 +- .../Magento/Theme/Model/ConfigTest.php | 2 +- .../testsuite/Magento/User/Model/UserTest.php | 2 +- .../Model => View}/Layout/ElementTest.php | 6 +- .../Block/Adminhtml/Role/Edit/TabsTest.php | 4 +- .../Webapi/Block/Adminhtml/Role/EditTest.php | 5 +- .../Webapi/Block/Adminhtml/User/EditTest.php | 5 +- .../Webapi/Controller/Rest/RequestTest.php | 13 +- .../Webapi/Controller/Rest/RouterTest.php | 14 +- .../Magento/Webapi/Controller/RestTest.php | 12 +- .../Webapi/Controller/Soap/RequestTest.php | 13 +- .../Magento/Webapi/Controller/SoapTest.php | 12 +- .../Model/Acl/Role/InRoleUserUpdaterTest.php | 2 +- .../Model/Acl/Role/UsersUpdaterTest.php | 4 +- .../Magento/Webapi/Model/Acl/RoleTest.php | 4 +- .../Magento/Webapi/Model/Acl/RuleTest.php | 4 +- .../Webapi/Model/Acl/User/RoleUpdaterTest.php | 2 +- .../Magento/Webapi/Model/Acl/UserTest.php | 4 +- .../Magento/Webapi/Model/Soap/ConfigTest.php | 2 +- .../Magento/Webapi/Model/Soap/ServerTest.php | 13 +- .../Adminhtml/Webhook/RegistrationTest.php | 8 +- .../Adminhtml/Webhook/SubscriptionTest.php | 11 +- .../Magento/Webhook/Model/EndpointTest.php | 2 +- .../Magento/Webhook/Model/EventTest.php | 2 +- .../Model/Resource/Event/CollectionTest.php | 4 +- .../Model/Resource/Job/CollectionTest.php | 4 +- .../Resource/Subscription/CollectionTest.php | 8 +- .../Subscription/Grid/CollectionTest.php | 2 +- .../Webhook/Model/SubscriptionTest.php | 2 +- .../aliases_map/composite_modules_ce.php | 7 +- .../Tools/Migration/get_aliases_map.php | 13 +- .../Magento/Tools/View/Generator/Config.php | 4 +- .../Magento/Tools/View/Generator/CopyRule.php | 2 +- .../Tools/View/Generator/ThemeLight.php | 10 +- dev/tools/Magento/Tools/View/generator.php | 2 +- .../app/Magento/Downloader/Controller.php | 6 +- .../Magento/App/Action}/AbstractAction.php | 33 +- .../Magento/App/Action}/Exception.php | 21 +- .../Magento/App}/Action/Forward.php | 16 +- .../Magento/App}/Action/Redirect.php | 19 +- .../Magento/App/ActionFactory.php | 16 +- .../Magento/App/ActionInterface.php | 15 +- .../App/Area/FrontNameResolverFactory.php | 51 + .../App/Area/FrontNameResolverInterface.php | 15 +- lib/Magento/App/AreaList.php | 97 + .../Core/Model => lib/Magento/App}/Dir.php | 2 +- .../Magento/App}/Dir/Verification.php | 44 +- lib/Magento/App/FrontController.php | 183 + lib/Magento/App/FrontControllerInterface.php | 36 + .../App}/Module/Declaration/Converter/Dom.php | 2 +- .../App}/Module/Declaration/FileResolver.php | 12 +- .../Module/Declaration/Reader/Filesystem.php | 16 +- .../App}/Module/Declaration/SchemaLocator.php | 4 +- .../Model => lib/Magento/App}/Module/Dir.php | 10 +- .../App}/Module/Dir/ReverseResolver.php | 14 +- .../Magento/App}/Module/ResourceResolver.php | 4 +- .../App}/Module/ResourceResolverInterface.php | 4 +- .../Model => lib/Magento/App}/ModuleList.php | 8 +- .../Magento/App}/ModuleListInterface.php | 2 +- .../Magento/App}/Request/Http.php | 109 +- .../Request/PathInfoProcessorInterface.php | 38 + .../Magento/App/RequestFactory.php | 23 +- lib/Magento/App/RequestInterface.php | 66 + lib/Magento/App/Response/Http.php | 47 + lib/Magento/App/ResponseFactory.php | 53 + lib/Magento/App/ResponseInterface.php | 34 + .../Magento/App}/Router/AbstractRouter.php | 34 +- .../Magento/App}/Router/DefaultRouter.php | 26 +- .../App/Router}/NoRouteHandlerList.php | 3 +- .../Model => lib/Magento/App}/RouterList.php | 10 +- lib/Magento/App/RouterListInterface.php | 53 + .../Core/Model => lib/Magento}/App/State.php | 9 +- .../Model/Db => lib/Magento/App}/Updater.php | 78 +- lib/Magento/App/Updater/SetupFactory.php | 72 + .../Magento/App/Updater}/SetupInterface.php | 7 +- .../Magento/App}/UpdaterInterface.php | 2 +- .../Core => lib/Magento/App}/etc/module.xsd | 0 .../Appl}/Router/NoRouteHandlerInterface.php | 6 +- lib/Magento/Backup/Snapshot.php | 6 +- lib/Magento/Code/Generator/Io.php | 2 +- .../Model => lib/Magento}/Config/Scope.php | 25 +- lib/Magento/Config/ScopeInterface.php | 7 + lib/Magento/DB/Adapter/Pdo/Mysql.php | 8 +- .../Data/Form/Element/AbstractElement.php | 2 +- lib/Magento/Data/Form/Element/Image.php | 6 +- lib/Magento/Event.php | 2 +- .../Model => lib/Magento}/Event/Config.php | 10 +- .../Magento}/Event/Config/Converter.php | 2 +- .../Magento}/Event/Config/Data.php | 12 +- .../Magento}/Event/Config/Reader.php | 10 +- lib/Magento/Event/Config/SchemaLocator.php | 49 + .../Magento}/Event/ConfigInterface.php | 2 +- .../Magento}/Event/Invoker/InvokerDefault.php | 18 +- .../Magento}/Event/InvokerInterface.php | 2 +- .../Model => lib/Magento}/Event/Manager.php | 34 +- lib/Magento/Event/ManagerInterface.php | 38 + lib/Magento/Event/Observer.php | 12 +- .../Magento/Event}/ObserverFactory.php | 6 +- .../WrapperFactory.php} | 22 +- .../Core => lib/Magento/Event}/etc/events.xsd | 0 .../Magento/EventFactory.php | 41 +- lib/Magento/HTTP/Handler/Composite.php | 88 - lib/Magento/HTTP/HandlerInterface.php | 37 - .../Interception/PluginList/PluginList.php | 5 + .../Model => lib/Magento}/UrlInterface.php | 46 +- lib/Magento/View/ConfigInterface.php | 41 + .../Magento/View/Design}/ThemeInterface.php | 19 +- .../Magento}/View/DesignInterface.php | 19 +- .../Magento/View/Element/BlockInterface.php | 11 +- .../Magento/View}/Layout/Element.php | 77 +- lib/Magento/View/Layout/ProcessorFactory.php | 70 + .../View/Layout/ProcessorInterface.php | 145 + lib/Magento/View/LayoutFactory.php | 70 + lib/Magento/View/LayoutInterface.php | 333 + lib/Twig/AUTHORS | 9 - lib/Twig/Autoloader.php | 48 - lib/Twig/Compiler.php | 267 - lib/Twig/CompilerInterface.php | 35 - lib/Twig/Environment.php | 1224 -- lib/Twig/Error.php | 232 - lib/Twig/Error/Loader.php | 31 - lib/Twig/Error/Runtime.php | 20 - lib/Twig/Error/Syntax.php | 20 - lib/Twig/ExistsLoaderInterface.php | 28 - lib/Twig/ExpressionParser.php | 600 - lib/Twig/Extension.php | 93 - lib/Twig/Extension/Core.php | 1355 -- lib/Twig/Extension/Debug.php | 71 - lib/Twig/Extension/Escaper.php | 107 - lib/Twig/Extension/Optimizer.php | 35 - lib/Twig/Extension/Sandbox.php | 112 - lib/Twig/Extension/Staging.php | 113 - lib/Twig/Extension/StringLoader.php | 64 - lib/Twig/ExtensionInterface.php | 83 - lib/Twig/Filter.php | 83 - lib/Twig/Filter/Function.php | 37 - lib/Twig/Filter/Method.php | 39 - lib/Twig/Filter/Node.php | 39 - lib/Twig/FilterCallableInterface.php | 23 - lib/Twig/FilterInterface.php | 42 - lib/Twig/Function.php | 71 - lib/Twig/Function/Function.php | 38 - lib/Twig/Function/Method.php | 40 - lib/Twig/Function/Node.php | 39 - lib/Twig/FunctionCallableInterface.php | 23 - lib/Twig/FunctionInterface.php | 39 - lib/Twig/LICENSE | 31 - lib/Twig/Lexer.php | 408 - lib/Twig/LexerInterface.php | 29 - lib/Twig/Loader/Array.php | 98 - lib/Twig/Loader/Chain.php | 135 - lib/Twig/Loader/Filesystem.php | 221 - lib/Twig/Loader/String.php | 59 - lib/Twig/LoaderInterface.php | 52 - lib/Twig/Markup.php | 37 - lib/Twig/Node.php | 226 - lib/Twig/Node/AutoEscape.php | 39 - lib/Twig/Node/Block.php | 44 - lib/Twig/Node/BlockReference.php | 37 - lib/Twig/Node/Body.php | 19 - lib/Twig/Node/Do.php | 38 - lib/Twig/Node/Embed.php | 38 - lib/Twig/Node/Expression.php | 20 - lib/Twig/Node/Expression/Array.php | 86 - lib/Twig/Node/Expression/AssignName.php | 28 - lib/Twig/Node/Expression/Binary.php | 40 - lib/Twig/Node/Expression/Binary/Add.php | 18 - lib/Twig/Node/Expression/Binary/And.php | 18 - .../Node/Expression/Binary/BitwiseAnd.php | 18 - lib/Twig/Node/Expression/Binary/BitwiseOr.php | 18 - .../Node/Expression/Binary/BitwiseXor.php | 18 - lib/Twig/Node/Expression/Binary/Concat.php | 18 - lib/Twig/Node/Expression/Binary/Div.php | 18 - lib/Twig/Node/Expression/Binary/Equal.php | 17 - lib/Twig/Node/Expression/Binary/FloorDiv.php | 29 - lib/Twig/Node/Expression/Binary/Greater.php | 17 - .../Node/Expression/Binary/GreaterEqual.php | 17 - lib/Twig/Node/Expression/Binary/In.php | 33 - lib/Twig/Node/Expression/Binary/Less.php | 17 - lib/Twig/Node/Expression/Binary/LessEqual.php | 17 - lib/Twig/Node/Expression/Binary/Mod.php | 18 - lib/Twig/Node/Expression/Binary/Mul.php | 18 - lib/Twig/Node/Expression/Binary/NotEqual.php | 17 - lib/Twig/Node/Expression/Binary/NotIn.php | 33 - lib/Twig/Node/Expression/Binary/Or.php | 18 - lib/Twig/Node/Expression/Binary/Power.php | 33 - lib/Twig/Node/Expression/Binary/Range.php | 33 - lib/Twig/Node/Expression/Binary/Sub.php | 18 - lib/Twig/Node/Expression/BlockReference.php | 51 - lib/Twig/Node/Expression/Call.php | 178 - lib/Twig/Node/Expression/Conditional.php | 31 - lib/Twig/Node/Expression/Constant.php | 23 - .../Node/Expression/ExtensionReference.php | 33 - lib/Twig/Node/Expression/Filter.php | 36 - lib/Twig/Node/Expression/Filter/Default.php | 43 - lib/Twig/Node/Expression/Function.php | 35 - lib/Twig/Node/Expression/GetAttr.php | 53 - lib/Twig/Node/Expression/MethodCall.php | 41 - lib/Twig/Node/Expression/Name.php | 88 - lib/Twig/Node/Expression/Parent.php | 47 - lib/Twig/Node/Expression/TempName.php | 26 - lib/Twig/Node/Expression/Test.php | 32 - lib/Twig/Node/Expression/Test/Constant.php | 35 - lib/Twig/Node/Expression/Test/Defined.php | 54 - lib/Twig/Node/Expression/Test/Divisibleby.php | 33 - lib/Twig/Node/Expression/Test/Even.php | 32 - lib/Twig/Node/Expression/Test/Null.php | 31 - lib/Twig/Node/Expression/Test/Odd.php | 32 - lib/Twig/Node/Expression/Test/Sameas.php | 29 - lib/Twig/Node/Expression/Unary.php | 30 - lib/Twig/Node/Expression/Unary/Neg.php | 18 - lib/Twig/Node/Expression/Unary/Not.php | 18 - lib/Twig/Node/Expression/Unary/Pos.php | 18 - lib/Twig/Node/Flush.php | 36 - lib/Twig/Node/For.php | 112 - lib/Twig/Node/ForLoop.php | 55 - lib/Twig/Node/If.php | 66 - lib/Twig/Node/Import.php | 50 - lib/Twig/Node/Include.php | 99 - lib/Twig/Node/Macro.php | 96 - lib/Twig/Node/Module.php | 371 - lib/Twig/Node/Print.php | 39 - lib/Twig/Node/Sandbox.php | 47 - lib/Twig/Node/SandboxedModule.php | 60 - lib/Twig/Node/SandboxedPrint.php | 59 - lib/Twig/Node/Set.php | 101 - lib/Twig/Node/SetTemp.php | 35 - lib/Twig/Node/Spaceless.php | 40 - lib/Twig/Node/Text.php | 39 - lib/Twig/NodeInterface.php | 30 - lib/Twig/NodeOutputInterface.php | 19 - lib/Twig/NodeTraverser.php | 88 - lib/Twig/NodeVisitor/Escaper.php | 167 - lib/Twig/NodeVisitor/Optimizer.php | 246 - lib/Twig/NodeVisitor/SafeAnalysis.php | 133 - lib/Twig/NodeVisitor/Sandbox.php | 92 - lib/Twig/NodeVisitorInterface.php | 47 - lib/Twig/Parser.php | 394 - lib/Twig/ParserInterface.php | 28 - lib/Twig/Sandbox/SecurityError.php | 19 - lib/Twig/Sandbox/SecurityPolicy.php | 119 - lib/Twig/Sandbox/SecurityPolicyInterface.php | 24 - lib/Twig/SimpleFilter.php | 96 - lib/Twig/SimpleFunction.php | 84 - lib/Twig/SimpleTest.php | 46 - lib/Twig/Template.php | 455 - lib/Twig/TemplateInterface.php | 47 - lib/Twig/Test.php | 34 - lib/Twig/Test/Function.php | 35 - lib/Twig/Test/IntegrationTestCase.php | 154 - lib/Twig/Test/Method.php | 37 - lib/Twig/Test/Node.php | 37 - lib/Twig/Test/NodeTestCase.php | 58 - lib/Twig/TestCallableInterface.php | 21 - lib/Twig/TestInterface.php | 26 - lib/Twig/Token.php | 218 - lib/Twig/TokenParser.php | 33 - lib/Twig/TokenParser/AutoEscape.php | 89 - lib/Twig/TokenParser/Block.php | 83 - lib/Twig/TokenParser/Do.php | 42 - lib/Twig/TokenParser/Embed.php | 66 - lib/Twig/TokenParser/Extends.php | 54 - lib/Twig/TokenParser/Filter.php | 61 - lib/Twig/TokenParser/Flush.php | 42 - lib/Twig/TokenParser/For.php | 136 - lib/Twig/TokenParser/From.php | 74 - lib/Twig/TokenParser/If.php | 94 - lib/Twig/TokenParser/Import.php | 49 - lib/Twig/TokenParser/Include.php | 80 - lib/Twig/TokenParser/Macro.php | 70 - lib/Twig/TokenParser/Sandbox.php | 68 - lib/Twig/TokenParser/Set.php | 84 - lib/Twig/TokenParser/Spaceless.php | 59 - lib/Twig/TokenParser/Use.php | 84 - lib/Twig/TokenParserBroker.php | 138 - lib/Twig/TokenParserBrokerInterface.php | 45 - lib/Twig/TokenParserInterface.php | 41 - lib/Twig/TokenStream.php | 144 - pub/index.php | 2 +- pub/lib/mage/adminhtml/varienLoader.js | 4 +- pub/lib/mage/calendar.js | 6 + pub/lib/mage/loader.js | 3 +- 1884 files changed, 63839 insertions(+), 24990 deletions(-) create mode 100644 app/code/Magento/Backend/App/Area/FrontNameResolver.php create mode 100644 app/code/Magento/Backend/App/Request/PathInfoProcessor.php rename app/code/Magento/Backend/{Model => App}/Router/NoRouteHandler.php (87%) delete mode 100644 app/code/Magento/Backend/Model/Config/Backend/Admin/Usecustompath.php create mode 100644 app/code/Magento/Core/App/FrontController/Plugin/Install.php create mode 100644 app/code/Magento/Core/App/FrontController/Plugin/RequestPreprocessor.php create mode 100644 app/code/Magento/Core/App/Request/PathInfoProcessor.php create mode 100644 app/code/Magento/Core/App/Request/RewriteService.php rename app/code/Magento/Core/{Model => App}/Router/NoRouteHandler.php (88%) delete mode 100644 app/code/Magento/Core/Controller/Front/Router.php delete mode 100644 app/code/Magento/Core/Controller/Request/HttpProxy.php delete mode 100644 app/code/Magento/Core/Controller/Response/Http.php delete mode 100644 app/code/Magento/Core/Controller/Varien/Front.php delete mode 100644 app/code/Magento/Core/Model/App/Proxy.php delete mode 100644 app/code/Magento/Core/Model/Event/Config/SchemaLocator.php create mode 100644 app/code/Magento/Core/Model/TemplateEngine/Decorator/DebugHints.php create mode 100644 app/code/Magento/Core/Model/TemplateEngine/Plugin/DebugHints.php rename app/code/Magento/Core/Model/{App/Handler.php => TemplateEngine/Pool.php} (57%) delete mode 100644 app/code/Magento/Core/Model/TemplateEngine/Twig.php delete mode 100644 app/code/Magento/Core/Model/TemplateEngine/Twig/CommonFunctions.php delete mode 100644 app/code/Magento/Core/Model/TemplateEngine/Twig/EnvironmentFactory.php delete mode 100644 app/code/Magento/Core/Model/TemplateEngine/Twig/Extension.php delete mode 100644 app/code/Magento/Core/Model/TemplateEngine/Twig/FullFileName.php delete mode 100644 app/code/Magento/Core/Model/TemplateEngine/Twig/LayoutFunctions.php rename app/code/Magento/{Core/Model => }/Url/Validator.php (98%) rename app/code/Magento/{CurrencySymbol/etc => Webapi/etc/webapi_rest}/di.xml (82%) create mode 100644 app/code/Magento/Webapi/etc/webapi_soap/di.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/backbutton.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/customize.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/summary.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/title.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/option/checkbox.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/option/multi.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/option/radio.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/option/select.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/options.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/js/slide.js create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/layout/override/catalog_product_view_type_bundle.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/layout/override/checkout_cart_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/layout/override/default.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/layout/review_product_list.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/sales/order/creditmemo/items/renderer.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/sales/order/invoice/items/renderer.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/sales/order/items/renderer.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/sales/order/shipment/items/renderer.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Captcha/captcha.js create mode 100644 app/design/frontend/magento_plushe/Magento_Captcha/default.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Captcha/layout/override/checkout_onepage_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Captcha/layout/override/customer_account_create.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Captcha/layout/override/customer_account_forgotpassword.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Captcha/layout/override/customer_account_login.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Captcha/onepage.js create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/category/title.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/category/view.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/category/widget/link/link_block.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/category/widget/link/link_inline.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/js/list.js create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layer/filter.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layer/state.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layer/view.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layout/catalog_category_view.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layout/catalog_product_compare_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layout/catalog_product_view.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layout/catalog_product_view_type_grouped.xml rename app/{code/Magento/PageCache/etc/di.xml => design/frontend/magento_plushe/Magento_Catalog/layout/default.xml} (67%) create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_category_view.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_category_view_type_default.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_category_view_type_layered.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_compare_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view_type_configurable.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view_type_grouped.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view_type_simple.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view_type_virtual.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/layout/override/default.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/navigation/left.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/compare/link.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/compare/list.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/compare/sidebar.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/image.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/image_with_borders.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/list.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/list/items.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/list/toolbar.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/listing.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/addto.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/addtocart.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/attribute.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/attributes.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/base-image.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/description.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/details.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/form.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/gallery.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/mailto.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/options.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/js.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/date.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/default.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/file.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/select.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/text.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/wrapper.phtml rename dev/tests/unit/testsuite/Magento/Core/Block/_files/template_test_assign.phtml => app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/wrapper/bottom.phtml (88%) create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/price.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/price_clone.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/rating.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/tierprices.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/type/default.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/type/grouped.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/view/type/options/configurable.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/widget/link/link_block.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/widget/link/link_inline.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/column/new_default_list.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/column/new_images_list.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/column/new_names_list.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/content/new_grid.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/content/new_list.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_CatalogSearch/advanced/form.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_CatalogSearch/advanced/result.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_CatalogSearch/form.mini.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/catalogsearch_advanced_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/catalogsearch_advanced_result.xml create mode 100644 app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/catalogsearch_result_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/catalogsearch_term_popular.xml create mode 100644 app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/override/catalogsearch_result_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_CatalogSearch/result.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_CatalogSearch/term.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/cart.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/cart/coupon.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/cart/form.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/cart/item/configure/updatecart.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/cart/item/default.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/cart/methods.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/cart/minicart.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/cart/noItems.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/cart/shipping.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/cart/sidebar/default.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/cart/totals.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/js/opcheckout.js create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_cart_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_editaddress.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_editbilling.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_editshipping.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_newbilling.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_newshipping.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_selectbilling.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_addresses.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_billing.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_overview.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_shipping.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_success.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_onepage_paymentmethod.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_onepage_review.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/default.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_cart_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_multishipping_customer_address.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_onepage_additional.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_onepage_failure.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_onepage_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_onepage_success.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/layout/override/default.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/multishipping/address/select.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/multishipping/addresses.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/multishipping/agreements.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/multishipping/billing.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/multishipping/billing/items.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/multishipping/item/default.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/multishipping/link.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/multishipping/overview.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/multishipping/overview/item.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/multishipping/shipping.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/multishipping/state.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/multishipping/success.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/onepage.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/onepage/billing.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/onepage/failure.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/onepage/link.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/onepage/login.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/onepage/payment.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/onepage/progress.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/onepage/review/button.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/onepage/review/info.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/onepage/review/item.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/onepage/review/totals.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/onepage/shipping.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/onepage/shipping_method.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/onepage/shipping_method/available.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/success.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Checkout/total/default.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Cms/default/footerbanners.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Cms/default/home.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Cms/layout/override/default.xml rename dev/tests/unit/testsuite/Magento/Core/Model/Db/_files/config.xml => app/design/frontend/magento_plushe/Magento_Cms/layout/override/print.xml (93%) create mode 100644 app/design/frontend/magento_plushe/Magento_Contacts/form.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Contacts/layout/contacts_index_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Contacts/layout/override/default.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Core/text.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/account/customer.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/account/dashboard/address.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/account/dashboard/hello.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/account/dashboard/info.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/account/link/back.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/account/navigation.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/address/book.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/address/button.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/address/edit.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/form/address.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/form/changepassword.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/form/confirmation.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/form/edit.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/form/forgotpassword.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/form/login.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/form/newsletter.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/form/register.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/form/resetforgottenpassword.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/layout/customer_account.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/layout/default.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_create.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_edit.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_forgotpassword.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_login.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_address_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/newcustomer.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/widget/dob.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/widget/gender.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/widget/name.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Customer/widget/taxvat.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_DesignEditor/controls/image_sizing.xml create mode 100644 app/design/frontend/magento_plushe/Magento_DesignEditor/controls/quick_styles.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Directory/currency.phtml rename dev/tests/integration/testsuite/Magento/Core/Model/TemplateEngine/_files/simple.twig => app/design/frontend/magento_plushe/Magento_Directory/layout/override/catalog_category_view.xml (90%) create mode 100644 app/design/frontend/magento_plushe/Magento_Directory/layout/override/catalogsearch_advanced_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Directory/layout/override/catalogsearch_advanced_result.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Directory/layout/override/catalogsearch_result_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Directory/layout/override/default.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Downloadable/catalog/product/links.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Downloadable/catalog/product/samples.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Downloadable/catalog/product/type.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Downloadable/checkout/cart/item/default.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Downloadable/checkout/multishipping/item/default.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Downloadable/checkout/onepage/review/item.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Downloadable/checkout/onepage/review/item_down.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Downloadable/customer/products/list.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Downloadable/layout/override/catalog_product_view_type_downloadable.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Downloadable/layout/override/checkout_cart_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Downloadable/sales/order/creditmemo/items/renderer/downloadable.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Downloadable/sales/order/invoice/items/renderer/downloadable.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Downloadable/sales/order/items/renderer/downloadable.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_GiftMessage/inline.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Newsletter/layout/override/default.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Newsletter/layout/override/newsletter_manage_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Newsletter/subscribe.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/1column.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/2columns-left.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/2columns-right.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/3columns.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/blank.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/empty.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/html/block.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/html/breadcrumbs.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/html/copyright.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/html/head.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/html/header.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/html/notices.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/html/pager.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/html/title.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/html/topmenu.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/layout/default.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/layout/override/default.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/layout/override/print.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/link/current.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/page.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/popup.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/print.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/switch/languages.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Page/switch/stores.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_PageCache/layout/default.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Paypal/express/review.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Paypal/express/review/address.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Paypal/express/review/details.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Paypal/express/review/shipping/method.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Paypal/express/shortcut.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Paypal/layout/override/catalog_product_view.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Paypal/layout/override/default.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Persistent/layout/override/checkout_onepage_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Persistent/layout/override/customer_account_create.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Persistent/layout/override/customer_account_login.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Persistent/remember_me.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Persistent/remember_me_tooltip.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Rating/detailed.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Reports/layout/catalog_product_view.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Reports/layout/override/default.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Reports/layout/override/print.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Reports/product_compared.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Reports/product_viewed.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Reports/widget/compared/column/compared_default_list.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Reports/widget/compared/content/compared_grid.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Reports/widget/compared/content/compared_list.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Reports/widget/viewed/column/viewed_default_list.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Reports/widget/viewed/content/viewed_grid.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Reports/widget/viewed/content/viewed_list.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Review/customer/list.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Review/customer/recent.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Review/customer/view.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Review/form.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Review/helper/summary.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Review/helper/summary_short.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Review/layout/catalog_product_view.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Review/layout/override/customer_account_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Review/layout/override/review_product_view.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Review/layout/review_product_list.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Review/layout/review_product_view.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Review/product/view/list.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Review/redirect.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Review/view.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/billing/agreement/view.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/billing/agreements.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/guest/form.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/layout/override/customer_account_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/layout/override/default.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_guest_view.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_creditmemo.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_info_links.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_invoice.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_printorder.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_printordercreditmemo.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_printorderinvoice.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_view.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/comments.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/creditmemo.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/creditmemo/items.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/creditmemo/items/renderer/default.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/history.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/info.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/info/buttons.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/invoice.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/invoice/items.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/invoice/items/renderer/default.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/items.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/items/renderer/default.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/print.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/print/creditmemo.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/print/invoice.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/print/shipment.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/recent.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/shipment.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/shipment/items.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/order/view.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/recurring/profiles.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/reorder/sidebar.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sales/success.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Sendfriend/layout/override/sendfriend_product_send.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Sendfriend/send.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Shipping/tracking/popup.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Tax/checkout/grandtotal.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Tax/checkout/shipping.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Tax/checkout/subtotal.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Tax/checkout/tax.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Widget/layout/override/default.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Widget/layout/override/print.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/button/share.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/button/tocart.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/button/update.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/item/column/cart.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/item/column/image.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/item/column/info.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/item/column/remove.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/item/configure/addto.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/item/list.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure_type_bundle.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure_type_configurable.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure_type_grouped.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure_type_simple.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_shared_index.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/shared.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/sharing.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/sidebar.phtml create mode 100644 app/design/frontend/magento_plushe/Magento_Wishlist/view.phtml create mode 100644 app/design/frontend/magento_plushe/css/print.css create mode 100644 app/design/frontend/magento_plushe/css/styles.css create mode 100644 app/design/frontend/magento_plushe/fonts/.htaccess create mode 100644 app/design/frontend/magento_plushe/fonts/icons/icons.dev.svg create mode 100644 app/design/frontend/magento_plushe/fonts/icons/icons.eot create mode 100644 app/design/frontend/magento_plushe/fonts/icons/icons.svg create mode 100644 app/design/frontend/magento_plushe/fonts/icons/icons.ttf create mode 100644 app/design/frontend/magento_plushe/fonts/icons/icons.woff create mode 100644 app/design/frontend/magento_plushe/fonts/marvel/OFL.txt create mode 100644 app/design/frontend/magento_plushe/fonts/marvel/marvel-400-normal-webfont.eot create mode 100644 app/design/frontend/magento_plushe/fonts/marvel/marvel-400-normal-webfont.svg create mode 100644 app/design/frontend/magento_plushe/fonts/marvel/marvel-400-normal-webfont.ttf create mode 100644 app/design/frontend/magento_plushe/fonts/marvel/marvel-400-normal-webfont.woff create mode 100644 app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.eot create mode 100644 app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.svg create mode 100644 app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.ttf create mode 100644 app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.woff create mode 100644 app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.eot create mode 100644 app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.svg create mode 100644 app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.ttf create mode 100644 app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.woff create mode 100644 app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.eot create mode 100644 app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.svg create mode 100644 app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.ttf create mode 100644 app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.woff create mode 100644 app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.eot create mode 100644 app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.svg create mode 100644 app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.ttf create mode 100644 app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.woff create mode 100644 app/design/frontend/magento_plushe/images/banner1.jpg create mode 100644 app/design/frontend/magento_plushe/images/banner2.jpg create mode 100644 app/design/frontend/magento_plushe/images/banner3.jpg create mode 100644 app/design/frontend/magento_plushe/images/banner4.jpg create mode 100644 app/design/frontend/magento_plushe/images/blog_bg.png create mode 100644 app/design/frontend/magento_plushe/images/header-bg.jpg create mode 100644 app/design/frontend/magento_plushe/images/info_photo.jpg create mode 100644 app/design/frontend/magento_plushe/images/loader.gif create mode 100644 app/design/frontend/magento_plushe/images/logo.gif create mode 100644 app/design/frontend/magento_plushe/images/logo_notext.gif create mode 100644 app/design/frontend/magento_plushe/images/main_image1.jpg create mode 100644 app/design/frontend/magento_plushe/images/social-links.png create mode 100644 app/design/frontend/magento_plushe/images/texture.png create mode 100644 app/design/frontend/magento_plushe/js/extra-options.js create mode 100644 app/design/frontend/magento_plushe/js/head.js create mode 100644 app/design/frontend/magento_plushe/js/jquery.dropdowns.js create mode 100644 app/design/frontend/magento_plushe/js/matchMedia.js create mode 100644 app/design/frontend/magento_plushe/js/navigation-menu.js create mode 100644 app/design/frontend/magento_plushe/js/selectivizr.js create mode 100644 app/design/frontend/magento_plushe/js/sticky.js create mode 100644 app/design/frontend/magento_plushe/js/tabs.js create mode 100644 app/design/frontend/magento_plushe/js/theme.js create mode 100644 app/design/frontend/magento_plushe/less/clearless/all.less create mode 100644 app/design/frontend/magento_plushe/less/clearless/arrows.less create mode 100644 app/design/frontend/magento_plushe/less/clearless/grids.less create mode 100644 app/design/frontend/magento_plushe/less/clearless/helpers.less create mode 100644 app/design/frontend/magento_plushe/less/clearless/icons.less create mode 100644 app/design/frontend/magento_plushe/less/clearless/resets.less create mode 100644 app/design/frontend/magento_plushe/less/clearless/settings.less create mode 100644 app/design/frontend/magento_plushe/less/clearless/sprites.less create mode 100644 app/design/frontend/magento_plushe/less/clearless/typography.less create mode 100644 app/design/frontend/magento_plushe/less/lib/buttons.less create mode 100644 app/design/frontend/magento_plushe/less/lib/forms.less create mode 100644 app/design/frontend/magento_plushe/less/lib/grids.less create mode 100644 app/design/frontend/magento_plushe/less/lib/icons.less create mode 100644 app/design/frontend/magento_plushe/less/lib/messages.less create mode 100644 app/design/frontend/magento_plushe/less/lib/navigation.less create mode 100644 app/design/frontend/magento_plushe/less/lib/sections.less create mode 100644 app/design/frontend/magento_plushe/less/lib/snippets.less create mode 100644 app/design/frontend/magento_plushe/less/styles.less create mode 100644 app/design/frontend/magento_plushe/less/styles/base.less create mode 100644 app/design/frontend/magento_plushe/less/styles/magento.less create mode 100644 app/design/frontend/magento_plushe/less/vars.less create mode 100644 app/design/frontend/magento_plushe/media/preview.jpg create mode 100644 app/design/frontend/magento_plushe/theme.xml create mode 100644 app/design/frontend/magento_plushe/view.xml create mode 100644 dev/tests/integration/testsuite/Magento/App/FrontControllerTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Core/Controller/Request/HttpTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Core/Controller/Varien/FrontTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Core/Model/TemplateEngine/TwigTest.php rename dev/tests/integration/testsuite/Magento/{Core/Model => View}/Layout/ElementTest.php (88%) rename dev/tests/integration/testsuite/Magento/{Core/Model => View/Layout}/_files/_layout_update.xml (100%) create mode 100644 dev/tests/static/testsuite/Magento/Test/Integrity/Di/ConfigurationTest.php delete mode 100644 dev/tests/static/testsuite/Magento/Test/Integrity/NamespaceBlacklist.php delete mode 100644 dev/tests/static/testsuite/Magento/Test/Integrity/ReferenceBlacklist.php create mode 100644 dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/namespace.txt create mode 100644 dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/reference.txt delete mode 100644 dev/tests/static/testsuite/Magento/Test/Twig/TwigExtensionTest.php create mode 100644 dev/tests/unit/testsuite/Magento/App/Action/ForwardTest.php create mode 100644 dev/tests/unit/testsuite/Magento/App/AreaListTest.php rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Dir/VerificationTest.php (89%) create mode 100644 dev/tests/unit/testsuite/Magento/App/FrontControllerTest.php rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Module/Declaration/Converter/DomTest.php (93%) rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Module/Declaration/Converter/_files/converted_valid_module.php (100%) rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Module/Declaration/Converter/_files/valid_module.xml (100%) rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Module/Declaration/FileResolver/_files/app/code/Module/Four/etc/module.xml (100%) rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Module/Declaration/FileResolver/_files/app/code/Module/One/etc/module.xml (100%) rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Module/Declaration/FileResolver/_files/app/code/Module/Three/etc/module.xml (100%) rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Module/Declaration/FileResolver/_files/app/code/Module/Two/etc/module.xml (100%) rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Module/Declaration/FileResolver/_files/app/etc/custom/module.xml (100%) rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Module/Declaration/FileResolverTest.php (84%) rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Module/Declaration/Reader/FilesystemTest.php (83%) rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Module/Dir/ReverseResolverTest.php (85%) rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Module/DirTest.php (83%) rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Module/ResourceResolver/_files/Module/data/module_first_setup/.gitignore (100%) rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Module/ResourceResolver/_files/Module/data/module_second_setup/.gitignore (100%) rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Module/ResourceResolver/_files/Module/sql/module_first_setup/.gitignore (100%) rename dev/tests/unit/testsuite/Magento/{Core/Model => App}/Module/ResourceResolverTest.php (91%) create mode 100644 dev/tests/unit/testsuite/Magento/App/Request/HttpTest.php rename dev/tests/{integration/testsuite/Magento/Core/Controller/Varien/Router/AbstractTest.php => unit/testsuite/Magento/App/Response/HttpTest.php} (57%) create mode 100644 dev/tests/unit/testsuite/Magento/App/ResponseFactoryTest.php rename dev/tests/unit/testsuite/Magento/{Core/Model/Db => App}/UpdaterTest.php (77%) create mode 100644 dev/tests/unit/testsuite/Magento/Backend/App/Area/FrontNameResolverTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Backend/App/Area/Request/PathInfoProcessorTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Backend/Model/AuthTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Core/App/Area/Request/PathInfoProcessorTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Core/App/FrontController/Plugin/InstallTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Core/App/FrontController/Plugin/RequestPreprocessorTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Core/App/Request/RewriteServiceTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Decorator/DebugHintsTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Plugin/DebugHintsTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/PoolTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/CommonFunctionsTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/EnvironmentFactoryTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/ExtensionTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/FullFileNameTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/LayoutFunctionsTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/_files/twig_templates/READEME.txt delete mode 100644 dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/TwigTest.php rename dev/tests/unit/testsuite/Magento/{Core/Model => }/Event/Config/ConverterTest.php (87%) rename dev/tests/unit/testsuite/Magento/{Core/Model => }/Event/Config/DataTest.php (84%) rename dev/tests/unit/testsuite/Magento/{Core/Model => }/Event/Config/SchemaLocatorTest.php (64%) rename dev/tests/unit/testsuite/Magento/{Core/Model => }/Event/Config/XsdTest.php (94%) rename dev/tests/unit/testsuite/Magento/{Core/Model => Event/Config}/_files/event_config.php (100%) rename dev/tests/unit/testsuite/Magento/{Core/Model => Event/Config}/_files/event_config.xml (100%) rename dev/tests/unit/testsuite/Magento/{Core/Model => Event/Config}/_files/event_invalid_config.xml (100%) rename dev/tests/unit/testsuite/Magento/{Core/Model => }/Event/Config/_files/invalidEventsXmlArray.php (100%) rename dev/tests/unit/testsuite/Magento/{Core/Model => }/Event/Config/_files/valid_events.xml (100%) create mode 100644 dev/tests/unit/testsuite/Magento/Event/EventFactoryTest.php rename dev/tests/unit/testsuite/Magento/{Core/Model => }/Event/Invoker/InvokerDefaultTest.php (90%) rename dev/tests/unit/testsuite/Magento/{Core/Model => }/Event/ManagerStub.php (93%) rename dev/tests/unit/testsuite/Magento/{Core/Model => }/Event/ManagerTest.php (76%) delete mode 100644 dev/tests/unit/testsuite/Magento/Http/Handler/CompositeTest.php rename dev/tests/unit/testsuite/Magento/{Core/Model => View}/Layout/ElementTest.php (91%) rename {app/code/Magento/Core/Controller/Varien => lib/Magento/App/Action}/AbstractAction.php (73%) rename {app/code/Magento/Core/Controller/Varien => lib/Magento/App/Action}/Exception.php (87%) rename {app/code/Magento/Core/Controller/Varien => lib/Magento/App}/Action/Forward.php (78%) rename {app/code/Magento/Core/Controller/Varien => lib/Magento/App}/Action/Redirect.php (76%) rename app/code/Magento/Core/Controller/Varien/Action/Factory.php => lib/Magento/App/ActionFactory.php (86%) rename app/code/Magento/Core/Model/TemplateEngine/BlockTrackerInterface.php => lib/Magento/App/ActionInterface.php (79%) create mode 100644 lib/Magento/App/Area/FrontNameResolverFactory.php rename app/code/Magento/Core/Controller/FrontInterface.php => lib/Magento/App/Area/FrontNameResolverInterface.php (79%) create mode 100644 lib/Magento/App/AreaList.php rename {app/code/Magento/Core/Model => lib/Magento/App}/Dir.php (99%) rename {app/code/Magento/Core/Model => lib/Magento/App}/Dir/Verification.php (76%) create mode 100644 lib/Magento/App/FrontController.php create mode 100644 lib/Magento/App/FrontControllerInterface.php rename {app/code/Magento/Core/Model => lib/Magento/App}/Module/Declaration/Converter/Dom.php (99%) mode change 100755 => 100644 rename {app/code/Magento/Core/Model => lib/Magento/App}/Module/Declaration/FileResolver.php (89%) rename {app/code/Magento/Core/Model => lib/Magento/App}/Module/Declaration/Reader/Filesystem.php (93%) mode change 100755 => 100644 rename {app/code/Magento/Core/Model => lib/Magento/App}/Module/Declaration/SchemaLocator.php (92%) rename {app/code/Magento/Core/Model => lib/Magento/App}/Module/Dir.php (86%) rename {app/code/Magento/Core/Model => lib/Magento/App}/Module/Dir/ReverseResolver.php (83%) rename {app/code/Magento/Core/Model => lib/Magento/App}/Module/ResourceResolver.php (95%) rename {app/code/Magento/Core/Model => lib/Magento/App}/Module/ResourceResolverInterface.php (93%) rename {app/code/Magento/Core/Model => lib/Magento/App}/ModuleList.php (89%) rename {app/code/Magento/Core/Model => lib/Magento/App}/ModuleListInterface.php (97%) rename {app/code/Magento/Core/Controller => lib/Magento/App}/Request/Http.php (82%) create mode 100644 lib/Magento/App/Request/PathInfoProcessorInterface.php rename app/code/Magento/Core/Model/Resource/SetupFactory.php => lib/Magento/App/RequestFactory.php (67%) create mode 100644 lib/Magento/App/RequestInterface.php create mode 100644 lib/Magento/App/Response/Http.php create mode 100644 lib/Magento/App/ResponseFactory.php create mode 100644 lib/Magento/App/ResponseInterface.php rename {app/code/Magento/Core/Controller/Varien => lib/Magento/App}/Router/AbstractRouter.php (68%) rename {app/code/Magento/Core/Controller/Varien => lib/Magento/App}/Router/DefaultRouter.php (69%) rename {app/code/Magento/Core/Model => lib/Magento/App/Router}/NoRouteHandlerList.php (98%) rename {app/code/Magento/Core/Model => lib/Magento/App}/RouterList.php (95%) create mode 100644 lib/Magento/App/RouterListInterface.php rename {app/code/Magento/Core/Model => lib/Magento}/App/State.php (92%) rename {app/code/Magento/Core/Model/Db => lib/Magento/App}/Updater.php (59%) create mode 100644 lib/Magento/App/Updater/SetupFactory.php rename {app/code/Magento/Core/Model/Resource => lib/Magento/App/Updater}/SetupInterface.php (91%) rename {app/code/Magento/Core/Model/Db => lib/Magento/App}/UpdaterInterface.php (97%) rename {app/code/Magento/Core => lib/Magento/App}/etc/module.xsd (100%) rename {app/code/Magento/Core/Model => lib/Magento/Appl}/Router/NoRouteHandlerInterface.php (85%) rename {app/code/Magento/Core/Model => lib/Magento}/Config/Scope.php (73%) rename {app/code/Magento/Core/Model => lib/Magento}/Event/Config.php (81%) rename {app/code/Magento/Core/Model => lib/Magento}/Event/Config/Converter.php (98%) rename {app/code/Magento/Core/Model => lib/Magento}/Event/Config/Data.php (87%) rename {app/code/Magento/Core/Model => lib/Magento}/Event/Config/Reader.php (86%) create mode 100644 lib/Magento/Event/Config/SchemaLocator.php rename {app/code/Magento/Core/Model => lib/Magento}/Event/ConfigInterface.php (96%) rename {app/code/Magento/Core/Model => lib/Magento}/Event/Invoker/InvokerDefault.php (80%) rename {app/code/Magento/Core/Model => lib/Magento}/Event/InvokerInterface.php (97%) rename {app/code/Magento/Core/Model => lib/Magento}/Event/Manager.php (72%) create mode 100644 lib/Magento/Event/ManagerInterface.php rename {app/code/Magento/Core/Model => lib/Magento/Event}/ObserverFactory.php (92%) rename lib/Magento/{HTTP/HandlerFactory.php => Event/WrapperFactory.php} (79%) rename {app/code/Magento/Core => lib/Magento/Event}/etc/events.xsd (100%) rename app/code/Magento/Core/Controller/Varien/DispatchableInterface.php => lib/Magento/EventFactory.php (66%) delete mode 100644 lib/Magento/HTTP/Handler/Composite.php delete mode 100644 lib/Magento/HTTP/HandlerInterface.php rename {app/code/Magento/Core/Model => lib/Magento}/UrlInterface.php (88%) create mode 100644 lib/Magento/View/ConfigInterface.php rename {app/code/Magento/Core/Model => lib/Magento/View/Design}/ThemeInterface.php (88%) rename {app/code/Magento/Core/Model => lib/Magento}/View/DesignInterface.php (84%) rename app/code/Magento/Core/Block.php => lib/Magento/View/Element/BlockInterface.php (88%) rename {app/code/Magento/Core/Model => lib/Magento/View}/Layout/Element.php (63%) create mode 100644 lib/Magento/View/Layout/ProcessorFactory.php create mode 100644 lib/Magento/View/Layout/ProcessorInterface.php create mode 100644 lib/Magento/View/LayoutFactory.php create mode 100644 lib/Magento/View/LayoutInterface.php delete mode 100644 lib/Twig/AUTHORS delete mode 100644 lib/Twig/Autoloader.php delete mode 100644 lib/Twig/Compiler.php delete mode 100644 lib/Twig/CompilerInterface.php delete mode 100644 lib/Twig/Environment.php delete mode 100644 lib/Twig/Error.php delete mode 100644 lib/Twig/Error/Loader.php delete mode 100644 lib/Twig/Error/Runtime.php delete mode 100644 lib/Twig/Error/Syntax.php delete mode 100644 lib/Twig/ExistsLoaderInterface.php delete mode 100644 lib/Twig/ExpressionParser.php delete mode 100644 lib/Twig/Extension.php delete mode 100644 lib/Twig/Extension/Core.php delete mode 100644 lib/Twig/Extension/Debug.php delete mode 100644 lib/Twig/Extension/Escaper.php delete mode 100644 lib/Twig/Extension/Optimizer.php delete mode 100644 lib/Twig/Extension/Sandbox.php delete mode 100644 lib/Twig/Extension/Staging.php delete mode 100644 lib/Twig/Extension/StringLoader.php delete mode 100644 lib/Twig/ExtensionInterface.php delete mode 100644 lib/Twig/Filter.php delete mode 100644 lib/Twig/Filter/Function.php delete mode 100644 lib/Twig/Filter/Method.php delete mode 100644 lib/Twig/Filter/Node.php delete mode 100644 lib/Twig/FilterCallableInterface.php delete mode 100644 lib/Twig/FilterInterface.php delete mode 100644 lib/Twig/Function.php delete mode 100644 lib/Twig/Function/Function.php delete mode 100644 lib/Twig/Function/Method.php delete mode 100644 lib/Twig/Function/Node.php delete mode 100644 lib/Twig/FunctionCallableInterface.php delete mode 100644 lib/Twig/FunctionInterface.php delete mode 100644 lib/Twig/LICENSE delete mode 100644 lib/Twig/Lexer.php delete mode 100644 lib/Twig/LexerInterface.php delete mode 100644 lib/Twig/Loader/Array.php delete mode 100644 lib/Twig/Loader/Chain.php delete mode 100644 lib/Twig/Loader/Filesystem.php delete mode 100644 lib/Twig/Loader/String.php delete mode 100644 lib/Twig/LoaderInterface.php delete mode 100644 lib/Twig/Markup.php delete mode 100644 lib/Twig/Node.php delete mode 100644 lib/Twig/Node/AutoEscape.php delete mode 100644 lib/Twig/Node/Block.php delete mode 100644 lib/Twig/Node/BlockReference.php delete mode 100644 lib/Twig/Node/Body.php delete mode 100644 lib/Twig/Node/Do.php delete mode 100644 lib/Twig/Node/Embed.php delete mode 100644 lib/Twig/Node/Expression.php delete mode 100644 lib/Twig/Node/Expression/Array.php delete mode 100644 lib/Twig/Node/Expression/AssignName.php delete mode 100644 lib/Twig/Node/Expression/Binary.php delete mode 100644 lib/Twig/Node/Expression/Binary/Add.php delete mode 100644 lib/Twig/Node/Expression/Binary/And.php delete mode 100644 lib/Twig/Node/Expression/Binary/BitwiseAnd.php delete mode 100644 lib/Twig/Node/Expression/Binary/BitwiseOr.php delete mode 100644 lib/Twig/Node/Expression/Binary/BitwiseXor.php delete mode 100644 lib/Twig/Node/Expression/Binary/Concat.php delete mode 100644 lib/Twig/Node/Expression/Binary/Div.php delete mode 100644 lib/Twig/Node/Expression/Binary/Equal.php delete mode 100644 lib/Twig/Node/Expression/Binary/FloorDiv.php delete mode 100644 lib/Twig/Node/Expression/Binary/Greater.php delete mode 100644 lib/Twig/Node/Expression/Binary/GreaterEqual.php delete mode 100644 lib/Twig/Node/Expression/Binary/In.php delete mode 100644 lib/Twig/Node/Expression/Binary/Less.php delete mode 100644 lib/Twig/Node/Expression/Binary/LessEqual.php delete mode 100644 lib/Twig/Node/Expression/Binary/Mod.php delete mode 100644 lib/Twig/Node/Expression/Binary/Mul.php delete mode 100644 lib/Twig/Node/Expression/Binary/NotEqual.php delete mode 100644 lib/Twig/Node/Expression/Binary/NotIn.php delete mode 100644 lib/Twig/Node/Expression/Binary/Or.php delete mode 100644 lib/Twig/Node/Expression/Binary/Power.php delete mode 100644 lib/Twig/Node/Expression/Binary/Range.php delete mode 100644 lib/Twig/Node/Expression/Binary/Sub.php delete mode 100644 lib/Twig/Node/Expression/BlockReference.php delete mode 100644 lib/Twig/Node/Expression/Call.php delete mode 100644 lib/Twig/Node/Expression/Conditional.php delete mode 100644 lib/Twig/Node/Expression/Constant.php delete mode 100644 lib/Twig/Node/Expression/ExtensionReference.php delete mode 100644 lib/Twig/Node/Expression/Filter.php delete mode 100644 lib/Twig/Node/Expression/Filter/Default.php delete mode 100644 lib/Twig/Node/Expression/Function.php delete mode 100644 lib/Twig/Node/Expression/GetAttr.php delete mode 100644 lib/Twig/Node/Expression/MethodCall.php delete mode 100644 lib/Twig/Node/Expression/Name.php delete mode 100644 lib/Twig/Node/Expression/Parent.php delete mode 100644 lib/Twig/Node/Expression/TempName.php delete mode 100644 lib/Twig/Node/Expression/Test.php delete mode 100644 lib/Twig/Node/Expression/Test/Constant.php delete mode 100644 lib/Twig/Node/Expression/Test/Defined.php delete mode 100644 lib/Twig/Node/Expression/Test/Divisibleby.php delete mode 100644 lib/Twig/Node/Expression/Test/Even.php delete mode 100644 lib/Twig/Node/Expression/Test/Null.php delete mode 100644 lib/Twig/Node/Expression/Test/Odd.php delete mode 100644 lib/Twig/Node/Expression/Test/Sameas.php delete mode 100644 lib/Twig/Node/Expression/Unary.php delete mode 100644 lib/Twig/Node/Expression/Unary/Neg.php delete mode 100644 lib/Twig/Node/Expression/Unary/Not.php delete mode 100644 lib/Twig/Node/Expression/Unary/Pos.php delete mode 100644 lib/Twig/Node/Flush.php delete mode 100644 lib/Twig/Node/For.php delete mode 100644 lib/Twig/Node/ForLoop.php delete mode 100644 lib/Twig/Node/If.php delete mode 100644 lib/Twig/Node/Import.php delete mode 100644 lib/Twig/Node/Include.php delete mode 100644 lib/Twig/Node/Macro.php delete mode 100644 lib/Twig/Node/Module.php delete mode 100644 lib/Twig/Node/Print.php delete mode 100644 lib/Twig/Node/Sandbox.php delete mode 100644 lib/Twig/Node/SandboxedModule.php delete mode 100644 lib/Twig/Node/SandboxedPrint.php delete mode 100644 lib/Twig/Node/Set.php delete mode 100644 lib/Twig/Node/SetTemp.php delete mode 100644 lib/Twig/Node/Spaceless.php delete mode 100644 lib/Twig/Node/Text.php delete mode 100644 lib/Twig/NodeInterface.php delete mode 100644 lib/Twig/NodeOutputInterface.php delete mode 100644 lib/Twig/NodeTraverser.php delete mode 100644 lib/Twig/NodeVisitor/Escaper.php delete mode 100644 lib/Twig/NodeVisitor/Optimizer.php delete mode 100644 lib/Twig/NodeVisitor/SafeAnalysis.php delete mode 100644 lib/Twig/NodeVisitor/Sandbox.php delete mode 100644 lib/Twig/NodeVisitorInterface.php delete mode 100644 lib/Twig/Parser.php delete mode 100644 lib/Twig/ParserInterface.php delete mode 100644 lib/Twig/Sandbox/SecurityError.php delete mode 100644 lib/Twig/Sandbox/SecurityPolicy.php delete mode 100644 lib/Twig/Sandbox/SecurityPolicyInterface.php delete mode 100644 lib/Twig/SimpleFilter.php delete mode 100644 lib/Twig/SimpleFunction.php delete mode 100644 lib/Twig/SimpleTest.php delete mode 100644 lib/Twig/Template.php delete mode 100644 lib/Twig/TemplateInterface.php delete mode 100644 lib/Twig/Test.php delete mode 100644 lib/Twig/Test/Function.php delete mode 100644 lib/Twig/Test/IntegrationTestCase.php delete mode 100644 lib/Twig/Test/Method.php delete mode 100644 lib/Twig/Test/Node.php delete mode 100644 lib/Twig/Test/NodeTestCase.php delete mode 100644 lib/Twig/TestCallableInterface.php delete mode 100644 lib/Twig/TestInterface.php delete mode 100644 lib/Twig/Token.php delete mode 100644 lib/Twig/TokenParser.php delete mode 100644 lib/Twig/TokenParser/AutoEscape.php delete mode 100644 lib/Twig/TokenParser/Block.php delete mode 100644 lib/Twig/TokenParser/Do.php delete mode 100644 lib/Twig/TokenParser/Embed.php delete mode 100644 lib/Twig/TokenParser/Extends.php delete mode 100644 lib/Twig/TokenParser/Filter.php delete mode 100644 lib/Twig/TokenParser/Flush.php delete mode 100644 lib/Twig/TokenParser/For.php delete mode 100644 lib/Twig/TokenParser/From.php delete mode 100644 lib/Twig/TokenParser/If.php delete mode 100644 lib/Twig/TokenParser/Import.php delete mode 100644 lib/Twig/TokenParser/Include.php delete mode 100644 lib/Twig/TokenParser/Macro.php delete mode 100644 lib/Twig/TokenParser/Sandbox.php delete mode 100644 lib/Twig/TokenParser/Set.php delete mode 100644 lib/Twig/TokenParser/Spaceless.php delete mode 100644 lib/Twig/TokenParser/Use.php delete mode 100644 lib/Twig/TokenParserBroker.php delete mode 100644 lib/Twig/TokenParserBrokerInterface.php delete mode 100644 lib/Twig/TokenParserInterface.php delete mode 100644 lib/Twig/TokenStream.php diff --git a/CHANGELOG.md b/CHANGELOG.md index f4596a58156..47301676416 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,26 @@ +2.0.0.0-dev49 +============= +* Various improvements: + * Unified Area configuration + * Moved EventManager to Magento\Event lib component + * Moved FrontController, Routers, Base Actions to Magento\App + * Created Magento\App component in library + * Declared public interfaces for View component into library + * Plushe theme is set as the default theme + * Refactor the Blacklist Pattern in the Integrity Test Suite's ClassesTest to Replace Blacklist.php Files + * Removed JavaScript unit test TreeSuggestTest.prototype.testBind as obsolete + * Introduced ability to register a template engine to process template files having certain extension + * Removed support of the Twig template engine along with the corresponding component from the library + * Removed layout flag that forced template blocks to output rendered content directly to a browser bypassing the response object + * Moved out responsibility of rendering template debugging hints from the template block to the plugin and decorator for a template engine +* Fixed bugs: + * Fixed inability to create product if multiple attributes are assigned to attribute set + * Fixed inability to create a new widget instance + * Fixed error on Customers Segments Conditions tab while the 'Number of Orders' condition is chosen + * Fixed blank page when placing order via Ogone + * Fixed various UI issues in Admin Panel with layout, aligning, buttons and fields + * Fixed static tests failing to verify themes files + 2.0.0.0-dev48 ============= * Various improvements: diff --git a/app/code/Magento/AdminNotification/Model/Resource/System/Message/Collection.php b/app/code/Magento/AdminNotification/Model/Resource/System/Message/Collection.php index 17f45c5c862..dc167a99ea8 100644 --- a/app/code/Magento/AdminNotification/Model/Resource/System/Message/Collection.php +++ b/app/code/Magento/AdminNotification/Model/Resource/System/Message/Collection.php @@ -42,7 +42,7 @@ class Collection protected $_countBySeverity = array(); /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -50,7 +50,7 @@ class Collection * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/AdminNotification/Model/Survey.php b/app/code/Magento/AdminNotification/Model/Survey.php index cb3922a946b..e9c956cd14e 100644 --- a/app/code/Magento/AdminNotification/Model/Survey.php +++ b/app/code/Magento/AdminNotification/Model/Survey.php @@ -54,17 +54,17 @@ class Survey protected $_flagFactory; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; /** * @param \Magento\Core\Model\FlagFactory $flagFactory - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request */ public function __construct( \Magento\Core\Model\FlagFactory $flagFactory, - \Magento\Core\Controller\Request\Http $request + \Magento\App\RequestInterface $request ) { $this->_request = $request; $this->_flagFactory = $flagFactory; diff --git a/app/code/Magento/AdminNotification/Model/System/Message/Baseurl.php b/app/code/Magento/AdminNotification/Model/System/Message/Baseurl.php index 108f442d990..7a129f0b359 100644 --- a/app/code/Magento/AdminNotification/Model/System/Message/Baseurl.php +++ b/app/code/Magento/AdminNotification/Model/System/Message/Baseurl.php @@ -27,7 +27,7 @@ class Baseurl implements \Magento\AdminNotification\Model\System\MessageInterface { /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; @@ -49,13 +49,13 @@ class Baseurl /** * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Core\Model\Config\ValueFactory $configValueFactory */ public function __construct( \Magento\Core\Model\Config $config, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\UrlInterface $urlBuilder, \Magento\Core\Model\Config\ValueFactory $configValueFactory ) { $this->_urlBuilder = $urlBuilder; diff --git a/app/code/Magento/AdminNotification/Model/System/Message/CacheOutdated.php b/app/code/Magento/AdminNotification/Model/System/Message/CacheOutdated.php index 03366d1456b..f262f7e6408 100644 --- a/app/code/Magento/AdminNotification/Model/System/Message/CacheOutdated.php +++ b/app/code/Magento/AdminNotification/Model/System/Message/CacheOutdated.php @@ -27,7 +27,7 @@ class CacheOutdated implements \Magento\AdminNotification\Model\System\MessageInterface { /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; @@ -43,12 +43,12 @@ class CacheOutdated /** * @param \Magento\AuthorizationInterface $authorization - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Core\Model\Cache\TypeListInterface $cacheTypeList */ public function __construct( \Magento\AuthorizationInterface $authorization, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\UrlInterface $urlBuilder, \Magento\Core\Model\Cache\TypeListInterface $cacheTypeList ) { $this->_authorization = $authorization; diff --git a/app/code/Magento/AdminNotification/Model/System/Message/Survey.php b/app/code/Magento/AdminNotification/Model/System/Message/Survey.php index 9fa6dcc251e..9f1d67cf935 100644 --- a/app/code/Magento/AdminNotification/Model/System/Message/Survey.php +++ b/app/code/Magento/AdminNotification/Model/System/Message/Survey.php @@ -37,7 +37,7 @@ class Survey protected $_authorization; /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; @@ -49,13 +49,13 @@ class Survey /** * @param \Magento\Backend\Model\Auth\Session $authSession * @param \Magento\AuthorizationInterface $authorization - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\AdminNotification\Model\Survey $survey */ public function __construct( \Magento\Backend\Model\Auth\Session $authSession, \Magento\AuthorizationInterface $authorization, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\UrlInterface $urlBuilder, \Magento\AdminNotification\Model\Survey $survey ) { $this->_authorization = $authorization; diff --git a/app/code/Magento/Adminhtml/Block/Catalog/Category/Helper/Image.php b/app/code/Magento/Adminhtml/Block/Catalog/Category/Helper/Image.php index 680ac066a30..7bbc7b0c72d 100644 --- a/app/code/Magento/Adminhtml/Block/Catalog/Category/Helper/Image.php +++ b/app/code/Magento/Adminhtml/Block/Catalog/Category/Helper/Image.php @@ -45,7 +45,7 @@ class Image extends \Magento\Data\Form\Element\Image * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param array $attributes */ public function __construct( @@ -53,7 +53,7 @@ class Image extends \Magento\Data\Form\Element\Image \Magento\Core\Helper\Data $coreData, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\UrlInterface $urlBuilder, $attributes = array() ) { $this->_storeManager = $storeManager; diff --git a/app/code/Magento/Adminhtml/Block/Catalog/Form/Renderer/Config/YearRange.php b/app/code/Magento/Adminhtml/Block/Catalog/Form/Renderer/Config/YearRange.php index 07188a06b5c..65bb1429d61 100644 --- a/app/code/Magento/Adminhtml/Block/Catalog/Form/Renderer/Config/YearRange.php +++ b/app/code/Magento/Adminhtml/Block/Catalog/Form/Renderer/Config/YearRange.php @@ -49,8 +49,7 @@ class YearRange extends \Magento\Backend\Block\System\Config\Form\Field $from = $element->setValue(isset($values[0]) ? $values[0] : null)->getElementHtml(); $to = $element->setValue(isset($values[1]) ? $values[1] : null)->getElementHtml(); - return __('from') . ' ' . $from - . ' ' - . __('to') . ' ' . $to; + return __('<label class="label"><span>from</span></label>') . $from + . __('<label class="label"><span>to</span></label>') . $to; } } diff --git a/app/code/Magento/Adminhtml/Block/Catalog/Helper/Form/Wysiwyg.php b/app/code/Magento/Adminhtml/Block/Catalog/Helper/Form/Wysiwyg.php index 512a56e02e7..b498f6c79f7 100644 --- a/app/code/Magento/Adminhtml/Block/Catalog/Helper/Form/Wysiwyg.php +++ b/app/code/Magento/Adminhtml/Block/Catalog/Helper/Form/Wysiwyg.php @@ -55,13 +55,13 @@ class Wysiwyg extends \Magento\Data\Form\Element\Textarea protected $_wysiwygConfig; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; /** * @param \Magento\Cms\Model\Wysiwyg\Config $wysiwygConfig - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection @@ -71,7 +71,7 @@ class Wysiwyg extends \Magento\Data\Form\Element\Textarea */ public function __construct( \Magento\Cms\Model\Wysiwyg\Config $wysiwygConfig, - \Magento\Core\Model\Layout $layout, + \Magento\View\LayoutInterface $layout, \Magento\Core\Helper\Data $coreData, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, diff --git a/app/code/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/Config.php b/app/code/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/Config.php index ae8e36f48e7..fe00553dc32 100644 --- a/app/code/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/Config.php +++ b/app/code/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/Config.php @@ -49,7 +49,7 @@ class Config /** * @var \Magento\Core\Model\App */ - protected $_app; + protected $_storeManager; /** * @var \Magento\Core\Model\LocaleInterface @@ -91,7 +91,7 @@ class Config $this->_configurableType = $configurableType; $this->_coreRegistry = $coreRegistry; $this->_catalogData = $catalogData; - $this->_app = $app; + $this->_storeManager = $app; $this->_locale = $locale; parent::__construct($coreData, $context, $data); } @@ -489,7 +489,7 @@ class Config */ public function getApp() { - return $this->_app; + return $this->_storeManager; } /** diff --git a/app/code/Magento/Adminhtml/Block/Catalog/Product/Helper/Form/Category.php b/app/code/Magento/Adminhtml/Block/Catalog/Product/Helper/Form/Category.php index be8dc829c1e..ed24df7b181 100644 --- a/app/code/Magento/Adminhtml/Block/Catalog/Product/Helper/Form/Category.php +++ b/app/code/Magento/Adminhtml/Block/Catalog/Product/Helper/Form/Category.php @@ -36,7 +36,7 @@ namespace Magento\Adminhtml\Block\Catalog\Product\Helper\Form; class Category extends \Magento\Data\Form\Element\Multiselect { /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -58,7 +58,7 @@ class Category extends \Magento\Data\Form\Element\Multiselect * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection * @param \Magento\Backend\Helper\Data $backendData - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @param array $attributes */ public function __construct( @@ -67,7 +67,7 @@ class Category extends \Magento\Data\Form\Element\Multiselect \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, \Magento\Backend\Helper\Data $backendData, - \Magento\Core\Model\Layout $layout, + \Magento\View\LayoutInterface $layout, array $attributes = array() ) { $this->_collectionFactory = $collectionFactory; diff --git a/app/code/Magento/Adminhtml/Block/Catalog/Product/Helper/Form/Gallery.php b/app/code/Magento/Adminhtml/Block/Catalog/Product/Helper/Form/Gallery.php index 231b2ed1f00..5e618e123d0 100644 --- a/app/code/Magento/Adminhtml/Block/Catalog/Product/Helper/Form/Gallery.php +++ b/app/code/Magento/Adminhtml/Block/Catalog/Product/Helper/Form/Gallery.php @@ -42,12 +42,12 @@ class Gallery extends \Magento\Data\Form\Element\AbstractElement protected $_storeManager; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; /** - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Data\Form\Element\Factory $factoryElement @@ -55,7 +55,7 @@ class Gallery extends \Magento\Data\Form\Element\AbstractElement * @param array $attributes */ public function __construct( - \Magento\Core\Model\Layout $layout, + \Magento\View\LayoutInterface $layout, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Helper\Data $coreData, \Magento\Data\Form\Element\Factory $factoryElement, diff --git a/app/code/Magento/Adminhtml/Block/Cms/Page/Edit/Tab/Content.php b/app/code/Magento/Adminhtml/Block/Cms/Page/Edit/Tab/Content.php index 52a13314f0c..0bbda0d7ad0 100644 --- a/app/code/Magento/Adminhtml/Block/Cms/Page/Edit/Tab/Content.php +++ b/app/code/Magento/Adminhtml/Block/Cms/Page/Edit/Tab/Content.php @@ -43,7 +43,7 @@ class Content * @param \Magento\Backend\Block\Template\Context $context * @param \Magento\Data\Form\Factory $formFactory * @param \Magento\Core\Helper\Data $coreData - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Registry $coreRegistry * @param array $data */ @@ -52,7 +52,7 @@ class Content \Magento\Backend\Block\Template\Context $context, \Magento\Data\Form\Factory $formFactory, \Magento\Core\Helper\Data $coreData, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Registry $coreRegistry, array $data = array() ) { diff --git a/app/code/Magento/Adminhtml/Block/Page/Head.php b/app/code/Magento/Adminhtml/Block/Page/Head.php index b6af9a48c0e..f8b7a0a6d2a 100644 --- a/app/code/Magento/Adminhtml/Block/Page/Head.php +++ b/app/code/Magento/Adminhtml/Block/Page/Head.php @@ -48,7 +48,7 @@ class Head extends \Magento\Page\Block\Html\Head /** * @param \Magento\Core\Model\Session $session * @param \Magento\Core\Model\LocaleInterface $locale - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Helper\File\Storage\Database $fileStorageDatabase * @param \Magento\Core\Helper\Data $coreData @@ -62,7 +62,7 @@ class Head extends \Magento\Page\Block\Html\Head public function __construct( \Magento\Core\Model\Session $session, \Magento\Core\Model\LocaleInterface $locale, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Core\Helper\File\Storage\Database $fileStorageDatabase, \Magento\Core\Helper\Data $coreData, diff --git a/app/code/Magento/Adminhtml/Block/Sales/Items/AbstractItems.php b/app/code/Magento/Adminhtml/Block/Sales/Items/AbstractItems.php index 56f57a862b4..2c924b57e1c 100644 --- a/app/code/Magento/Adminhtml/Block/Sales/Items/AbstractItems.php +++ b/app/code/Magento/Adminhtml/Block/Sales/Items/AbstractItems.php @@ -127,7 +127,7 @@ class AbstractItems extends \Magento\Backend\Block\Template public function getItemRenderer($type) { $renderer = $this->getChildBlock($type) ?: $this->getChildBlock(self::DEFAULT_TYPE); - if (!$renderer instanceof \Magento\Core\Block) { + if (!$renderer instanceof \Magento\View\Element\BlockInterface) { throw new \RuntimeException('Renderer for type "' . $type . '" does not exist.'); } foreach ($this->_columnRenders as $columnType => $columnRenderer) { diff --git a/app/code/Magento/Adminhtml/Controller/Customer.php b/app/code/Magento/Adminhtml/Controller/Customer.php index d124a6ba4ff..4cb4194c8c7 100644 --- a/app/code/Magento/Adminhtml/Controller/Customer.php +++ b/app/code/Magento/Adminhtml/Controller/Customer.php @@ -846,7 +846,7 @@ class Customer extends \Magento\Adminhtml\Controller\Action return $this->norouteAction(); } - $path = $this->_objectManager->get('Magento\Core\Model\Dir')->getDir('media') . DS . 'customer'; + $path = $this->_objectManager->get('Magento\App\Dir')->getDir('media') . DS . 'customer'; /** @var \Magento\Filesystem $filesystem */ $filesystem = $this->_objectManager->get('Magento\Filesystem'); diff --git a/app/code/Magento/Adminhtml/Controller/Sales/Order/Shipment.php b/app/code/Magento/Adminhtml/Controller/Sales/Order/Shipment.php index fe5b4683e4f..c0c6817f60c 100644 --- a/app/code/Magento/Adminhtml/Controller/Sales/Order/Shipment.php +++ b/app/code/Magento/Adminhtml/Controller/Sales/Order/Shipment.php @@ -704,8 +704,8 @@ class Shipment extends \Magento\Adminhtml\Controller\Sales\Shipment\AbstractShip { /** @var \Magento\Filesystem $filesystem */ $filesystem = $this->_objectManager->get('Magento\Filesystem'); - /** @var $tmpDir \Magento\Core\Model\Dir */ - $tmpDir = $this->_objectManager->get('Magento\Core\Model\Dir', $filesystem->getWorkingDirectory()); + /** @var $tmpDir \Magento\App\Dir */ + $tmpDir = $this->_objectManager->get('Magento\App\Dir', $filesystem->getWorkingDirectory()); $image = imagecreatefromstring($imageString); if (!$image) { return false; @@ -716,7 +716,7 @@ class Shipment extends \Magento\Adminhtml\Controller\Sales\Shipment\AbstractShip $page = new \Zend_Pdf_Page($xSize, $ySize); imageinterlace($image, 0); - $tmpFileName = $tmpDir->getDir(\Magento\Core\Model\Dir::TMP) . 'shipping_labels_' + $tmpFileName = $tmpDir->getDir(\Magento\App\Dir::TMP) . 'shipping_labels_' . uniqid(mt_rand()) . time() . '.png'; imagepng($image, $tmpFileName); $pdfImage = \Zend_Pdf_Image::imageWithPath($tmpFileName); @@ -728,7 +728,7 @@ class Shipment extends \Magento\Adminhtml\Controller\Sales\Shipment\AbstractShip /** * Return grid with shipping items for Ajax request * - * @return \Magento\Core\Controller\Response\Http + * @return \Magento\App\ResponseInterface */ public function getShippingItemsGridAction() { diff --git a/app/code/Magento/Adminhtml/Controller/Sitemap.php b/app/code/Magento/Adminhtml/Controller/Sitemap.php index 714a2786a46..5e5fdaae34d 100644 --- a/app/code/Magento/Adminhtml/Controller/Sitemap.php +++ b/app/code/Magento/Adminhtml/Controller/Sitemap.php @@ -175,9 +175,9 @@ class Sitemap extends \Magento\Adminhtml\Controller\Action $fileName = $model->getSitemapFilename(); $filesystem->setWorkingDirectory( - $this->_objectManager->get('Magento\Core\Model\Dir')->getDir() . $model->getSitemapPath() + $this->_objectManager->get('Magento\App\Dir')->getDir() . $model->getSitemapPath() ); - $filePath = $this->_objectManager->get('Magento\Core\Model\Dir')->getDir() + $filePath = $this->_objectManager->get('Magento\App\Dir')->getDir() . $model->getSitemapPath() . DS . $fileName; if ($fileName && $filesystem->isFile($filePath)) { diff --git a/app/code/Magento/Adminhtml/Controller/System/Backup.php b/app/code/Magento/Adminhtml/Controller/System/Backup.php index 4a9e2a02465..88b68ed37a3 100644 --- a/app/code/Magento/Adminhtml/Controller/System/Backup.php +++ b/app/code/Magento/Adminhtml/Controller/System/Backup.php @@ -143,7 +143,7 @@ class Backup extends \Magento\Adminhtml\Controller\Action } if ($type != \Magento\Backup\Helper\Data::TYPE_DB) { - $backupManager->setRootDir($this->_objectManager->get('Magento\Core\Model\Dir')->getDir()) + $backupManager->setRootDir($this->_objectManager->get('Magento\App\Dir')->getDir()) ->addIgnorePaths($helper->getBackupIgnorePaths()); } @@ -274,7 +274,7 @@ class Backup extends \Magento\Adminhtml\Controller\Action if ($type != \Magento\Backup\Helper\Data::TYPE_DB) { - $backupManager->setRootDir($this->_objectManager->get('Magento\Core\Model\Dir')->getDir()) + $backupManager->setRootDir($this->_objectManager->get('Magento\App\Dir')->getDir()) ->addIgnorePaths($helper->getRollbackIgnorePaths()); if ($this->getRequest()->getParam('use_ftp', false)) { diff --git a/app/code/Magento/Adminhtml/Controller/System/Store.php b/app/code/Magento/Adminhtml/Controller/System/Store.php index bc10ead2b71..7fe8aac1ace 100644 --- a/app/code/Magento/Adminhtml/Controller/System/Store.php +++ b/app/code/Magento/Adminhtml/Controller/System/Store.php @@ -471,7 +471,7 @@ class Store extends \Magento\Adminhtml\Controller\Action $backup = $this->_objectManager->create('Magento\Backup\Model\Backup') ->setTime(time()) ->setType('db') - ->setPath($this->_objectManager->get('Magento\Core\Model\Dir')->getDir('var') . DS . 'backups'); + ->setPath($this->_objectManager->get('Magento\App\Dir')->getDir('var') . DS . 'backups'); $backupDb->createBackup($backup); $this->_getSession()->addSuccess(__('The database was backed up.')); diff --git a/app/code/Magento/Adminhtml/Helper/Catalog/Product/Edit/Action/Attribute.php b/app/code/Magento/Adminhtml/Helper/Catalog/Product/Edit/Action/Attribute.php index a0c32c8a951..8c4f451926e 100644 --- a/app/code/Magento/Adminhtml/Helper/Catalog/Product/Edit/Action/Attribute.php +++ b/app/code/Magento/Adminhtml/Helper/Catalog/Product/Edit/Action/Attribute.php @@ -34,7 +34,7 @@ class Attribute extends \Magento\Backend\Helper\Data /** * Selected products for mass-update * - * @var \Magento\Catalog\Model\Entity\Product\Collection + * @var \Magento\Catalog\Model\Resource\Product\Collection */ protected $_products; @@ -68,41 +68,37 @@ class Attribute extends \Magento\Backend\Helper\Data protected $_eavConfig; /** - * @param \Magento\Eav\Model\Config $eavConfig - * @param \Magento\Backend\Model\Session $session - * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productsFactory * @param \Magento\Core\Helper\Context $context * @param \Magento\Core\Helper\Data $coreData - * @param \Magento\Core\Model\ConfigInterface $applicationConfig * @param \Magento\Core\Model\Config\Primary $primaryConfig - * @param \Magento\Core\Model\RouterList $routerList - * @param \Magento\Core\Model\AppInterface $app + * @param \Magento\App\RouterList $routerList + * @param \Magento\Core\Model\App\Proxy $app * @param \Magento\Backend\Model\Url $backendUrl * @param \Magento\Backend\Model\Auth $auth - * @param string $defaultAreaFrontName - * @param string $backendFrontName + * @param \Magento\Backend\App\Area\FrontNameResolver $frontNameResolver + * @param \Magento\Eav\Model\Config $eavConfig + * @param \Magento\Backend\Model\Session $session + * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productsFactory */ public function __construct( - \Magento\Eav\Model\Config $eavConfig, - \Magento\Backend\Model\Session $session, - \Magento\Catalog\Model\Resource\Product\CollectionFactory $productsFactory, \Magento\Core\Helper\Context $context, \Magento\Core\Helper\Data $coreData, - \Magento\Core\Model\ConfigInterface $applicationConfig, \Magento\Core\Model\Config\Primary $primaryConfig, - \Magento\Core\Model\RouterList $routerList, - \Magento\Core\Model\AppInterface $app, + \Magento\App\RouterList $routerList, + \Magento\Core\Model\App\Proxy $app, \Magento\Backend\Model\Url $backendUrl, \Magento\Backend\Model\Auth $auth, - $defaultAreaFrontName, - $backendFrontName + \Magento\Backend\App\Area\FrontNameResolver $frontNameResolver, + \Magento\Eav\Model\Config $eavConfig, + \Magento\Backend\Model\Session $session, + \Magento\Catalog\Model\Resource\Product\CollectionFactory $productsFactory ) { + $this->_eavConfig = $eavConfig; $this->_session = $session; $this->_productsFactory = $productsFactory; parent::__construct( - $context, $coreData, $applicationConfig, $primaryConfig, $routerList, $app, $backendUrl, $auth, - $defaultAreaFrontName, $backendFrontName + $context, $coreData, $primaryConfig, $routerList, $app, $backendUrl, $auth, $frontNameResolver ); } diff --git a/app/code/Magento/Adminhtml/Helper/Dashboard/Data.php b/app/code/Magento/Adminhtml/Helper/Dashboard/Data.php index b04d14555e3..0127d6d008f 100644 --- a/app/code/Magento/Adminhtml/Helper/Dashboard/Data.php +++ b/app/code/Magento/Adminhtml/Helper/Dashboard/Data.php @@ -41,14 +41,14 @@ class Data extends \Magento\Core\Helper\Data /** * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Http $coreHttp * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Locale $locale * @param \Magento\Core\Model\Date $dateModel - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\Encryption $encryptor * @param \Magento\Core\Model\StoreManager $storeManager * @param string $installDate @@ -56,14 +56,14 @@ class Data extends \Magento\Core\Helper\Data */ public function __construct( \Magento\Core\Helper\Context $context, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Http $coreHttp, \Magento\Core\Model\Config $config, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Locale $locale, \Magento\Core\Model\Date $dateModel, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\Encryption $encryptor, $installDate, $dbCompatibleMode = true diff --git a/app/code/Magento/Adminhtml/Helper/Dashboard/Order.php b/app/code/Magento/Adminhtml/Helper/Dashboard/Order.php index ae3322df2b8..7f14046330f 100644 --- a/app/code/Magento/Adminhtml/Helper/Dashboard/Order.php +++ b/app/code/Magento/Adminhtml/Helper/Dashboard/Order.php @@ -38,28 +38,28 @@ class Order extends \Magento\Adminhtml\Helper\Dashboard\AbstractDashboard /** * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Http $coreHttp * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Locale $locale * @param \Magento\Core\Model\Date $dateModel - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\Encryption $encryptor * @param \Magento\Reports\Model\Resource\Order\Collection $orderCollection * @param bool $dbCompatibleMode */ public function __construct( \Magento\Core\Helper\Context $context, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Http $coreHttp, \Magento\Core\Model\Config $config, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Locale $locale, \Magento\Core\Model\Date $dateModel, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\Encryption $encryptor, \Magento\Reports\Model\Resource\Order\Collection $orderCollection, $dbCompatibleMode = true diff --git a/app/code/Magento/Adminhtml/Model/Email/Template.php b/app/code/Magento/Adminhtml/Model/Email/Template.php index cfbf69f2bf1..f192355359c 100644 --- a/app/code/Magento/Adminhtml/Model/Email/Template.php +++ b/app/code/Magento/Adminhtml/Model/Email/Template.php @@ -53,12 +53,12 @@ class Template extends \Magento\Core\Model\Email\Template * @param \Magento\Filesystem $filesystem * @param \Magento\Core\Model\View\Url $viewUrl * @param \Magento\Core\Model\View\FileSystem $viewFileSystem - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\Config $coreConfig * @param \Magento\Core\Model\Email\Template\FilterFactory $emailFilterFactory * @param \Magento\Core\Model\StoreManager $storeManager - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\Email\Template\Config $emailConfig * @param \Magento\Backend\Model\Config\Structure $structure * @param array $data @@ -72,12 +72,12 @@ class Template extends \Magento\Core\Model\Email\Template \Magento\Filesystem $filesystem, \Magento\Core\Model\View\Url $viewUrl, \Magento\Core\Model\View\FileSystem $viewFileSystem, - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\Config $coreConfig, \Magento\Core\Model\Email\Template\FilterFactory $emailFilterFactory, \Magento\Core\Model\StoreManager $storeManager, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Core\Model\Email\Template\Config $emailConfig, \Magento\Backend\Model\Config\Structure $structure, array $data = array() diff --git a/app/code/Magento/Adminhtml/Model/Sales/Order/Create.php b/app/code/Magento/Adminhtml/Model/Sales/Order/Create.php index f05f562ff89..a93ca31f502 100644 --- a/app/code/Magento/Adminhtml/Model/Sales/Order/Create.php +++ b/app/code/Magento/Adminhtml/Model/Sales/Order/Create.php @@ -142,7 +142,7 @@ class Create extends \Magento\Object implements \Magento\Checkout\Model\Cart\Car /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -158,7 +158,7 @@ class Create extends \Magento\Object implements \Magento\Checkout\Model\Cart\Car /** * @param \Magento\ObjectManager $objectManager - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Model\Registry $coreRegistry * @param \Magento\Sales\Model\Config $salesConfig @@ -168,7 +168,7 @@ class Create extends \Magento\Object implements \Magento\Checkout\Model\Cart\Car */ public function __construct( \Magento\ObjectManager $objectManager, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\Core\Model\Registry $coreRegistry, \Magento\Sales\Model\Config $salesConfig, diff --git a/app/code/Magento/Adminhtml/etc/di.xml b/app/code/Magento/Adminhtml/etc/di.xml index bb601f67688..be3a96f2292 100644 --- a/app/code/Magento/Adminhtml/etc/di.xml +++ b/app/code/Magento/Adminhtml/etc/di.xml @@ -29,14 +29,9 @@ <instance type="Magento\Core\Model\Cache\Type\Translate" /> </param> </type> - <type name="Magento\Adminhtml\Model\Sales\Order\Create"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> <type name="Magento\Adminhtml\Helper\Dashboard\Data"> <param name="installDate"> - <value type="argument">Magento\Core\Model\App\State::PARAM_INSTALL_DATE</value> + <value type="argument">Magento\App\State::PARAM_INSTALL_DATE</value> </param> </type> <type name="Magento\Adminhtml\Block\Rating\Edit\Tab\Form"> diff --git a/app/code/Magento/Adminhtml/view/adminhtml/dashboard/index.phtml b/app/code/Magento/Adminhtml/view/adminhtml/dashboard/index.phtml index 54197ca68b3..cd6978a99fa 100644 --- a/app/code/Magento/Adminhtml/view/adminhtml/dashboard/index.phtml +++ b/app/code/Magento/Adminhtml/view/adminhtml/dashboard/index.phtml @@ -98,13 +98,9 @@ function toggleCal(id) { <?php if (is_array($this->getChildBlock('diagrams')->getTabsIds())) : ?> <div id="diagram_tab_content"></div> <?php endif; ?> - <div style="margin:20px;"> - <?php echo $this->getChildHtml('totals') ?> - </div> - <div style="margin:20px;"> - <?php echo $this->getChildHtml('grids') ?> - <div id="grid_tab_content"></div> - </div> + <?php echo $this->getChildHtml('totals') ?> + <?php echo $this->getChildHtml('grids') ?> + <div id="grid_tab_content"></div> </div> </div> <div class="side-col"> diff --git a/app/code/Magento/Adminhtml/view/adminhtml/system/cache/additional.phtml b/app/code/Magento/Adminhtml/view/adminhtml/system/cache/additional.phtml index 0d5133982f2..c96ac544f3a 100644 --- a/app/code/Magento/Adminhtml/view/adminhtml/system/cache/additional.phtml +++ b/app/code/Magento/Adminhtml/view/adminhtml/system/cache/additional.phtml @@ -24,7 +24,7 @@ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ ?> -<div class="fieldset"> +<div class="fieldset additional-cache-management"> <div class="legend"> <span><?php echo __('Additional Cache Management') ?></span> </div> @@ -32,13 +32,13 @@ <button onclick="setLocation('<?php echo $this->getCleanImagesUrl()?>')" type="button"> <?php echo __('Flush Catalog Images Cache') ?> </button> - <span class="label"><?php echo __('Pregenerated product images files')?></span> + <label class="label"><?php echo __('Pregenerated product images files')?></label> </div> <div class="field"> <button onclick="setLocation('<?php echo $this->getCleanMediaUrl()?>')" type="button"> <?php echo __('Flush JavaScript/CSS Cache') ?> </button> - <span class="label"><?php echo __('Themes JavaScript and CSS files combined to one file.')?></span> + <label class="label"><?php echo __('Themes JavaScript and CSS files combined to one file.')?></label> </div> <?php echo $this->getChildHtml(); ?> </div> diff --git a/app/code/Magento/Authorizenet/Model/Directpost.php b/app/code/Magento/Authorizenet/Model/Directpost.php index b855e4f7958..76b9b4b57a9 100644 --- a/app/code/Magento/Authorizenet/Model/Directpost.php +++ b/app/code/Magento/Authorizenet/Model/Directpost.php @@ -82,9 +82,9 @@ class Directpost extends \Magento\Paygate\Model\Authorizenet * @param \Magento\Sales\Model\OrderFactory $orderFactory * @param \Magento\Core\Model\Session\AbstractSession $session * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Paygate\Helper\Data $paygateData - * @param \Magento\Core\Model\ModuleListInterface $moduleList + * @param \Magento\App\ModuleListInterface $moduleList * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory @@ -104,9 +104,9 @@ class Directpost extends \Magento\Paygate\Model\Authorizenet \Magento\Sales\Model\OrderFactory $orderFactory, \Magento\Core\Model\Session\AbstractSession $session, \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Paygate\Helper\Data $paygateData, - \Magento\Core\Model\ModuleListInterface $moduleList, + \Magento\App\ModuleListInterface $moduleList, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, diff --git a/app/code/Magento/Backend/App/Area/FrontNameResolver.php b/app/code/Magento/Backend/App/Area/FrontNameResolver.php new file mode 100644 index 00000000000..85dd32d939e --- /dev/null +++ b/app/code/Magento/Backend/App/Area/FrontNameResolver.php @@ -0,0 +1,66 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Backend\App\Area; + +class FrontNameResolver implements \Magento\App\Area\FrontNameResolverInterface +{ + const XML_PATH_USE_CUSTOM_ADMIN_PATH = 'admin/url/use_custom_path'; + const XML_PATH_CUSTOM_ADMIN_PATH = 'admin/url/custom_path'; + + const PARAM_BACKEND_FRONT_NAME = 'backend.frontName'; + + /** + * @var string + */ + protected $_defaultFrontName; + + /** + * @var \Magento\Core\Model\ConfigInterface + */ + protected $_config; + + /** + * @param \Magento\Core\Model\ConfigInterface $config + * @param string $defaultFrontName + */ + public function __construct(\Magento\Core\Model\ConfigInterface $config, $defaultFrontName) + { + $this->_config = $config; + $this->_defaultFrontName = $defaultFrontName; + } + + /** + * Retrieve area front name + * + * @return string + */ + public function getFrontName() + { + $isCustomPathUsed = (bool)(string)$this->_config->getValue(self::XML_PATH_USE_CUSTOM_ADMIN_PATH, 'default'); + if ($isCustomPathUsed) { + return (string)$this->_config->getValue(self::XML_PATH_CUSTOM_ADMIN_PATH, 'default'); + } + return $this->_defaultFrontName; + } +} \ No newline at end of file diff --git a/app/code/Magento/Backend/App/Request/PathInfoProcessor.php b/app/code/Magento/Backend/App/Request/PathInfoProcessor.php new file mode 100644 index 00000000000..e88af14ad33 --- /dev/null +++ b/app/code/Magento/Backend/App/Request/PathInfoProcessor.php @@ -0,0 +1,65 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Backend\App\Request; + +class PathInfoProcessor implements \Magento\App\Request\PathInfoProcessorInterface +{ + /** + * @var \Magento\Backend\Helper\Data + */ + private $_helper; + /** + * @var \Magento\Core\App\Request\PathInfoProcessor + */ + private $_subject; + + /** + * @param \Magento\Core\App\Request\PathInfoProcessor $subject + * @param \Magento\Backend\Helper\Data $helper + */ + public function __construct( + \Magento\Core\App\Request\PathInfoProcessor $subject, \Magento\Backend\Helper\Data $helper + ) { + $this->_helper = $helper; + $this->_subject = $subject; + } + + /** + * Process path info + * + * @param \Magento\App\RequestInterface $request + * @param string $pathInfo + * @return string + */ + public function process(\Magento\App\RequestInterface $request, $pathInfo) + { + $pathParts = explode('/', ltrim($pathInfo, '/'), 2); + $storeCode = $pathParts[0]; + + if ($storeCode != $this->_helper->getAreaFrontName()) { + return $this->_subject->process($request, $pathInfo); + } + return $pathInfo; + } +} \ No newline at end of file diff --git a/app/code/Magento/Backend/Model/Router/NoRouteHandler.php b/app/code/Magento/Backend/App/Router/NoRouteHandler.php similarity index 87% rename from app/code/Magento/Backend/Model/Router/NoRouteHandler.php rename to app/code/Magento/Backend/App/Router/NoRouteHandler.php index 9e645c1895c..da35e1856de 100644 --- a/app/code/Magento/Backend/Model/Router/NoRouteHandler.php +++ b/app/code/Magento/Backend/App/Router/NoRouteHandler.php @@ -24,9 +24,9 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ -namespace Magento\Backend\Model\Router; +namespace Magento\Backend\App\Router; -class NoRouteHandler implements \Magento\Core\Model\Router\NoRouteHandlerInterface +class NoRouteHandler implements \Magento\Appl\Router\NoRouteHandlerInterface { /** * @var \Magento\Backend\Helper\Data @@ -44,10 +44,10 @@ class NoRouteHandler implements \Magento\Core\Model\Router\NoRouteHandlerInterfa /** * Check and process no route request * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @return bool */ - public function process(\Magento\Core\Controller\Request\Http $request) + public function process(\Magento\App\RequestInterface $request) { $requestPathParams = explode('/', trim($request->getPathInfo(), '/')); $areaFrontName = array_shift($requestPathParams); diff --git a/app/code/Magento/Backend/Block/Context.php b/app/code/Magento/Backend/Block/Context.php index 54b975a2e6f..c7213a9dddd 100644 --- a/app/code/Magento/Backend/Block/Context.php +++ b/app/code/Magento/Backend/Block/Context.php @@ -36,41 +36,41 @@ class Context extends \Magento\Core\Block\Context protected $_authorization; /** - * @param \Magento\Core\Controller\Request\Http $request - * @param \Magento\Core\Model\Layout $layout - * @param \Magento\Core\Model\Event\Manager $eventManager - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\App\RequestInterface $request + * @param \Magento\View\LayoutInterface $layout + * @param \Magento\Event\ManagerInterface $eventManager + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Core\Model\Translate $translator * @param \Magento\Core\Model\CacheInterface $cache - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Model\Session\AbstractSession $session * @param \Magento\Core\Model\Store\Config $storeConfig - * @param \Magento\Core\Controller\Varien\Front $frontController + * @param \Magento\App\FrontController $frontController * @param \Magento\Core\Model\Factory\Helper $helperFactory * @param \Magento\Core\Model\View\Url $viewUrl - * @param \Magento\Core\Model\View\Config $viewConfig + * @param \Magento\View\ConfigInterface $viewConfig * @param \Magento\Core\Model\Cache\StateInterface $cacheState * @param \Magento\AuthorizationInterface $authorization * @param \Magento\Core\Model\Logger $logger * @param \Magento\Core\Model\App $app * @param array $data - * + * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Controller\Request\Http $request, - \Magento\Core\Model\Layout $layout, - \Magento\Core\Model\Event\Manager $eventManager, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\App\RequestInterface $request, + \Magento\View\LayoutInterface $layout, + \Magento\Event\ManagerInterface $eventManager, + \Magento\UrlInterface $urlBuilder, \Magento\Core\Model\Translate $translator, \Magento\Core\Model\CacheInterface $cache, - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Model\Session\AbstractSession $session, \Magento\Core\Model\Store\Config $storeConfig, - \Magento\Core\Controller\Varien\Front $frontController, + \Magento\App\FrontController $frontController, \Magento\Core\Model\Factory\Helper $helperFactory, \Magento\Core\Model\View\Url $viewUrl, - \Magento\Core\Model\View\Config $viewConfig, + \Magento\View\ConfigInterface $viewConfig, \Magento\Core\Model\Cache\StateInterface $cacheState, \Magento\AuthorizationInterface $authorization, \Magento\Core\Model\Logger $logger, 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 ae4748fe9fe..4eadf3c9e92 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 @@ -70,11 +70,9 @@ class Regexceptions { $this->addColumn('search', array( 'label' => __('Search String'), - 'style' => 'width:120px', )); $this->addColumn('value', array( 'label' => __('Design Theme'), - 'style' => 'width:120px', )); $this->_addAfter = false; $this->_addButtonLabel = __('Add \Exception'); diff --git a/app/code/Magento/Backend/Block/System/Config/Form/Fieldset/Modules/DisableOutput.php b/app/code/Magento/Backend/Block/System/Config/Form/Fieldset/Modules/DisableOutput.php index 4c69ee8edf6..923206ff93b 100644 --- a/app/code/Magento/Backend/Block/System/Config/Form/Fieldset/Modules/DisableOutput.php +++ b/app/code/Magento/Backend/Block/System/Config/Form/Fieldset/Modules/DisableOutput.php @@ -49,20 +49,20 @@ class DisableOutput protected $_values; /** - * @var \Magento\Core\Model\ModuleListInterface + * @var \Magento\App\ModuleListInterface */ protected $_moduleList; /** * @param \Magento\Backend\Block\Context $context * @param \Magento\Backend\Model\Auth\Session $authSession - * @param \Magento\Core\Model\ModuleListInterface $moduleList + * @param \Magento\App\ModuleListInterface $moduleList * @param array $data */ public function __construct( \Magento\Backend\Block\Context $context, \Magento\Backend\Model\Auth\Session $authSession, - \Magento\Core\Model\ModuleListInterface $moduleList, + \Magento\App\ModuleListInterface $moduleList, array $data = array() ) { parent::__construct($context, $authSession, $data); diff --git a/app/code/Magento/Backend/Block/Template/Context.php b/app/code/Magento/Backend/Block/Template/Context.php index b861608abc6..def099d23b2 100644 --- a/app/code/Magento/Backend/Block/Template/Context.php +++ b/app/code/Magento/Backend/Block/Template/Context.php @@ -47,53 +47,53 @@ class Context extends \Magento\Core\Block\Template\Context /** * @param \Magento\Core\Model\StoreManager $storeManager - * @param \Magento\Core\Controller\Request\Http $request - * @param \Magento\Core\Model\Layout $layout - * @param \Magento\Core\Model\Event\Manager $eventManager - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\App\RequestInterface $request + * @param \Magento\View\LayoutInterface $layout + * @param \Magento\Event\ManagerInterface $eventManager + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Core\Model\Translate $translator * @param \Magento\Core\Model\CacheInterface $cache - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Model\Session $session * @param \Magento\Core\Model\Store\Config $storeConfig - * @param \Magento\Core\Controller\Varien\Front $frontController + * @param \Magento\App\FrontController $frontController * @param \Magento\Core\Model\Factory\Helper $helperFactory * @param \Magento\Core\Model\View\Url $viewUrl - * @param \Magento\Core\Model\View\Config $viewConfig + * @param \Magento\View\ConfigInterface $viewConfig * @param \Magento\Core\Model\Cache\StateInterface $cacheState - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param \Magento\Core\Model\Logger $logger * @param \Magento\Filesystem $filesystem * @param \Magento\Core\Model\View\FileSystem $viewFileSystem - * @param \Magento\Core\Model\TemplateEngine\Factory $engineFactory + * @param \Magento\Core\Model\TemplateEngine\Pool $enginePool * @param \Magento\AuthorizationInterface $authorization * @param \Magento\Core\Model\App $app * @param \Magento\Backend\Model\Session $backendSession * @param \Magento\Core\Model\LocaleInterface $locale - * + * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Core\Model\StoreManager $storeManager, - \Magento\Core\Controller\Request\Http $request, - \Magento\Core\Model\Layout $layout, - \Magento\Core\Model\Event\Manager $eventManager, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\App\RequestInterface $request, + \Magento\View\LayoutInterface $layout, + \Magento\Event\ManagerInterface $eventManager, + \Magento\UrlInterface $urlBuilder, \Magento\Core\Model\Translate $translator, \Magento\Core\Model\CacheInterface $cache, - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Model\Session $session, \Magento\Core\Model\Store\Config $storeConfig, - \Magento\Core\Controller\Varien\Front $frontController, + \Magento\App\FrontController $frontController, \Magento\Core\Model\Factory\Helper $helperFactory, \Magento\Core\Model\View\Url $viewUrl, - \Magento\Core\Model\View\Config $viewConfig, + \Magento\View\ConfigInterface $viewConfig, \Magento\Core\Model\Cache\StateInterface $cacheState, - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, \Magento\Core\Model\Logger $logger, \Magento\Filesystem $filesystem, \Magento\Core\Model\View\FileSystem $viewFileSystem, - \Magento\Core\Model\TemplateEngine\Factory $engineFactory, + \Magento\Core\Model\TemplateEngine\Pool $enginePool, \Magento\AuthorizationInterface $authorization, \Magento\Core\Model\App $app, \Magento\Backend\Model\Session $backendSession, @@ -102,7 +102,7 @@ class Context extends \Magento\Core\Block\Template\Context parent::__construct( $request, $layout, $eventManager, $urlBuilder, $translator, $cache, $design, $session, $storeConfig, $frontController, $helperFactory, $viewUrl, $viewConfig, $cacheState, - $dirs, $logger, $filesystem, $viewFileSystem, $engineFactory, $app + $dirs, $logger, $filesystem, $viewFileSystem, $enginePool, $app ); $this->_storeManager = $storeManager; $this->_authorization = $authorization; @@ -123,7 +123,7 @@ class Context extends \Magento\Core\Block\Template\Context /** * Retrieve Authorization * - * @return \\Magento\AuthorizationInterface + * @return \Magento\AuthorizationInterface */ public function getAuthorization() { diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/Currency.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/Currency.php index e4a1dff97c7..6ffbd69dcc4 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/Currency.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/Currency.php @@ -49,7 +49,7 @@ class Currency * * @var \Magento\Core\Model\App */ - protected $_app; + protected $_storeManager; /** * Locale @@ -65,20 +65,20 @@ class Currency /** * @param \Magento\Backend\Block\Context $context - * @param \Magento\Core\Model\App $app + * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Model\LocaleInterface $locale * @param \Magento\Directory\Model\Currency\DefaultLocator $currencyLocator * @param array $data */ public function __construct( \Magento\Backend\Block\Context $context, - \Magento\Core\Model\App $app, + \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Core\Model\LocaleInterface $locale, \Magento\Directory\Model\Currency\DefaultLocator $currencyLocator, array $data = array() ) { parent::__construct($context, $data); - $this->_app = $app; + $this->_storeManager = $storeManager; $this->_locale = $locale; $this->_currencyLocator = $currencyLocator; } @@ -135,7 +135,7 @@ class Currency if ($rate = $row->getData($this->getColumn()->getRateField())) { return floatval($rate); } - return $this->_app->getStore()->getBaseCurrency()->getRate($this->_getCurrencyCode($row)); + return $this->_storeManager->getStore()->getBaseCurrency()->getRate($this->_getCurrencyCode($row)); } /** diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Export.php b/app/code/Magento/Backend/Block/Widget/Grid/Export.php index 775a8ebb43a..67bf75f7c95 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Export.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Export.php @@ -91,7 +91,7 @@ class Export $this->addExportType($type['urlPath'], $type['label']); } } - $this->_exportPath = $this->_dirs->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . 'export'; + $this->_exportPath = $this->_dirs->getDir(\Magento\App\Dir::VAR_DIR) . DS . 'export'; } /** diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Extended.php b/app/code/Magento/Backend/Block/Widget/Grid/Extended.php index cd5a644fbdb..72bdd253523 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Extended.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Extended.php @@ -184,7 +184,7 @@ class Extended { parent::_construct(); $this->_emptyText = __('We couldn\'t find any records.'); - $this->_exportPath = $this->_dirs->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . 'export'; + $this->_exportPath = $this->_dirs->getDir(\Magento\App\Dir::VAR_DIR) . DS . 'export'; } /** diff --git a/app/code/Magento/Backend/Controller/AbstractAction.php b/app/code/Magento/Backend/Controller/AbstractAction.php index c7503740b8e..a0f745f5175 100644 --- a/app/code/Magento/Backend/Controller/AbstractAction.php +++ b/app/code/Magento/Backend/Controller/AbstractAction.php @@ -349,9 +349,9 @@ abstract class AbstractAction extends \Magento\Core\Controller\Varien\Action /** * Process not logged in user data * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request */ - protected function _processNotLoggedInUser(\Magento\Core\Controller\Request\Http $request) + protected function _processNotLoggedInUser(\Magento\App\RequestInterface $request) { $isRedirectNeeded = false; if ($request->getPost('login') && $this->_performLogin()) { diff --git a/app/code/Magento/Backend/Controller/Context.php b/app/code/Magento/Backend/Controller/Context.php index cbc37f128b3..d3218cad9d0 100644 --- a/app/code/Magento/Backend/Controller/Context.php +++ b/app/code/Magento/Backend/Controller/Context.php @@ -70,13 +70,13 @@ class Context extends \Magento\Core\Controller\Varien\Action\Context /** * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Controller\Request\Http $request - * @param \Magento\Core\Controller\Response\Http $response + * @param \Magento\App\RequestInterface $request + * @param \Magento\App\ResponseInterface $response * @param \Magento\ObjectManager $objectManager - * @param \Magento\Core\Controller\Varien\Front $frontController - * @param \Magento\Core\Model\Layout $layout - * @param \Magento\Core\Model\Event\Manager $eventManager - * @param bool $isRenderInherited + * @param \Magento\App\FrontController $frontController + * @param \Magento\View\LayoutInterface $layout + * @param \Magento\Event\ManagerInterface $eventManager + * @param $isRenderInherited * @param \Magento\Backend\Model\Session $session * @param \Magento\Backend\Helper\Data $helper * @param \Magento\AuthorizationInterface $authorization @@ -84,17 +84,17 @@ class Context extends \Magento\Core\Controller\Varien\Action\Context * @param \Magento\Backend\Model\Auth $auth * @param \Magento\Backend\Model\Url $backendUrl * @param \Magento\Core\Model\LocaleInterface $locale - * + * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Core\Model\Logger $logger, - \Magento\Core\Controller\Request\Http $request, - \Magento\Core\Controller\Response\Http $response, + \Magento\App\RequestInterface $request, + \Magento\App\ResponseInterface $response, \Magento\ObjectManager $objectManager, - \Magento\Core\Controller\Varien\Front $frontController, - \Magento\Core\Model\Layout $layout, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\App\FrontController $frontController, + \Magento\View\LayoutInterface $layout, + \Magento\Event\ManagerInterface $eventManager, $isRenderInherited, \Magento\Backend\Model\Session $session, \Magento\Backend\Helper\Data $helper, diff --git a/app/code/Magento/Backend/Controller/Factory.php b/app/code/Magento/Backend/Controller/Factory.php index d72ceccd66e..18aecc8d4db 100644 --- a/app/code/Magento/Backend/Controller/Factory.php +++ b/app/code/Magento/Backend/Controller/Factory.php @@ -33,7 +33,7 @@ */ namespace Magento\Backend\Controller; -class Factory extends \Magento\Core\Controller\Varien\Action\Factory +class Factory extends \Magento\App\ActionFactory { /** * @param string $controllerName diff --git a/app/code/Magento/Backend/Controller/Router/DefaultRouter.php b/app/code/Magento/Backend/Controller/Router/DefaultRouter.php index 105fced1d4c..a5a5a2ba2a4 100644 --- a/app/code/Magento/Backend/Controller/Router/DefaultRouter.php +++ b/app/code/Magento/Backend/Controller/Router/DefaultRouter.php @@ -68,7 +68,7 @@ class DefaultRouter extends \Magento\Core\Controller\Varien\Router\Base protected $_defaultRouteId; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; @@ -84,18 +84,17 @@ class DefaultRouter extends \Magento\Core\Controller\Varien\Router\Base /** * @param \Magento\Backend\Helper\Data $backendData - * @param \Magento\Core\Controller\Varien\Action\Factory $controllerFactory + * @param \Magento\App\ActionFactory $controllerFactory * @param \Magento\Filesystem $filesystem * @param \Magento\Core\Model\App $app - * @param \Magento\Core\Model\App\State $appState - * @param \Magento\Core\Model\Config\Scope $configScope + * @param \Magento\App\State $appState * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\Route\Config $routeConfig * @param \Magento\Core\Model\Url\SecurityInfoInterface $securityInfo * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Model\Url $url - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param $areaCode * @param $baseController * @param $routerId @@ -107,18 +106,17 @@ class DefaultRouter extends \Magento\Core\Controller\Varien\Router\Base */ public function __construct( \Magento\Backend\Helper\Data $backendData, - \Magento\Core\Controller\Varien\Action\Factory $controllerFactory, + \Magento\App\ActionFactory $controllerFactory, \Magento\Filesystem $filesystem, \Magento\Core\Model\App $app, - \Magento\Core\Model\App\State $appState, - \Magento\Core\Model\Config\Scope $configScope, + \Magento\App\State $appState, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\Route\Config $routeConfig, \Magento\Core\Model\Url\SecurityInfoInterface $securityInfo, \Magento\Core\Model\Config $config, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Core\Model\Url $url, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, $areaCode, $baseController, $routerId, @@ -128,7 +126,6 @@ class DefaultRouter extends \Magento\Core\Controller\Varien\Router\Base $controllerFactory, $filesystem, $app, - $configScope, $coreStoreConfig, $routeConfig, $securityInfo, @@ -147,9 +144,6 @@ class DefaultRouter extends \Magento\Core\Controller\Varien\Router\Base $this->_url = $url; $this->_areaFrontName = $this->_backendData->getAreaFrontName(); $this->_defaultRouteId = $defaultRouteId; - if (empty($this->_areaFrontName)) { - throw new \InvalidArgumentException('Area Front Name should be defined'); - } } /** @@ -250,7 +244,7 @@ class DefaultRouter extends \Magento\Core\Controller\Varien\Router\Base /** * Retrieve current secure url * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @return string */ protected function _getCurrentSecureUrl($request) diff --git a/app/code/Magento/Backend/Helper/Data.php b/app/code/Magento/Backend/Helper/Data.php index b15851ab5ac..58c66c98540 100644 --- a/app/code/Magento/Backend/Helper/Data.php +++ b/app/code/Magento/Backend/Helper/Data.php @@ -32,38 +32,17 @@ namespace Magento\Backend\Helper; class Data extends \Magento\Core\Helper\AbstractHelper { const XML_PATH_USE_CUSTOM_ADMIN_URL = 'admin/url/use_custom'; - const XML_PATH_USE_CUSTOM_ADMIN_PATH = 'admin/url/use_custom_path'; - const XML_PATH_CUSTOM_ADMIN_PATH = 'admin/url/custom_path'; - const XML_PATH_BACKEND_AREA_FRONTNAME = 'default/backend/frontName'; const BACKEND_AREA_CODE = 'adminhtml'; - const PARAM_BACKEND_FRONT_NAME = 'backend.frontName'; - protected $_pageHelpUrl; - /** - * @var \Magento\Core\Model\ConfigInterface - */ - protected $_config; - /** * @var \Magento\Core\Model\Config\Primary */ protected $_primaryConfig; /** - * @var string - */ - protected $_defaultAreaFrontName; - - /** - * Area front name - * @var string - */ - protected $_areaFrontName = null; - - /** - * @var \Magento\Core\Model\RouterList + * @var \Magento\App\RouterList */ protected $_routerList; @@ -75,7 +54,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper protected $_coreData = null; /** - * @var \Magento\Core\Model\AppInterface + * @var \Magento\Core\Model\App */ protected $_app; @@ -90,48 +69,38 @@ class Data extends \Magento\Core\Helper\AbstractHelper protected $_auth; /** - * Backend area front name - * - * @var string + * @var \Magento\Backend\App\Area\FrontNameResolver */ - protected $_backendFrontName; + protected $_frontNameResolver; /** * @param \Magento\Core\Helper\Context $context * @param \Magento\Core\Helper\Data $coreData - * @param \Magento\Core\Model\ConfigInterface $applicationConfig * @param \Magento\Core\Model\Config\Primary $primaryConfig - * @param \Magento\Core\Model\RouterList $routerList - * @param \Magento\Core\Model\AppInterface $app + * @param \Magento\App\RouterList $routerList + * @param \Magento\Core\Model\App $app * @param \Magento\Backend\Model\Url $backendUrl * @param \Magento\Backend\Model\Auth $auth - * @param string $defaultAreaFrontName - * @param string $backendFrontName - * - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @param \Magento\Backend\App\Area\FrontNameResolver $frontNameResolver */ public function __construct( \Magento\Core\Helper\Context $context, \Magento\Core\Helper\Data $coreData, - \Magento\Core\Model\ConfigInterface $applicationConfig, \Magento\Core\Model\Config\Primary $primaryConfig, - \Magento\Core\Model\RouterList $routerList, - \Magento\Core\Model\AppInterface $app, + \Magento\App\RouterList $routerList, + \Magento\Core\Model\App $app, \Magento\Backend\Model\Url $backendUrl, \Magento\Backend\Model\Auth $auth, - $defaultAreaFrontName, - $backendFrontName + \Magento\Backend\App\Area\FrontNameResolver $frontNameResolver ) { parent::__construct($context); $this->_coreData = $coreData; - $this->_config = $applicationConfig; $this->_primaryConfig = $primaryConfig; - $this->_defaultAreaFrontName = $defaultAreaFrontName; $this->_routerList = $routerList; $this->_app = $app; $this->_backendUrl = $backendUrl; $this->_auth = $auth; - $this->_backendFrontName = $backendFrontName; + $this->_frontNameResolver = $frontNameResolver; } public function getPageHelpUrl() @@ -252,28 +221,6 @@ class Data extends \Magento\Core\Helper\AbstractHelper */ public function getAreaFrontName() { - if (null === $this->_areaFrontName) { - $isCustomPathUsed = (bool)(string)$this->_config->getValue(self::XML_PATH_USE_CUSTOM_ADMIN_PATH, 'default'); - - if ($isCustomPathUsed) { - $this->_areaFrontName = (string)$this->_config->getValue(self::XML_PATH_CUSTOM_ADMIN_PATH, 'default'); - } elseif ($this->_backendFrontName) { - $this->_areaFrontName = $this->_backendFrontName; - } else { - $this->_areaFrontName = $this->_defaultAreaFrontName; - } - } - return $this->_areaFrontName; - } - - /** - * Invalidate cache of area front name - * - * @return \Magento\Backend\Helper\Data - */ - public function clearAreaFrontName() - { - $this->_areaFrontName = null; - return $this; + return $this->_frontNameResolver->getFrontName(); } } diff --git a/app/code/Magento/Backend/Model/Auth.php b/app/code/Magento/Backend/Model/Auth.php index 999e98fdf31..795b7a4092d 100644 --- a/app/code/Magento/Backend/Model/Auth.php +++ b/app/code/Magento/Backend/Model/Auth.php @@ -51,7 +51,7 @@ class Auth /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -66,7 +66,7 @@ class Auth protected $_modelFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Backend\Helper\Data $backendData * @param \Magento\Backend\Model\Auth\StorageInterface $authStorage * @param \Magento\Backend\Model\Auth\Credential\StorageInterface $credentialStorage @@ -74,7 +74,7 @@ class Auth * @param \Magento\Core\Model\Factory $modelFactory */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Backend\Helper\Data $backendData, \Magento\Backend\Model\Auth\StorageInterface $authStorage, \Magento\Backend\Model\Auth\Credential\StorageInterface $credentialStorage, @@ -131,21 +131,11 @@ class Auth * Initialize credential storage from configuration * * @return void - * @throw \Magento\Backend\Model\Auth\Exception if credential storage absent or has not correct configuration */ protected function _initCredentialStorage() { - $areaConfig = $this->_coreConfig->getAreaConfig($this->_backendData->getAreaCode()); - - if (isset($areaConfig['auth_credential_storage'])) { - $storage = $this->_modelFactory->create($areaConfig['auth_credential_storage']); - if ($storage instanceof \Magento\Backend\Model\Auth\Credential\StorageInterface) { - $this->_credentialStorage = $storage; - return; - } - } - self::throwException( - __('There are no authentication credential storage.') + $this->_credentialStorage = $this->_modelFactory->create( + 'Magento\Backend\Model\Auth\Credential\StorageInterface' ); } diff --git a/app/code/Magento/Backend/Model/Config.php b/app/code/Magento/Backend/Model/Config.php index 6f7ad29e737..dde68d58c08 100644 --- a/app/code/Magento/Backend/Model/Config.php +++ b/app/code/Magento/Backend/Model/Config.php @@ -47,7 +47,7 @@ class Config extends \Magento\Object /** * Event dispatcher * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -108,7 +108,7 @@ class Config extends \Magento\Object /** * @param \Magento\Core\Model\App $application * @param \Magento\Core\Model\Config $config - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Backend\Model\Config\Structure $configStructure * @param \Magento\Core\Model\Resource\TransactionFactory $transactionFactory * @param \Magento\Backend\Model\Config\Loader $configLoader @@ -119,7 +119,7 @@ class Config extends \Magento\Object public function __construct( \Magento\Core\Model\App $application, \Magento\Core\Model\Config $config, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Backend\Model\Config\Structure $configStructure, \Magento\Core\Model\Resource\TransactionFactory $transactionFactory, \Magento\Backend\Model\Config\Loader $configLoader, diff --git a/app/code/Magento/Backend/Model/Config/Backend/Admin/Custompath.php b/app/code/Magento/Backend/Model/Config/Backend/Admin/Custompath.php index 729dbe6d887..72f7107ac47 100644 --- a/app/code/Magento/Backend/Model/Config/Backend/Admin/Custompath.php +++ b/app/code/Magento/Backend/Model/Config/Backend/Admin/Custompath.php @@ -35,37 +35,6 @@ namespace Magento\Backend\Model\Config\Backend\Admin; class Custompath extends \Magento\Core\Model\Config\Value { - /** - * Backend data - * - * @var \Magento\Backend\Helper\Data - */ - protected $_backendData = null; - - /** - * @param \Magento\Backend\Helper\Data $backendData - * @param \Magento\Core\Model\Context $context - * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\StoreManager $storeManager - * @param \Magento\Core\Model\Config $config - * @param \Magento\Core\Model\Resource\AbstractResource $resource - * @param \Magento\Data\Collection\Db $resourceCollection - * @param array $data - */ - public function __construct( - \Magento\Backend\Helper\Data $backendData, - \Magento\Core\Model\Context $context, - \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\StoreManager $storeManager, - \Magento\Core\Model\Config $config, - \Magento\Core\Model\Resource\AbstractResource $resource = null, - \Magento\Data\Collection\Db $resourceCollection = null, - array $data = array() - ) { - $this->_backendData = $backendData; - parent::__construct($context, $registry, $storeManager, $config, $resource, $resourceCollection, $data); - } - /** * Check whether redirect should be set * @@ -74,7 +43,6 @@ class Custompath extends \Magento\Core\Model\Config\Value protected function _beforeSave() { if ($this->getOldValue() != $this->getValue()) { - $this->_backendData->clearAreaFrontName(); $this->_coreRegistry->register('custom_admin_path_redirect', true, true); } return $this; diff --git a/app/code/Magento/Backend/Model/Config/Backend/Admin/Robots.php b/app/code/Magento/Backend/Model/Config/Backend/Admin/Robots.php index ad83d0ad79d..1da5b648850 100644 --- a/app/code/Magento/Backend/Model/Config/Backend/Admin/Robots.php +++ b/app/code/Magento/Backend/Model/Config/Backend/Admin/Robots.php @@ -47,7 +47,7 @@ class Robots extends \Magento\Core\Model\Config\Value * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Config $config * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param \Magento\Data\Collection\Db $resourceCollection * @param array $data @@ -58,7 +58,7 @@ class Robots extends \Magento\Core\Model\Config\Value \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Config $config, \Magento\Filesystem $filesystem, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Core\Model\Resource\AbstractResource $resource = null, \Magento\Data\Collection\Db $resourceCollection = null, array $data = array() @@ -73,7 +73,7 @@ class Robots extends \Magento\Core\Model\Config\Value $data ); $this->_filesystem = $filesystem; - $this->_filePath = $dir->getDir(\Magento\Core\Model\Dir::ROOT) . '/robots.txt'; + $this->_filePath = $dir->getDir(\Magento\App\Dir::ROOT) . '/robots.txt'; } /** diff --git a/app/code/Magento/Backend/Model/Config/Backend/Admin/Usecustompath.php b/app/code/Magento/Backend/Model/Config/Backend/Admin/Usecustompath.php deleted file mode 100644 index cf10a3ce679..00000000000 --- a/app/code/Magento/Backend/Model/Config/Backend/Admin/Usecustompath.php +++ /dev/null @@ -1,84 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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_Backend - * @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) - */ - - -/** - * Config backend model for "Use Custom Admin Path" option - * - * @category Magento - * @package Magento_Backend - * @author Magento Core Team <core@magentocommerce.com> - */ -namespace Magento\Backend\Model\Config\Backend\Admin; - -class Usecustompath extends \Magento\Core\Model\Config\Value -{ - /** - * Backend data - * - * @var \Magento\Backend\Helper\Data - */ - protected $_backendData = null; - - /** - * @param \Magento\Backend\Helper\Data $backendData - * @param \Magento\Core\Model\Context $context - * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\StoreManager $storeManager - * @param \Magento\Core\Model\Config $config - * @param \Magento\Core\Model\Resource\AbstractResource $resource - * @param \Magento\Data\Collection\Db $resourceCollection - * @param array $data - */ - public function __construct( - \Magento\Backend\Helper\Data $backendData, - \Magento\Core\Model\Context $context, - \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\StoreManager $storeManager, - \Magento\Core\Model\Config $config, - \Magento\Core\Model\Resource\AbstractResource $resource = null, - \Magento\Data\Collection\Db $resourceCollection = null, - array $data = array() - ) { - $this->_backendData = $backendData; - parent::__construct($context, $registry, $storeManager, $config, $resource, $resourceCollection, $data); - } - - /** - * Check whether redirect should be set - * - * @return \Magento\Backend\Model\Config\Backend\Admin\Usecustompath - */ - protected function _beforeSave() - { - if ($this->getOldValue() != $this->getValue()) { - $this->_backendData->clearAreaFrontName(); - $this->_coreRegistry->register('custom_admin_path_redirect', true, true); - } - - return $this; - } -} diff --git a/app/code/Magento/Backend/Model/Config/Backend/File.php b/app/code/Magento/Backend/Model/Config/Backend/File.php index b345145672c..0c09afff08b 100644 --- a/app/code/Magento/Backend/Model/Config/Backend/File.php +++ b/app/code/Magento/Backend/Model/Config/Backend/File.php @@ -56,7 +56,7 @@ class File extends \Magento\Core\Model\Config\Value protected $_uploaderFactory; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -68,7 +68,7 @@ class File extends \Magento\Core\Model\Config\Value * @param \Magento\Core\Model\Config $config * @param \Magento\Backend\Model\Config\Backend\File\RequestData\RequestDataInterface $requestData * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param \Magento\Data\Collection\Db $resourceCollection * @param array $data @@ -83,7 +83,7 @@ class File extends \Magento\Core\Model\Config\Value \Magento\Core\Model\Config $config, \Magento\Backend\Model\Config\Backend\File\RequestData\RequestDataInterface $requestData, \Magento\Filesystem $filesystem, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Core\Model\Resource\AbstractResource $resource = null, \Magento\Data\Collection\Db $resourceCollection = null, array $data = array() @@ -216,7 +216,7 @@ class File extends \Magento\Core\Model\Config\Value */ protected function _getUploadRoot($token) { - return $this->_dir->getDir(\Magento\Core\Model\Dir::MEDIA); + return $this->_dir->getDir(\Magento\App\Dir::MEDIA); } /** diff --git a/app/code/Magento/Backend/Model/Config/ScopeDefiner.php b/app/code/Magento/Backend/Model/Config/ScopeDefiner.php index 464576a9778..c723557ea6c 100644 --- a/app/code/Magento/Backend/Model/Config/ScopeDefiner.php +++ b/app/code/Magento/Backend/Model/Config/ScopeDefiner.php @@ -38,14 +38,14 @@ class ScopeDefiner /** * Request object * - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; /** - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request */ - public function __construct(\Magento\Core\Controller\Request\Http $request) + public function __construct(\Magento\App\RequestInterface $request) { $this->_request = $request; } diff --git a/app/code/Magento/Backend/Model/Locale.php b/app/code/Magento/Backend/Model/Locale.php index d8188c18fdb..c96f676f0d4 100644 --- a/app/code/Magento/Backend/Model/Locale.php +++ b/app/code/Magento/Backend/Model/Locale.php @@ -44,7 +44,7 @@ class Locale extends \Magento\Core\Model\Locale protected $_localeManager; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; @@ -54,14 +54,14 @@ class Locale extends \Magento\Core\Model\Locale protected $_localeValidator; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Backend\Model\Session $session * @param \Magento\Backend\Model\Locale\Manager $localeManager - * @param \Magento\Core\Controller\Request\Http $request + * @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\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Locale\Config $config * @param \Magento\Core\Model\App $app @@ -70,14 +70,14 @@ class Locale extends \Magento\Core\Model\Locale * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Backend\Model\Session $session, \Magento\Backend\Model\Locale\Manager $localeManager, - \Magento\Core\Controller\Request\Http $request, + \Magento\App\RequestInterface $request, \Magento\Core\Model\Locale\Validator $localeValidator, \Magento\Core\Helper\Translate $translate, \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Locale\Config $config, \Magento\Core\Model\App $app, diff --git a/app/code/Magento/Backend/Model/Menu/Config.php b/app/code/Magento/Backend/Model/Menu/Config.php index d96c0870299..84afc92fa39 100644 --- a/app/code/Magento/Backend/Model/Menu/Config.php +++ b/app/code/Magento/Backend/Model/Menu/Config.php @@ -36,7 +36,7 @@ class Config protected $_configCacheType; /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -77,7 +77,7 @@ class Config * @param \Magento\Backend\Model\MenuFactory $menuFactory * @param \Magento\Backend\Model\Menu\Config\Reader $configReader * @param \Magento\Core\Model\Cache\Type\Config $configCacheType - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Core\Model\StoreManagerInterface $storeManager */ @@ -87,7 +87,7 @@ class Config \Magento\Backend\Model\MenuFactory $menuFactory, \Magento\Backend\Model\Menu\Config\Reader $configReader, \Magento\Core\Model\Cache\Type\Config $configCacheType, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Core\Model\StoreManagerInterface $storeManager ) { diff --git a/app/code/Magento/Backend/Model/Menu/Item.php b/app/code/Magento/Backend/Model/Menu/Item.php index 2dfb5fcc7e1..17a3dcbf226 100644 --- a/app/code/Magento/Backend/Model/Menu/Item.php +++ b/app/code/Magento/Backend/Model/Menu/Item.php @@ -161,7 +161,7 @@ class Item /** * Module list * - * @var \Magento\Core\Model\ModuleListInterface + * @var \Magento\App\ModuleListInterface */ protected $_moduleList; @@ -172,7 +172,7 @@ class Item * @param \Magento\Backend\Model\MenuFactory $menuFactory * @param \Magento\Backend\Model\Url $urlModel * @param \Magento\Core\Helper\AbstractHelper $helper - * @param \Magento\Core\Model\ModuleListInterface $moduleList + * @param \Magento\App\ModuleListInterface $moduleList * @param array $data */ public function __construct( @@ -182,7 +182,7 @@ class Item \Magento\Backend\Model\MenuFactory $menuFactory, \Magento\Backend\Model\Url $urlModel, \Magento\Core\Helper\AbstractHelper $helper, - \Magento\Core\Model\ModuleListInterface $moduleList, + \Magento\App\ModuleListInterface $moduleList, array $data = array() ) { $this->_validator = $validator; @@ -499,7 +499,7 @@ class Item $this->_storeConfig = $objectManager->get('Magento\Core\Model\Store\Config'); $this->_menuFactory = $objectManager->get('Magento\Backend\Model\MenuFactory'); $this->_urlModel = $objectManager->get('Magento\Backend\Model\Url'); - $this->_moduleList = $objectManager->get('Magento\Core\Model\ModuleListInterface'); + $this->_moduleList = $objectManager->get('Magento\App\ModuleListInterface'); if ($this->_serializedSubmenu) { $this->_submenu = $this->_menuFactory->create(); $this->_submenu->unserialize($this->_serializedSubmenu); diff --git a/app/code/Magento/Backend/Model/Observer.php b/app/code/Magento/Backend/Model/Observer.php index b34ad29148a..6f8e5428160 100644 --- a/app/code/Magento/Backend/Model/Observer.php +++ b/app/code/Magento/Backend/Model/Observer.php @@ -41,16 +41,24 @@ class Observer */ protected $_app; + /** + * @var \Magento\App\RequestInterface + */ + protected $_request; + /** * @param \Magento\Backend\Model\Session $backendSession * @param \Magento\Core\Model\App $app + * @param \Magento\App\RequestInterface $request */ public function __construct( \Magento\Backend\Model\Session $backendSession, - \Magento\Core\Model\App $app + \Magento\Core\Model\App $app, + \Magento\App\RequestInterface $request ) { $this->_backendSession = $backendSession; $this->_app = $app; + $this->_request = $request; } /** @@ -78,12 +86,11 @@ class Observer */ public function massactionPrepareKey() { - $request = $this->_app->getFrontController()->getRequest(); - $key = $request->getPost('massaction_prepare_key'); + $key = $this->_request->getPost('massaction_prepare_key'); if ($key) { - $postData = $request->getPost($key); + $postData = $this->_request->getPost($key); $value = is_array($postData) ? $postData : explode(',', $postData); - $request->setPost($key, $value ? $value : null); + $this->_request->setPost($key, $value ? $value : null); } return $this; } diff --git a/app/code/Magento/Backend/Model/Url.php b/app/code/Magento/Backend/Model/Url.php index f3f8cd929ff..20242b6159f 100644 --- a/app/code/Magento/Backend/Model/Url.php +++ b/app/code/Magento/Backend/Model/Url.php @@ -26,6 +26,9 @@ namespace Magento\Backend\Model; +use Magento\Backend\Model\Auth; +use Magento\Backend\Model\Menu; + /** * Class \Magento\Backend\Model\Url * @@ -89,21 +92,23 @@ class Url extends \Magento\Core\Model\Url protected $_cache; /** + * @param \Magento\App\RouterListInterface $routerList + * @param \Magento\App\RequestInterface $request * @param \Magento\Core\Model\Url\SecurityInfoInterface $securityInfo * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Backend\Helper\Data $backendHelper * @param \Magento\Core\Model\Session $session - * @param \Magento\Backend\Model\Menu\Config $menuConfig + * @param Menu\Config $menuConfig * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Model\App $app * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\CacheInterface $cache - * @param \Magento\Backend\Model\Auth\Session $authSession + * @param Auth\Session $authSession * @param array $data - * - * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( + \Magento\App\RouterListInterface $routerList, + \Magento\App\RequestInterface $request, \Magento\Core\Model\Url\SecurityInfoInterface $securityInfo, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Backend\Helper\Data $backendHelper, @@ -116,7 +121,8 @@ class Url extends \Magento\Core\Model\Url \Magento\Backend\Model\Auth\Session $authSession, array $data = array() ) { - parent::__construct($securityInfo, $coreStoreConfig, $coreData, $app, $storeManager, $session, $data); + parent::__construct( + $routerList, $request, $securityInfo, $coreStoreConfig, $coreData, $app, $storeManager, $session, $data); $this->_startupMenuItemId = $coreStoreConfig->getConfig(self::XML_PATH_STARTUP_MENU_ITEM); $this->_backendHelper = $backendHelper; $this->_coreSession = $session; diff --git a/app/code/Magento/Backend/Model/Url/Proxy.php b/app/code/Magento/Backend/Model/Url/Proxy.php index 4300dfbfd4b..a12360168c3 100644 --- a/app/code/Magento/Backend/Model/Url/Proxy.php +++ b/app/code/Magento/Backend/Model/Url/Proxy.php @@ -239,7 +239,7 @@ class Proxy extends \Magento\Backend\Model\Url /** * {@inheritdoc} */ - public function setRequest(\Zend_Controller_Request_Http $request) + public function setRequest(\Magento\App\RequestInterface $request) { return $this->_getObject()->setRequest($request); } diff --git a/app/code/Magento/Backend/etc/adminhtml/di.xml b/app/code/Magento/Backend/etc/adminhtml/di.xml index 4783a361347..714ade4dfff 100644 --- a/app/code/Magento/Backend/etc/adminhtml/di.xml +++ b/app/code/Magento/Backend/etc/adminhtml/di.xml @@ -27,7 +27,7 @@ <preference for="Magento\Authorization\Policy" type="Magento\Authorization\Policy\Acl" /> <preference for="Magento\Authorization\RoleLocator" type="Magento\Backend\Model\Authorization\RoleLocator" /> <preference for="Magento\Core\Model\LocaleInterface" type="Magento\Backend\Model\Locale" /> - <preference for="Magento\Core\Model\UrlInterface" type="Magento\Backend\Model\Url" /> + <preference for="Magento\UrlInterface" type="Magento\Backend\Model\Url" /> <preference for="Magento\Backend\Model\Auth\StorageInterface" type="Magento\Backend\Model\Auth\Session" /> <preference for="Magento\Backend\Model\Config\Structure\SearchInterface" type="Magento\Backend\Model\Config\Structure" /> <preference for="Magento\Backend\Model\Config\Backend\File\RequestData\RequestDataInterface" type="Magento\Backend\Model\Config\Backend\File\RequestData" /> diff --git a/app/code/Magento/Backend/etc/adminhtml/system.xml b/app/code/Magento/Backend/etc/adminhtml/system.xml index 831a102c69f..a0a9149973e 100644 --- a/app/code/Magento/Backend/etc/adminhtml/system.xml +++ b/app/code/Magento/Backend/etc/adminhtml/system.xml @@ -451,7 +451,7 @@ <field id="use_custom_path" translate="label" type="select" sortOrder="3" showInDefault="1" showInWebsite="0" showInStore="0"> <label>Use Custom Admin Path</label> <source_model>Magento\Backend\Model\Config\Source\Yesno</source_model> - <backend_model>Magento\Backend\Model\Config\Backend\Admin\Usecustompath</backend_model> + <backend_model>Magento\Backend\Model\Config\Backend\Admin\Custompath</backend_model> </field> <field id="custom_path" translate="label comment" type="text" sortOrder="4" showInDefault="1" showInWebsite="0" showInStore="0"> <label>Custom Admin Path</label> diff --git a/app/code/Magento/Backend/etc/di.xml b/app/code/Magento/Backend/etc/di.xml index 7e5f09bf18f..3944fb92876 100644 --- a/app/code/Magento/Backend/etc/di.xml +++ b/app/code/Magento/Backend/etc/di.xml @@ -25,6 +25,16 @@ --> <config> <preference for="Magento\Core\Model\Config\Storage\WriterInterface" type="Magento\Core\Model\Config\Storage\Writer\Db" /> + <preference for="Magento\App\Request\PathInfoProcessorInterface" type="Magento\Backend\App\Request\PathInfoProcessor" /> + <type name="Magento\App\AreaList"> + <param name="areas"> + <value> + <adminhtml> + <frontNameResolver>Magento\Backend\App\Area\FrontNameResolver</frontNameResolver> + </adminhtml> + </value> + </param> + </type> <type name="Magento\Backend\Controller\Context"> <param name="translator"> <instance type="Magento\Core\Model\Translate\Proxy" /> @@ -55,7 +65,7 @@ <type name="Magento\Backend\Model\Menu\Config"> <param name="menuDirector"><instance type="Magento\Backend\Model\Menu\Director\Director"/></param> </type> - <type name="Magento\Core\Model\RouterList"> + <type name="Magento\App\RouterList"> <param name="routerList"> <value> <admin> @@ -66,13 +76,12 @@ </value> </param> </type> - <type name="Magento\Backend\Helper\Data"> - <param name="defaultAreaFrontName"> - <value>backend</value> - </param> - <param name="backendFrontName"> - <value type="argument">Magento\Backend\Helper\Data::PARAM_BACKEND_FRONT_NAME</value> + <type name="Magento\Backend\App\Area\FrontNameResolver"> + <param name="defaultFrontName"> + <value type="argument">Magento\Backend\App\Area\FrontNameResolver::PARAM_BACKEND_FRONT_NAME</value> </param> + </type> + <type name="Magento\Backend\Helper\Data"> <param name="app"> <instance type="Magento\Core\Model\App\Proxy" /> </param> @@ -83,11 +92,11 @@ <instance type="Magento\Backend\Model\Auth\Proxy" /> </param> </type> - <type name="Magento\Core\Model\NoRouteHandlerList"> + <type name="Magento\App\Router\NoRouteHandlerList"> <param name="handlerClassesList"> <value> <backend> - <instance>Magento\Backend\Model\Router\NoRouteHandler</instance> + <instance>Magento\Backend\App\Router\NoRouteHandler</instance> <sortOrder>10</sortOrder> </backend> </value> diff --git a/app/code/Magento/Backend/view/adminhtml/system/config/form/field/array.phtml b/app/code/Magento/Backend/view/adminhtml/system/config/form/field/array.phtml index 0ec28f11d2f..f6c19c2ae8a 100644 --- a/app/code/Magento/Backend/view/adminhtml/system/config/form/field/array.phtml +++ b/app/code/Magento/Backend/view/adminhtml/system/config/form/field/array.phtml @@ -27,90 +27,81 @@ <?php $_htmlId = $this->getHtmlId() ? $this->getHtmlId() : '_' . uniqid(); - -$_colspan = 2; -if (!$this->isAddAfter()) { - $_colspan -= 1; -} -$_colspan = $_colspan > 1 ? 'colspan="' . $_colspan . '"' : ''; +$_colspan = $this->isAddAfter() ? 2 : 1; ?> -<div class="grid" id="grid<?php echo $_htmlId ?>"> - <table cellpadding="0" cellspacing="0" class="border"> - <tbody> - - <tr class="headings" id="headings<?php echo $_htmlId ?>"> -<?php foreach ($this->getColumns() as $columnName => $column):?> - <th><?php echo $column['label'] ?></th> -<?php endforeach;?> - <th <?php echo $_colspan?>></th> - </tr> - - <tr id="addRow<?php echo $_htmlId ?>"> - <td colspan="<?php echo count($this->getColumns()) ?>"></td> - <td <?php echo $_colspan?>> - <button style="" onclick="" class="scalable add" type="button" id="addToEndBtn<?php echo $_htmlId ?>"> - <span><span><span><?php echo $this->getAddButtonLabel() ?></span></span></span> - </button> - </td> - </tr> - - </tbody> +<div class="design_theme_ua_regexp" id="grid<?php echo $_htmlId; ?>"> + <table cellspacing="0" class="data-table"> + <thead> + <tr> + <?php foreach ($this->getColumns() as $columnName => $column): ?> + <th><?php echo $column['label']; ?></th> + <?php endforeach;?> + <th class="col-actions" colspan="<?php echo $_colspan; ?>">Action</th> + </tr> + </thead> + <tfoot> + <tr> + <td colspan="<?php echo count($this->getColumns())+$_colspan; ?>"> + <button id="addToEndBtn<?php echo $_htmlId; ?>" class="action- add" title="<?php echo __('Add'); ?>" type="button"> + <span><?php echo $this->getAddButtonLabel(); ?><?php echo __('Add'); ?></span> + </button> + </td> + </tr> + </tfoot> + <tbody id="addRow<?php echo $_htmlId; ?>"></tbody> </table> - <input type="hidden" name="<?php echo $this->getElement()->getName() ?>[__empty]" value="" /> -</div> -<div id="empty<?php echo $_htmlId ?>"> - <button style="" onclick="" class="scalable add" type="button" id="emptyAddBtn<?php echo $_htmlId ?>"> - <span><span><span><?php echo $this->getAddButtonLabel() ?></span></span></span> - </button> -</div> - -<script type="text/javascript"> -//<![CDATA[ -// create row creator -var arrayRow<?php echo $_htmlId ?> = { - // define row prototypeJS template - template : new Template( - '<tr id="#{_id}">' -<?php foreach ($this->getColumns() as $columnName => $column):?> - +'<td>' - +'<?php echo $this->renderCellTemplate($columnName)?>' - +'<\/td>' -<?php endforeach;?> -<?php if ($this->isAddAfter()):?> - +'<td><button onclick="" class="scalable add" type="button" id="addAfterBtn#{_id}"><span><span><span><?php echo __('Add after') ?><\/span><\/span><\/span><\/button><\/td>' -<?php endif;?> - +'<td><button onclick="arrayRow<?php echo $_htmlId ?>.del(\'#{_id}\')" class="scalable delete" type="button"><span><span><span><?php echo __('Delete') ?><\/span><\/span><\/span><\/button><\/td>' - +'<\/tr>' - ), - - rowsCount : 0, - - add : function(rowData, insertAfterId) - { - // generate default template data - if (rowData == false) { - var d = new Date(); - var templateValues = { -<?php foreach ($this->getColumns() as $columnName => $column):?> - <?php echo $columnName ?> : '', -<?php endforeach;?> - _id : '_' + d.getTime() + '_' + d.getMilliseconds() - }; - } else { - var templateValues = rowData; - } + <input type="hidden" name="<?php echo $this->getElement()->getName(); ?>[__empty]" value="" /> + + <script type="text/javascript"> + //<![CDATA[ + + // create row creator + var arrayRow<?php echo $_htmlId ?> = { + + // define row prototypeJS template + template: new Template( + '<tr id="#{_id}">' + <?php foreach ($this->getColumns() as $columnName => $column): ?> + + '<td>' + + '<?php echo $this->renderCellTemplate($columnName)?>' + + '<\/td>' + <?php endforeach; ?> + + <?php if ($this->isAddAfter()): ?> + + '<td><button class="action- add" type="button" id="addAfterBtn#{_id}"><span><?php echo __('Add after'); ?><\/span><\/button><\/td>' + <?php endif; ?> + + + '<td class="col-actions"><button onclick="arrayRow<?php echo $_htmlId ?>.del(\'#{_id}\')" class="action- delete" type="button"><span><?php echo __('Delete'); ?><\/span><\/button><\/td>' + +'<\/tr>' + ), + + add: function(rowData, insertAfterId) { + // generate default template data + var templateValues; + + // Prepare template values + if (rowData) { + templateValues = rowData; + } else { + var d = new Date(); + templateValues = { + <?php foreach ($this->getColumns() as $columnName => $column): ?> + <?php echo $columnName ?>: '', + <?php endforeach; ?> + _id: '_' + d.getTime() + '_' + d.getMilliseconds() + }; + } - // insert before last row - if ('' == insertAfterId) { - Element.insert($('addRow<?php echo $_htmlId ?>'), {before: this.template.evaluate(templateValues)}); - } - // insert after specified row - else { + // Insert new row after specified row or at the bottom + if (insertAfterId) { Element.insert($(insertAfterId), {after: this.template.evaluate(templateValues)}); + } else { + Element.insert($('addRow<?php echo $_htmlId ?>'), {bottom: this.template.evaluate(templateValues)}); } - if (rowData != false) { + // Fill controls with data + if (rowData) { var rowInputElementNames = Object.keys(rowData.column_values); for (var i = 0; i < rowInputElementNames.length; i++) { if ($(rowInputElementNames[i])) { @@ -119,57 +110,32 @@ var arrayRow<?php echo $_htmlId ?> = { } } -<?php if ($this->isAddAfter()):?> - Event.observe('addAfterBtn' + templateValues._id, 'click', this.add.bind(this, '', templateValues._id)); -<?php endif;?> + // Add event for {addAfterBtn} button + <?php if ($this->isAddAfter()): ?> + Event.observe('addAfterBtn' + templateValues._id, 'click', this.add.bind(this, false, templateValues._id)); + <?php endif; ?> + }, - this.rowsCount += 1; - }, - - del : function(rowId) - { - $(rowId).remove(); - this.rowsCount -= 1; - if (0 == this.rowsCount) { - this.showButtonOnly(); + del: function(rowId) { + $(rowId).remove(); + } } - }, - showButtonOnly : function() - { - $('grid<?php echo $_htmlId ?>').hide(); - $('empty<?php echo $_htmlId ?>').show(); - } -} + // bind add action to "Add" button in last row + Event.observe('addToEndBtn<?php echo $_htmlId ?>', 'click', arrayRow<?php echo $_htmlId ?>.add.bind(arrayRow<?php echo $_htmlId ?>, false, false)); -// bind add action to "Add" button in last row -Event.observe('addToEndBtn<?php echo $_htmlId ?>', 'click', arrayRow<?php echo $_htmlId ?>.add.bind(arrayRow<?php echo $_htmlId ?>, false, false)); + // add existing rows + <?php + foreach ($this->getArrayRows() as $_rowId => $_row) { + echo "arrayRow{$_htmlId}.add(" . $_row->toJson() . ");\n"; + } + ?> -// add existing rows -<?php -$_addAfterId = "headings{$_htmlId}"; -foreach ($this->getArrayRows() as $_rowId => $_row) { - echo "arrayRow{$_htmlId}.add(" . $_row->toJson() . ", '{$_addAfterId}');\n"; - $_addAfterId = $_rowId; -} -?> + // Toggle the grid availability, if element is disabled (depending on scope) + <?php if ($this->getElement()->getDisabled()):?> + toggleValueElements({checked: true}, $('grid<?php echo $_htmlId; ?>').parentNode); + <?php endif;?> -// initialize standalone button -$('empty<?php echo $_htmlId ?>').hide(); -Event.observe('emptyAddBtn<?php echo $_htmlId ?>', 'click', function () { - $('grid<?php echo $_htmlId ?>').show(); - $('empty<?php echo $_htmlId ?>').hide(); - arrayRow<?php echo $_htmlId ?>.add('', ''); -}); - -// if no rows, hide grid and show button only -<?php if (!$this->getArrayRows()):?> -arrayRow<?php echo $_htmlId ?>.showButtonOnly(); -<?php endif;?> - -// toggle the grid, if element is disabled (depending on scope) -<?php if ($this->getElement()->getDisabled()):?> -toggleValueElements({checked:true}, $('grid<?php echo $_htmlId ?>').parentNode); -<?php endif;?> -//]]> -</script> + //]]> + </script> +</div> \ No newline at end of file diff --git a/app/code/Magento/Backend/view/adminhtml/widget/grid/column_set.phtml b/app/code/Magento/Backend/view/adminhtml/widget/grid/column_set.phtml index 5c5f2174762..c260dc7fe75 100644 --- a/app/code/Magento/Backend/view/adminhtml/widget/grid/column_set.phtml +++ b/app/code/Magento/Backend/view/adminhtml/widget/grid/column_set.phtml @@ -44,7 +44,7 @@ $numColumns = sizeof($this->getColumns()); <?php foreach ($this->getColumns() as $_column): ?> <?php /* @var $_column \Magento\Backend\Block\Widget\Grid\Column */ ?> <th data-column="<?php echo $_column->getId() ?>" <?php echo $_column->getHeaderHtmlProperty() ?>> - <span class="nobr"><?php echo $_column->getHeaderHtml() ?></span> + <span><?php echo $_column->getHeaderHtml() ?></span> </th> <?php endforeach; ?> </tr> diff --git a/app/code/Magento/Backup/Helper/Data.php b/app/code/Magento/Backup/Helper/Data.php index 05fa372fad4..7e85b1b14d0 100644 --- a/app/code/Magento/Backup/Helper/Data.php +++ b/app/code/Magento/Backup/Helper/Data.php @@ -77,7 +77,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper /** * Directory model * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -96,7 +96,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper * @param \Magento\AuthorizationInterface $authorization * @param \Magento\Core\Model\Cache\Config $cacheConfig * @param \Magento\Core\Model\Cache\TypeListInterface $cacheTypeList - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Index\Model\Resource\Process\CollectionFactory $processFactory */ public function __construct( @@ -105,7 +105,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper \Magento\AuthorizationInterface $authorization, \Magento\Core\Model\Cache\Config $cacheConfig, \Magento\Core\Model\Cache\TypeListInterface $cacheTypeList, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Index\Model\Resource\Process\CollectionFactory $processFactory ) { parent::__construct($context); @@ -163,7 +163,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper */ public function getBackupsDir() { - return $this->_dir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . 'backups'; + return $this->_dir->getDir(\Magento\App\Dir::VAR_DIR) . DS . 'backups'; } /** @@ -227,12 +227,12 @@ class Data extends \Magento\Core\Helper\AbstractHelper '.git', '.svn', 'maintenance.flag', - $this->_dir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . 'session', - $this->_dir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . 'cache', - $this->_dir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . 'full_page_cache', - $this->_dir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . 'locks', - $this->_dir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . 'log', - $this->_dir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . 'report', + $this->_dir->getDir(\Magento\App\Dir::VAR_DIR) . DS . 'session', + $this->_dir->getDir(\Magento\App\Dir::VAR_DIR) . DS . 'cache', + $this->_dir->getDir(\Magento\App\Dir::VAR_DIR) . DS . 'full_page_cache', + $this->_dir->getDir(\Magento\App\Dir::VAR_DIR) . DS . 'locks', + $this->_dir->getDir(\Magento\App\Dir::VAR_DIR) . DS . 'log', + $this->_dir->getDir(\Magento\App\Dir::VAR_DIR) . DS . 'report', ); } @@ -247,10 +247,10 @@ class Data extends \Magento\Core\Helper\AbstractHelper '.svn', '.git', 'maintenance.flag', - $this->_dir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . 'session', - $this->_dir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . 'locks', - $this->_dir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . 'log', - $this->_dir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . 'report', + $this->_dir->getDir(\Magento\App\Dir::VAR_DIR) . DS . 'session', + $this->_dir->getDir(\Magento\App\Dir::VAR_DIR) . DS . 'locks', + $this->_dir->getDir(\Magento\App\Dir::VAR_DIR) . DS . 'log', + $this->_dir->getDir(\Magento\App\Dir::VAR_DIR) . DS . 'report', $this->_dir->getDir() . DS . 'errors', $this->_dir->getDir() . DS . 'index.php', ); diff --git a/app/code/Magento/Backup/Model/Fs/Collection.php b/app/code/Magento/Backup/Model/Fs/Collection.php index 014832e2571..3d581477295 100644 --- a/app/code/Magento/Backup/Model/Fs/Collection.php +++ b/app/code/Magento/Backup/Model/Fs/Collection.php @@ -51,7 +51,7 @@ class Collection extends \Magento\Data\Collection\Filesystem /** * Directory model * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -66,14 +66,14 @@ class Collection extends \Magento\Data\Collection\Filesystem * @param \Magento\Backup\Helper\Data $backupData * @param \Magento\Filesystem $filesystem * @param \Magento\Core\Model\EntityFactory $entityFactory - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Backup\Model\Backup $backup */ public function __construct( \Magento\Backup\Helper\Data $backupData, \Magento\Filesystem $filesystem, \Magento\Core\Model\EntityFactory $entityFactory, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Backup\Model\Backup $backup ) { $this->_backupData = $backupData; @@ -83,7 +83,7 @@ class Collection extends \Magento\Data\Collection\Filesystem $this->_filesystem = $filesystem; $this->_dir = $dir; $this->_backup = $backup; - $this->_baseDir = $this->_dir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . 'backups'; + $this->_baseDir = $this->_dir->getDir(\Magento\App\Dir::VAR_DIR) . DS . 'backups'; $this->_filesystem->setIsAllowCreateDirectories(true); $this->_filesystem->ensureDirectoryExists($this->_baseDir); diff --git a/app/code/Magento/Backup/Model/Observer.php b/app/code/Magento/Backup/Model/Observer.php index cb865b6d935..924e7446845 100644 --- a/app/code/Magento/Backup/Model/Observer.php +++ b/app/code/Magento/Backup/Model/Observer.php @@ -75,7 +75,7 @@ class Observer /** * Directory model * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -89,7 +89,7 @@ class Observer * @param \Magento\Core\Model\Registry $coreRegistry * @param \Magento\Core\Model\Logger $logger * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Backup\Factory $backupFactory */ public function __construct( @@ -97,7 +97,7 @@ class Observer \Magento\Core\Model\Registry $coreRegistry, \Magento\Core\Model\Logger $logger, \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Backup\Factory $backupFactory ) { $this->_backupData = $backupData; diff --git a/app/code/Magento/Bundle/Model/Product/Price.php b/app/code/Magento/Bundle/Model/Product/Price.php index 1defc7e4f23..9a5b7202906 100644 --- a/app/code/Magento/Bundle/Model/Product/Price.php +++ b/app/code/Magento/Bundle/Model/Product/Price.php @@ -64,7 +64,7 @@ class Price extends \Magento\Catalog\Model\Product\Type\Price * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Model\LocaleInterface $locale * @param \Magento\Customer\Model\Session $customerSession - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Tax\Helper\Data $taxData */ public function __construct( @@ -72,7 +72,7 @@ class Price extends \Magento\Catalog\Model\Product\Type\Price \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Core\Model\LocaleInterface $locale, \Magento\Customer\Model\Session $customerSession, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Tax\Helper\Data $taxData ) { $this->_taxData = $taxData; diff --git a/app/code/Magento/Bundle/Model/Product/Type.php b/app/code/Magento/Bundle/Model/Product/Type.php index 69f05502e9d..9ff53ebcd00 100644 --- a/app/code/Magento/Bundle/Model/Product/Type.php +++ b/app/code/Magento/Bundle/Model/Product/Type.php @@ -147,7 +147,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType * @param \Magento\Catalog\Model\Product\Option $catalogProductOption * @param \Magento\Eav\Model\Config $eavConfig * @param \Magento\Catalog\Model\Product\Type $catalogProductType - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Helper\File\Storage\Database $fileStorageDb * @param \Magento\Filesystem $filesystem @@ -171,7 +171,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType \Magento\Catalog\Model\Product\Option $catalogProductOption, \Magento\Eav\Model\Config $eavConfig, \Magento\Catalog\Model\Product\Type $catalogProductType, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\Core\Helper\File\Storage\Database $fileStorageDb, \Magento\Filesystem $filesystem, diff --git a/app/code/Magento/Bundle/Model/Resource/Price/Index.php b/app/code/Magento/Bundle/Model/Resource/Price/Index.php index e639a00119d..4c3e2c27c32 100644 --- a/app/code/Magento/Bundle/Model/Resource/Price/Index.php +++ b/app/code/Magento/Bundle/Model/Resource/Price/Index.php @@ -60,7 +60,7 @@ class Index extends \Magento\Core\Model\Resource\Db\AbstractDb /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -97,7 +97,7 @@ class Index extends \Magento\Core\Model\Resource\Db\AbstractDb * @param \Magento\CatalogRule\Model\Resource\RuleFactory $catalogRuleFactory * @param \Magento\Customer\Model\GroupFactory $customerGroup * @param \Magento\Catalog\Model\Config $config - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Resource $resource */ public function __construct( @@ -106,7 +106,7 @@ class Index extends \Magento\Core\Model\Resource\Db\AbstractDb \Magento\CatalogRule\Model\Resource\RuleFactory $catalogRuleFactory, \Magento\Customer\Model\GroupFactory $customerGroup, \Magento\Catalog\Model\Config $config, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Resource $resource ) { $this->_eventManager = $eventManager; diff --git a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Creditmemo.php b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Creditmemo.php index 7c981b7da13..e08d8e0e98d 100644 --- a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Creditmemo.php +++ b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Creditmemo.php @@ -47,7 +47,7 @@ class Creditmemo extends \Magento\Bundle\Model\Sales\Order\Pdf\Items\AbstractIte * @param \Magento\Tax\Helper\Data $taxData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Data\Collection\Db $resourceCollection * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param array $data @@ -57,7 +57,7 @@ class Creditmemo extends \Magento\Bundle\Model\Sales\Order\Pdf\Items\AbstractIte \Magento\Tax\Helper\Data $taxData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Data\Collection\Db $resourceCollection = null, \Magento\Core\Model\Resource\AbstractResource $resource = null, array $data = array() diff --git a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Invoice.php b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Invoice.php index ba0eb6421e7..929957b8ff8 100644 --- a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Invoice.php +++ b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Invoice.php @@ -47,7 +47,7 @@ class Invoice extends \Magento\Bundle\Model\Sales\Order\Pdf\Items\AbstractItems * @param \Magento\Tax\Helper\Data $taxData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Data\Collection\Db $resourceCollection * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param array $data @@ -57,7 +57,7 @@ class Invoice extends \Magento\Bundle\Model\Sales\Order\Pdf\Items\AbstractItems \Magento\Tax\Helper\Data $taxData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Data\Collection\Db $resourceCollection = null, \Magento\Core\Model\Resource\AbstractResource $resource = null, array $data = array() diff --git a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Shipment.php b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Shipment.php index 5b9ef9fd34a..4a0a376c34a 100644 --- a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Shipment.php +++ b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Shipment.php @@ -47,7 +47,7 @@ class Shipment extends \Magento\Bundle\Model\Sales\Order\Pdf\Items\AbstractItems * @param \Magento\Tax\Helper\Data $taxData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Data\Collection\Db $resourceCollection * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param array $data @@ -57,7 +57,7 @@ class Shipment extends \Magento\Bundle\Model\Sales\Order\Pdf\Items\AbstractItems \Magento\Tax\Helper\Data $taxData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Data\Collection\Db $resourceCollection = null, \Magento\Core\Model\Resource\AbstractResource $resource = null, array $data = array() diff --git a/app/code/Magento/Bundle/etc/di.xml b/app/code/Magento/Bundle/etc/di.xml index 938b0ac2047..c98e3d4a334 100644 --- a/app/code/Magento/Bundle/etc/di.xml +++ b/app/code/Magento/Bundle/etc/di.xml @@ -24,11 +24,6 @@ */ --> <config> - <type name="Magento\Bundle\Model\Resource\Price\Index"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> <type name="Magento\Bundle\Model\Source\Option\Type"> <param name="options"> <value> @@ -39,8 +34,8 @@ </value> </param> </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <bundle_setup>Magento\Catalog\Model\Resource\Setup</bundle_setup> </value> diff --git a/app/code/Magento/Captcha/Helper/Data.php b/app/code/Magento/Captcha/Helper/Data.php index 33c1cb14104..8661550acab 100644 --- a/app/code/Magento/Captcha/Helper/Data.php +++ b/app/code/Magento/Captcha/Helper/Data.php @@ -77,7 +77,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper protected $_filesystem; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs = null; @@ -93,7 +93,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper /** * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Config $config * @param \Magento\Filesystem $filesystem @@ -101,7 +101,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper */ public function __construct( \Magento\Core\Helper\Context $context, - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Config $config, \Magento\Filesystem $filesystem, @@ -164,7 +164,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper $fontsConfig = $this->_config->getValue(\Magento\Captcha\Helper\Data::XML_PATH_CAPTCHA_FONTS, 'default'); $fonts = array(); if ($fontsConfig) { - $libDir = $this->_dirs->getDir(\Magento\Core\Model\Dir::LIB); + $libDir = $this->_dirs->getDir(\Magento\App\Dir::LIB); foreach ($fontsConfig as $fontName => $fontConfig) { $fonts[$fontName] = array( 'label' => $fontConfig['label'], @@ -183,7 +183,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper */ public function getImgDir($website = null) { - $mediaDir = $this->_dirs->getDir(\Magento\Core\Model\Dir::MEDIA); + $mediaDir = $this->_dirs->getDir(\Magento\App\Dir::MEDIA); $captchaDir = $mediaDir . '/captcha/' . $this->_storeManager->getWebsite($website)->getCode(); $this->_filesystem->setWorkingDirectory($mediaDir); $this->_filesystem->setIsAllowCreateDirectories(true); @@ -199,7 +199,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper */ public function getImgUrl($website = null) { - return $this->_storeManager->getStore()->getBaseUrl(\Magento\Core\Model\Dir::MEDIA) . 'captcha' + return $this->_storeManager->getStore()->getBaseUrl(\Magento\App\Dir::MEDIA) . 'captcha' . '/' . $this->_storeManager->getWebsite($website)->getCode() . '/'; } } diff --git a/app/code/Magento/Captcha/Model/Observer.php b/app/code/Magento/Captcha/Model/Observer.php index d6fa298de42..48f51807633 100644 --- a/app/code/Magento/Captcha/Model/Observer.php +++ b/app/code/Magento/Captcha/Model/Observer.php @@ -69,7 +69,7 @@ class Observer protected $_coreData; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; @@ -102,7 +102,7 @@ class Observer * @param \Magento\Captcha\Helper\Data $helper * @param \Magento\Core\Model\Url $urlManager * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @param \Magento\Core\Model\StoreManager $storeManager */ public function __construct( @@ -114,7 +114,7 @@ class Observer \Magento\Captcha\Helper\Data $helper, \Magento\Core\Model\Url $urlManager, \Magento\Filesystem $filesystem, - \Magento\Core\Controller\Request\Http $request, + \Magento\App\RequestInterface $request, \Magento\Core\Model\StoreManager $storeManager ) { $this->_resLogFactory = $resLogFactory; @@ -380,11 +380,11 @@ class Observer /** * Get Captcha String * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @param string $formId * @return string */ - protected function _getCaptchaString(\Magento\Core\Controller\Request\Http $request, $formId) + protected function _getCaptchaString(\Magento\App\RequestInterface $request, $formId) { $captchaParams = $request->getPost(\Magento\Captcha\Helper\Data::INPUT_NAME_FIELD_VALUE); return isset($captchaParams[$formId]) ? $captchaParams[$formId] : ''; diff --git a/app/code/Magento/Catalog/Helper/Product.php b/app/code/Magento/Catalog/Helper/Product.php index 63463d0cede..66a2db4375d 100644 --- a/app/code/Magento/Catalog/Helper/Product.php +++ b/app/code/Magento/Catalog/Helper/Product.php @@ -67,7 +67,7 @@ class Product extends \Magento\Core\Helper\Url /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -133,7 +133,7 @@ class Product extends \Magento\Core\Helper\Url * @param \Magento\Catalog\Model\ProductFactory $productFactory * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Model\Session $catalogSession - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Context $context * @param \Magento\Core\Model\View\Url $viewUrl * @param \Magento\Core\Model\Registry $coreRegistry @@ -149,7 +149,7 @@ class Product extends \Magento\Core\Helper\Url \Magento\Catalog\Model\ProductFactory $productFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\Session $catalogSession, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Context $context, \Magento\Core\Model\View\Url $viewUrl, \Magento\Core\Model\Registry $coreRegistry, @@ -356,7 +356,7 @@ class Product extends \Magento\Core\Helper\Url */ $inputTypes = array( 'multiselect' => array( - 'backend_model' => 'Magento\Eav\Model\Entity\Attribute\Backend\Array' + 'backend_model' => 'Magento\Eav\Model\Entity\Attribute\Backend\ArrayBackend' ), 'boolean' => array( 'source_model' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean' diff --git a/app/code/Magento/Catalog/Helper/Product/Options.php b/app/code/Magento/Catalog/Helper/Product/Options.php index 965fa29e26c..40291d5012c 100644 --- a/app/code/Magento/Catalog/Helper/Product/Options.php +++ b/app/code/Magento/Catalog/Helper/Product/Options.php @@ -59,7 +59,7 @@ class Options extends \Magento\Core\Helper\AbstractHelper * - 'size' - size of file * - 'title' - user-friendly name of file (usually - original name as uploaded in Magento) * - * @param \Magento\Core\Controller\Response\Http $response + * @param \Magento\App\ResponseInterface $response * @param string $filePath * @param array $info * @return bool diff --git a/app/code/Magento/Catalog/Helper/Product/View.php b/app/code/Magento/Catalog/Helper/Product/View.php index 9f0bad4b8d5..5b9e125519b 100644 --- a/app/code/Magento/Catalog/Helper/Product/View.php +++ b/app/code/Magento/Catalog/Helper/Product/View.php @@ -70,7 +70,7 @@ class View extends \Magento\Core\Helper\AbstractHelper /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -93,7 +93,7 @@ class View extends \Magento\Core\Helper\AbstractHelper * * @param \Magento\Catalog\Model\Session $catalogSession * @param \Magento\Catalog\Model\Design $catalogDesign - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Catalog\Helper\Product $catalogProduct * @param \Magento\Page\Helper\Layout $pageLayout * @param \Magento\Core\Helper\Context $context @@ -103,7 +103,7 @@ class View extends \Magento\Core\Helper\AbstractHelper public function __construct( \Magento\Catalog\Model\Session $catalogSession, \Magento\Catalog\Model\Design $catalogDesign, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Catalog\Helper\Product $catalogProduct, \Magento\Page\Helper\Layout $pageLayout, \Magento\Core\Helper\Context $context, diff --git a/app/code/Magento/Catalog/Model/Category.php b/app/code/Magento/Catalog/Model/Category.php index 6710c281037..bb70f6ef4d0 100644 --- a/app/code/Magento/Catalog/Model/Category.php +++ b/app/code/Magento/Catalog/Model/Category.php @@ -128,7 +128,7 @@ class Category extends \Magento\Catalog\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -189,12 +189,12 @@ class Category extends \Magento\Catalog\Model\AbstractModel * @param \Magento\Catalog\Model\CategoryFactory $categoryFactory * @param \Magento\Core\Model\Url\RewriteFactory $urlRewriteFactory * @param \Magento\Core\Model\Resource\Store\CollectionFactory $storeCollectionFactory - * @param \Magento\Core\Model\UrlInterface $url + * @param \Magento\UrlInterface $url * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Model\Config $catalogConfig * @param \Magento\Index\Model\Indexer $indexIndexer - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Catalog\Helper\Category\Flat $catalogCategoryFlat * @param \Magento\Core\Model\Context $context @@ -211,12 +211,12 @@ class Category extends \Magento\Catalog\Model\AbstractModel \Magento\Catalog\Model\CategoryFactory $categoryFactory, \Magento\Core\Model\Url\RewriteFactory $urlRewriteFactory, \Magento\Core\Model\Resource\Store\CollectionFactory $storeCollectionFactory, - \Magento\Core\Model\UrlInterface $url, + \Magento\UrlInterface $url, \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\Config $catalogConfig, \Magento\Index\Model\Indexer $indexIndexer, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\Catalog\Helper\Category\Flat $catalogCategoryFlat, \Magento\Core\Model\Context $context, diff --git a/app/code/Magento/Catalog/Model/Category/Attribute/Backend/Image.php b/app/code/Magento/Catalog/Model/Category/Attribute/Backend/Image.php index 0c214005c04..c687969e5c4 100644 --- a/app/code/Magento/Catalog/Model/Category/Attribute/Backend/Image.php +++ b/app/code/Magento/Catalog/Model/Category/Attribute/Backend/Image.php @@ -44,7 +44,7 @@ class Image extends \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend /** * Dir model * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -59,12 +59,12 @@ class Image extends \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend * Construct * * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\File\UploaderFactory $fileUploaderFactory */ public function __construct( \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Core\Model\File\UploaderFactory $fileUploaderFactory ) { $this->_dir = $dir; @@ -94,7 +94,7 @@ class Image extends \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend return $this; } - $path = $this->_dir->getDir(\Magento\Core\Model\Dir::MEDIA) . DS . 'catalog' . DS . 'category' . DS; + $path = $this->_dir->getDir(\Magento\App\Dir::MEDIA) . DS . 'catalog' . DS . 'category' . DS; try { /** @var $uploader \Magento\Core\Model\File\Uploader */ diff --git a/app/code/Magento/Catalog/Model/Design.php b/app/code/Magento/Catalog/Model/Design.php index 26d2d9f86af..698db0fe2e9 100644 --- a/app/code/Magento/Catalog/Model/Design.php +++ b/app/code/Magento/Catalog/Model/Design.php @@ -42,7 +42,7 @@ class Design extends \Magento\Core\Model\AbstractModel /** * Design package instance * - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_design = null; @@ -57,7 +57,7 @@ class Design extends \Magento\Core\Model\AbstractModel * Construct * * @param \Magento\Core\Model\LocaleInterface $locale - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Core\Model\Resource\AbstractResource $resource @@ -66,7 +66,7 @@ class Design extends \Magento\Core\Model\AbstractModel */ public function __construct( \Magento\Core\Model\LocaleInterface $locale, - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Core\Model\Resource\AbstractResource $resource = null, diff --git a/app/code/Magento/Catalog/Model/Layer/Filter/Item.php b/app/code/Magento/Catalog/Model/Layer/Filter/Item.php index 73072cbb03f..4de4a29ef3a 100644 --- a/app/code/Magento/Catalog/Model/Layer/Filter/Item.php +++ b/app/code/Magento/Catalog/Model/Layer/Filter/Item.php @@ -38,7 +38,7 @@ class Item extends \Magento\Object /** * Url * - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_url; @@ -52,12 +52,12 @@ class Item extends \Magento\Object /** * Construct * - * @param \Magento\Core\Model\UrlInterface $url + * @param \Magento\UrlInterface $url * @param \Magento\Page\Block\Html\Pager $htmlPagerBlock * @param array $data */ public function __construct( - \Magento\Core\Model\UrlInterface $url, + \Magento\UrlInterface $url, \Magento\Page\Block\Html\Pager $htmlPagerBlock, array $data = array() ) { diff --git a/app/code/Magento/Catalog/Model/Product.php b/app/code/Magento/Catalog/Model/Product.php index b18900ba642..7966229e8f9 100644 --- a/app/code/Magento/Catalog/Model/Product.php +++ b/app/code/Magento/Catalog/Model/Product.php @@ -141,7 +141,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -229,7 +229,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel * @param \Magento\Catalog\Model\Product\Media\Config $catalogProductMediaConfig * @param \Magento\Index\Model\Indexer $indexIndexer * @param \Magento\Catalog\Model\Product\Type $catalogProductType - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Catalog\Helper\Image $catalogImage * @param \Magento\Catalog\Helper\Data $catalogData * @param \Magento\Catalog\Helper\Product $catalogProduct @@ -256,7 +256,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel \Magento\Catalog\Model\Product\Media\Config $catalogProductMediaConfig, \Magento\Index\Model\Indexer $indexIndexer, \Magento\Catalog\Model\Product\Type $catalogProductType, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Catalog\Helper\Image $catalogImage, \Magento\Catalog\Helper\Data $catalogData, \Magento\Catalog\Helper\Product $catalogProduct, diff --git a/app/code/Magento/Catalog/Model/Product/Action.php b/app/code/Magento/Catalog/Model/Product/Action.php index 460da89afc1..87243c33104 100644 --- a/app/code/Magento/Catalog/Model/Product/Action.php +++ b/app/code/Magento/Catalog/Model/Product/Action.php @@ -39,7 +39,7 @@ class Action extends \Magento\Core\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -62,7 +62,7 @@ class Action extends \Magento\Core\Model\AbstractModel * * @param \Magento\Catalog\Model\Product\WebsiteFactory $productWebsiteFactory * @param \Magento\Index\Model\Indexer $indexIndexer - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Core\Model\Resource\AbstractResource $resource @@ -72,7 +72,7 @@ class Action extends \Magento\Core\Model\AbstractModel public function __construct( \Magento\Catalog\Model\Product\WebsiteFactory $productWebsiteFactory, \Magento\Index\Model\Indexer $indexIndexer, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Core\Model\Resource\AbstractResource $resource = null, diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Media.php b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Media.php index da02671aedb..72525d68099 100644 --- a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Media.php +++ b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Media.php @@ -81,7 +81,7 @@ class Media extends \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -97,22 +97,22 @@ class Media extends \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend * * @param \Magento\Core\Model\Logger $logger * @param \Magento\Catalog\Model\Resource\ProductFactory $productFactory - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\File\Storage\Database $fileStorageDb * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Catalog\Model\Product\Media\Config $mediaConfig - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param \Magento\Filesystem $filesystem * @param \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media $resourceProductAttribute */ public function __construct( \Magento\Core\Model\Logger $logger, \Magento\Catalog\Model\Resource\ProductFactory $productFactory, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\File\Storage\Database $fileStorageDb, \Magento\Core\Helper\Data $coreData, \Magento\Catalog\Model\Product\Media\Config $mediaConfig, - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, \Magento\Filesystem $filesystem, \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media $resourceProductAttribute ) { @@ -124,7 +124,7 @@ class Media extends \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend $this->_mediaConfig = $mediaConfig; $this->_filesystem = $filesystem; $this->_filesystem->setIsAllowCreateDirectories(true); - $this->_filesystem->setWorkingDirectory($dirs->getDir(\Magento\Core\Model\Dir::MEDIA)); + $this->_filesystem->setWorkingDirectory($dirs->getDir(\Magento\App\Dir::MEDIA)); $this->_baseMediaPath = $this->_mediaConfig->getBaseMediaPath(); $this->_baseTmpMediaPath = $this->_mediaConfig->getBaseTmpMediaPath(); $this->_filesystem->ensureDirectoryExists($this->_baseMediaPath); diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Source/Inputtype.php b/app/code/Magento/Catalog/Model/Product/Attribute/Source/Inputtype.php index 653c9009b26..0d19ea7eeb2 100644 --- a/app/code/Magento/Catalog/Model/Product/Attribute/Source/Inputtype.php +++ b/app/code/Magento/Catalog/Model/Product/Attribute/Source/Inputtype.php @@ -40,16 +40,16 @@ class Inputtype extends \Magento\Eav\Model\Adminhtml\System\Config\Source\Inputt /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Registry $coreRegistry */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Registry $coreRegistry ) { $this->_eventManager = $eventManager; diff --git a/app/code/Magento/Catalog/Model/Product/Image.php b/app/code/Magento/Catalog/Model/Product/Image.php index d8ae3b2f685..c8d15e5eee4 100644 --- a/app/code/Magento/Catalog/Model/Product/Image.php +++ b/app/code/Magento/Catalog/Model/Product/Image.php @@ -102,7 +102,7 @@ class Image extends \Magento\Core\Model\AbstractModel /** * Dir * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -117,7 +117,7 @@ class Image extends \Magento\Core\Model\AbstractModel * Construct * * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Catalog\Model\Product\Media\Config $catalogProductMediaConfig * @param \Magento\Core\Helper\File\Storage\Database $coreFileStorageDatabase * @param \Magento\Core\Model\Context $context @@ -135,7 +135,7 @@ class Image extends \Magento\Core\Model\AbstractModel */ public function __construct( \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Catalog\Model\Product\Media\Config $catalogProductMediaConfig, \Magento\Core\Helper\File\Storage\Database $coreFileStorageDatabase, \Magento\Core\Model\Context $context, @@ -599,7 +599,7 @@ class Image extends \Magento\Core\Model\AbstractModel "Magento_Catalog::images/product/placeholder/{$this->getDestinationSubdir()}.jpg" ); } else { - $baseDir = $this->_dir->getDir(\Magento\Core\Model\Dir::MEDIA); + $baseDir = $this->_dir->getDir(\Magento\App\Dir::MEDIA); $path = str_replace($baseDir . DS, "", $this->_newFile); $url = $this->_storeManager->getStore()->getBaseUrl(\Magento\Core\Model\Store::URL_TYPE_MEDIA) . str_replace(DS, '/', $path);; } @@ -792,7 +792,7 @@ class Image extends \Magento\Core\Model\AbstractModel public function clearCache() { - $directory = $this->_dir->getDir(\Magento\Core\Model\Dir::MEDIA) . DS . 'catalog' . DS . 'product' + $directory = $this->_dir->getDir(\Magento\App\Dir::MEDIA) . DS . 'catalog' . DS . 'product' . DS . 'cache' . DS; $this->_filesystem->delete($directory); diff --git a/app/code/Magento/Catalog/Model/Product/Image/View.php b/app/code/Magento/Catalog/Model/Product/Image/View.php index 38cace60375..6dfa9e323e0 100644 --- a/app/code/Magento/Catalog/Model/Product/Image/View.php +++ b/app/code/Magento/Catalog/Model/Product/Image/View.php @@ -89,18 +89,18 @@ class View extends \Magento\Object /** * View config model * - * @var \Magento\Core\Model\View\Config + * @var \Magento\View\ConfigInterface */ protected $_viewConfig; /** * @param \Magento\Catalog\Helper\Image $helperImage - * @param \Magento\Core\Model\View\Config $viewConfig + * @param \Magento\View\ConfigInterface $viewConfig * @param array $data */ public function __construct( \Magento\Catalog\Helper\Image $helperImage, - \Magento\Core\Model\View\Config $viewConfig, + \Magento\View\ConfigInterface $viewConfig, array $data = array() ) { $this->_helperImage = $helperImage; diff --git a/app/code/Magento/Catalog/Model/Product/Media/Config.php b/app/code/Magento/Catalog/Model/Product/Media/Config.php index 81bb3c44b1c..2717238980c 100644 --- a/app/code/Magento/Catalog/Model/Product/Media/Config.php +++ b/app/code/Magento/Catalog/Model/Product/Media/Config.php @@ -39,7 +39,7 @@ class Config implements \Magento\Media\Model\Image\Config\ConfigInterface /** * Dir * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -54,11 +54,11 @@ class Config implements \Magento\Media\Model\Image\Config\ConfigInterface * Construct * * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir */ public function __construct( \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\Dir $dir + \Magento\App\Dir $dir ) { $this->_storeManager = $storeManager; $this->_dir = $dir; @@ -110,7 +110,7 @@ class Config implements \Magento\Media\Model\Image\Config\ConfigInterface public function getBaseMediaPath() { - return $this->_dir->getDir(\Magento\Core\Model\Dir::MEDIA) . DIRECTORY_SEPARATOR + return $this->_dir->getDir(\Magento\App\Dir::MEDIA) . DIRECTORY_SEPARATOR . 'catalog' . DIRECTORY_SEPARATOR . 'product'; } @@ -122,7 +122,7 @@ class Config implements \Magento\Media\Model\Image\Config\ConfigInterface public function getBaseTmpMediaPath() { - return $this->_dir->getDir(\Magento\Core\Model\Dir::MEDIA) . DIRECTORY_SEPARATOR + return $this->_dir->getDir(\Magento\App\Dir::MEDIA) . DIRECTORY_SEPARATOR . $this->getBaseTmpMediaPathAddition(); } 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 ac5db6acba5..fa120dd6f16 100644 --- a/app/code/Magento/Catalog/Model/Product/Option/Type/File.php +++ b/app/code/Magento/Catalog/Model/Product/Option/Type/File.php @@ -73,14 +73,14 @@ class File extends \Magento\Catalog\Model\Product\Option\Type\DefaultType /** * Dir * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; /** * Url * - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_url; @@ -95,8 +95,8 @@ class File extends \Magento\Catalog\Model\Product\Option\Type\DefaultType * Construct * * @param \Magento\Sales\Model\Quote\Item\OptionFactory $itemOptionFactory - * @param \Magento\Core\Model\UrlInterface $url - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\UrlInterface $url + * @param \Magento\App\Dir $dir * @param \Magento\Checkout\Model\Session $checkoutSession * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Helper\File\Storage\Database $coreFileStorageDatabase @@ -107,8 +107,8 @@ class File extends \Magento\Catalog\Model\Product\Option\Type\DefaultType */ public function __construct( \Magento\Sales\Model\Quote\Item\OptionFactory $itemOptionFactory, - \Magento\Core\Model\UrlInterface $url, - \Magento\Core\Model\Dir $dir, + \Magento\UrlInterface $url, + \Magento\App\Dir $dir, \Magento\Checkout\Model\Session $checkoutSession, \Magento\Core\Helper\Data $coreData, \Magento\Core\Helper\File\Storage\Database $coreFileStorageDatabase, @@ -761,7 +761,7 @@ class File extends \Magento\Catalog\Model\Product\Option\Type\DefaultType */ public function getTargetDir($relative = false) { - $fullPath = $this->_dir->getDir(\Magento\Core\Model\Dir::MEDIA) . DS . 'custom_options'; + $fullPath = $this->_dir->getDir(\Magento\App\Dir::MEDIA) . DS . 'custom_options'; return $relative ? str_replace($this->_dir->getDir(), '', $fullPath) : $fullPath; } diff --git a/app/code/Magento/Catalog/Model/Product/Status.php b/app/code/Magento/Catalog/Model/Product/Status.php index a6ebb63d5bc..eeb654e054c 100644 --- a/app/code/Magento/Catalog/Model/Product/Status.php +++ b/app/code/Magento/Catalog/Model/Product/Status.php @@ -57,7 +57,7 @@ class Status extends \Magento\Core\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -80,7 +80,7 @@ class Status extends \Magento\Core\Model\AbstractModel * * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Model\Product\Action $catalogProductAction - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Core\Model\Resource\AbstractResource $resource @@ -90,7 +90,7 @@ class Status extends \Magento\Core\Model\AbstractModel public function __construct( \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\Product\Action $catalogProductAction, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Core\Model\Resource\AbstractResource $resource = null, diff --git a/app/code/Magento/Catalog/Model/Product/Type/AbstractType.php b/app/code/Magento/Catalog/Model/Product/Type/AbstractType.php index a936b23376d..d97dd402425 100644 --- a/app/code/Magento/Catalog/Model/Product/Type/AbstractType.php +++ b/app/code/Magento/Catalog/Model/Product/Type/AbstractType.php @@ -138,7 +138,7 @@ abstract class AbstractType /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -182,7 +182,7 @@ abstract class AbstractType * @param \Magento\Catalog\Model\Product\Option $catalogProductOption * @param \Magento\Eav\Model\Config $eavConfig * @param \Magento\Catalog\Model\Product\Type $catalogProductType - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Helper\File\Storage\Database $fileStorageDb * @param \Magento\Filesystem $filesystem @@ -195,7 +195,7 @@ abstract class AbstractType \Magento\Catalog\Model\Product\Option $catalogProductOption, \Magento\Eav\Model\Config $eavConfig, \Magento\Catalog\Model\Product\Type $catalogProductType, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\Core\Helper\File\Storage\Database $fileStorageDb, \Magento\Filesystem $filesystem, diff --git a/app/code/Magento/Catalog/Model/Product/Type/Configurable.php b/app/code/Magento/Catalog/Model/Product/Type/Configurable.php index 66fa72bee49..d4f7ad732e9 100644 --- a/app/code/Magento/Catalog/Model/Product/Type/Configurable.php +++ b/app/code/Magento/Catalog/Model/Product/Type/Configurable.php @@ -178,7 +178,7 @@ 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\StoreManager $storeManager - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Helper\File\Storage\Database $fileStorageDb * @param \Magento\Filesystem $filesystem @@ -202,7 +202,7 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType \Magento\Catalog\Model\Resource\Product\Type\Configurable\Attribute\CollectionFactory $attributeCollectionFactory, \Magento\Catalog\Model\Resource\Product\Type\Configurable $catalogProductTypeConfigurable, \Magento\Core\Model\StoreManager $storeManager, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\Core\Helper\File\Storage\Database $fileStorageDb, \Magento\Filesystem $filesystem, diff --git a/app/code/Magento/Catalog/Model/Product/Type/Grouped.php b/app/code/Magento/Catalog/Model/Product/Type/Grouped.php index e2fc38812ae..4dbbc4bd442 100644 --- a/app/code/Magento/Catalog/Model/Product/Type/Grouped.php +++ b/app/code/Magento/Catalog/Model/Product/Type/Grouped.php @@ -103,7 +103,7 @@ class Grouped extends \Magento\Catalog\Model\Product\Type\AbstractType * @param \Magento\Catalog\Model\Resource\Product\Link $catalogProductLink * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Model\Product\Status $catalogProductStatus - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Helper\File\Storage\Database $fileStorageDb * @param \Magento\Filesystem $filesystem @@ -119,7 +119,7 @@ class Grouped extends \Magento\Catalog\Model\Product\Type\AbstractType \Magento\Catalog\Model\Resource\Product\Link $catalogProductLink, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\Product\Status $catalogProductStatus, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\Core\Helper\File\Storage\Database $fileStorageDb, \Magento\Filesystem $filesystem, diff --git a/app/code/Magento/Catalog/Model/Product/Type/Price.php b/app/code/Magento/Catalog/Model/Product/Type/Price.php index 33da634f46f..8d1b57b72d0 100644 --- a/app/code/Magento/Catalog/Model/Product/Type/Price.php +++ b/app/code/Magento/Catalog/Model/Product/Type/Price.php @@ -42,7 +42,7 @@ class Price /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -81,14 +81,14 @@ class Price * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Model\LocaleInterface $locale * @param \Magento\Customer\Model\Session $customerSession - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager */ public function __construct( \Magento\CatalogRule\Model\Resource\RuleFactory $ruleFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Core\Model\LocaleInterface $locale, \Magento\Customer\Model\Session $customerSession, - \Magento\Core\Model\Event\Manager $eventManager + \Magento\Event\ManagerInterface $eventManager ) { $this->_ruleFactory = $ruleFactory; $this->_storeManager = $storeManager; diff --git a/app/code/Magento/Catalog/Model/Product/Url.php b/app/code/Magento/Catalog/Model/Product/Url.php index c46a5d07b1a..8a6f5438008 100644 --- a/app/code/Magento/Catalog/Model/Product/Url.php +++ b/app/code/Magento/Catalog/Model/Product/Url.php @@ -84,7 +84,7 @@ class Url extends \Magento\Object * Construct * * @param \Magento\Core\Model\Url\RewriteFactory $urlRewriteFactory - * @param \Magento\Core\Model\UrlInterface $url + * @param \Magento\UrlInterface $url * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Helper\Category $catalogCategory * @param \Magento\Catalog\Helper\Product\Url $catalogProductUrl @@ -93,7 +93,7 @@ class Url extends \Magento\Object */ public function __construct( \Magento\Core\Model\Url\RewriteFactory $urlRewriteFactory, - \Magento\Core\Model\UrlInterface $url, + \Magento\UrlInterface $url, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Helper\Category $catalogCategory, \Magento\Catalog\Helper\Product\Url $catalogProductUrl, diff --git a/app/code/Magento/Catalog/Model/Resource/Category.php b/app/code/Magento/Catalog/Model/Resource/Category.php index ccdbecc9986..0c861a49f68 100644 --- a/app/code/Magento/Catalog/Model/Resource/Category.php +++ b/app/code/Magento/Catalog/Model/Resource/Category.php @@ -67,7 +67,7 @@ class Category extends \Magento\Catalog\Model\Resource\AbstractResource /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -96,7 +96,7 @@ class Category extends \Magento\Catalog\Model\Resource\AbstractResource * @param \Magento\Validator\UniversalFactory $universalFactory * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Model\Factory $modelFactory - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Catalog\Model\Resource\Category\TreeFactory $categoryTreeFactory * @param \Magento\Catalog\Model\Resource\Category\CollectionFactory $categoryCollectionFactory * @param array $data @@ -112,7 +112,7 @@ class Category extends \Magento\Catalog\Model\Resource\AbstractResource \Magento\Validator\UniversalFactory $universalFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\Factory $modelFactory, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Catalog\Model\Resource\Category\TreeFactory $categoryTreeFactory, \Magento\Catalog\Model\Resource\Category\CollectionFactory $categoryCollectionFactory, $data = array() diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Collection.php b/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Collection.php index 9ebda769687..81f129748ed 100644 --- a/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Collection.php +++ b/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Collection.php @@ -48,7 +48,7 @@ class Collection * Construct * * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -56,7 +56,7 @@ class Collection */ public function __construct( \Magento\Eav\Model\EntityFactory $eavEntityFactory, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Flat.php b/app/code/Magento/Catalog/Model/Resource/Category/Flat.php index 5ee993ac230..1d0540dd195 100644 --- a/app/code/Magento/Catalog/Model/Resource/Category/Flat.php +++ b/app/code/Magento/Catalog/Model/Resource/Category/Flat.php @@ -108,7 +108,7 @@ class Flat extends \Magento\Index\Model\Resource\AbstractResource /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -163,7 +163,7 @@ class Flat extends \Magento\Index\Model\Resource\AbstractResource * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Model\Config $catalogConfig * @param \Magento\Catalog\Model\Category $catalogCategory - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper */ public function __construct( @@ -173,7 +173,7 @@ class Flat extends \Magento\Index\Model\Resource\AbstractResource \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\Config $catalogConfig, \Magento\Catalog\Model\Category $catalogCategory, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Catalog\Model\Resource\Helper $resourceHelper ) { $this->_categoryFactory = $categoryFactory; diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Flat/Collection.php b/app/code/Magento/Catalog/Model/Resource/Category/Flat/Collection.php index 8b966529ddb..cbeca8bafa1 100644 --- a/app/code/Magento/Catalog/Model/Resource/Category/Flat/Collection.php +++ b/app/code/Magento/Catalog/Model/Resource/Category/Flat/Collection.php @@ -68,7 +68,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * Construct * * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -76,7 +76,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl */ public function __construct( \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Tree.php b/app/code/Magento/Catalog/Model/Resource/Category/Tree.php index 791c5029b49..dce8772cc17 100644 --- a/app/code/Magento/Catalog/Model/Resource/Category/Tree.php +++ b/app/code/Magento/Catalog/Model/Resource/Category/Tree.php @@ -31,7 +31,7 @@ class Tree extends \Magento\Data\Tree\Dbp const LEVEL_FIELD = 'level'; /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ private $_eventManager; @@ -113,7 +113,7 @@ class Tree extends \Magento\Data\Tree\Dbp * @param \Magento\Core\Model\CacheInterface $cache * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Model\Resource $resource - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Catalog\Model\Attribute\Config $attributeConfig * @param \Magento\Catalog\Model\Resource\Category\Collection\Factory $collectionFactory */ @@ -122,7 +122,7 @@ class Tree extends \Magento\Data\Tree\Dbp \Magento\Core\Model\CacheInterface $cache, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Core\Model\Resource $resource, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Catalog\Model\Attribute\Config $attributeConfig, \Magento\Catalog\Model\Resource\Category\Collection\Factory $collectionFactory ) { diff --git a/app/code/Magento/Catalog/Model/Resource/Collection/AbstractCollection.php b/app/code/Magento/Catalog/Model/Resource/Collection/AbstractCollection.php index 2b963e5a3af..c4457cace2d 100644 --- a/app/code/Magento/Catalog/Model/Resource/Collection/AbstractCollection.php +++ b/app/code/Magento/Catalog/Model/Resource/Collection/AbstractCollection.php @@ -54,7 +54,7 @@ class AbstractCollection extends \Magento\Eav\Model\Entity\Collection\AbstractCo /** * Construct * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -66,7 +66,7 @@ class AbstractCollection extends \Magento\Eav\Model\Entity\Collection\AbstractCo * @param \Magento\Core\Model\StoreManagerInterface $storeManager */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Catalog/Model/Resource/Layer/Filter/Price.php b/app/code/Magento/Catalog/Model/Resource/Layer/Filter/Price.php index de00891ab74..77e22eabd43 100644 --- a/app/code/Magento/Catalog/Model/Resource/Layer/Filter/Price.php +++ b/app/code/Magento/Catalog/Model/Resource/Layer/Filter/Price.php @@ -44,7 +44,7 @@ class Price extends \Magento\Core\Model\Resource\Db\AbstractDb /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -53,11 +53,11 @@ class Price extends \Magento\Core\Model\Resource\Db\AbstractDb * * * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Resource $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Resource $resource ) { $this->_eventManager = $eventManager; 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 c30db7a0ebf..8add8de7aa6 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 @@ -40,7 +40,7 @@ class Image /** * Dir model * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -54,12 +54,12 @@ class Image /** * Construct * - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\Logger $logger * @param \Magento\Core\Model\File\UploaderFactory $fileUploaderFactory */ public function __construct( - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Core\Model\Logger $logger, \Magento\Core\Model\File\UploaderFactory $fileUploaderFactory ) { @@ -94,7 +94,7 @@ class Image } catch (\Exception $e){ return $this; } - $uploader->save($this->_dir->getDir(\Magento\Core\Model\Dir::MEDIA) . '/catalog/product'); + $uploader->save($this->_dir->getDir(\Magento\App\Dir::MEDIA) . '/catalog/product'); $fileName = $uploader->getUploadedFileName(); if ($fileName) { diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Collection.php b/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Collection.php index 55d4ee5b172..8c8e3e87379 100644 --- a/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Collection.php +++ b/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Collection.php @@ -48,7 +48,7 @@ class Collection * Construct * * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -56,7 +56,7 @@ class Collection */ public function __construct( \Magento\Eav\Model\EntityFactory $eavEntityFactory, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Collection.php b/app/code/Magento/Catalog/Model/Resource/Product/Collection.php index c597ec85c3a..d9317c9a798 100644 --- a/app/code/Magento/Catalog/Model/Resource/Product/Collection.php +++ b/app/code/Magento/Catalog/Model/Resource/Product/Collection.php @@ -260,7 +260,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Collection\AbstractColl /** * Construct * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -281,7 +281,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Collection\AbstractColl * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Collection/AssociatedProduct.php b/app/code/Magento/Catalog/Model/Resource/Product/Collection/AssociatedProduct.php index 681ca01a2b2..caee095e4d7 100644 --- a/app/code/Magento/Catalog/Model/Resource/Product/Collection/AssociatedProduct.php +++ b/app/code/Magento/Catalog/Model/Resource/Product/Collection/AssociatedProduct.php @@ -57,7 +57,7 @@ class AssociatedProduct protected $_configurationHelper; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -80,7 +80,7 @@ class AssociatedProduct * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Compare/Item/Collection.php b/app/code/Magento/Catalog/Model/Resource/Product/Compare/Item/Collection.php index a974a08b8c5..7b05d36586c 100644 --- a/app/code/Magento/Catalog/Model/Resource/Product/Compare/Item/Collection.php +++ b/app/code/Magento/Catalog/Model/Resource/Product/Compare/Item/Collection.php @@ -73,7 +73,7 @@ class Collection protected $_catalogProductCompareItem; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -96,7 +96,7 @@ class Collection * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Flat/Indexer.php b/app/code/Magento/Catalog/Model/Resource/Product/Flat/Indexer.php index 4532a74fd3e..70c22b43374 100644 --- a/app/code/Magento/Catalog/Model/Resource/Product/Flat/Indexer.php +++ b/app/code/Magento/Catalog/Model/Resource/Product/Flat/Indexer.php @@ -120,7 +120,7 @@ class Indexer extends \Magento\Index\Model\Resource\AbstractResource /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -180,7 +180,7 @@ class Indexer extends \Magento\Index\Model\Resource\AbstractResource * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Model\Resource $resource * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Eav\Model\Config $eavConfig * @param \Magento\Catalog\Model\Attribute\Config $attributeConfig @@ -198,7 +198,7 @@ class Indexer extends \Magento\Index\Model\Resource\AbstractResource \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Core\Model\Resource $resource, \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\Eav\Model\Config $eavConfig, \Magento\Catalog\Model\Attribute\Config $attributeConfig, diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/AbstractEav.php b/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/AbstractEav.php index 07182bd588d..39da61a6335 100644 --- a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/AbstractEav.php +++ b/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/AbstractEav.php @@ -40,7 +40,7 @@ abstract class AbstractEav /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -49,12 +49,12 @@ abstract class AbstractEav * * @param \Magento\Core\Model\Resource $resource * @param \Magento\Eav\Model\Config $eavConfig - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager */ public function __construct( \Magento\Core\Model\Resource $resource, \Magento\Eav\Model\Config $eavConfig, - \Magento\Core\Model\Event\Manager $eventManager + \Magento\Event\ManagerInterface $eventManager ) { $this->_eventManager = $eventManager; parent::__construct($resource, $eavConfig); diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/Source.php b/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/Source.php index b4057548fba..94b16cbdf10 100644 --- a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/Source.php +++ b/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/Source.php @@ -49,13 +49,13 @@ class Source * * @param \Magento\Core\Model\Resource $resource * @param \Magento\Eav\Model\Config $eavConfig - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper */ public function __construct( \Magento\Core\Model\Resource $resource, \Magento\Eav\Model\Config $eavConfig, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Catalog\Model\Resource\Helper $resourceHelper ) { $this->_resourceHelper = $resourceHelper; diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/DefaultPrice.php b/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/DefaultPrice.php index 05e7373ce06..85338f590a0 100644 --- a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/DefaultPrice.php +++ b/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/DefaultPrice.php @@ -63,20 +63,20 @@ class DefaultPrice /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; /** * @param \Magento\Core\Model\Resource $resource * @param \Magento\Eav\Model\Config $eavConfig - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData */ public function __construct( \Magento\Core\Model\Resource $resource, \Magento\Eav\Model\Config $eavConfig, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData ) { $this->_eventManager = $eventManager; diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Option/Collection.php b/app/code/Magento/Catalog/Model/Resource/Product/Option/Collection.php index db36bbff79b..06125badce5 100644 --- a/app/code/Magento/Catalog/Model/Resource/Product/Option/Collection.php +++ b/app/code/Magento/Catalog/Model/Resource/Product/Option/Collection.php @@ -52,7 +52,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * * @param \Magento\Catalog\Model\Resource\Product\Option\Value\CollectionFactory $optionValueCollectionFactory * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -61,7 +61,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl public function __construct( \Magento\Catalog\Model\Resource\Product\Option\Value\CollectionFactory $optionValueCollectionFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Type/Configurable/Attribute/Collection.php b/app/code/Magento/Catalog/Model/Resource/Product/Type/Configurable/Attribute/Collection.php index 464ff82f985..8bcc774f8da 100644 --- a/app/code/Magento/Catalog/Model/Resource/Product/Type/Configurable/Attribute/Collection.php +++ b/app/code/Magento/Catalog/Model/Resource/Product/Type/Configurable/Attribute/Collection.php @@ -81,7 +81,7 @@ class Collection * * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Model\Product\Type\Configurable $catalogProductTypeConfigurable - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Catalog\Helper\Data $catalogData * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy @@ -91,7 +91,7 @@ class Collection public function __construct( \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\Product\Type\Configurable $catalogProductTypeConfigurable, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Catalog\Helper\Data $catalogData, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Type/Grouped/AssociatedProductsCollection.php b/app/code/Magento/Catalog/Model/Resource/Product/Type/Grouped/AssociatedProductsCollection.php index 6c399e32ebe..af0a033e753 100644 --- a/app/code/Magento/Catalog/Model/Resource/Product/Type/Grouped/AssociatedProductsCollection.php +++ b/app/code/Magento/Catalog/Model/Resource/Product/Type/Grouped/AssociatedProductsCollection.php @@ -53,7 +53,7 @@ class AssociatedProductsCollection /** * Construct * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -76,7 +76,7 @@ class AssociatedProductsCollection * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Catalog/etc/di.xml b/app/code/Magento/Catalog/etc/di.xml index 99b245d3e68..6ab78d7fa06 100644 --- a/app/code/Magento/Catalog/etc/di.xml +++ b/app/code/Magento/Catalog/etc/di.xml @@ -29,15 +29,7 @@ <type name="Magento\Log\Model\Resource\Log"> <plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" /> </type> - <type name="Magento\Catalog\Model\Product\Attribute\Backend\Price"> - <param name="coreString"> - <instance type="Magento\Core\Helper\String\Proxy" /> - </param> - </type> <type name="Magento\Catalog\Helper\Product\View"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> <param name="messageModels"> <value> <catalog>Magento\Catalog\Model\Session</catalog> @@ -46,78 +38,21 @@ </param> </type> <type name="Magento\Catalog\Helper\Product"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> <param name="typeSwitcherLabel"> <value>Virtual</value> </param> </type> - <type name="Magento\Catalog\Model\Category"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Catalog\Model\Product\Attribute\Backend\Media"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Catalog\Model\Product\Attribute\Source\Inputtype"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Catalog\Model\Product\Status"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Catalog\Model\Product\Type\AbstractType"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Catalog\Model\Product\Type\Price"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> <type name="Magento\Catalog\Model\Product"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> <param name="catalogProductStatus"> <instance type="Magento\Catalog\Model\Product\Status\Proxy" /> </param> </type> <type name="Magento\Catalog\Model\Resource\Category\Flat"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> <param name="catalogCategory"> <instance type="Magento\Catalog\Model\Category\Proxy" /> </param> </type> - <type name="Magento\Catalog\Model\Resource\Category\Tree"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Catalog\Model\Resource\Category"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Catalog\Model\Resource\Layer\Filter\Price"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> <type name="Magento\Catalog\Model\Resource\Product\Flat\Indexer"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> <param name="maxIndexCount"> <value type="int">64</value> </param> @@ -127,16 +62,6 @@ </value> </param> </type> - <type name="Magento\Catalog\Model\Resource\Product\Indexer\Eav\AbstractEav"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> <type name="Magento\Catalog\Model\Resource\Product\Collection"> <param name="catalogUrl"> <instance type="Magento\Catalog\Model\Resource\Url\Proxy" /> @@ -156,14 +81,6 @@ </value> </param> </type> - <type name="Magento\Catalog\Model\Attribute\Config\Data"> - <param name="cacheId"> - <value>catalog_attributes</value> - </param> - <param name="scope"> - <value type="const">Magento\Core\Model\App\Area::AREA_GLOBAL</value> - </param> - </type> <type name="Magento\Catalog\Helper\Product\Flat"> <param name="addFilterableAttrs"> <value type="int">0</value> @@ -188,12 +105,12 @@ </param> </type> <type name="Magento\Catalog\Block\Layer\View"> - <param name="layer"> + <param name="catalogLayer"> <instance type="Magento\Catalog\Model\Layer\Proxy" /> </param> </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <catalog_setup>Magento\Catalog\Model\Resource\Setup</catalog_setup> </value> diff --git a/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Minsaleqty.php b/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Minsaleqty.php index d94f9641de8..2a7dd937c47 100644 --- a/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Minsaleqty.php +++ b/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Minsaleqty.php @@ -54,7 +54,6 @@ class Minsaleqty array('data' => array('is_render_to_js_template' => true)) ); $this->_groupRenderer->setClass('customer_group_select'); - $this->_groupRenderer->setExtraParams('style="width:120px"'); } return $this->_groupRenderer; } @@ -70,7 +69,6 @@ class Minsaleqty )); $this->addColumn('min_sale_qty', array( 'label' => __('Minimum Qty'), - 'style' => 'width:100px', )); $this->_addAfter = false; $this->_addButtonLabel = __('Add Minimum Qty'); diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Item/Collection.php b/app/code/Magento/CatalogInventory/Model/Resource/Stock/Item/Collection.php index 03351c04217..efa15f0d8fe 100644 --- a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Item/Collection.php +++ b/app/code/Magento/CatalogInventory/Model/Resource/Stock/Item/Collection.php @@ -37,7 +37,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl protected $_storeManager; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -45,7 +45,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\Abstract $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/CatalogInventory/etc/di.xml b/app/code/Magento/CatalogInventory/etc/di.xml index a4040c25196..00ca544b8da 100644 --- a/app/code/Magento/CatalogInventory/etc/di.xml +++ b/app/code/Magento/CatalogInventory/etc/di.xml @@ -47,8 +47,8 @@ <instance type="Magento\CatalogInventory\Helper\Data\Proxy" /> </param> </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <cataloginventory_setup>Magento\Eav\Model\Entity\Setup</cataloginventory_setup> </value> diff --git a/app/code/Magento/CatalogRule/Model/Resource/Rule.php b/app/code/Magento/CatalogRule/Model/Resource/Rule.php index fa4d79a4e66..63a3ce57614 100644 --- a/app/code/Magento/CatalogRule/Model/Resource/Rule.php +++ b/app/code/Magento/CatalogRule/Model/Resource/Rule.php @@ -69,7 +69,7 @@ class Rule extends \Magento\Rule\Model\Resource\AbstractResource /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -98,7 +98,7 @@ class Rule extends \Magento\Rule\Model\Resource\AbstractResource * @param \Magento\Catalog\Model\Product\ConditionFactory $conditionFactory * @param \Magento\Core\Model\Date $coreDate * @param \Magento\Eav\Model\Config $eavConfig - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\CatalogRule\Helper\Data $catalogRuleData * @param \Magento\Core\Model\Resource $resource */ @@ -107,7 +107,7 @@ class Rule extends \Magento\Rule\Model\Resource\AbstractResource \Magento\Catalog\Model\Product\ConditionFactory $conditionFactory, \Magento\Core\Model\Date $coreDate, \Magento\Eav\Model\Config $eavConfig, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\CatalogRule\Helper\Data $catalogRuleData, \Magento\Core\Model\Resource $resource ) { diff --git a/app/code/Magento/CatalogRule/Model/Rule/Action/Collection.php b/app/code/Magento/CatalogRule/Model/Rule/Action/Collection.php index a671806ffe3..ad4bbde5a6f 100644 --- a/app/code/Magento/CatalogRule/Model/Rule/Action/Collection.php +++ b/app/code/Magento/CatalogRule/Model/Rule/Action/Collection.php @@ -32,13 +32,13 @@ class Collection extends \Magento\Rule\Model\Action\Collection /** * @param \Magento\Core\Model\View\Url $viewUrl * @param \Magento\Rule\Model\ActionFactory $actionFactory - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @param array $data */ public function __construct( \Magento\Core\Model\View\Url $viewUrl, \Magento\Rule\Model\ActionFactory $actionFactory, - \Magento\Core\Model\Layout $layout, + \Magento\View\LayoutInterface $layout, array $data = array() ) { parent::__construct($viewUrl, $actionFactory, $layout, $data); diff --git a/app/code/Magento/CatalogRule/Model/Rule/Job.php b/app/code/Magento/CatalogRule/Model/Rule/Job.php index 093cf6098da..06867b2b6cf 100644 --- a/app/code/Magento/CatalogRule/Model/Rule/Job.php +++ b/app/code/Magento/CatalogRule/Model/Rule/Job.php @@ -47,16 +47,16 @@ class Job extends \Magento\Object /** * Instance of event manager model * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; /** * Basic object initialization * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager */ - public function __construct(\Magento\Core\Model\Event\Manager $eventManager) + public function __construct(\Magento\Event\ManagerInterface $eventManager) { $this->_eventManager = $eventManager; } diff --git a/app/code/Magento/CatalogRule/etc/di.xml b/app/code/Magento/CatalogRule/etc/di.xml index 1aaed99347b..b0fde245ae4 100644 --- a/app/code/Magento/CatalogRule/etc/di.xml +++ b/app/code/Magento/CatalogRule/etc/di.xml @@ -24,14 +24,9 @@ */ --> <config> - <type name="Magento\CatalogRule\Model\Rule\Job"> - <param name="helper"> - <instance type="Magento\CatalogRule\Helper\Data" /> - </param> - </type> <type name="Magento\CatalogRule\Model\Resource\Rule"> <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> + <instance type="Magento\Event\Manager\Proxy" /> </param> </type> <type name="Magento\CatalogRule\Model\Resource\Rule\Collection" shared="false" /> @@ -46,8 +41,8 @@ <instance type="Magento\Backend\Model\Session\Proxy" /> </param> </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <catalogrule_setup>Magento\Core\Model\Resource\Setup\Generic</catalogrule_setup> </value> diff --git a/app/code/Magento/CatalogSearch/Model/Fulltext.php b/app/code/Magento/CatalogSearch/Model/Fulltext.php index b4e62cc844e..dd544df5bba 100644 --- a/app/code/Magento/CatalogSearch/Model/Fulltext.php +++ b/app/code/Magento/CatalogSearch/Model/Fulltext.php @@ -59,7 +59,7 @@ class Fulltext extends \Magento\Core\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -71,7 +71,7 @@ class Fulltext extends \Magento\Core\Model\AbstractModel protected $_coreStoreConfig; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\CatalogSearch\Helper\Data $catalogSearchData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry @@ -81,7 +81,7 @@ class Fulltext extends \Magento\Core\Model\AbstractModel * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\CatalogSearch\Helper\Data $catalogSearchData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, diff --git a/app/code/Magento/CatalogSearch/Model/Resource/Advanced.php b/app/code/Magento/CatalogSearch/Model/Resource/Advanced.php index 0b3a8016e0c..5d3ebe37e58 100644 --- a/app/code/Magento/CatalogSearch/Model/Resource/Advanced.php +++ b/app/code/Magento/CatalogSearch/Model/Resource/Advanced.php @@ -39,7 +39,7 @@ class Advanced extends \Magento\Core\Model\Resource\Db\AbstractDb /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -55,12 +55,12 @@ class Advanced extends \Magento\Core\Model\Resource\Db\AbstractDb * * @param \Magento\Core\Model\Resource $resource * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager */ public function __construct( \Magento\Core\Model\Resource $resource, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\Event\Manager $eventManager + \Magento\Event\ManagerInterface $eventManager ) { $this->_storeManager = $storeManager; $this->_eventManager = $eventManager; diff --git a/app/code/Magento/CatalogSearch/Model/Resource/Advanced/Collection.php b/app/code/Magento/CatalogSearch/Model/Resource/Advanced/Collection.php index 0ab32ec2cb8..9ae353ae4c3 100644 --- a/app/code/Magento/CatalogSearch/Model/Resource/Advanced/Collection.php +++ b/app/code/Magento/CatalogSearch/Model/Resource/Advanced/Collection.php @@ -44,7 +44,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection protected $_date; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -66,7 +66,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/CatalogSearch/Model/Resource/Fulltext.php b/app/code/Magento/CatalogSearch/Model/Resource/Fulltext.php index 715a44feda9..04a52573293 100644 --- a/app/code/Magento/CatalogSearch/Model/Resource/Fulltext.php +++ b/app/code/Magento/CatalogSearch/Model/Resource/Fulltext.php @@ -114,7 +114,7 @@ class Fulltext extends \Magento\Core\Model\Resource\Db\AbstractDb /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -153,7 +153,7 @@ class Fulltext extends \Magento\Core\Model\Resource\Db\AbstractDb * @param \Magento\Catalog\Model\Product\Status $catalogProductStatus * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $productAttributeCollFactory * @param \Magento\CatalogSearch\Model\Resource\EngineProvider $engineProvider - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\String $coreString * @param \Magento\CatalogSearch\Helper\Data $catalogSearchData * @param \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig @@ -167,7 +167,7 @@ class Fulltext extends \Magento\Core\Model\Resource\Db\AbstractDb \Magento\Catalog\Model\Product\Status $catalogProductStatus, \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $productAttributeCollFactory, \Magento\CatalogSearch\Model\Resource\EngineProvider $engineProvider, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\String $coreString, \Magento\CatalogSearch\Helper\Data $catalogSearchData, \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig, diff --git a/app/code/Magento/CatalogSearch/Model/Resource/Fulltext/Collection.php b/app/code/Magento/CatalogSearch/Model/Resource/Fulltext/Collection.php index cd8e028c22a..5449cc3cc9f 100644 --- a/app/code/Magento/CatalogSearch/Model/Resource/Fulltext/Collection.php +++ b/app/code/Magento/CatalogSearch/Model/Resource/Fulltext/Collection.php @@ -51,7 +51,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection protected $_catalogSearchFulltext; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -74,7 +74,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/CatalogSearch/Model/Resource/Query/Collection.php b/app/code/Magento/CatalogSearch/Model/Resource/Query/Collection.php index 3d8141a4ac7..487230cd602 100644 --- a/app/code/Magento/CatalogSearch/Model/Resource/Query/Collection.php +++ b/app/code/Magento/CatalogSearch/Model/Resource/Query/Collection.php @@ -60,7 +60,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl /** * Construct * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -69,7 +69,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/CatalogSearch/Model/Resource/Search/Collection.php b/app/code/Magento/CatalogSearch/Model/Resource/Search/Collection.php index 227b3b25a78..316c6498933 100644 --- a/app/code/Magento/CatalogSearch/Model/Resource/Search/Collection.php +++ b/app/code/Magento/CatalogSearch/Model/Resource/Search/Collection.php @@ -63,7 +63,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection protected $_attributeCollectionFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -84,7 +84,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection * @param \Magento\Core\Model\Resource $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/CatalogSearch/etc/di.xml b/app/code/Magento/CatalogSearch/etc/di.xml index d945eff955d..cad205dce5f 100644 --- a/app/code/Magento/CatalogSearch/etc/di.xml +++ b/app/code/Magento/CatalogSearch/etc/di.xml @@ -24,21 +24,6 @@ */ --> <config> - <type name="Magento\CatalogSearch\Model\Fulltext"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\CatalogSearch\Model\Resource\Advanced"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\CatalogSearch\Model\Resource\Fulltext"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> <type name="Magento\CatalogSearch\Block\Layer"> <param name="layer"> <instance type="Magento\CatalogSearch\Model\Layer\Proxy" /> diff --git a/app/code/Magento/Centinel/Helper/Data.php b/app/code/Magento/Centinel/Helper/Data.php index 189c68ed3aa..146401eadf0 100644 --- a/app/code/Magento/Centinel/Helper/Data.php +++ b/app/code/Magento/Centinel/Helper/Data.php @@ -36,16 +36,18 @@ class Data extends \Magento\Core\Helper\AbstractHelper /** * Layout factory * - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; /** * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout */ - public function __construct(\Magento\Core\Helper\Context $context, \Magento\Core\Model\Layout $layout) - { + public function __construct( + \Magento\Core\Helper\Context $context, + \Magento\View\LayoutInterface $layout + ) { $this->_layout = $layout; parent::__construct($context); } diff --git a/app/code/Magento/Centinel/Model/Service.php b/app/code/Magento/Centinel/Model/Service.php index 509360417d9..8f9721f4ed1 100644 --- a/app/code/Magento/Centinel/Model/Service.php +++ b/app/code/Magento/Centinel/Model/Service.php @@ -78,14 +78,14 @@ class Service extends \Magento\Object /** * Backend url * - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_backendUrl; /** * Frontend url * - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_frontendUrl; @@ -127,8 +127,8 @@ class Service extends \Magento\Object /** * @param \Magento\Centinel\Model\Config $config * @param \Magento\Centinel\Model\Api $api - * @param \Magento\Core\Model\UrlInterface $backendUrl - * @param \Magento\Core\Model\UrlInterface $frontendUrl + * @param \Magento\UrlInterface $backendUrl + * @param \Magento\UrlInterface $frontendUrl * @param \Magento\Core\Model\Session\AbstractSession $centinelSession * @param \Magento\Core\Model\Session $session * @param \Magento\Core\Model\StoreManagerInterface $storeManager @@ -138,8 +138,8 @@ class Service extends \Magento\Object public function __construct( \Magento\Centinel\Model\Config $config, \Magento\Centinel\Model\Api $api, - \Magento\Core\Model\UrlInterface $backendUrl, - \Magento\Core\Model\UrlInterface $frontendUrl, + \Magento\UrlInterface $backendUrl, + \Magento\UrlInterface $frontendUrl, \Magento\Core\Model\Session\AbstractSession $centinelSession, \Magento\Core\Model\Session $session, \Magento\Core\Model\StoreManagerInterface $storeManager, diff --git a/app/code/Magento/Centinel/etc/adminhtml/di.xml b/app/code/Magento/Centinel/etc/adminhtml/di.xml index 767d9b1c11b..a48080f8cdd 100644 --- a/app/code/Magento/Centinel/etc/adminhtml/di.xml +++ b/app/code/Magento/Centinel/etc/adminhtml/di.xml @@ -32,15 +32,7 @@ <value>adminhtml</value> </param> </virtualType> - <type name="Magento\Centinel\Controller\Adminhtml\Centinel\Index"> - <param name="checkoutCart"> - <instance type="Magento\Adminhtml\Model\Sales\Order\Create" /> - </param> - </type> <type name="Magento\Centinel\Model\Service"> - <param name="checkoutCart"> - <instance type="Magento\Adminhtml\Model\Sales\Order\Create" /> - </param> <param name="backendUrl"> <instance type="Magento\Backend\Model\Url" /> </param> diff --git a/app/code/Magento/Checkout/Block/Cart.php b/app/code/Magento/Checkout/Block/Cart.php index 777b88b2089..f7db27f4821 100644 --- a/app/code/Magento/Checkout/Block/Cart.php +++ b/app/code/Magento/Checkout/Block/Cart.php @@ -46,7 +46,7 @@ class Cart extends \Magento\Checkout\Block\Cart\AbstractCart protected $_catalogUrlBuilder; /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; @@ -56,7 +56,7 @@ class Cart extends \Magento\Checkout\Block\Cart\AbstractCart * @param \Magento\Core\Block\Template\Context $context * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Model\Resource\Url $catalogUrlBuilder - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Customer\Model\Session $customerSession * @param \Magento\Checkout\Model\Session $checkoutSession * @param array $data @@ -69,7 +69,7 @@ class Cart extends \Magento\Checkout\Block\Cart\AbstractCart \Magento\Checkout\Model\Session $checkoutSession, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\Resource\Url $catalogUrlBuilder, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\UrlInterface $urlBuilder, array $data = array() ) { $this->_storeManager = $storeManager; diff --git a/app/code/Magento/Checkout/Block/Cart/AbstractCart.php b/app/code/Magento/Checkout/Block/Cart/AbstractCart.php index a3723987d0a..19183c6d6ba 100644 --- a/app/code/Magento/Checkout/Block/Cart/AbstractCart.php +++ b/app/code/Magento/Checkout/Block/Cart/AbstractCart.php @@ -109,7 +109,7 @@ class AbstractCart extends \Magento\Core\Block\Template public function getItemRenderer($type) { $renderer = $this->getChildBlock($type) ?: $this->getChildBlock(self::DEFAULT_TYPE); - if (!$renderer instanceof \Magento\Core\Block) { + if (!$renderer instanceof \Magento\View\Element\BlockInterface) { throw new \RuntimeException('Renderer for type "' . $type . '" does not exist.'); } $renderer->setRenderedBlock($this); diff --git a/app/code/Magento/Checkout/Block/Multishipping/Overview.php b/app/code/Magento/Checkout/Block/Multishipping/Overview.php index 8cdda3870d5..e9219bdbae1 100644 --- a/app/code/Magento/Checkout/Block/Multishipping/Overview.php +++ b/app/code/Magento/Checkout/Block/Multishipping/Overview.php @@ -367,7 +367,7 @@ class Overview extends \Magento\Sales\Block\Items\AbstractItems protected function _getRowItemRenderer($type) { $renderer = $this->getChildBlock($this->_getRowItemType($type)); - if ($renderer instanceof \Magento\Core\Block) { + if ($renderer instanceof \Magento\View\Element\BlockInterface) { $renderer->setRenderedBlock($this); return $renderer; } diff --git a/app/code/Magento/Checkout/Controller/Cart.php b/app/code/Magento/Checkout/Controller/Cart.php index bb3af4f700d..ebe8bfcb12c 100644 --- a/app/code/Magento/Checkout/Controller/Cart.php +++ b/app/code/Magento/Checkout/Controller/Cart.php @@ -482,7 +482,7 @@ class Cart $this->_objectManager->get('Magento\Core\Model\Logger')->logException($e); } } - $this->_redirectReferer($this->_objectManager->create('Magento\Core\Model\UrlInterface')->getUrl('*/*')); + $this->_redirectReferer($this->_objectManager->create('Magento\UrlInterface')->getUrl('*/*')); } /** diff --git a/app/code/Magento/Checkout/Controller/Multishipping.php b/app/code/Magento/Checkout/Controller/Multishipping.php index 0507562f7e8..7ac37e99e25 100644 --- a/app/code/Magento/Checkout/Controller/Multishipping.php +++ b/app/code/Magento/Checkout/Controller/Multishipping.php @@ -550,7 +550,7 @@ class Multishipping extends \Magento\Checkout\Controller\Action public function redirectLogin() { $this->setFlag('', 'no-dispatch', true); - $url = $this->_objectManager->create('Magento\Core\Model\UrlInterface') + $url = $this->_objectManager->create('Magento\UrlInterface') ->getUrl('*/*', array('_secure' => true)); $this->_objectManager->get('Magento\Customer\Model\Session')->setBeforeAuthUrl($url); diff --git a/app/code/Magento/Checkout/Controller/Multishipping/Address.php b/app/code/Magento/Checkout/Controller/Multishipping/Address.php index 9885f2c99b0..cebec534880 100644 --- a/app/code/Magento/Checkout/Controller/Multishipping/Address.php +++ b/app/code/Magento/Checkout/Controller/Multishipping/Address.php @@ -36,17 +36,17 @@ namespace Magento\Checkout\Controller\Multishipping; class Address extends \Magento\Core\Controller\Front\Action { /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; /** * @param \Magento\Core\Controller\Varien\Action\Context $context - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder */ public function __construct( \Magento\Core\Controller\Varien\Action\Context $context, - \Magento\Core\Model\UrlInterface $urlBuilder + \Magento\UrlInterface $urlBuilder ) { $this->_urlBuilder = $urlBuilder; parent::__construct($context); diff --git a/app/code/Magento/Checkout/Controller/Onepage.php b/app/code/Magento/Checkout/Controller/Onepage.php index 6f89d5611f1..cc6869c7f66 100644 --- a/app/code/Magento/Checkout/Controller/Onepage.php +++ b/app/code/Magento/Checkout/Controller/Onepage.php @@ -214,7 +214,7 @@ class Onepage extends \Magento\Checkout\Controller\Action return; } $this->_objectManager->get('Magento\Checkout\Model\Session')->setCartWasUpdated(false); - $currentUrl = $this->_objectManager->create('Magento\Core\Model\UrlInterface') + $currentUrl = $this->_objectManager->create('Magento\UrlInterface') ->getUrl('*/*/*', array('_secure'=>true)); $this->_objectManager->get('Magento\Customer\Model\Session')->setBeforeAuthUrl($currentUrl); $this->getOnepage()->initCheckout(); diff --git a/app/code/Magento/Checkout/Helper/Data.php b/app/code/Magento/Checkout/Helper/Data.php index 25f70cec378..ba27c5b1dc1 100644 --- a/app/code/Magento/Checkout/Helper/Data.php +++ b/app/code/Magento/Checkout/Helper/Data.php @@ -41,7 +41,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -78,7 +78,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper protected $_emailTemplFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Context $context * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\StoreManagerInterface $storeManager @@ -88,7 +88,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper * @param \Magento\Core\Model\Email\TemplateFactory $emailTemplFactory */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Context $context, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\StoreManagerInterface $storeManager, diff --git a/app/code/Magento/Checkout/Model/Cart.php b/app/code/Magento/Checkout/Model/Cart.php index 74fc00ab18d..667ecd068ae 100644 --- a/app/code/Magento/Checkout/Model/Cart.php +++ b/app/code/Magento/Checkout/Model/Cart.php @@ -52,7 +52,7 @@ class Cart extends \Magento\Object implements \Magento\Checkout\Model\Cart\CartI /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -94,7 +94,7 @@ class Cart extends \Magento\Object implements \Magento\Checkout\Model\Cart\CartI protected $_message; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Catalog\Model\ProductFactory $productFactory * @param \Magento\Core\Model\StoreManagerInterface $storeManager @@ -105,7 +105,7 @@ class Cart extends \Magento\Object implements \Magento\Checkout\Model\Cart\CartI * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Catalog\Model\ProductFactory $productFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, diff --git a/app/code/Magento/Checkout/Model/Session.php b/app/code/Magento/Checkout/Model/Session.php index 37e56e7ac27..4aa73f1edd7 100644 --- a/app/code/Magento/Checkout/Model/Session.php +++ b/app/code/Magento/Checkout/Model/Session.php @@ -85,7 +85,7 @@ class Session extends \Magento\Core\Model\Session\AbstractSession protected $_quoteFactory; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; diff --git a/app/code/Magento/Checkout/Model/Type/Multishipping.php b/app/code/Magento/Checkout/Model/Type/Multishipping.php index 9cd7b37e1b9..c7b60d8f68a 100644 --- a/app/code/Magento/Checkout/Model/Type/Multishipping.php +++ b/app/code/Magento/Checkout/Model/Type/Multishipping.php @@ -45,7 +45,7 @@ class Multishipping extends \Magento\Checkout\Model\Type\AbstractType /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -80,7 +80,7 @@ class Multishipping extends \Magento\Checkout\Model\Type\AbstractType * @param \Magento\Checkout\Model\Session $checkoutSession * @param \Magento\Customer\Model\Session $customerSession * @param \Magento\Sales\Model\OrderFactory $orderFactory - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\Session $session * @param \Magento\Sales\Model\Quote\AddressFactory $addressFactory @@ -92,7 +92,7 @@ class Multishipping extends \Magento\Checkout\Model\Type\AbstractType \Magento\Checkout\Model\Session $checkoutSession, \Magento\Customer\Model\Session $customerSession, \Magento\Sales\Model\OrderFactory $orderFactory, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\Session $session, \Magento\Sales\Model\Quote\AddressFactory $addressFactory, diff --git a/app/code/Magento/Checkout/Model/Type/Onepage.php b/app/code/Magento/Checkout/Model/Type/Onepage.php index 04b23320894..4258599363d 100644 --- a/app/code/Magento/Checkout/Model/Type/Onepage.php +++ b/app/code/Magento/Checkout/Model/Type/Onepage.php @@ -87,7 +87,7 @@ class Onepage /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -97,7 +97,7 @@ class Onepage protected $_storeManager; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; @@ -127,7 +127,7 @@ class Onepage protected $_orderFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Checkout\Helper\Data $helper * @param \Magento\Customer\Helper\Data $customerData * @param \Magento\Core\Helper\Data $coreData @@ -135,7 +135,7 @@ class Onepage * @param \Magento\Checkout\Model\Session $checkoutSession * @param \Magento\Customer\Model\Session $customerSession * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @param \Magento\Customer\Model\AddressFactory $customrAddrFactory * @param \Magento\Customer\Model\FormFactory $customerFormFactory * @param \Magento\Customer\Model\CustomerFactory $customerFactory @@ -143,7 +143,7 @@ class Onepage * @param \Magento\Sales\Model\OrderFactory $orderFactory */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Checkout\Helper\Data $helper, \Magento\Customer\Helper\Data $customerData, \Magento\Core\Helper\Data $coreData, @@ -151,7 +151,7 @@ class Onepage \Magento\Checkout\Model\Session $checkoutSession, \Magento\Customer\Model\Session $customerSession, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Controller\Request\Http $request, + \Magento\App\RequestInterface $request, \Magento\Customer\Model\AddressFactory $customrAddrFactory, \Magento\Customer\Model\FormFactory $customerFormFactory, \Magento\Customer\Model\CustomerFactory $customerFactory, diff --git a/app/code/Magento/Checkout/etc/di.xml b/app/code/Magento/Checkout/etc/di.xml index d190f74355e..cd103944fe6 100644 --- a/app/code/Magento/Checkout/etc/di.xml +++ b/app/code/Magento/Checkout/etc/di.xml @@ -24,33 +24,8 @@ */ --> <config> - <type name="Magento\Checkout\Helper\Data"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Checkout\Model\Cart\Api"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Checkout\Model\Cart"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Checkout\Model\Type\Multishipping"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Checkout\Model\Type\Onepage"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <checkout_setup>Magento\Checkout\Model\Resource\Setup</checkout_setup> </value> diff --git a/app/code/Magento/Cms/Controller/Router.php b/app/code/Magento/Cms/Controller/Router.php index d41cf1c4c16..4dae02e646c 100644 --- a/app/code/Magento/Cms/Controller/Router.php +++ b/app/code/Magento/Cms/Controller/Router.php @@ -34,12 +34,12 @@ */ namespace Magento\Cms\Controller; -class Router extends \Magento\Core\Controller\Varien\Router\AbstractRouter +class Router extends \Magento\App\Router\AbstractRouter { /** * Event manager * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -60,43 +60,43 @@ class Router extends \Magento\Core\Controller\Varien\Router\AbstractRouter /** * Config primary * - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; /** * Url * - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_url; /** * Response * - * @var \Magento\Core\Controller\Response\Http + * @var \Magento\App\ResponseInterface */ protected $_response; /** * Construct * - * @param \Magento\Core\Controller\Varien\Action\Factory $controllerFactory - * @param \Magento\Core\Model\Event\Manager $eventManager - * @param \Magento\Core\Model\UrlInterface $url - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\ActionFactory $controllerFactory + * @param \Magento\Event\ManagerInterface $eventManager + * @param \Magento\UrlInterface $url + * @param \Magento\App\State $appState * @param \Magento\Cms\Model\PageFactory $pageFactory * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Controller\Response\Http $response + * @param \Magento\App\ResponseInterface $response */ public function __construct( - \Magento\Core\Controller\Varien\Action\Factory $controllerFactory, - \Magento\Core\Model\Event\Manager $eventManager, - \Magento\Core\Model\UrlInterface $url, - \Magento\Core\Model\App\State $appState, + \Magento\App\ActionFactory $controllerFactory, + \Magento\Event\ManagerInterface $eventManager, + \Magento\UrlInterface $url, + \Magento\App\State $appState, \Magento\Cms\Model\PageFactory $pageFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Controller\Response\Http $response + \Magento\App\ResponseInterface $response ) { parent::__construct($controllerFactory); $this->_eventManager = $eventManager; @@ -110,12 +110,12 @@ class Router extends \Magento\Core\Controller\Varien\Router\AbstractRouter /** * Validate and Match Cms Page and modify request * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @return bool * * @SuppressWarnings(PHPMD.ExitExpression) */ - public function match(\Magento\Core\Controller\Request\Http $request) + public function match(\Magento\App\RequestInterface $request) { if (!$this->_appState->isInstalled()) { $this->_response->setRedirect($this->_url->getUrl('install')) @@ -139,7 +139,7 @@ class Router extends \Magento\Core\Controller\Varien\Router\AbstractRouter $this->_response->setRedirect($condition->getRedirectUrl()) ->sendResponse(); $request->setDispatched(true); - return $this->_controllerFactory->createController('Magento\Core\Controller\Varien\Action\Redirect', + return $this->_controllerFactory->createController('Magento\App\Action\Redirect', array('request' => $request) ); } @@ -164,7 +164,7 @@ class Router extends \Magento\Core\Controller\Varien\Router\AbstractRouter $identifier ); - return $this->_controllerFactory->createController('Magento\Core\Controller\Varien\Action\Forward', + return $this->_controllerFactory->createController('Magento\App\Action\Forward', array('request' => $request) ); } diff --git a/app/code/Magento/Cms/Helper/Page.php b/app/code/Magento/Cms/Helper/Page.php index 894aca46a11..54ea4f7f1a9 100644 --- a/app/code/Magento/Cms/Helper/Page.php +++ b/app/code/Magento/Cms/Helper/Page.php @@ -50,14 +50,14 @@ class Page extends \Magento\Core\Helper\AbstractHelper /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; /** * Design package instance * - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_design; @@ -95,20 +95,18 @@ class Page extends \Magento\Core\Helper\AbstractHelper /** * Url * - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_url; /** - * Construct - * * @param \Magento\Core\Helper\Context $context * @param \Magento\Core\Model\Session\Pool $sessionFactory * @param \Magento\Cms\Model\Page $page - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Page\Helper\Layout $pageLayout - * @param \Magento\Core\Model\View\DesignInterface $design - * @param \Magento\Core\Model\UrlInterface $url + * @param \Magento\View\DesignInterface $design + * @param \Magento\UrlInterface $url * @param \Magento\Cms\Model\PageFactory $pageFactory * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Model\LocaleInterface $locale @@ -117,10 +115,10 @@ class Page extends \Magento\Core\Helper\AbstractHelper \Magento\Core\Helper\Context $context, \Magento\Core\Model\Session\Pool $sessionFactory, \Magento\Cms\Model\Page $page, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Page\Helper\Layout $pageLayout, - \Magento\Core\Model\View\DesignInterface $design, - \Magento\Core\Model\UrlInterface $url, + \Magento\View\DesignInterface $design, + \Magento\UrlInterface $url, \Magento\Cms\Model\PageFactory $pageFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Core\Model\LocaleInterface $locale diff --git a/app/code/Magento/Cms/Helper/Wysiwyg/Images.php b/app/code/Magento/Cms/Helper/Wysiwyg/Images.php index 6cb0ac88507..65f82ba9f5c 100644 --- a/app/code/Magento/Cms/Helper/Wysiwyg/Images.php +++ b/app/code/Magento/Cms/Helper/Wysiwyg/Images.php @@ -73,7 +73,7 @@ class Images extends \Magento\Core\Helper\AbstractHelper /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -87,7 +87,7 @@ class Images extends \Magento\Core\Helper\AbstractHelper /** * Dir * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -95,21 +95,21 @@ class Images extends \Magento\Core\Helper\AbstractHelper * Construct * * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Backend\Helper\Data $backendData * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Filesystem $filesystem * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir */ public function __construct( \Magento\Core\Helper\Context $context, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Backend\Helper\Data $backendData, \Magento\Core\Helper\Data $coreData, \Magento\Filesystem $filesystem, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\Dir $dir + \Magento\App\Dir $dir ) { parent::__construct($context); $this->_eventManager = $eventManager; @@ -143,7 +143,7 @@ class Images extends \Magento\Core\Helper\AbstractHelper */ public function getStorageRoot() { - return $this->_dir->getDir(\Magento\Core\Model\Dir::MEDIA) . DS + return $this->_dir->getDir(\Magento\App\Dir::MEDIA) . DS . \Magento\Cms\Model\Wysiwyg\Config::IMAGE_DIRECTORY . DS; } @@ -305,7 +305,7 @@ class Images extends \Magento\Core\Helper\AbstractHelper public function getCurrentUrl() { if (!$this->_currentUrl) { - $path = str_replace($this->_dir->getDir(\Magento\Core\Model\Dir::MEDIA), '', $this->getCurrentPath()); + $path = str_replace($this->_dir->getDir(\Magento\App\Dir::MEDIA), '', $this->getCurrentPath()); $path = trim($path, DS); $mediaUrl = $this->_storeManager->getStore($this->_storeId) ->getBaseUrl(\Magento\Core\Model\Store::URL_TYPE_MEDIA); diff --git a/app/code/Magento/Cms/Model/Page.php b/app/code/Magento/Cms/Model/Page.php index 1c2f7b1ce60..50de0f72df0 100644 --- a/app/code/Magento/Cms/Model/Page.php +++ b/app/code/Magento/Cms/Model/Page.php @@ -94,12 +94,12 @@ class Page extends \Magento\Core\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Core\Model\Resource\AbstractResource $resource @@ -107,7 +107,7 @@ class Page extends \Magento\Core\Model\AbstractModel * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Core\Model\Resource\AbstractResource $resource = null, diff --git a/app/code/Magento/Cms/Model/Resource/Page/Collection.php b/app/code/Magento/Cms/Model/Resource/Page/Collection.php index 8bbbcd474d6..a07fef4f2ad 100644 --- a/app/code/Magento/Cms/Model/Resource/Page/Collection.php +++ b/app/code/Magento/Cms/Model/Resource/Page/Collection.php @@ -54,7 +54,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl /** * Construct * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -62,7 +62,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Cms/Model/Wysiwyg/Config.php b/app/code/Magento/Cms/Model/Wysiwyg/Config.php index 587fb8483b3..986d88a6707 100644 --- a/app/code/Magento/Cms/Model/Wysiwyg/Config.php +++ b/app/code/Magento/Cms/Model/Wysiwyg/Config.php @@ -73,7 +73,7 @@ class Config extends \Magento\Object /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -96,7 +96,7 @@ class Config extends \Magento\Object /** * @param \Magento\Backend\Model\Url $backendUrl - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Cms\Helper\Data $cmsData * @param \Magento\AuthorizationInterface $authorization * @param \Magento\Core\Model\View\Url $viewUrl @@ -108,7 +108,7 @@ class Config extends \Magento\Object */ public function __construct( \Magento\Backend\Model\Url $backendUrl, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Cms\Helper\Data $cmsData, \Magento\AuthorizationInterface $authorization, \Magento\Core\Model\View\Url $viewUrl, diff --git a/app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php b/app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php index 6d5cb9ae127..a4b3a4cd28c 100644 --- a/app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php +++ b/app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php @@ -136,7 +136,7 @@ class Storage extends \Magento\Object /** * Dir * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -157,7 +157,7 @@ class Storage extends \Magento\Object * @param \Magento\Filesystem $filesystem * @param \Magento\Core\Model\Image\AdapterFactory $imageFactory * @param \Magento\Core\Model\View\Url $viewUrl - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Cms\Model\Wysiwyg\Images\Storage\CollectionFactory $storageCollectionFactory * @param \Magento\Core\Model\File\Storage\FileFactory $storageFileFactory * @param \Magento\Core\Model\File\Storage\DatabaseFactory $storageDatabaseFactory @@ -178,7 +178,7 @@ class Storage extends \Magento\Object \Magento\Filesystem $filesystem, \Magento\Core\Model\Image\AdapterFactory $imageFactory, \Magento\Core\Model\View\Url $viewUrl, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Cms\Model\Wysiwyg\Images\Storage\CollectionFactory $storageCollectionFactory, \Magento\Core\Model\File\Storage\FileFactory $storageFileFactory, \Magento\Core\Model\File\Storage\DatabaseFactory $storageDatabaseFactory, @@ -582,7 +582,7 @@ class Storage extends \Magento\Object */ public function getThumbsPath($filePath = false) { - $mediaRootDir = $this->_dir->getDir(\Magento\Core\Model\Dir::MEDIA); + $mediaRootDir = $this->_dir->getDir(\Magento\App\Dir::MEDIA); $thumbnailDir = $this->getThumbnailRoot(); if ($filePath && strpos($filePath, $mediaRootDir) === 0) { diff --git a/app/code/Magento/Cms/etc/di.xml b/app/code/Magento/Cms/etc/di.xml index d04a15269e7..f764b802e9e 100644 --- a/app/code/Magento/Cms/etc/di.xml +++ b/app/code/Magento/Cms/etc/di.xml @@ -24,7 +24,7 @@ */ --> <config> - <type name="Magento\Core\Model\RouterList"> + <type name="Magento\App\RouterList"> <param name="routerList"> <value> <cms> @@ -36,9 +36,6 @@ </param> </type> <type name="Magento\Cms\Model\Wysiwyg\Config"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> <param name="windowSize"> <value> <height type="int">600</height> @@ -84,56 +81,13 @@ </value> </param> </type> - <type name="Magento\Cms\Helper\Page"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Cms\Helper\Wysiwyg\Images"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Cms\Model\Page"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> <type name="Magento\Core\Helper\Data"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> <param name="config"> <instance type="Magento\Core\Model\ConfigProxy" /> </param> </type> - <type name="Magento\Core\Model\Layout"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Core\Model\Locale"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Core\Model\Resource\Db\Collection\AbstractCollection"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Core\Model\Resource\Setup"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Core\Model\Session\AbstractSession"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <cms_setup>Magento\Cms\Model\Resource\Setup</cms_setup> </value> diff --git a/app/code/Magento/Connect/Helper/Data.php b/app/code/Magento/Connect/Helper/Data.php index c7e9e2909c8..5d323abaa7f 100644 --- a/app/code/Magento/Connect/Helper/Data.php +++ b/app/code/Magento/Connect/Helper/Data.php @@ -43,38 +43,38 @@ class Data extends \Magento\Core\Helper\Data /** * Application dirs * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs; /** * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Http $coreHttp * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Locale $locale * @param \Magento\Core\Model\Date $dateModel - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\Encryption $encryptor * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param bool $dbCompatibleMode */ public function __construct( \Magento\Core\Helper\Context $context, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Http $coreHttp, \Magento\Core\Model\Config $config, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Locale $locale, \Magento\Core\Model\Date $dateModel, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\Encryption $encryptor, \Magento\Filesystem $filesystem, - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, $dbCompatibleMode = true ) { diff --git a/app/code/Magento/Connect/Model/Extension/Collection.php b/app/code/Magento/Connect/Model/Extension/Collection.php index e086de340f8..86486fe09ac 100644 --- a/app/code/Magento/Connect/Model/Extension/Collection.php +++ b/app/code/Magento/Connect/Model/Extension/Collection.php @@ -54,10 +54,10 @@ class Collection extends \Magento\Data\Collection\Filesystem /** * Set base dir * - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param \Magento\Core\Model\EntityFactory $entityFactory */ - public function __construct(\Magento\Core\Model\Dir $dirs, \Magento\Core\Model\EntityFactory $entityFactory) + public function __construct(\Magento\App\Dir $dirs, \Magento\Core\Model\EntityFactory $entityFactory) { parent::__construct($entityFactory); $this->_baseDir = $dirs->getDir('var') . DS . 'connect'; diff --git a/app/code/Magento/Core/App/FrontController/Plugin/Install.php b/app/code/Magento/Core/App/FrontController/Plugin/Install.php new file mode 100644 index 00000000000..37012d76f08 --- /dev/null +++ b/app/code/Magento/Core/App/FrontController/Plugin/Install.php @@ -0,0 +1,72 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Core\App\FrontController\Plugin; + +class Install +{ + /** + * @var \Magento\App\State + */ + protected $_appState; + + /** + * @var \Magento\Cache\FrontendInterface + */ + protected $_cache; + + /** + * @var \Magento\App\UpdaterInterface + */ + protected $_updater; + + /** + * @param \Magento\App\State $appState + * @param \Magento\Cache\FrontendInterface $cache + * @param \Magento\App\UpdaterInterface $dbUpdater + */ + public function __construct( + \Magento\App\State $appState, + \Magento\Cache\FrontendInterface $cache, + \Magento\App\UpdaterInterface $dbUpdater + ) { + $this->_appState = $appState; + $this->_cache = $cache; + $this->_dbUpdater = $dbUpdater; + } + + /** + * @param array $arguments + * @param \Magento\Code\Plugin\InvocationChain $invocationChain + * @return mixed + */ + public function aroundDispatch($arguments, \Magento\Code\Plugin\InvocationChain $invocationChain) + { + if ($this->_appState->isInstalled() && !$this->_cache->load('data_upgrade')) { + $this->_dbUpdater->updateScheme(); + $this->_dbUpdater->updateData(); + $this->_cache->save('true', 'data_upgrade'); + } + return $invocationChain->proceed($arguments); + } +} \ No newline at end of file diff --git a/app/code/Magento/Core/App/FrontController/Plugin/RequestPreprocessor.php b/app/code/Magento/Core/App/FrontController/Plugin/RequestPreprocessor.php new file mode 100644 index 00000000000..358c748aece --- /dev/null +++ b/app/code/Magento/Core/App/FrontController/Plugin/RequestPreprocessor.php @@ -0,0 +1,184 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Core\App\FrontController\Plugin; + +class RequestPreprocessor +{ + /** + * @var \Magento\Core\App\Request\RewriteService RewriteService + */ + protected $_rewriteService; + + /** + * @var \Magento\Core\Model\Store\Config + */ + protected $_storeConfig; + + /** + * @var \Magento\App\ResponseFactory + */ + protected $_responseFactory; + + /** + * @var \Magento\Core\Model\Url + */ + protected $_url; + + /** + * @var \Magento\App\State + */ + protected $_appState; + + /** + * @var \Magento\Core\Model\StoreManager + */ + protected $_storeManager; + + /** + * @var \Magento\Backend\Helper\Data + */ + protected $_backendData; + + /** + * @param \Magento\Core\App\Request\RewriteService $rewriteService + * @param \Magento\Core\Model\StoreManager $storeManager + * @param \Magento\App\State $appState + * @param \Magento\Core\Model\Url $url + * @param \Magento\Backend\Helper\Data $backendData + * @param \Magento\Core\Model\Store\Config $storeConfig + * @param \Magento\App\ResponseFactory $responseFactory + */ + public function __construct( + \Magento\Core\App\Request\RewriteService $rewriteService, + \Magento\Core\Model\StoreManager $storeManager, + \Magento\App\State $appState, + \Magento\Core\Model\Url $url, + \Magento\Backend\Helper\Data $backendData, + \Magento\Core\Model\Store\Config $storeConfig, + \Magento\App\ResponseFactory $responseFactory + ) { + $this->_backendData = $backendData; + $this->_rewriteService = $rewriteService; + $this->_storeManager = $storeManager; + $this->_appState = $appState; + $this->_url = $url; + $this->_storeConfig = $storeConfig; + $this->_responseFactory = $responseFactory; + } + + /** + * Preprocess request + * + * @param array $arguments + * @param \Magento\Code\Plugin\InvocationChain $invocationChain + * @return mixed + */ + public function aroundDispatch(array $arguments, \Magento\Code\Plugin\InvocationChain $invocationChain) + { + $request = $arguments[0]; + // If pre-configured, check equality of base URL and requested URL + $this->_checkBaseUrl($request); + $request->setDispatched(false); + $this->_rewriteService->applyRewrites($request); + + return $invocationChain->proceed($arguments); + } + + /** + * Check if requested path starts with one of the admin front names + * + * @param \Magento\App\RequestInterface $request + * @return boolean + */ + protected function _isAdminFrontNameMatched($request) + { + $pathPrefix = $this->_extractPathPrefixFromUrl($request); + return $pathPrefix == $this->_backendData->getAreaFrontName(); + } + + /** + * Extract first path part from url (in most cases this is area code) + * + * @param \Magento\App\RequestInterface $request + * @return string + */ + protected function _extractPathPrefixFromUrl($request) + { + $pathPrefix = ltrim($request->getPathInfo(), '/'); + $urlDelimiterPos = strpos($pathPrefix, '/'); + if ($urlDelimiterPos) { + $pathPrefix = substr($pathPrefix, 0, $urlDelimiterPos); + } + + return $pathPrefix; + } + + /** + * Auto-redirect to base url (without SID) if the requested url doesn't match it. + * By default this feature is enabled in configuration. + * + * @param \Magento\App\RequestInterface $request + */ + protected function _checkBaseUrl($request) + { + if (!$this->_appState->isInstalled() || $request->getPost() || strtolower($request->getMethod()) == 'post') { + return; + } + + $redirectCode = (int)$this->_storeConfig->getConfig('web/url/redirect_to_base'); + if (!$redirectCode) { + return; + } elseif ($redirectCode != 301) { + $redirectCode = 302; + } + + if ($this->_isAdminFrontNameMatched($request)) { + return; + } + + $baseUrl = $this->_storeManager->getStore()->getBaseUrl( + \Magento\Core\Model\Store::URL_TYPE_WEB, + $this->_storeManager->getStore()->isCurrentlySecure() + ); + if (!$baseUrl) { + return; + } + + $uri = parse_url($baseUrl); + $requestUri = $request->getRequestUri() ? $request->getRequestUri() : '/'; + if (isset($uri['scheme']) && $uri['scheme'] != $request->getScheme() + || isset($uri['host']) && $uri['host'] != $request->getHttpHost() + || isset($uri['path']) && strpos($requestUri, $uri['path']) === false + ) { + $redirectUrl = $this->_url->getRedirectUrl( + $this->_url->getUrl(ltrim($request->getPathInfo(), '/'), array('_nosid' => true)) + ); + + $response = $this->_responseFactory->create(); + $response->setRedirect($redirectUrl, $redirectCode); + $response->sendResponse(); + exit; + } + } +} \ No newline at end of file diff --git a/app/code/Magento/Core/App/Request/PathInfoProcessor.php b/app/code/Magento/Core/App/Request/PathInfoProcessor.php new file mode 100644 index 00000000000..60997635cde --- /dev/null +++ b/app/code/Magento/Core/App/Request/PathInfoProcessor.php @@ -0,0 +1,67 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Core\App\Request; + +class PathInfoProcessor implements \Magento\App\Request\PathInfoProcessorInterface +{ + /** + * @var \Magento\Core\Model\StoreManager + */ + private $_storeManager; + + /** + * @param \Magento\Core\Model\StoreManager $storeManager + */ + public function __construct(\Magento\Core\Model\StoreManager $storeManager) + { + $this->_storeManager = $storeManager; + } + + /** + * Process path info + * + * @param \Magento\App\RequestInterface $request + * @param string $pathInfo + * @return string + */ + public function process(\Magento\App\RequestInterface $request, $pathInfo) + { + $pathParts = explode('/', ltrim($pathInfo, '/'), 2); + $storeCode = $pathParts[0]; + + $stores = $this->_storeManager->getStores(true, true); + if (isset($stores[$storeCode]) && $stores[$storeCode]->isUseStoreInUrl()) { + if (!$request->isDirectAccessFrontendName($storeCode)) { + $this->_storeManager->setCurrentStore($storeCode); + $pathInfo = '/' . (isset($pathParts[1]) ? $pathParts[1] : ''); + return $pathInfo; + } elseif (!empty($storeCode)) { + $request->setActionName('noRoute'); + return $pathInfo; + } + return $pathInfo; + } + return $pathInfo; + } +} \ No newline at end of file diff --git a/app/code/Magento/Core/App/Request/RewriteService.php b/app/code/Magento/Core/App/Request/RewriteService.php new file mode 100644 index 00000000000..458abc448d0 --- /dev/null +++ b/app/code/Magento/Core/App/Request/RewriteService.php @@ -0,0 +1,69 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Core\App\Request; + +class RewriteService +{ + /** + * @var \Magento\Core\Model\Url\RewriteFactory + */ + protected $_rewriteFactory; + + /** + * @var \Magento\Core\Model\Config + */ + protected $_config; + + /** + * @var \Magento\App\RouterList + */ + protected $_routerList; + + public function __construct( + \Magento\App\RouterList $routerList, + \Magento\Core\Model\Url\RewriteFactory $rewriteFactory, + \Magento\Core\Model\Config $config + ) { + $this->_rewriteFactory = $rewriteFactory; + $this->_config = $config; + $this->_routerList = $routerList; + } + + /** + * Apply rewrites to current request + * + * @param \Magento\App\RequestInterface $request + */ + public function applyRewrites(\Magento\App\RequestInterface $request) + { + // URL rewrite + if (!$request->isStraight()) { + \Magento\Profiler::start('db_url_rewrite'); + /** @var $urlRewrite \Magento\Core\Model\Url\Rewrite */ + $urlRewrite = $this->_rewriteFactory->create(); + $urlRewrite->rewrite($request); + \Magento\Profiler::stop('db_url_rewrite'); + } + } +} \ No newline at end of file diff --git a/app/code/Magento/Core/Model/Router/NoRouteHandler.php b/app/code/Magento/Core/App/Router/NoRouteHandler.php similarity index 88% rename from app/code/Magento/Core/Model/Router/NoRouteHandler.php rename to app/code/Magento/Core/App/Router/NoRouteHandler.php index 7eca0abdf2c..f5dd26fdbd6 100644 --- a/app/code/Magento/Core/Model/Router/NoRouteHandler.php +++ b/app/code/Magento/Core/App/Router/NoRouteHandler.php @@ -24,9 +24,9 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ -namespace Magento\Core\Model\Router; +namespace Magento\Core\App\Router; -class NoRouteHandler implements \Magento\Core\Model\Router\NoRouteHandlerInterface +class NoRouteHandler implements \Magento\Appl\Router\NoRouteHandlerInterface { /** * @var \Magento\Core\Model\Config @@ -44,11 +44,11 @@ class NoRouteHandler implements \Magento\Core\Model\Router\NoRouteHandlerInterfa /** * Check and process no route request * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @return bool * @SuppressWarnings(PHPMD.NPathComplexity) */ - public function process(\Magento\Core\Controller\Request\Http $request) + public function process(\Magento\App\RequestInterface $request) { $noRoutePath = $this->_config->getValue('web/default/no_route', 'default'); diff --git a/app/code/Magento/Core/Block/AbstractBlock.php b/app/code/Magento/Core/Block/AbstractBlock.php index 64655f78f23..452e3172fc8 100644 --- a/app/code/Magento/Core/Block/AbstractBlock.php +++ b/app/code/Magento/Core/Block/AbstractBlock.php @@ -37,17 +37,18 @@ */ namespace Magento\Core\Block; +use Magento\View\Element\BlockInterface; + /** * @SuppressWarnings(PHPMD.ExcessivePublicCount) * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @SuppressWarnings(PHPMD.TooManyFields) */ -abstract class AbstractBlock extends \Magento\Object - implements \Magento\Core\Block +abstract class AbstractBlock extends \Magento\Object implements BlockInterface { /** - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_design; @@ -75,12 +76,12 @@ abstract class AbstractBlock extends \Magento\Object /** * Parent layout of the block * - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; @@ -106,7 +107,7 @@ abstract class AbstractBlock extends \Magento\Object /** * Url Builder * - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; @@ -114,14 +115,14 @@ abstract class AbstractBlock extends \Magento\Object * System event manager * * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; /** * Application front controller * - * @var \Magento\Core\Controller\Varien\Front + * @var \Magento\App\FrontController */ protected $_frontController; @@ -138,7 +139,7 @@ abstract class AbstractBlock extends \Magento\Object /** * View config model * - * @var \Magento\Core\Model\View\Config + * @var \Magento\View\ConfigInterface */ protected $_viewConfig; @@ -155,7 +156,7 @@ abstract class AbstractBlock extends \Magento\Object /** * @var \Magento\Core\Model\App */ - protected $_app; + protected $_storeManager; /** * @param \Magento\Core\Block\Context $context @@ -178,13 +179,13 @@ abstract class AbstractBlock extends \Magento\Object $this->_viewConfig = $context->getViewConfig(); $this->_cacheState = $context->getCacheState(); $this->_logger = $context->getLogger(); - $this->_app = $context->getApp(); + $this->_storeManager = $context->getApp(); parent::__construct($data); $this->_construct(); } /** - * @return \Magento\Core\Controller\Request\Http + * @return \Magento\App\RequestInterface */ public function getRequest() { @@ -225,10 +226,10 @@ abstract class AbstractBlock extends \Magento\Object /** * Set layout object * - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @return \Magento\Core\Block\AbstractBlock */ - public function setLayout(\Magento\Core\Model\Layout $layout) + public function setLayout(\Magento\View\LayoutInterface $layout) { $this->_layout = $layout; $this->_eventManager->dispatch('core_block_abstract_prepare_layout_before', array('block' => $this)); @@ -252,7 +253,7 @@ abstract class AbstractBlock extends \Magento\Object /** * Retrieve layout object * - * @return \Magento\Core\Model\Layout + * @return \Magento\View\LayoutInterface */ public function getLayout() { @@ -947,7 +948,7 @@ abstract class AbstractBlock extends \Magento\Object protected function _beforeCacheUrl() { if ($this->_cacheState->isEnabled(self::CACHE_GROUP)) { - $this->_app->setUseSessionVar(true); + $this->_storeManager->setUseSessionVar(true); } return $this; } @@ -961,7 +962,7 @@ abstract class AbstractBlock extends \Magento\Object protected function _afterCacheUrl($html) { if ($this->_cacheState->isEnabled(self::CACHE_GROUP)) { - $this->_app->setUseSessionVar(false); + $this->_storeManager->setUseSessionVar(false); \Magento\Profiler::start('CACHE_URL'); $html = $this->_urlBuilder->sessionUrlVar($html); \Magento\Profiler::stop('CACHE_URL'); diff --git a/app/code/Magento/Core/Block/Context.php b/app/code/Magento/Core/Block/Context.php index c22d2655cb9..693d2c7e56f 100644 --- a/app/code/Magento/Core/Block/Context.php +++ b/app/code/Magento/Core/Block/Context.php @@ -29,22 +29,22 @@ namespace Magento\Core\Block; class Context implements \Magento\ObjectManager\ContextInterface { /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; @@ -59,7 +59,7 @@ class Context implements \Magento\ObjectManager\ContextInterface protected $_cache; /** - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_design; @@ -74,7 +74,7 @@ class Context implements \Magento\ObjectManager\ContextInterface protected $_storeConfig; /** - * @var \Magento\Core\Controller\Varien\Front + * @var \Magento\App\FrontController */ protected $_frontController; @@ -91,7 +91,7 @@ class Context implements \Magento\ObjectManager\ContextInterface /** * View config model * - * @var \Magento\Core\Model\View\Config + * @var \Magento\View\ConfigInterface */ protected $_viewConfig; @@ -111,38 +111,38 @@ class Context implements \Magento\ObjectManager\ContextInterface protected $_app; /** - * @param \Magento\Core\Controller\Request\Http $request - * @param \Magento\Core\Model\Layout $layout - * @param \Magento\Core\Model\Event\Manager $eventManager - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\App\RequestInterface $request + * @param \Magento\View\LayoutInterface $layout + * @param \Magento\Event\ManagerInterface $eventManager + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Core\Model\Translate $translator * @param \Magento\Core\Model\CacheInterface $cache - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Model\Session\AbstractSession $session * @param \Magento\Core\Model\Store\Config $storeConfig - * @param \Magento\Core\Controller\Varien\Front $frontController + * @param \Magento\App\FrontController $frontController * @param \Magento\Core\Model\Factory\Helper $helperFactory * @param \Magento\Core\Model\View\Url $viewUrl - * @param \Magento\Core\Model\View\Config $viewConfig + * @param \Magento\View\ConfigInterface $viewConfig * @param \Magento\Core\Model\Cache\StateInterface $cacheState * @param \Magento\Core\Model\Logger $logger * @param \Magento\Core\Model\App $app * @param array $data */ public function __construct( - \Magento\Core\Controller\Request\Http $request, - \Magento\Core\Model\Layout $layout, - \Magento\Core\Model\Event\Manager $eventManager, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\App\RequestInterface $request, + \Magento\View\LayoutInterface $layout, + \Magento\Event\ManagerInterface $eventManager, + \Magento\UrlInterface $urlBuilder, \Magento\Core\Model\Translate $translator, \Magento\Core\Model\CacheInterface $cache, - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Model\Session\AbstractSession $session, \Magento\Core\Model\Store\Config $storeConfig, - \Magento\Core\Controller\Varien\Front $frontController, + \Magento\App\FrontController $frontController, \Magento\Core\Model\Factory\Helper $helperFactory, \Magento\Core\Model\View\Url $viewUrl, - \Magento\Core\Model\View\Config $viewConfig, + \Magento\View\ConfigInterface $viewConfig, \Magento\Core\Model\Cache\StateInterface $cacheState, \Magento\Core\Model\Logger $logger, \Magento\Core\Model\App $app, @@ -175,7 +175,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Model\View\DesignInterface + * @return \Magento\View\DesignInterface */ public function getDesignPackage() { @@ -183,7 +183,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Model\Event\Manager + * @return \Magento\Event\ManagerInterface */ public function getEventManager() { @@ -191,7 +191,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Controller\Varien\Front + * @return \Magento\App\FrontController */ public function getFrontController() { @@ -207,7 +207,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Model\Layout + * @return \Magento\View\LayoutInterface */ public function getLayout() { @@ -215,7 +215,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Controller\Request\Http + * @return \Magento\App\RequestInterface */ public function getRequest() { @@ -247,7 +247,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function getUrlBuilder() { @@ -263,7 +263,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Model\View\Config + * @return \Magento\View\ConfigInterface */ public function getViewConfig() { diff --git a/app/code/Magento/Core/Block/Template.php b/app/code/Magento/Core/Block/Template.php index e6083160a78..0de003c13e9 100644 --- a/app/code/Magento/Core/Block/Template.php +++ b/app/code/Magento/Core/Block/Template.php @@ -36,8 +36,6 @@ namespace Magento\Core\Block; class Template extends \Magento\Core\Block\AbstractBlock { - const XML_PATH_DEBUG_TEMPLATE_HINTS = 'dev/debug/template_hints'; - const XML_PATH_DEBUG_TEMPLATE_HINTS_BLOCKS = 'dev/debug/template_hints_blocks'; const XML_PATH_TEMPLATE_ALLOW_SYMLINK = 'dev/template/allow_symlink'; /** @@ -58,11 +56,8 @@ class Template extends \Magento\Core\Block\AbstractBlock */ protected $_allowSymlinks = null; - protected static $_showTemplateHints; - protected static $_showTemplateHintsBlocks; - /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs; @@ -89,9 +84,9 @@ class Template extends \Magento\Core\Block\AbstractBlock protected $_template; /** - * @var \Magento\Core\Model\TemplateEngine\Factory + * @var \Magento\Core\Model\TemplateEngine\Pool */ - protected $_tmplEngineFactory; + protected $_templateEnginePool; /** * Core data @@ -103,12 +98,13 @@ class Template extends \Magento\Core\Block\AbstractBlock /** * @var \Magento\Core\Model\App */ - protected $_app; + protected $_storeManager; /** * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Block\Template\Context $context * @param array $data + * @todo Remove injection of the core helper from this class and its descendants, because it's no longer used */ public function __construct( \Magento\Core\Helper\Data $coreData, @@ -120,8 +116,8 @@ class Template extends \Magento\Core\Block\AbstractBlock $this->_logger = $context->getLogger(); $this->_filesystem = $context->getFilesystem(); $this->_viewFileSystem = $context->getViewFileSystem(); - $this->_tmplEngineFactory = $context->getEngineFactory(); - $this->_app = $context->getApp(); + $this->_templateEnginePool = $context->getEnginePool(); + $this->_storeManager = $context->getApp(); parent::__construct($context, $data); } @@ -213,93 +209,29 @@ class Template extends \Magento\Core\Block\AbstractBlock return $this; } - /** - * Check if direct output is allowed for block - * - * @return bool - */ - public function getDirectOutput() - { - if ($this->getLayout()) { - return $this->getLayout()->isDirectOutput(); - } - return false; - } - - public function getShowTemplateHints() - { - if (is_null(self::$_showTemplateHints)) { - self::$_showTemplateHints = $this->_storeConfig->getConfig(self::XML_PATH_DEBUG_TEMPLATE_HINTS) - && $this->_coreData->isDevAllowed(); - self::$_showTemplateHintsBlocks = $this->_storeConfig->getConfig(self::XML_PATH_DEBUG_TEMPLATE_HINTS_BLOCKS) - && $this->_coreData->isDevAllowed(); - } - return self::$_showTemplateHints; - } - /** * Retrieve block view from file (template) * - * @param string $fileName + * @param string $fileName * @return string - * @throws \Exception */ public function fetchView($fileName) { - $viewShortPath = str_replace($this->_dirs->getDir(\Magento\Core\Model\Dir::ROOT), '', $fileName); + $viewShortPath = str_replace($this->_dirs->getDir(\Magento\App\Dir::ROOT), '', $fileName); \Magento\Profiler::start('TEMPLATE:' . $fileName, array('group' => 'TEMPLATE', 'file_name' => $viewShortPath)); - - $do = $this->getDirectOutput(); - - if (!$do) { - ob_start(); - } - if ($this->getShowTemplateHints()) { - echo <<<HTML -<div style="position:relative; border:1px dotted red; margin:6px 2px; padding:18px 2px 2px 2px; zoom:1;"> -<div style="position:absolute; left:0; top:0; padding:2px 5px; background:red; color:white; font:normal 11px Arial; -text-align:left !important; z-index:998;" onmouseover="this.style.zIndex='999'" -onmouseout="this.style.zIndex='998'" title="{$fileName}">{$fileName}</div> -HTML; - if (self::$_showTemplateHintsBlocks) { - $thisClass = get_class($this); - echo <<<HTML -<div style="position:absolute; right:0; top:0; padding:2px 5px; background:red; color:blue; font:normal 11px Arial; -text-align:left !important; z-index:998;" onmouseover="this.style.zIndex='999'" onmouseout="this.style.zIndex='998'" -title="{$thisClass}">{$thisClass}</div> -HTML; - } - } - - try { - if (($this->_filesystem->isPathInDirectory($fileName, $this->_dirs->getDir(\Magento\Core\Model\Dir::APP)) - || $this->_filesystem->isPathInDirectory($fileName, $this->_dirs->getDir(\Magento\Core\Model\Dir::THEMES)) + if (($this->_filesystem->isPathInDirectory($fileName, $this->_dirs->getDir(\Magento\App\Dir::APP)) + || $this->_filesystem->isPathInDirectory($fileName, $this->_dirs->getDir(\Magento\App\Dir::THEMES)) || $this->_getAllowSymlinks()) && $this->_filesystem->isFile($fileName) - ) { - $extension = pathinfo($fileName, PATHINFO_EXTENSION); - $templateEngine = $this->_tmplEngineFactory->get($extension); - echo $templateEngine->render($this, $fileName, $this->_viewVars); - } else { - $this->_logger->log("Invalid template file: '{$fileName}'", \Zend_Log::CRIT); - } - - } catch (\Exception $e) { - if (!$do) { - ob_get_clean(); - } - throw $e; - } - - if ($this->getShowTemplateHints()) { - echo '</div>'; - } - - if (!$do) { - $html = ob_get_clean(); + ) { + $extension = pathinfo($fileName, PATHINFO_EXTENSION); + $templateEngine = $this->_templateEnginePool->get($extension); + $html = $templateEngine->render($this, $fileName, $this->_viewVars); } else { $html = ''; + $this->_logger->log("Invalid template file: '{$fileName}'", \Zend_Log::CRIT); } + \Magento\Profiler::stop('TEMPLATE:' . $fileName); return $html; } @@ -351,7 +283,7 @@ HTML; { return array( 'BLOCK_TPL', - $this->_app->getStore()->getCode(), + $this->_storeManager->getStore()->getCode(), $this->getTemplateFile(), 'template' => $this->getTemplate() ); diff --git a/app/code/Magento/Core/Block/Template/Context.php b/app/code/Magento/Core/Block/Template/Context.php index dd4d521ff65..38a6fa12191 100644 --- a/app/code/Magento/Core/Block/Template/Context.php +++ b/app/code/Magento/Core/Block/Template/Context.php @@ -14,7 +14,7 @@ class Context extends \Magento\Core\Block\Context /** * Dirs instance * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs; @@ -38,52 +38,52 @@ class Context extends \Magento\Core\Block\Context protected $_viewFileSystem; /** - * @var \Magento\Core\Model\TemplateEngine\Factory + * @var \Magento\Core\Model\TemplateEngine\Pool */ - protected $_engineFactory; + protected $_enginePool; /** - * @param \Magento\Core\Controller\Request\Http $request - * @param \Magento\Core\Model\Layout $layout - * @param \Magento\Core\Model\Event\Manager $eventManager - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\App\RequestInterface $request + * @param \Magento\View\LayoutInterface $layout + * @param \Magento\Event\ManagerInterface $eventManager + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Core\Model\Translate $translator * @param \Magento\Core\Model\CacheInterface $cache - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Model\Session $session * @param \Magento\Core\Model\Store\Config $storeConfig - * @param \Magento\Core\Controller\Varien\Front $frontController + * @param \Magento\App\FrontController $frontController * @param \Magento\Core\Model\Factory\Helper $helperFactory * @param \Magento\Core\Model\View\Url $viewUrl - * @param \Magento\Core\Model\View\Config $viewConfig + * @param \Magento\View\ConfigInterface $viewConfig * @param \Magento\Core\Model\Cache\StateInterface $cacheState - * @param \Magento\Core\Model\App $app - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param \Magento\Core\Model\Logger $logger * @param \Magento\Filesystem $filesystem * @param \Magento\Core\Model\View\FileSystem $viewFileSystem - * @param \Magento\Core\Model\TemplateEngine\Factory $engineFactory + * @param \Magento\Core\Model\TemplateEngine\Pool $enginePool + * @param \Magento\Core\Model\App $app */ public function __construct( - \Magento\Core\Controller\Request\Http $request, - \Magento\Core\Model\Layout $layout, - \Magento\Core\Model\Event\Manager $eventManager, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\App\RequestInterface $request, + \Magento\View\LayoutInterface $layout, + \Magento\Event\ManagerInterface $eventManager, + \Magento\UrlInterface $urlBuilder, \Magento\Core\Model\Translate $translator, \Magento\Core\Model\CacheInterface $cache, - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Model\Session $session, \Magento\Core\Model\Store\Config $storeConfig, - \Magento\Core\Controller\Varien\Front $frontController, + \Magento\App\FrontController $frontController, \Magento\Core\Model\Factory\Helper $helperFactory, \Magento\Core\Model\View\Url $viewUrl, - \Magento\Core\Model\View\Config $viewConfig, + \Magento\View\ConfigInterface $viewConfig, \Magento\Core\Model\Cache\StateInterface $cacheState, - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, \Magento\Core\Model\Logger $logger, \Magento\Filesystem $filesystem, \Magento\Core\Model\View\FileSystem $viewFileSystem, - \Magento\Core\Model\TemplateEngine\Factory $engineFactory, + \Magento\Core\Model\TemplateEngine\Pool $enginePool, \Magento\Core\Model\App $app ) { parent::__construct( @@ -95,12 +95,12 @@ class Context extends \Magento\Core\Block\Context $this->_logger = $logger; $this->_filesystem = $filesystem; $this->_viewFileSystem = $viewFileSystem; - $this->_engineFactory = $engineFactory; + $this->_enginePool = $enginePool; } /** * Get dirs instance - * @return \Magento\Core\Model\Dir + * @return \Magento\App\Dir */ public function getDirs() { @@ -138,12 +138,12 @@ class Context extends \Magento\Core\Block\Context } /** - * Get the template engine factory instance + * Get the template engine pool instance * - * @return \Magento\Core\Model\TemplateEngine\Factory + * @return \Magento\Core\Model\TemplateEngine\Pool */ - public function getEngineFactory() + public function getEnginePool() { - return $this->_engineFactory; + return $this->_enginePool; } } diff --git a/app/code/Magento/Core/Controller/Front/Router.php b/app/code/Magento/Core/Controller/Front/Router.php deleted file mode 100644 index 1e06839e484..00000000000 --- a/app/code/Magento/Core/Controller/Front/Router.php +++ /dev/null @@ -1,104 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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_Core - * @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\Core\Controller\Front; - -class Router -{ - protected $_config = null; - - /** - * @var \Magento\Core\Model\StoreManager - */ - protected $_storeManager; - - public function __construct($config, \Magento\Core\Model\StoreManager $storeManager) - { - $this->_config = $config; - $this->_storeManager = $storeManager; - } - - public function getConfig() - { - return $this->_config; - } - - public function addRoutes(\Zend_Controller_Router_Interface $router) - { - $frontName = $this->_config->getName(); - $routeMatch = $frontName.'/:controller/:action/*'; - $moduleName = (string)$this->_config->module; - $routeParams = array('module'=>$moduleName, 'controller'=>'index', 'action'=>'index', '_frontName'=>$frontName); - $route = new \Zend_Controller_Router_Route($routeMatch, $routeParams); - $router->addRoute($moduleName, $route); - - return $this; - } - - public function getUrl($params=array()) - { - static $reservedKeys = array('module'=>1, 'controller'=>1, 'action'=>1, 'array'=>1); - - if (is_string($params)) { - $paramsArr = explode('/', $params); - $params = array('controller'=>$paramsArr[0], 'action'=>$paramsArr[1]); - } - - $url = $this->_storeManager->getStore()->getBaseUrl($params); - - if (!empty($params['frontName'])) { - $url .= $params['frontName'].'/'; - } else { - $url .= $this->_config->getName().'/'; - } - - if (!empty($params)) { - $paramsStr = ''; - foreach ($params as $key=>$value) { - if (!isset($reservedKeys[$key]) && '_'!==$key{0} && !empty($value)) { - $paramsStr .= $key.'/'.$value.'/'; - } - } - - if (empty($params['controller']) && !empty($paramsStr)) { - $params['controller'] = 'index'; - } - $url .= empty($params['controller']) ? '' : $params['controller'].'/'; - - if (empty($params['action']) && !empty($paramsStr)) { - $params['action'] = 'index'; - } - $url .= empty($params['action']) ? '' : $params['action'].'/'; - - $url .= $paramsStr; - - $url .= empty($params['array']) ? '' : '?' . http_build_query($params['array']); - } - - return $url; - } -} diff --git a/app/code/Magento/Core/Controller/Index.php b/app/code/Magento/Core/Controller/Index.php index 6fafebf486b..8eaa3ccd888 100644 --- a/app/code/Magento/Core/Controller/Index.php +++ b/app/code/Magento/Core/Controller/Index.php @@ -24,7 +24,6 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ - namespace Magento\Core\Controller; class Index extends \Magento\Core\Controller\Front\Action { diff --git a/app/code/Magento/Core/Controller/Request/HttpProxy.php b/app/code/Magento/Core/Controller/Request/HttpProxy.php deleted file mode 100644 index 641a47421ad..00000000000 --- a/app/code/Magento/Core/Controller/Request/HttpProxy.php +++ /dev/null @@ -1,764 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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_Core - * @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) - */ - -/** - * Proxy class for \Magento\Core\Controller\Request\Http - */ -namespace Magento\Core\Controller\Request; - -class HttpProxy extends \Magento\Core\Controller\Request\Http -{ - /** - * Object Manager instance - * - * @var \Magento\ObjectManager - */ - protected $_objectManager = null; - - /** - * Proxied instance name - * - * @var string - */ - protected $_instanceName = null; - - /** - * Proxied instance - * - * @var \Magento\Core\Controller\Request\Http - */ - protected $_subject = null; - - /** - * Instance shareability flag - * - * @var bool - */ - protected $_isShared = null; - - /** - * Proxy constructor - * - * @param \Magento\ObjectManager $objectManager - * @param string $instanceName - * @param bool $shared - */ - public function __construct( - \Magento\ObjectManager $objectManager, - $instanceName = 'Magento\Core\Controller\Request\Http', $shared = true - ) { - $this->_objectManager = $objectManager; - $this->_instanceName = $instanceName; - $this->_isShared = $shared; - } - - /** - * @return array - */ - public function __sleep() - { - return array('_subject', '_isShared'); - } - - /** - * Retrieve ObjectManager from global scope - */ - public function __wakeup() - { - $this->_objectManager = \Magento\Core\Model\ObjectManager::getInstance(); - } - - /** - * Clone proxied instance - */ - public function __clone() - { - $this->_subject = clone $this->_getSubject(); - } - - /** - * Get proxied instance - * - * @return \Magento\Core\Controller\Request\Http - */ - protected function _getSubject() - { - if (!$this->_subject) { - $this->_subject = true === $this->_isShared - ? $this->_objectManager->get($this->_instanceName) - : $this->_objectManager->create($this->_instanceName); - } - return $this->_subject; - } - - /** - * {@inheritdoc} - */ - public function getOriginalPathInfo() - { - return $this->_getSubject()->getOriginalPathInfo(); - } - - /** - * {@inheritdoc} - */ - public function setPathInfo($pathInfo = null) - { - return $this->_getSubject()->setPathInfo($pathInfo); - } - - /** - * {@inheritdoc} - */ - public function rewritePathInfo($pathInfo) - { - return $this->_getSubject()->rewritePathInfo($pathInfo); - } - - /** - * {@inheritdoc} - */ - public function isDirectAccessFrontendName($code) - { - return $this->_getSubject()->isDirectAccessFrontendName($code); - } - - /** - * {@inheritdoc} - */ - public function getDirectFrontNames() - { - return $this->_getSubject()->getDirectFrontNames(); - } - - /** - * {@inheritdoc} - */ - public function getRequestString() - { - return $this->_getSubject()->getRequestString(); - } - - /** - * {@inheritdoc} - */ - public function getBasePath() - { - return $this->_getSubject()->getBasePath(); - } - - /** - * {@inheritdoc} - */ - public function getBaseUrl() - { - return $this->_getSubject()->getBaseUrl(); - } - - /** - * {@inheritdoc} - */ - public function setRouteName($route) - { - return $this->_getSubject()->setRouteName($route); - } - - /** - * {@inheritdoc} - */ - public function getRouteName() - { - return $this->_getSubject()->getRouteName(); - } - - /** - * {@inheritdoc} - */ - public function getHttpHost($trimPort = true) - { - return $this->_getSubject()->getHttpHost($trimPort); - } - - /** - * {@inheritdoc} - */ - public function setPost($key, $value = null) - { - return $this->_getSubject()->setPost($key, $value); - } - - /** - * {@inheritdoc} - */ - public function setControllerModule($module) - { - return $this->_getSubject()->setControllerModule($module); - } - - /** - * {@inheritdoc} - */ - public function getControllerModule() - { - return $this->_getSubject()->getControllerModule(); - } - - /** - * {@inheritdoc} - */ - public function getModuleName() - { - return $this->_getSubject()->getModuleName(); - } - - /** - * {@inheritdoc} - */ - public function getControllerName() - { - return $this->_getSubject()->getControllerName(); - } - - /** - * {@inheritdoc} - */ - public function getActionName() - { - return $this->_getSubject()->getActionName(); - } - - /** - * {@inheritdoc} - */ - public function getAlias($name) - { - return $this->_getSubject()->getAlias($name); - } - - /** - * {@inheritdoc} - */ - public function getAliases() - { - return $this->_getSubject()->getAliases(); - } - - /** - * {@inheritdoc} - */ - public function getRequestedRouteName() - { - return $this->_getSubject()->getRequestedRouteName(); - } - - /** - * {@inheritdoc} - */ - public function getRequestedControllerName() - { - return $this->_getSubject()->getRequestedControllerName(); - } - - /** - * {@inheritdoc} - */ - public function getRequestedActionName() - { - return $this->_getSubject()->getRequestedActionName(); - } - - /** - * {@inheritdoc} - */ - public function setRoutingInfo($data) - { - return $this->_getSubject()->setRoutingInfo($data); - } - - /** - * {@inheritdoc} - */ - public function initForward() - { - return $this->_getSubject()->initForward(); - } - - /** - * {@inheritdoc} - */ - public function getBeforeForwardInfo($name = null) - { - return $this->_getSubject()->getBeforeForwardInfo($name); - } - - /** - * {@inheritdoc} - */ - public function isStraight($flag = null) - { - return $this->_getSubject()->isStraight($flag); - } - - /** - * {@inheritdoc} - */ - public function isAjax() - { - return $this->_getSubject()->isAjax(); - } - - /** - * {@inheritdoc} - */ - public function getFiles($key = null, $default = null) - { - return $this->_getSubject()->getFiles($key, $default); - } - - /** - * {@inheritdoc} - */ - public function getDistroBaseUrl() - { - return $this->_getSubject()->getDistroBaseUrl(); - } - - /** - * {@inheritdoc} - */ - public function __get($key) - { - return $this->_getSubject()->__get($key); - } - - /** - * {@inheritdoc} - */ - public function get($key) - { - return $this->_getSubject()->get($key); - } - - /** - * {@inheritdoc} - */ - public function __set($key, $value) - { - return $this->_getSubject()->__set($key, $value); - } - - /** - * {@inheritdoc} - */ - public function set($key, $value) - { - return $this->_getSubject()->set($key, $value); - } - - /** - * {@inheritdoc} - */ - public function __isset($key) - { - return $this->_getSubject()->__isset($key); - } - - /** - * {@inheritdoc} - */ - public function has($key) - { - return $this->_getSubject()->has($key); - } - - /** - * {@inheritdoc} - */ - public function setQuery($spec, $value = null) - { - return $this->_getSubject()->setQuery($spec, $value); - } - - /** - * {@inheritdoc} - */ - public function getQuery($key = null, $default = null) - { - return $this->_getSubject()->getQuery($key, $default); - } - - /** - * {@inheritdoc} - */ - public function getPost($key = null, $default = null) - { - return $this->_getSubject()->getPost($key, $default); - } - - /** - * {@inheritdoc} - */ - public function getCookie($key = null, $default = null) - { - return $this->_getSubject()->getCookie($key, $default); - } - - /** - * {@inheritdoc} - */ - public function getServer($key = null, $default = null) - { - return $this->_getSubject()->getServer($key, $default); - } - - /** - * {@inheritdoc} - */ - public function getEnv($key = null, $default = null) - { - return $this->_getSubject()->getEnv($key, $default); - } - - /** - * {@inheritdoc} - */ - public function setRequestUri($requestUri = null) - { - return $this->_getSubject()->setRequestUri($requestUri); - } - - /** - * {@inheritdoc} - */ - public function getRequestUri() - { - return $this->_getSubject()->getRequestUri(); - } - - /** - * {@inheritdoc} - */ - public function setBaseUrl($baseUrl = null) - { - return $this->_getSubject()->setBaseUrl($baseUrl); - } - - /** - * {@inheritdoc} - */ - public function setBasePath($basePath = null) - { - return $this->_getSubject()->setBasePath($basePath); - } - - /** - * {@inheritdoc} - */ - public function getPathInfo() - { - return $this->_getSubject()->getPathInfo(); - } - - /** - * {@inheritdoc} - */ - public function setParamSources(array $paramSources = array()) - { - return $this->_getSubject()->setParamSources($paramSources); - } - - /** - * {@inheritdoc} - */ - public function getParamSources() - { - return $this->_getSubject()->getParamSources(); - } - - /** - * {@inheritdoc} - */ - public function setParam($key, $value) - { - return $this->_getSubject()->setParam($key, $value); - } - - /** - * {@inheritdoc} - */ - public function getParam($key, $default = null) - { - return $this->_getSubject()->getParam($key, $default); - } - - /** - * {@inheritdoc} - */ - public function getParams() - { - return $this->_getSubject()->getParams(); - } - - /** - * {@inheritdoc} - */ - public function setParams(array $params) - { - return $this->_getSubject()->setParams($params); - } - - /** - * {@inheritdoc} - */ - public function setAlias($name, $target) - { - return $this->_getSubject()->setAlias($name, $target); - } - - /** - * {@inheritdoc} - */ - public function getMethod() - { - return $this->_getSubject()->getMethod(); - } - - /** - * {@inheritdoc} - */ - public function isPost() - { - return $this->_getSubject()->isPost(); - } - - /** - * {@inheritdoc} - */ - public function isGet() - { - return $this->_getSubject()->isGet(); - } - - /** - * {@inheritdoc} - */ - public function isPut() - { - return $this->_getSubject()->isPut(); - } - - /** - * {@inheritdoc} - */ - public function isDelete() - { - return $this->_getSubject()->isDelete(); - } - - /** - * {@inheritdoc} - */ - public function isHead() - { - return $this->_getSubject()->isHead(); - } - - /** - * {@inheritdoc} - */ - public function isOptions() - { - return $this->_getSubject()->isOptions(); - } - - /** - * {@inheritdoc} - */ - public function isXmlHttpRequest() - { - return $this->_getSubject()->isXmlHttpRequest(); - } - - /** - * {@inheritdoc} - */ - public function isFlashRequest() - { - return $this->_getSubject()->isFlashRequest(); - } - - /** - * {@inheritdoc} - */ - public function isSecure() - { - return $this->_getSubject()->isSecure(); - } - - /** - * {@inheritdoc} - */ - public function getRawBody() - { - return $this->_getSubject()->getRawBody(); - } - - /** - * {@inheritdoc} - */ - public function getHeader($header) - { - return $this->_getSubject()->getHeader($header); - } - - /** - * {@inheritdoc} - */ - public function getScheme() - { - return $this->_getSubject()->getScheme(); - } - - /** - * {@inheritdoc} - */ - public function getClientIp($checkProxy = true) - { - return $this->_getSubject()->getClientIp($checkProxy); - } - - /** - * {@inheritdoc} - */ - public function setModuleName($value) - { - return $this->_getSubject()->setModuleName($value); - } - - /** - * {@inheritdoc} - */ - public function setControllerName($value) - { - return $this->_getSubject()->setControllerName($value); - } - - /** - * {@inheritdoc} - */ - public function setActionName($value) - { - return $this->_getSubject()->setActionName($value); - } - - /** - * {@inheritdoc} - */ - public function getModuleKey() - { - return $this->_getSubject()->getModuleKey(); - } - - /** - * {@inheritdoc} - */ - public function setModuleKey($key) - { - return $this->_getSubject()->setModuleKey($key); - } - - /** - * {@inheritdoc} - */ - public function getControllerKey() - { - return $this->_getSubject()->getControllerKey(); - } - - /** - * {@inheritdoc} - */ - public function setControllerKey($key) - { - return $this->_getSubject()->setControllerKey($key); - } - - /** - * {@inheritdoc} - */ - public function getActionKey() - { - return $this->_getSubject()->getActionKey(); - } - - /** - * {@inheritdoc} - */ - public function setActionKey($key) - { - return $this->_getSubject()->setActionKey($key); - } - - /** - * {@inheritdoc} - */ - public function getUserParams() - { - return $this->_getSubject()->getUserParams(); - } - - /** - * {@inheritdoc} - */ - public function getUserParam($key, $default = null) - { - return $this->_getSubject()->getUserParam($key, $default); - } - - /** - * {@inheritdoc} - */ - public function clearParams() - { - return $this->_getSubject()->clearParams(); - } - - /** - * {@inheritdoc} - */ - public function setDispatched($flag = true) - { - return $this->_getSubject()->setDispatched($flag); - } - - /** - * {@inheritdoc} - */ - public function isDispatched() - { - return $this->_getSubject()->isDispatched(); - } -} diff --git a/app/code/Magento/Core/Controller/Response/Http.php b/app/code/Magento/Core/Controller/Response/Http.php deleted file mode 100644 index 4496ff0e684..00000000000 --- a/app/code/Magento/Core/Controller/Response/Http.php +++ /dev/null @@ -1,141 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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_Core - * @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) - */ - - -/** - * Custom \Zend_Controller_Response_Http class (formally) - * - * @author Magento Core Team <core@magentocommerce.com> - */ -namespace Magento\Core\Controller\Response; - -class Http extends \Zend_Controller_Response_Http -{ - /** - * Transport object for observers to perform - * - * @var \Magento\Object - */ - protected static $_transportObject = null; - - /** - * @var \Magento\Core\Model\Event\Manager - */ - protected $_eventManager; - - /** - * @param \Magento\Core\Model\Event\Manager $eventManager - */ - public function __construct(\Magento\Core\Model\Event\Manager $eventManager) - { - $this->_eventManager = $eventManager; - } - - /** - * Fixes CGI only one Status header allowed bug - * - * @link http://bugs.php.net/bug.php?id=36705 - * - * @return \Magento\Core\Controller\Response\Http - */ - public function sendHeaders() - { - if (!$this->canSendHeaders()) { - $this->_objectManager->get('Magento\Core\Model\Logger') - ->log('HEADERS ALREADY SENT: '.mageDebugBacktrace(true, true, true)); - return $this; - } - - if (substr(php_sapi_name(), 0, 3) == 'cgi') { - $statusSent = false; - foreach ($this->_headersRaw as $index => $header) { - if (stripos($header, 'status:')===0) { - if ($statusSent) { - unset($this->_headersRaw[$index]); - } else { - $statusSent = true; - } - } - } - foreach ($this->_headers as $index => $header) { - if (strcasecmp($header['name'], 'status') === 0) { - if ($statusSent) { - unset($this->_headers[$index]); - } else { - $statusSent = true; - } - } - } - } - return parent::sendHeaders(); - } - - public function sendResponse() - { - return parent::sendResponse(); - } - - /** - * Additionally check for session messages in several domains case - * - * @param string $url - * @param int $code - * @return \Magento\Core\Controller\Response\Http - */ - public function setRedirect($url, $code = 302) - { - /** - * Use single transport object instance - */ - if (self::$_transportObject === null) { - self::$_transportObject = new \Magento\Object; - } - self::$_transportObject->setUrl($url); - self::$_transportObject->setCode($code); - $this->_eventManager->dispatch('controller_response_redirect', - array('response' => $this, 'transport' => self::$_transportObject)); - - return parent::setRedirect(self::$_transportObject->getUrl(), self::$_transportObject->getCode()); - } - - /** - * Get header value by name. - * Returns first found header by passed name. - * If header with specified name was not found returns false. - * - * @param string $name - * @return array|bool - */ - public function getHeader($name) - { - foreach ($this->_headers as $header) { - if ($header['name'] == $name) { - return $header; - } - } - return false; - } -} diff --git a/app/code/Magento/Core/Controller/Varien/Action.php b/app/code/Magento/Core/Controller/Varien/Action.php index 44a5cee124f..664f1570b50 100644 --- a/app/code/Magento/Core/Controller/Varien/Action.php +++ b/app/code/Magento/Core/Controller/Varien/Action.php @@ -36,7 +36,9 @@ */ namespace Magento\Core\Controller\Varien; -class Action extends \Magento\Core\Controller\Varien\AbstractAction +use Magento\App\Action\AbstractAction; + +class Action extends \Magento\App\Action\AbstractAction { const FLAG_NO_CHECK_INSTALLATION = 'no-install-check'; const FLAG_NO_DISPATCH = 'no-dispatch'; @@ -113,17 +115,17 @@ class Action extends \Magento\Core\Controller\Varien\AbstractAction protected $_removeDefaultTitle = false; /** - * @var \Magento\Core\Controller\Varien\Front + * @var \Magento\App\FrontController */ protected $_frontController = null; /** - * @var \Magento\Core\Model\Layout\Factory + * @var \Magento\View\LayoutInterface */ protected $_layout; /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -207,7 +209,7 @@ class Action extends \Magento\Core\Controller\Varien\AbstractAction /** * Retrieve current layout object * - * @return \Magento\Core\Model\Layout + * @return \Magento\View\LayoutInterface */ public function getLayout() { @@ -389,10 +391,6 @@ class Action extends \Magento\Core\Controller\Varien\AbstractAction return; } - if ($this->_frontController->getNoRender()) { - return; - } - \Magento\Profiler::start('LAYOUT'); $this->_renderTitles(); @@ -406,8 +404,6 @@ class Action extends \Magento\Core\Controller\Varien\AbstractAction $this->_eventManager->dispatch('controller_action_layout_render_before'); $this->_eventManager->dispatch('controller_action_layout_render_before_' . $this->getFullActionName()); - $this->getLayout()->setDirectOutput(false); - $output = $this->getLayout()->getOutput(); $this->_objectManager->get('Magento\Core\Model\Translate')->processResponseBody($output); $this->getResponse()->appendBody($output); @@ -454,7 +450,7 @@ class Action extends \Magento\Core\Controller\Varien\AbstractAction } \Magento\Profiler::stop($profilerKey); - } catch (\Magento\Core\Controller\Varien\Exception $e) { + } catch (\Magento\App\Action\Exception $e) { // set prepared flags foreach ($e->getResultFlags() as $flagData) { list($action, $flag, $value) = $flagData; @@ -463,11 +459,11 @@ class Action extends \Magento\Core\Controller\Varien\AbstractAction // call forward, redirect or an action list($method, $parameters) = $e->getResultCallback(); switch ($method) { - case \Magento\Core\Controller\Varien\Exception::RESULT_REDIRECT: + case \Magento\App\Action\Exception::RESULT_REDIRECT: list($path, $arguments) = $parameters; $this->_redirect($path, $arguments); break; - case \Magento\Core\Controller\Varien\Exception::RESULT_FORWARD: + case \Magento\App\Action\Exception::RESULT_FORWARD: list($action, $controller, $module, $params) = $parameters; $this->_forward($action, $controller, $module, $params); break; @@ -546,7 +542,7 @@ class Action extends \Magento\Core\Controller\Varien\AbstractAction public function preDispatch() { if (!$this->getFlag('', self::FLAG_NO_CHECK_INSTALLATION)) { - if (!$this->_objectManager->get('Magento\Core\Model\App\State')->isInstalled()) { + if (!$this->_objectManager->get('Magento\App\State')->isInstalled()) { $this->setFlag('', self::FLAG_NO_DISPATCH, true); $this->_redirect('install'); return; @@ -555,7 +551,7 @@ class Action extends \Magento\Core\Controller\Varien\AbstractAction // Prohibit disabled store actions $storeManager = $this->_objectManager->get('Magento\Core\Model\StoreManager'); - if ($this->_objectManager->get('Magento\Core\Model\App\State') && !$storeManager->getStore()->getIsActive()) { + if ($this->_objectManager->get('Magento\App\State') && !$storeManager->getStore()->getIsActive()) { $this->_objectManager->get('Magento\Core\Model\StoreManager')->throwStoreException(); } diff --git a/app/code/Magento/Core/Controller/Varien/Action/Context.php b/app/code/Magento/Core/Controller/Varien/Action/Context.php index 80f9566c6c5..88139ce82fa 100644 --- a/app/code/Magento/Core/Controller/Varien/Action/Context.php +++ b/app/code/Magento/Core/Controller/Varien/Action/Context.php @@ -28,12 +28,12 @@ namespace Magento\Core\Controller\Varien\Action; class Context implements \Magento\ObjectManager\ContextInterface { /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; /** - * @var \Magento\Core\Controller\Response\Http + * @var \Magento\App\ResponseInterface */ protected $_response; @@ -43,17 +43,17 @@ class Context implements \Magento\ObjectManager\ContextInterface protected $_objectManager; /** - * @var \Magento\Core\Controller\Varien\Front + * @var \Magento\App\FrontController */ protected $_frontController = null; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -71,22 +71,22 @@ class Context implements \Magento\ObjectManager\ContextInterface /** * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Controller\Request\Http $request - * @param \Magento\Core\Controller\Response\Http $response + * @param \Magento\App\RequestInterface $request + * @param \Magento\App\ResponseInterface $response * @param \Magento\ObjectManager $objectManager - * @param \Magento\Core\Controller\Varien\Front $frontController - * @param \Magento\Core\Model\Layout $layout - * @param \Magento\Core\Model\Event\Manager $eventManager - * @param boolean $isRenderInherited + * @param \Magento\App\FrontController $frontController + * @param \Magento\View\LayoutInterface $layout + * @param \Magento\Event\ManagerInterface $eventManager + * @param bool $isRenderInherited */ public function __construct( \Magento\Core\Model\Logger $logger, - \Magento\Core\Controller\Request\Http $request, - \Magento\Core\Controller\Response\Http $response, + \Magento\App\RequestInterface $request, + \Magento\App\ResponseInterface $response, \Magento\ObjectManager $objectManager, - \Magento\Core\Controller\Varien\Front $frontController, - \Magento\Core\Model\Layout $layout, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\App\FrontController $frontController, + \Magento\View\LayoutInterface $layout, + \Magento\Event\ManagerInterface $eventManager, $isRenderInherited ) { $this->_request = $request; @@ -110,7 +110,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Controller\Varien\Front + * @return \Magento\App\FrontController */ public function getFrontController() { @@ -118,7 +118,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Model\Layout + * @return \Magento\View\LayoutInterface */ public function getLayout() { @@ -134,7 +134,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Controller\Request\Http + * @return \Magento\App\RequestInterface */ public function getRequest() { @@ -142,7 +142,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Controller\Response\Http + * @return \Magento\App\ResponseInterface */ public function getResponse() { @@ -150,7 +150,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Model\Event\Manager + * @return \Magento\Event\ManagerInterface */ public function getEventManager() { diff --git a/app/code/Magento/Core/Controller/Varien/Front.php b/app/code/Magento/Core/Controller/Varien/Front.php deleted file mode 100644 index cdc71cd70b4..00000000000 --- a/app/code/Magento/Core/Controller/Varien/Front.php +++ /dev/null @@ -1,413 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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_Core - * @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\Core\Controller\Varien; - -class Front extends \Magento\Object implements \Magento\Core\Controller\FrontInterface -{ - /** - * @var \Magento\Core\Model\Url\RewriteFactory - */ - protected $_rewriteFactory; - - /** - * @var \Magento\Core\Model\Store\Config - */ - protected $_coreStoreConfig; - - /** - * @var array - */ - protected $_defaults = array(); - - /** - * @var \Magento\Core\Model\RouterList - */ - protected $_routerList; - - /** - * @var \Magento\Core\Model\Config - */ - protected $_coreConfig; - - /** - * @var \Magento\Backend\Helper\Data - */ - protected $_backendData; - - /** - * @var \Magento\Core\Model\Url - */ - protected $_url; - - /** - * @var \Magento\Core\Model\App\State - */ - protected $_appState; - - /** - * @var \Magento\Core\Model\StoreManager - */ - protected $_storeManager; - - /** - * @var \Magento\Core\Controller\Request\Http - */ - protected $_request; - - /** - * @var \Magento\Core\Controller\Response\Http - */ - protected $_response; - - /** - * @var \Magento\Core\Model\App - */ - protected $_app; - - /** - * @param \Magento\Backend\Helper\Data $backendData - * @param \Magento\Core\Model\Url\RewriteFactory $rewriteFactory - * @param \Magento\Core\Model\Event\Manager $eventManager - * @param \Magento\Core\Model\RouterList $routerList - * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Core\Model\Config $coreConfig - * @param \Magento\Core\Model\Url $url - * @param \Magento\Core\Model\App\State $appState - * @param \Magento\Core\Model\App $app - * @param \Magento\Core\Model\StoreManager $storeManager - * @param \Magento\Core\Controller\Request\Http $request - * @param \Magento\Core\Controller\Response\Http $response - * @param array $data - */ - public function __construct( - \Magento\Backend\Helper\Data $backendData, - \Magento\Core\Model\Url\RewriteFactory $rewriteFactory, - \Magento\Core\Model\Event\Manager $eventManager, - \Magento\Core\Model\RouterList $routerList, - \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Core\Model\Config $coreConfig, - \Magento\Core\Model\Url $url, - \Magento\Core\Model\App\State $appState, - \Magento\Core\Model\App $app, - \Magento\Core\Model\StoreManager $storeManager, - \Magento\Core\Controller\Request\Http $request, - \Magento\Core\Controller\Response\Http $response, - array $data = array() - ) { - parent::__construct($data); - - $this->_backendData = $backendData; - $this->_rewriteFactory = $rewriteFactory; - $this->_eventManager = $eventManager; - $this->_routerList = $routerList; - $this->_coreStoreConfig = $coreStoreConfig; - $this->_coreConfig = $coreConfig; - $this->_url = $url; - $this->_appState = $appState; - $this->_app = $app; - $this->_storeManager = $storeManager; - $this->_request = $request; - $this->_response = $response; - } - - public function setDefault($key, $value=null) - { - if (is_array($key)) { - $this->_defaults = $key; - } else { - $this->_defaults[$key] = $value; - } - return $this; - } - - public function getDefault($key=null) - { - if (is_null($key)) { - return $this->_defaults; - } elseif (isset($this->_defaults[$key])) { - return $this->_defaults[$key]; - } - return false; - } - - /** - * Retrieve request object - * - * @return \Magento\Core\Controller\Request\Http - */ - public function getRequest() - { - return $this->_request; - } - - /** - * Retrieve response object - * - * @return \Magento\Core\Controller\Response\Http - */ - public function getResponse() - { - return $this->_response; - } - - /** - * Get routerList model - * - * @return \Magento\Core\Model\RouterList - */ - public function getRouterList() - { - return $this->_routerList; - } - - /** - * Retrieve router by name - * - * @param string $name - * @return \Magento\Core\Controller\Varien\Router\AbstractRouter - */ - public function getRouter($name) - { - $routers = $this->_routerList->getRouters(); - if (isset($routers[$name])) { - return $routers[$name]; - } - return false; - } - - /** - * Retrieve routers collection - * - * @return array - */ - public function getRouters() - { - return $this->_routerList->getRouters(); - } - - /** - * Dispatch user request - * - * @throws \Magento\Core\Exception - * @return \Magento\Core\Controller\Varien\Front - */ - public function dispatch() - { - $request = $this->getRequest(); - - // If pre-configured, check equality of base URL and requested URL - $this->_checkBaseUrl($request); - - \Magento\Profiler::start('dispatch'); - - $request->setPathInfo()->setDispatched(false); - $this->applyRewrites($request); - - \Magento\Profiler::stop('dispatch'); - - \Magento\Profiler::start('routers_match'); - $routingCycleCounter = 0; - while (!$request->isDispatched() && $routingCycleCounter++ < 100) { - /** @var $router \Magento\Core\Controller\Varien\Router\AbstractRouter */ - foreach ($this->_routerList->getRouters() as $router) { - $router->setFront($this); - - /** @var $controllerInstance \Magento\Core\Controller\Varien\Action */ - $controllerInstance = $router->match($this->getRequest()); - if ($controllerInstance) { - $controllerInstance->dispatch($request->getActionName()); - break; - } - } - } - \Magento\Profiler::stop('routers_match'); - if ($routingCycleCounter > 100) { - throw new \Magento\Core\Exception('Front controller reached 100 router match iterations'); - } - // This event gives possibility to launch something before sending output (allow cookie setting) - $this->_eventManager->dispatch('controller_front_send_response_before', array('front' => $this)); - \Magento\Profiler::start('send_response'); - $this->_eventManager->dispatch('http_response_send_before', array('response' => $this)); - $this->getResponse()->sendResponse(); - \Magento\Profiler::stop('send_response'); - $this->_eventManager->dispatch('controller_front_send_response_after', array('front' => $this)); - return $this; - } - - /** - * Apply rewrites to current request - * - * @param \Magento\Core\Controller\Request\Http $request - */ - public function applyRewrites(\Magento\Core\Controller\Request\Http $request) - { - // URL rewrite - if (!$request->isStraight()) { - \Magento\Profiler::start('db_url_rewrite'); - /** @var $urlRewrite \Magento\Core\Model\Url\Rewrite */ - $urlRewrite = $this->_rewriteFactory->create(); - $urlRewrite->rewrite($request); - \Magento\Profiler::stop('db_url_rewrite'); - } - - // config rewrite - \Magento\Profiler::start('config_url_rewrite'); - $this->rewrite($request); - \Magento\Profiler::stop('config_url_rewrite'); - } - - /** - * Apply configuration rewrites to current url - * - * @param \Magento\Core\Controller\Request\Http $request - */ - public function rewrite(\Magento\Core\Controller\Request\Http $request = null) - { - if (!$request) { - $request = $this->getRequest(); - } - - $config = $this->_coreConfig->getNode('global/rewrite'); - if (!$config) { - return; - } - foreach ($config->children() as $rewrite) { - $from = (string)$rewrite->from; - $to = (string)$rewrite->to; - if (empty($from) || empty($to)) { - continue; - } - $from = $this->_processRewriteUrl($from); - $to = $this->_processRewriteUrl($to); - - $pathInfo = preg_replace($from, $to, $request->getPathInfo()); - - if (isset($rewrite->complete)) { - $request->setPathInfo($pathInfo); - } else { - $request->rewritePathInfo($pathInfo); - } - } - } - - /** - * Replace route name placeholders in url to front name - * - * @param string $url - * @return string - */ - protected function _processRewriteUrl($url) - { - $startPos = strpos($url, '{'); - if ($startPos!==false) { - $endPos = strpos($url, '}'); - $routeId = substr($url, $startPos+1, $endPos-$startPos-1); - $router = $this->_routerList->getRouterByRoute($routeId); - if ($router) { - $frontName = $router->getFrontNameByRoute($routeId); - $url = str_replace('{'.$routeId.'}', $frontName, $url); - } - } - return $url; - } - - /** - * Auto-redirect to base url (without SID) if the requested url doesn't match it. - * By default this feature is enabled in configuration. - * - * @param \Zend_Controller_Request_Http $request - */ - protected function _checkBaseUrl($request) - { - if (!$this->_appState->isInstalled() || $request->getPost() || strtolower($request->getMethod()) == 'post') { - return; - } - - $redirectCode = (int)$this->_coreStoreConfig->getConfig('web/url/redirect_to_base'); - if (!$redirectCode) { - return; - } elseif ($redirectCode != 301) { - $redirectCode = 302; - } - - if ($this->_isAdminFrontNameMatched($request)) { - return; - } - - $baseUrl = $this->_storeManager->getStore()->getBaseUrl( - \Magento\Core\Model\Store::URL_TYPE_WEB, - $this->_storeManager->getStore()->isCurrentlySecure() - ); - if (!$baseUrl) { - return; - } - - $uri = parse_url($baseUrl); - $requestUri = $request->getRequestUri() ? $request->getRequestUri() : '/'; - if (isset($uri['scheme']) && $uri['scheme'] != $request->getScheme() - || isset($uri['host']) && $uri['host'] != $request->getHttpHost() - || isset($uri['path']) && strpos($requestUri, $uri['path']) === false - ) { - $redirectUrl = $this->_url->getRedirectUrl( - $this->_url->getUrl(ltrim($request->getPathInfo(), '/'), array('_nosid' => true)) - ); - - $this->_app->getFrontController()->getResponse() - ->setRedirect($redirectUrl, $redirectCode) - ->sendResponse(); - exit; - } - } - - /** - * Check if requested path starts with one of the admin front names - * - * @param \Zend_Controller_Request_Http $request - * @return boolean - */ - protected function _isAdminFrontNameMatched($request) - { - $pathPrefix = $this->_extractPathPrefixFromUrl($request); - return $pathPrefix == $this->_backendData->getAreaFrontName(); - } - - /** - * Extract first path part from url (in most cases this is area code) - * - * @param \Zend_Controller_Request_Http $request - * @return string - */ - protected function _extractPathPrefixFromUrl($request) - { - $pathPrefix = ltrim($request->getPathInfo(), '/'); - $urlDelimiterPos = strpos($pathPrefix, '/'); - if ($urlDelimiterPos) { - $pathPrefix = substr($pathPrefix, 0, $urlDelimiterPos); - } - - return $pathPrefix; - } -} diff --git a/app/code/Magento/Core/Controller/Varien/Router/Base.php b/app/code/Magento/Core/Controller/Varien/Router/Base.php index 46bb1aad88f..711c65027c2 100644 --- a/app/code/Magento/Core/Controller/Varien/Router/Base.php +++ b/app/code/Magento/Core/Controller/Varien/Router/Base.php @@ -26,7 +26,9 @@ namespace Magento\Core\Controller\Varien\Router; -class Base extends \Magento\Core\Controller\Varien\Router\AbstractRouter +use Magento\App\Router\AbstractRouter; + +class Base extends \Magento\App\Router\AbstractRouter { /** * @var array @@ -75,11 +77,6 @@ class Base extends \Magento\Core\Controller\Varien\Router\AbstractRouter */ protected $_app; - /** - * @var \Magento\Core\Model\Config\Scope - */ - protected $_configScope; - /** * @var \Magento\Core\Model\Route\Config */ @@ -122,39 +119,37 @@ class Base extends \Magento\Core\Controller\Varien\Router\AbstractRouter protected $_storeManager; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; /** - * @param \Magento\Core\Controller\Varien\Action\Factory $controllerFactory + * @param \Magento\App\ActionFactory $controllerFactory * @param \Magento\Filesystem $filesystem * @param \Magento\Core\Model\App $app - * @param \Magento\Core\Model\Config\Scope $configScope * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\Route\Config $routeConfig * @param \Magento\Core\Model\Url\SecurityInfoInterface $urlSecurityInfo * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\Url $url * @param \Magento\Core\Model\StoreManager $storeManager - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param string $areaCode * @param string $baseController * @param string $routerId * @throws \InvalidArgumentException */ public function __construct( - \Magento\Core\Controller\Varien\Action\Factory $controllerFactory, + \Magento\App\ActionFactory $controllerFactory, \Magento\Filesystem $filesystem, \Magento\Core\Model\App $app, - \Magento\Core\Model\Config\Scope $configScope, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\Route\Config $routeConfig, \Magento\Core\Model\Url\SecurityInfoInterface $urlSecurityInfo, \Magento\Core\Model\Config $config, \Magento\Core\Model\Url $url, \Magento\Core\Model\StoreManager $storeManager, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, $areaCode, $baseController, $routerId @@ -165,11 +160,9 @@ class Base extends \Magento\Core\Controller\Varien\Router\AbstractRouter $this->_filesystem = $filesystem; $this->_areaCode = $areaCode; $this->_baseController = $baseController; - $this->_configScope = $configScope; $this->_routeConfig = $routeConfig; $this->_routerId = $routerId; $this->_urlSecurityInfo = $urlSecurityInfo; - $this->_configScope = $configScope; $this->_coreStoreConfig = $coreStoreConfig; $this->_config = $config; $this->_url = $url; @@ -233,10 +226,10 @@ class Base extends \Magento\Core\Controller\Varien\Router\AbstractRouter /** * Match provided request and if matched - return corresponding controller * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @return \Magento\Core\Controller\Front\Action|null */ - public function match(\Magento\Core\Controller\Request\Http $request) + public function match(\Magento\App\RequestInterface $request) { //checking before even try to find out that current module //should use this router @@ -250,8 +243,6 @@ class Base extends \Magento\Core\Controller\Varien\Router\AbstractRouter return null; } - $this->_app->loadAreaPart($this->_areaCode, \Magento\Core\Model\App\Area::PART_CONFIG); - return $this->_matchController($request, $params); } @@ -269,10 +260,10 @@ class Base extends \Magento\Core\Controller\Varien\Router\AbstractRouter /** * Parse request URL params * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @return array */ - protected function _parseRequest(\Magento\Core\Controller\Request\Http $request) + protected function _parseRequest(\Magento\App\RequestInterface $request) { $output = array(); @@ -292,11 +283,11 @@ class Base extends \Magento\Core\Controller\Varien\Router\AbstractRouter /** * Match module front name * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @param string $param * @return string|null */ - protected function _matchModuleFrontName(\Magento\Core\Controller\Request\Http $request, $param) + protected function _matchModuleFrontName(\Magento\App\RequestInterface $request, $param) { // get module name if ($request->getModuleName()) { @@ -318,11 +309,11 @@ class Base extends \Magento\Core\Controller\Varien\Router\AbstractRouter /** * Match controller name * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @param string $param * @return string */ - protected function _matchControllerName(\Magento\Core\Controller\Request\Http $request, $param) + protected function _matchControllerName(\Magento\App\RequestInterface $request, $param) { if ($request->getControllerName()) { $controller = $request->getControllerName(); @@ -343,11 +334,11 @@ class Base extends \Magento\Core\Controller\Varien\Router\AbstractRouter /** * Match controller name * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @param string $param * @return string */ - protected function _matchActionName(\Magento\Core\Controller\Request\Http $request, $param) + protected function _matchActionName(\Magento\App\RequestInterface $request, $param) { if (empty($action)) { if ($request->getActionName()) { @@ -366,10 +357,10 @@ class Base extends \Magento\Core\Controller\Varien\Router\AbstractRouter * Get not found controller instance * * @param $currentModuleName - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @return \Magento\Core\Controller\Varien\Action|null */ - protected function _getNotFoundControllerInstance($currentModuleName, \Magento\Core\Controller\Request\Http $request) + protected function _getNotFoundControllerInstance($currentModuleName, \Magento\App\RequestInterface $request) { $controllerInstance = null; @@ -412,11 +403,11 @@ class Base extends \Magento\Core\Controller\Varien\Router\AbstractRouter /** * Create matched controller instance * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @param array $params * @return \Magento\Core\Controller\Front\Action|null */ - protected function _matchController(\Magento\Core\Controller\Request\Http $request, array $params) + protected function _matchController(\Magento\App\RequestInterface $request, array $params) { $this->fetchDefault(); @@ -469,7 +460,6 @@ class Base extends \Magento\Core\Controller\Varien\Router\AbstractRouter continue; } - $this->_configScope->setCurrentScope($this->_areaCode); // instantiate controller class $controllerInstance = $this->_controllerFactory->createController($controllerClassName, array('request' => $request) @@ -648,11 +638,11 @@ class Base extends \Magento\Core\Controller\Varien\Router\AbstractRouter * Check that request uses https protocol if it should. * Function redirects user to correct URL if needed. * - * @param \Zend_Controller_Request_Http $request + * @param \Magento\App\RequestInterface $request * @param string $path * @return void */ - protected function _checkShouldBeSecure(\Zend_Controller_Request_Http $request, $path = '') + protected function _checkShouldBeSecure(\Magento\App\RequestInterface $request, $path = '') { if (!$this->_appState->isInstalled() || $request->getPost()) { return; diff --git a/app/code/Magento/Core/Helper/AbstractHelper.php b/app/code/Magento/Core/Helper/AbstractHelper.php index cb78152194b..65310664153 100644 --- a/app/code/Magento/Core/Helper/AbstractHelper.php +++ b/app/code/Magento/Core/Helper/AbstractHelper.php @@ -43,7 +43,7 @@ abstract class AbstractHelper /** * Request object * - * @var \Zend_Controller_Request_Http + * @var \Magento\App\RequestInterface */ protected $_request; @@ -70,7 +70,7 @@ abstract class AbstractHelper protected $_app; /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; @@ -90,7 +90,7 @@ abstract class AbstractHelper /** * Retrieve request object * - * @return \Zend_Controller_Request_Http + * @return \Magento\App\RequestInterface */ protected function _getRequest() { diff --git a/app/code/Magento/Core/Helper/Context.php b/app/code/Magento/Core/Helper/Context.php index 3a51c31ce39..690b01f85e5 100644 --- a/app/code/Magento/Core/Helper/Context.php +++ b/app/code/Magento/Core/Helper/Context.php @@ -38,7 +38,7 @@ class Context implements \Magento\ObjectManager\ContextInterface protected $_moduleManager; /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -48,7 +48,7 @@ class Context implements \Magento\ObjectManager\ContextInterface protected $_logger; /** - * @var \Magento\Core\Controller\Request\HttpProxy + * @var \Magento\App\RequestInterface */ protected $_httpRequest; @@ -73,7 +73,7 @@ class Context implements \Magento\ObjectManager\ContextInterface protected $_app; /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; @@ -81,25 +81,25 @@ class Context implements \Magento\ObjectManager\ContextInterface * @param \Magento\Core\Model\Logger $logger * @param \Magento\Core\Model\Translate $translator * @param \Magento\Core\Model\ModuleManager $moduleManager - * @param \Magento\Core\Controller\Request\HttpProxy $httpRequest + * @param \Magento\App\RequestInterface $httpRequest * @param \Magento\Core\Model\Cache\Config $cacheConfig * @param \Magento\Core\Model\EncryptionFactory $encryptorFactory * @param \Magento\Core\Model\Fieldset\Config $fieldsetConfig - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\App $app - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder */ public function __construct( \Magento\Core\Model\Logger $logger, \Magento\Core\Model\Translate $translator, \Magento\Core\Model\ModuleManager $moduleManager, - \Magento\Core\Controller\Request\HttpProxy $httpRequest, + \Magento\App\RequestInterface $httpRequest, \Magento\Core\Model\Cache\Config $cacheConfig, \Magento\Core\Model\EncryptionFactory $encryptorFactory, \Magento\Core\Model\Fieldset\Config $fieldsetConfig, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\App $app, - \Magento\Core\Model\UrlInterface $urlBuilder + \Magento\UrlInterface $urlBuilder ) { $this->_translator = $translator; $this->_moduleManager = $moduleManager; @@ -138,7 +138,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function getUrlBuilder() { @@ -146,7 +146,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Controller\Request\HttpProxy + * @return \Magento\App\RequestInterface */ public function getRequest() { @@ -170,7 +170,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Model\Event\Manager + * @return \Magento\Event\ManagerInterface */ public function getEventManager() { diff --git a/app/code/Magento/Core/Helper/Css.php b/app/code/Magento/Core/Helper/Css.php index a35fd1c50b7..a5e2dc2bd34 100644 --- a/app/code/Magento/Core/Helper/Css.php +++ b/app/code/Magento/Core/Helper/Css.php @@ -40,17 +40,17 @@ class Css protected $_filesystem; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs; /** * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs */ public function __construct( \Magento\Filesystem $filesystem, - \Magento\Core\Model\Dir $dirs + \Magento\App\Dir $dirs ) { $this->_filesystem = $filesystem; $this->_dirs = $dirs; @@ -118,7 +118,7 @@ class Css * Thus, calculating relative path is not possible in general case. So we just assume, * that urls follow the structure of directory paths. */ - $topDir = $this->_dirs->getDir(\Magento\Core\Model\Dir::ROOT); + $topDir = $this->_dirs->getDir(\Magento\App\Dir::ROOT); $topDir = $this->_filesystem->normalizePath($topDir); if (strpos($file, $topDir) !== 0 || strpos($referencedFile, $topDir) !== 0) { throw new \Magento\Core\Exception('Offset can be calculated for internal resources only.'); diff --git a/app/code/Magento/Core/Helper/Data.php b/app/code/Magento/Core/Helper/Data.php index 2a2a7d53db3..1f1a6591cda 100644 --- a/app/code/Magento/Core/Helper/Data.php +++ b/app/code/Magento/Core/Helper/Data.php @@ -94,7 +94,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -136,7 +136,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper protected $_dateModel; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; @@ -147,27 +147,27 @@ class Data extends \Magento\Core\Helper\AbstractHelper /** * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Http $coreHttp * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Locale $locale * @param \Magento\Core\Model\Date $dateModel - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\Encryption $encryptor * @param bool $dbCompatibleMode */ public function __construct( \Magento\Core\Helper\Context $context, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Http $coreHttp, \Magento\Core\Model\Config $config, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Locale $locale, \Magento\Core\Model\Date $dateModel, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\Encryption $encryptor, $dbCompatibleMode = true ) { diff --git a/app/code/Magento/Core/Helper/File/Storage/Database.php b/app/code/Magento/Core/Helper/File/Storage/Database.php index 7029067785d..3706dfb1a60 100644 --- a/app/code/Magento/Core/Helper/File/Storage/Database.php +++ b/app/code/Magento/Core/Helper/File/Storage/Database.php @@ -77,7 +77,7 @@ class Database extends \Magento\Core\Helper\AbstractHelper protected $_fileStorage; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -85,14 +85,14 @@ class Database extends \Magento\Core\Helper\AbstractHelper * @param \Magento\Core\Helper\Context $context * @param \Magento\Core\Model\File\Storage\DatabaseFactory $dbStorageFactory * @param \Magento\Core\Model\File\Storage\File $fileStorage - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Filesystem $filesystem */ public function __construct( \Magento\Core\Helper\Context $context, \Magento\Core\Model\File\Storage\DatabaseFactory $dbStorageFactory, \Magento\Core\Model\File\Storage\File $fileStorage, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Filesystem $filesystem ) { parent::__construct($context); diff --git a/app/code/Magento/Core/Helper/Http.php b/app/code/Magento/Core/Helper/Http.php index 846c9a0d63e..9171a4c98c1 100644 --- a/app/code/Magento/Core/Helper/Http.php +++ b/app/code/Magento/Core/Helper/Http.php @@ -76,10 +76,10 @@ class Http extends \Magento\Core\Helper\AbstractHelper * * Returns plain array with 2 items: login and password respectively * - * @param \Zend_Controller_Request_Http $request + * @param \Magento\App\RequestInterface $request * @return array */ - public function getHttpAuthCredentials(\Zend_Controller_Request_Http $request) + public function getHttpAuthCredentials(\Magento\App\RequestInterface $request) { $server = $request->getServer(); $user = ''; @@ -117,10 +117,10 @@ class Http extends \Magento\Core\Helper\AbstractHelper /** * Set "auth failed" headers to the specified response object * - * @param \Zend_Controller_Response_Http $response + * @param \Magento\App\ResponseInterface $response * @param string $realm */ - public function failHttpAuthentication(\Zend_Controller_Response_Http $response, $realm) + public function failHttpAuthentication(\Magento\App\ResponseInterface $response, $realm) { $response->setHeader('HTTP/1.1', '401 Unauthorized') ->setHeader('WWW-Authenticate', 'Basic realm="' . $realm . '"') diff --git a/app/code/Magento/Core/Helper/Theme.php b/app/code/Magento/Core/Helper/Theme.php index ad37f8cf229..8f21ca882da 100644 --- a/app/code/Magento/Core/Helper/Theme.php +++ b/app/code/Magento/Core/Helper/Theme.php @@ -34,16 +34,16 @@ class Theme extends \Magento\Core\Helper\AbstractHelper /** * Directories * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs; /** * Layout merge factory * - * @var \Magento\Core\Model\Layout\MergeFactory + * @var \Magento\View\Layout\ProcessorFactory */ - protected $_layoutMergeFactory; + protected $_layoutProcessorFactory; /** * Theme collection model @@ -58,21 +58,21 @@ class Theme extends \Magento\Core\Helper\AbstractHelper protected $_viewFileSystem; /** - * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\Dir $dirs - * @param \Magento\Core\Model\Layout\MergeFactory $layoutMergeFactory + * @param Context $context + * @param \Magento\App\Dir $dirs + * @param \Magento\View\Layout\ProcessorFactory $layoutProcessorFactory * @param \Magento\Core\Model\Resource\Theme\Collection $themeCollection * @param \Magento\Core\Model\View\FileSystem $viewFileSystem */ public function __construct( \Magento\Core\Helper\Context $context, - \Magento\Core\Model\Dir $dirs, - \Magento\Core\Model\Layout\MergeFactory $layoutMergeFactory, + \Magento\App\Dir $dirs, + \Magento\View\Layout\ProcessorFactory $layoutProcessorFactory, \Magento\Core\Model\Resource\Theme\Collection $themeCollection, \Magento\Core\Model\View\FileSystem $viewFileSystem ) { $this->_dirs = $dirs; - $this->_layoutMergeFactory = $layoutMergeFactory; + $this->_layoutProcessorFactory = $layoutProcessorFactory; $this->_themeCollection = $themeCollection; $this->_viewFileSystem = $viewFileSystem; parent::__construct($context); @@ -86,14 +86,14 @@ class Theme extends \Magento\Core\Helper\AbstractHelper * 'Magento_Catalog::widgets.css' => 'http://mage2.com/pub/static/frontend/_theme15/en_US/Magento_Cms/widgets.css' * ) * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return array */ public function getCssFiles($theme) { - /** @var $layoutMerge \Magento\Core\Model\Layout\Merge */ - $layoutMerge = $this->_layoutMergeFactory->create(array('theme' => $theme)); - $layoutElement = $layoutMerge->getFileLayoutUpdatesXml(); + /** @var $layoutProcessor \Magento\View\Layout\ProcessorInterface */ + $layoutProcessor = $this->_layoutProcessorFactory->create(array('theme' => $theme)); + $layoutElement = $layoutProcessor->getFileLayoutUpdatesXml(); /** * XPath selector to get CSS files from layout added for HEAD block directly @@ -118,7 +118,7 @@ class Theme extends \Magento\Core\Helper\AbstractHelper 'skipProxy' => true ); - $basePath = $this->_dirs->getDir(\Magento\Core\Model\Dir::ROOT); + $basePath = $this->_dirs->getDir(\Magento\App\Dir::ROOT); $files = array(); foreach ($elements as $fileId) { $fileId = (string)$fileId; @@ -139,15 +139,15 @@ class Theme extends \Magento\Core\Helper\AbstractHelper /** * Get CSS files by group * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return array * @throws \LogicException */ public function getGroupedCssFiles($theme) { - $jsDir = \Magento\Filesystem::fixSeparator($this->_dirs->getDir(\Magento\Core\Model\Dir::PUB_LIB)); - $codeDir = \Magento\Filesystem::fixSeparator($this->_dirs->getDir(\Magento\Core\Model\Dir::MODULES)); - $designDir = \Magento\Filesystem::fixSeparator($this->_dirs->getDir(\Magento\Core\Model\Dir::THEMES)); + $jsDir = \Magento\Filesystem::fixSeparator($this->_dirs->getDir(\Magento\App\Dir::PUB_LIB)); + $codeDir = \Magento\Filesystem::fixSeparator($this->_dirs->getDir(\Magento\App\Dir::MODULES)); + $designDir = \Magento\Filesystem::fixSeparator($this->_dirs->getDir(\Magento\App\Dir::THEMES)); $groups = array(); $themes = array(); @@ -177,7 +177,7 @@ class Theme extends \Magento\Core\Helper\AbstractHelper } $order = array_merge(array($codeDir, $jsDir), array_map(function ($fileTheme) { - /** @var $fileTheme \Magento\Core\Model\Theme */ + /** @var $fileTheme \Magento\View\Design\ThemeInterface */ return $fileTheme->getThemeId(); }, $themes)); $groups = $this->_sortArrayByArray($groups, $order); @@ -319,7 +319,7 @@ class Theme extends \Magento\Core\Helper\AbstractHelper $codeDir => (string)__('Framework files') ); foreach ($themes as $theme) { - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ $labels[$theme->getThemeId()] = (string)__('"%1" Theme files', $theme->getThemeTitle()); } return $labels; @@ -356,8 +356,8 @@ class Theme extends \Magento\Core\Helper\AbstractHelper /** * Sort themes by hierarchy callback * - * @param \Magento\Core\Model\Theme $firstTheme - * @param \Magento\Core\Model\Theme $secondTheme + * @param \Magento\View\Design\ThemeInterface $firstTheme + * @param \Magento\View\Design\ThemeInterface $secondTheme * @return int */ protected function _sortThemesByHierarchyCallback($firstTheme, $secondTheme) diff --git a/app/code/Magento/Core/Helper/Translate.php b/app/code/Magento/Core/Helper/Translate.php index 70251d92dce..1d92e730493 100644 --- a/app/code/Magento/Core/Helper/Translate.php +++ b/app/code/Magento/Core/Helper/Translate.php @@ -34,24 +34,24 @@ class Translate extends \Magento\Core\Helper\AbstractHelper /** * Design package instance * - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_design; /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; /** - * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\View\DesignInterface $design - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param Context $context + * @param \Magento\View\DesignInterface $design + * @param \Magento\Event\ManagerInterface $eventManager */ public function __construct( \Magento\Core\Helper\Context $context, - \Magento\Core\Model\View\DesignInterface $design, - \Magento\Core\Model\Event\Manager $eventManager + \Magento\View\DesignInterface $design, + \Magento\Event\ManagerInterface $eventManager ) { $this->_eventManager = $eventManager; parent::__construct($context); diff --git a/app/code/Magento/Core/Helper/Url.php b/app/code/Magento/Core/Helper/Url.php index e76b2b0875b..3e69656fcec 100644 --- a/app/code/Magento/Core/Helper/Url.php +++ b/app/code/Magento/Core/Helper/Url.php @@ -64,8 +64,8 @@ class Url extends \Magento\Core\Helper\AbstractHelper $port = $this->_getRequest()->getServer('SERVER_PORT'); if ($port) { $defaultPorts = array( - \Magento\Core\Controller\Request\Http::DEFAULT_HTTP_PORT, - \Magento\Core\Controller\Request\Http::DEFAULT_HTTPS_PORT + \Magento\App\Request\Http::DEFAULT_HTTP_PORT, + \Magento\App\Request\Http::DEFAULT_HTTPS_PORT ); $port = (in_array($port, $defaultPorts)) ? '' : ':' . $port; } diff --git a/app/code/Magento/Core/Model/AbstractEntryPoint.php b/app/code/Magento/Core/Model/AbstractEntryPoint.php index c62144ccf5b..f2579ef46db 100644 --- a/app/code/Magento/Core/Model/AbstractEntryPoint.php +++ b/app/code/Magento/Core/Model/AbstractEntryPoint.php @@ -70,8 +70,8 @@ abstract class AbstractEntryPoint public function processException(\Exception $exception) { $this->_init(); - $appMode = $this->_objectManager->get('Magento\Core\Model\App\State')->getMode(); - if ($appMode == \Magento\Core\Model\App\State::MODE_DEVELOPER) { + $appMode = $this->_objectManager->get('Magento\App\State')->getMode(); + if ($appMode == \Magento\App\State::MODE_DEVELOPER) { print '<pre>'; print $exception->getMessage() . "\n\n"; print $exception->getTraceAsString(); @@ -92,12 +92,12 @@ abstract class AbstractEntryPoint // attempt to specify store as a skin try { $storeManager = $this->_objectManager->get('Magento\Core\Model\StoreManager'); - $reportData['skin'] = $storeManager->getStore()->getCode; + $reportData['skin'] = $storeManager->getStore()->getCode(); } catch (\Exception $exception) { } - $modelDir = $this->_objectManager->get('Magento\Core\Model\Dir'); - require_once($modelDir->getDir(\Magento\Core\Model\Dir::PUB) . DS . 'errors' . DS . 'report.php'); + $modelDir = $this->_objectManager->get('Magento\App\Dir'); + require_once($modelDir->getDir(\Magento\App\Dir::PUB) . DS . 'errors' . DS . 'report.php'); } } diff --git a/app/code/Magento/Core/Model/AbstractModel.php b/app/code/Magento/Core/Model/AbstractModel.php index 6674a3be097..b43e28bbb44 100644 --- a/app/code/Magento/Core/Model/AbstractModel.php +++ b/app/code/Magento/Core/Model/AbstractModel.php @@ -112,7 +112,7 @@ abstract class AbstractModel extends \Magento\Object /** * Application Event Dispatcher * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventDispatcher; @@ -197,7 +197,7 @@ abstract class AbstractModel extends \Magento\Object public function __wakeup() { $objectManager = \Magento\Core\Model\ObjectManager::getInstance(); - $this->_eventDispatcher = $objectManager->get('Magento\Core\Model\Event\Manager'); + $this->_eventDispatcher = $objectManager->get('Magento\Event\ManagerInterface'); $this->_cacheManager = $objectManager->get('Magento\Core\Model\CacheInterface'); $this->_coreRegistry = $objectManager->get('Magento\Core\Model\Registry'); } diff --git a/app/code/Magento/Core/Model/AbstractShell.php b/app/code/Magento/Core/Model/AbstractShell.php index 6c54eedd8e9..85e60e2b30c 100644 --- a/app/code/Magento/Core/Model/AbstractShell.php +++ b/app/code/Magento/Core/Model/AbstractShell.php @@ -62,7 +62,7 @@ abstract class AbstractShell protected $_filesystem; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -71,10 +71,10 @@ abstract class AbstractShell * * @param \Magento\Filesystem $filesystem * @param string $entryPoint - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @throws \Exception */ - public function __construct(\Magento\Filesystem $filesystem, $entryPoint, \Magento\Core\Model\Dir $dir) + public function __construct(\Magento\Filesystem $filesystem, $entryPoint, \Magento\App\Dir $dir) { if (isset($_SERVER['REQUEST_METHOD'])) { throw new \Exception('This script cannot be run from Browser. This is the shell script.'); @@ -109,7 +109,7 @@ abstract class AbstractShell */ protected function _getRootPath() { - return $this->_dir->getDir(\Magento\Core\Model\Dir::ROOT); + return $this->_dir->getDir(\Magento\App\Dir::ROOT); } /** diff --git a/app/code/Magento/Core/Model/App.php b/app/code/Magento/Core/Model/App.php index cab518ce5c3..5ae9baef6c9 100644 --- a/app/code/Magento/Core/Model/App.php +++ b/app/code/Magento/Core/Model/App.php @@ -51,7 +51,7 @@ class App implements \Magento\Core\Model\AppInterface /** * Magento version */ - const VERSION = '2.0.0.0-dev48'; + const VERSION = '2.0.0.0-dev49'; /** * Custom application dirs @@ -127,7 +127,7 @@ class App implements \Magento\Core\Model\AppInterface /** * Application front controller * - * @var \Magento\Core\Controller\FrontInterface + * @var \Magento\App\FrontControllerInterface */ protected $_frontController; @@ -148,14 +148,14 @@ class App implements \Magento\Core\Model\AppInterface /** * Request object * - * @var \Zend_Controller_Request_Http + * @var \Magento\App\RequestInterface */ protected $_request; /** * Response object * - * @var \Zend_Controller_Response_Http + * @var \Magento\App\ResponseInterface */ protected $_response; @@ -184,7 +184,7 @@ class App implements \Magento\Core\Model\AppInterface /** * Data base updater object * - * @var \Magento\Core\Model\Db\UpdaterInterface + * @var \Magento\App\UpdaterInterface */ protected $_dbUpdater; @@ -196,72 +196,48 @@ class App implements \Magento\Core\Model\AppInterface protected $_storeManager; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; /** - * @var \Magento\Core\Model\Config\Scope + * @var \Magento\Config\Scope */ protected $_configScope; /** - * @param \Magento\Core\Model\Config $config - * @param \Magento\Core\Model\CacheInterface $cache + * @param Config $config + * @param CacheInterface $cache * @param \Magento\ObjectManager $objectManager - * @param \Magento\Core\Model\Db\UpdaterInterface $dbUpdater - * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\Event\Manager $eventManager - * @param \Magento\Core\Model\App\State $appState - * @param \Magento\Core\Model\Config\Scope $configScope + * @param StoreManagerInterface $storeManager + * @param \Magento\Event\ManagerInterface $eventManager + * @param \Magento\App\State $appState + * @param \Magento\Config\Scope $configScope + * @param \Magento\App\FrontControllerInterface $frontController */ public function __construct( \Magento\Core\Model\Config $config, \Magento\Core\Model\CacheInterface $cache, \Magento\ObjectManager $objectManager, - \Magento\Core\Model\Db\UpdaterInterface $dbUpdater, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\Event\Manager $eventManager, - \Magento\Core\Model\App\State $appState, - \Magento\Core\Model\Config\Scope $configScope + \Magento\Event\ManagerInterface $eventManager, + \Magento\App\State $appState, + \Magento\Config\Scope $configScope, + \Magento\App\FrontControllerInterface $frontController ) { $this->_config = $config; $this->_cache = $cache; $this->_objectManager = $objectManager; $this->_storeManager = $storeManager; - $this->_dbUpdater = $dbUpdater; $this->_appState = $appState; $this->_eventManager = $eventManager; $this->_configScope = $configScope; - } - - /** - * Run application. Run process responsible for request processing and sending response. - * - * @return \Magento\Core\Model\App - */ - public function run() - { - \Magento\Profiler::start('init'); - - if ($this->_appState->isInstalled() && !$this->_cache->load('data_upgrade')) { - $this->_dbUpdater->updateScheme(); - $this->_dbUpdater->updateData(); - $this->_cache->save(1, 'data_upgrade'); - } - $this->_initRequest(); - - $controllerFront = $this->getFrontController(); - \Magento\Profiler::stop('init'); - - $controllerFront->dispatch(); - - return $this; + $this->_frontController = $frontController; } /** @@ -276,17 +252,6 @@ class App implements \Magento\Core\Model\AppInterface } } - /** - * Init request object - * - * @return \Magento\Core\Model\App - */ - protected function _initRequest() - { - $this->getRequest()->setPathInfo(); - return $this; - } - /** * Retrieve cookie object * @@ -297,52 +262,6 @@ class App implements \Magento\Core\Model\AppInterface return $this->_objectManager->get('Magento\Core\Model\Cookie'); } - /** - * Initialize application front controller - * - * @return \Magento\Core\Model\App - */ - protected function _initFrontController() - { - $this->_frontController = $this->_getFrontControllerByCurrentArea(); - return $this; - } - - /** - * Instantiate proper front controller instance depending on current area - * - * @return \Magento\Core\Controller\FrontInterface - */ - protected function _getFrontControllerByCurrentArea() - { - /** - * TODO: Temporary implementation for API. Must be reconsidered during implementation - * TODO: of ability to set different front controllers in different area. - * TODO: See also related changes in \Magento\Core\Model\Config. - */ - // TODO: Assure that everything work fine work in areas without routers (e.g. URL generation) - /** Default front controller class */ - $frontControllerClass = 'Magento\Core\Controller\Varien\Front'; - $pathParts = explode('/', trim($this->getRequest()->getPathInfo(), '/')); - if ($pathParts) { - /** If area front name is used it is expected to be set on the first place in path info */ - $frontName = reset($pathParts); - foreach ($this->getConfig()->getAreas() as $areaCode => $areaInfo) { - if (isset($areaInfo['front_controller']) - && isset($areaInfo['frontName']) && ($frontName == $areaInfo['frontName']) - ) { - $this->_configScope->setCurrentScope($areaCode); - $frontControllerClass = $areaInfo['front_controller']; - /** Remove area from path info */ - array_shift($pathParts); - $this->getRequest()->setPathInfo('/' . implode('/', $pathParts)); - break; - } - } - } - return $this->_objectManager->get($frontControllerClass); - } - /** * Re-declare custom error handler * @@ -424,11 +343,11 @@ class App implements \Magento\Core\Model\AppInterface /** * Retrieve layout object * - * @return \Magento\Core\Model\Layout + * @return \Magento\View\LayoutInterface */ public function getLayout() { - return $this->_objectManager->get('Magento\Core\Model\Layout'); + return $this->_objectManager->get('Magento\View\LayoutInterface'); } /** @@ -454,14 +373,10 @@ class App implements \Magento\Core\Model\AppInterface /** * Retrieve front controller object * - * @return \Magento\Core\Controller\Varien\Front + * @return \Magento\App\FrontController */ public function getFrontController() { - if (!$this->_isFrontControllerInitialized) { - $this->_initFrontController(); - $this->_isFrontControllerInitialized = true; - } return $this->_frontController; } @@ -553,12 +468,12 @@ class App implements \Magento\Core\Model\AppInterface /** * Retrieve request object * - * @return \Magento\Core\Controller\Request\Http + * @return \Magento\App\RequestInterface */ public function getRequest() { if (!$this->_request) { - $this->_request = $this->_objectManager->get('Magento\Core\Controller\Request\Http'); + $this->_request = $this->_objectManager->get('Magento\App\RequestInterface'); } return $this->_request; } @@ -566,10 +481,10 @@ class App implements \Magento\Core\Model\AppInterface /** * Request setter * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @return \Magento\Core\Model\App */ - public function setRequest(\Magento\Core\Controller\Request\Http $request) + public function setRequest(\Magento\App\RequestInterface $request) { $this->_request = $request; return $this; @@ -578,12 +493,12 @@ class App implements \Magento\Core\Model\AppInterface /** * Retrieve response object * - * @return \Zend_Controller_Response_Http + * @return \Magento\App\ResponseInterface */ public function getResponse() { if (!$this->_response) { - $this->_response = $this->_objectManager->get('Magento\Core\Controller\Response\Http'); + $this->_response = $this->_objectManager->get('Magento\App\ResponseInterface'); $this->_response->setHeader('Content-Type', 'text/html; charset=UTF-8'); } return $this->_response; @@ -592,10 +507,10 @@ class App implements \Magento\Core\Model\AppInterface /** * Response setter * - * @param \Magento\Core\Controller\Response\Http $response + * @param \Magento\App\ResponseInterface $response * @return \Magento\Core\Model\App */ - public function setResponse(\Magento\Core\Controller\Response\Http $response) + public function setResponse(\Magento\App\ResponseInterface $response) { $this->_response = $response; return $this; @@ -652,7 +567,7 @@ class App implements \Magento\Core\Model\AppInterface */ public function isDeveloperMode() { - return $this->_appState->getMode() == \Magento\Core\Model\App\State::MODE_DEVELOPER; + return $this->_appState->getMode() == \Magento\App\State::MODE_DEVELOPER; } /** @@ -921,7 +836,7 @@ class App implements \Magento\Core\Model\AppInterface 'revision' => '0', 'patch' => '0', 'stability' => 'dev', - 'number' => '48', + 'number' => '49', ); } } diff --git a/app/code/Magento/Core/Model/App/Area.php b/app/code/Magento/Core/Model/App/Area.php index a54f9d84603..b22a806dbdd 100644 --- a/app/code/Magento/Core/Model/App/Area.php +++ b/app/code/Magento/Core/Model/App/Area.php @@ -64,7 +64,7 @@ class Area /** * Event Manager * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -121,7 +121,7 @@ class Area /** * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Translate $translator * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\ObjectManager $objectManager @@ -133,7 +133,7 @@ class Area */ public function __construct( \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Translate $translator, \Magento\Core\Model\Config $config, \Magento\Core\Model\ObjectManager $objectManager, @@ -176,7 +176,7 @@ class Area /** * Detect and apply design for the area * - * @param \Zend_Controller_Request_Http $request + * @param \Magento\App\RequestInterface $request */ public function detectDesign($request = null) { @@ -193,7 +193,7 @@ class Area /** * Analyze user-agent information to override custom design settings * - * @param \Zend_Controller_Request_Http $request + * @param \Magento\App\RequestInterface $request * @return bool */ protected function _applyUserAgentDesignException($request) @@ -221,11 +221,11 @@ class Area } /** - * @return \Magento\Core\Model\View\DesignInterface + * @return \Magento\View\DesignInterface */ protected function _getDesign() { - return $this->_objectManager->get('Magento\Core\Model\View\DesignInterface'); + return $this->_objectManager->get('Magento\View\DesignInterface'); } /** @@ -276,7 +276,7 @@ class Area 'inline_type' => null, 'params' => array('area' => $this->_code) )); - $eventManager = $this->_objectManager->get('Magento\Core\Model\Event\Manager'); + $eventManager = $this->_objectManager->get('Magento\Event\ManagerInterface'); $eventManager->dispatch('translate_initialization_before', array( 'translate_object' => $this->_translator, 'result' => $dispatchResult diff --git a/app/code/Magento/Core/Model/App/Emulation.php b/app/code/Magento/Core/Model/App/Emulation.php index e43e82d5958..bb586f4c813 100644 --- a/app/code/Magento/Core/Model/App/Emulation.php +++ b/app/code/Magento/Core/Model/App/Emulation.php @@ -75,7 +75,7 @@ class Emulation extends \Magento\Object /** * @param \Magento\Core\Model\App $app * @param \Magento\Core\Model\StoreManager $storeManager - * @param \Magento\Core\Model\View\DesignInterface $viewDesign + * @param \Magento\View\DesignInterface $viewDesign * @param \Magento\Core\Model\Design $design * @param \Magento\Core\Model\Translate $translate * @param \Magento\Core\Helper\Translate $helperTranslate @@ -86,7 +86,7 @@ class Emulation extends \Magento\Object public function __construct( \Magento\Core\Model\App $app, \Magento\Core\Model\StoreManager $storeManager, - \Magento\Core\Model\View\DesignInterface $viewDesign, + \Magento\View\DesignInterface $viewDesign, \Magento\Core\Model\Design $design, \Magento\Core\Model\Translate $translate, \Magento\Core\Helper\Translate $helperTranslate, diff --git a/app/code/Magento/Core/Model/App/Proxy.php b/app/code/Magento/Core/Model/App/Proxy.php deleted file mode 100644 index 8cfef3e1d18..00000000000 --- a/app/code/Magento/Core/Model/App/Proxy.php +++ /dev/null @@ -1,561 +0,0 @@ -<?php -/** - * Application proxy model - * - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\Core\Model\App; - -class Proxy implements \Magento\Core\Model\AppInterface -{ - /** - * @var \Magento\ObjectManager - */ - protected $_objectManager; - - /** - * @var \Magento\Core\Model\App - */ - protected $_app = null; - - /** - * @param \Magento\ObjectManager $objectManager - */ - public function __construct(\Magento\ObjectManager $objectManager) - { - $this->_objectManager = $objectManager; - } - - /** - * Get application model - * - * @return \Magento\Core\Model\App - */ - protected function _getApp() - { - if (null === $this->_app) { - $this->_app = $this->_objectManager->get('Magento\Core\Model\App'); - } - - return $this->_app; - } - - /** - * Run application. Run process responsible for request processing and sending response. - * - * @return \Magento\Core\Model\AppInterface - */ - public function run() - { - return $this->_getApp()->run(); - } - - /** - * Throw an exception, if the application has not been installed yet - * - * @throws \Magento\Exception - */ - public function requireInstalledInstance() - { - $this->_getApp()->requireInstalledInstance(); - } - - /** - * Retrieve cookie object - * - * @return \Magento\Core\Model\Cookie - */ - public function getCookie() - { - return $this->_getApp()->getCookie(); - } - - /** - * Reinitialize stores - * - * @return void - */ - public function reinitStores() - { - $this->_getApp()->reinitStores(); - } - - /** - * Check if system is run in the single store mode - * - * @return bool - */ - public function isSingleStoreMode() - { - return $this->_getApp()->isSingleStoreMode(); - } - - /** - * Check if store has only one store view - * - * @return bool - */ - public function hasSingleStore() - { - return $this->_getApp()->hasSingleStore(); - } - - /** - * Set current default store - * - * @param string $store - */ - public function setCurrentStore($store) - { - $this->_getApp()->setCurrentStore($store); - } - - /** - * Get current store code - * - * @return string - */ - public function getCurrentStore() - { - return $this->_getApp()->getCurrentStore(); - } - - /** - * Re-declare custom error handler - * - * @param string $handler - * @return \Magento\Core\Model\AppInterface - */ - public function setErrorHandler($handler) - { - return $this->_getApp()->setErrorHandler($handler); - } - - /** - * Loading application area - * - * @param string $code - * @return \Magento\Core\Model\AppInterface - */ - public function loadArea($code) - { - return $this->_getApp()->loadArea($code); - } - - /** - * Loading part of area data - * - * @param string $area - * @param string $part - * @return \Magento\Core\Model\AppInterface - */ - public function loadAreaPart($area, $part) - { - return $this->_getApp()->loadAreaPart($area, $part); - } - - /** - * Retrieve application area - * - * @param string $code - * @return \Magento\Core\Model\App\Area - */ - public function getArea($code) - { - return $this->_getApp()->getArea($code); - } - - /** - * Retrieve application store object - * - * @param null|string|bool|int|\Magento\Core\Model\Store $storeId - * @return \Magento\Core\Model\Store - * @throws \Magento\Core\Model\Store\Exception - */ - public function getStore($storeId = null) - { - return $this->_getApp()->getStore($storeId); - } - - /** - * Retrieve application store object without Store_Exception - * - * @param string|int|\Magento\Core\Model\Store $storeId - * @return \Magento\Core\Model\Store - */ - public function getSafeStore($storeId = null) - { - return $this->_getApp()->getSafeStore($storeId); - } - - /** - * Retrieve stores array - * - * @param bool $withDefault - * @param bool $codeKey - * @return array - */ - public function getStores($withDefault = false, $codeKey = false) - { - return $this->_getApp()->getStores($withDefault, $codeKey); - } - - /** - * Retrieve default store for default group and website - * - * @return \Magento\Core\Model\Store - */ - public function getDefaultStoreView() - { - return $this->_getApp()->getDefaultStoreView(); - } - - /** - * Get distributive locale code - * - * @return string - */ - public function getDistroLocaleCode() - { - return $this->_getApp()->getDistroLocaleCode(); - } - - /** - * Retrieve application website object - * - * @param null|bool|int|string|\Magento\Core\Model\Website $websiteId - * @return \Magento\Core\Model\Website - * @throws \Magento\Core\Exception - */ - public function getWebsite($websiteId = null) - { - return $this->_getApp()->getWebsite($websiteId); - } - - /** - * Get websites - * - * @param bool $withDefault - * @param bool $codeKey - * @return array - */ - public function getWebsites($withDefault = false, $codeKey = false) - { - return $this->_getApp()->getWebsites($withDefault, $codeKey); - } - - /** - * Retrieve application store group object - * - * @param null|\Magento\Core\Model\Store\Group|string $groupId - * @return \Magento\Core\Model\Store\Group - * @throws \Magento\Core\Exception - */ - public function getGroup($groupId = null) - { - return $this->_getApp()->getGroup($groupId); - } - - /** - * Retrieve application locale object - * - * @return \Magento\Core\Model\LocaleInterface - */ - public function getLocale() - { - return $this->_getApp()->getLocale(); - } - - /** - * Retrieve layout object - * - * @return \Magento\Core\Model\Layout - */ - public function getLayout() - { - return $this->_getApp()->getLayout(); - } - - /** - * Retrieve helper object - * - * @param string $name - * @return \Magento\Core\Helper\AbstractHelper - */ - public function getHelper($name) - { - return $this->_getApp()->getHelper($name); - } - - /** - * Retrieve application base currency code - * - * @return string - */ - public function getBaseCurrencyCode() - { - return $this->_getApp()->getBaseCurrencyCode(); - } - - /** - * Retrieve configuration object - * - * @return \Magento\Core\Model\Config - */ - public function getConfig() - { - return $this->_getApp()->getConfig(); - } - - /** - * Retrieve front controller object - * - * @return \Magento\Core\Controller\Varien\Front - */ - public function getFrontController() - { - return $this->_getApp()->getFrontController(); - } - - /** - * Get core cache model - * - * @return \Magento\Core\Model\CacheInterface - */ - public function getCacheInstance() - { - return $this->_getApp()->getCacheInstance(); - } - - /** - * Retrieve cache object - * - * @return \Zend_Cache_Core - */ - public function getCache() - { - return $this->_getApp()->getCache(); - } - - /** - * Loading cache data - * - * @param string $cacheId - * @return mixed - */ - public function loadCache($cacheId) - { - return $this->_getApp()->loadCache($cacheId); - } - - /** - * Saving cache data - * - * @param mixed $data - * @param string $cacheId - * @param array $tags - * @param bool $lifeTime - * @return \Magento\Core\Model\AppInterface - */ - public function saveCache($data, $cacheId, $tags = array(), $lifeTime = false) - { - return $this->_getApp()->saveCache($data, $cacheId, $tags, $lifeTime); - } - - /** - * Remove cache - * - * @param string $cacheId - * @return \Magento\Core\Model\AppInterface - */ - public function removeCache($cacheId) - { - return $this->_getApp()->removeCache($cacheId); - } - - /** - * Cleaning cache - * - * @param array $tags - * @return \Magento\Core\Model\AppInterface - */ - public function cleanCache($tags = array()) - { - return $this->_getApp()->cleanCache($tags); - } - - /** - * Deletes all session files - * - * @return \Magento\Core\Model\AppInterface - */ - public function cleanAllSessions() - { - return $this->_getApp()->cleanAllSessions(); - } - - /** - * Retrieve request object - * - * @return \Magento\Core\Controller\Request\Http - */ - public function getRequest() - { - return $this->_getApp()->getRequest(); - } - - /** - * Request setter - * - * @param \Magento\Core\Controller\Request\Http $request - * @return \Magento\Core\Model\AppInterface - */ - public function setRequest(\Magento\Core\Controller\Request\Http $request) - { - return $this->_getApp()->setRequest($request); - } - - /** - * Retrieve response object - * - * @return \Zend_Controller_Response_Http - */ - public function getResponse() - { - return $this->_getApp()->getResponse(); - } - - /** - * Response setter - * - * @param \Magento\Core\Controller\Response\Http $response - * @return \Magento\Core\Model\AppInterface - */ - public function setResponse(\Magento\Core\Controller\Response\Http $response) - { - return $this->_getApp()->setResponse($response); - } - - /** - * @throws \Magento\Core\Model\Store\Exception - */ - public function throwStoreException() - { - $this->_getApp()->throwStoreException(); - } - - /** - * Set use session var instead of SID for URL - * - * @param bool $var - * @return \Magento\Core\Model\AppInterface - */ - public function setUseSessionVar($var) - { - return $this->_getApp()->setUseSessionVar($var); - } - - /** - * Retrieve use flag session var instead of SID for URL - * - * @return bool - */ - public function getUseSessionVar() - { - return $this->_getApp()->getUseSessionVar(); - } - - /** - * Get either default or any store view - * - * @return \Magento\Core\Model\Store - */ - public function getAnyStoreView() - { - return $this->_getApp()->getAnyStoreView(); - } - - /** - * Set Use session in URL flag - * - * @param bool $flag - * @return \Magento\Core\Model\AppInterface - */ - public function setUseSessionInUrl($flag = true) - { - return $this->_getApp()->setUseSessionInUrl($flag); - } - - /** - * Retrieve use session in URL flag - * - * @return bool - */ - public function getUseSessionInUrl() - { - return $this->_getApp()->getUseSessionInUrl(); - } - - /** - * Allow or disallow single store mode - * - * @param bool $value - */ - public function setIsSingleStoreModeAllowed($value) - { - $this->_getApp()->setIsSingleStoreModeAllowed($value); - } - - /** - * Prepare array of store groups - * can be filtered to contain default store group or not by $withDefault flag - * depending on flag $codeKey array keys can be group id or group code - * - * @param bool $withDefault - * @param bool $codeKey - * @return array - */ - public function getGroups($withDefault = false, $codeKey = false) - { - return $this->_getApp()->getGroups($withDefault, $codeKey); - } - - /** - * Unset website by id from app cache - * - * @param null|bool|int|string|\Magento\Core\Model\Website $websiteId - */ - public function clearWebsiteCache($websiteId = null) - { - $this->_getApp()->clearWebsiteCache($websiteId); - } - - /** - * Check if developer mode is enabled. - * - * @return bool - */ - public function isDeveloperMode() - { - return $this->_getApp()->isDeveloperMode(); - } -} diff --git a/app/code/Magento/Core/Model/AppInterface.php b/app/code/Magento/Core/Model/AppInterface.php index f1d0cfa30a6..f0a690829be 100644 --- a/app/code/Magento/Core/Model/AppInterface.php +++ b/app/code/Magento/Core/Model/AppInterface.php @@ -55,13 +55,6 @@ interface AppInterface extends \Magento\Core\Model\StoreManagerInterface */ const CONFIGURATION_DI_NODE = 'di'; - /** - * Run application. Run process responsible for request processing and sending response. - * - * @return \Magento\Core\Model\AppInterface - */ - public function run(); - /** * Throw an exception, if the application has not been installed yet * @@ -126,7 +119,7 @@ interface AppInterface extends \Magento\Core\Model\StoreManagerInterface /** * Retrieve layout object * - * @return \Magento\Core\Model\Layout + * @return \Magento\View\LayoutInterface */ public function getLayout(); @@ -147,7 +140,7 @@ interface AppInterface extends \Magento\Core\Model\StoreManagerInterface /** * Retrieve front controller object * - * @return \Magento\Core\Controller\Varien\Front + * @return \Magento\App\FrontController */ public function getFrontController(); @@ -211,32 +204,32 @@ interface AppInterface extends \Magento\Core\Model\StoreManagerInterface /** * Retrieve request object * - * @return \Magento\Core\Controller\Request\Http + * @return \Magento\App\RequestInterface */ public function getRequest(); /** * Request setter * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @return \Magento\Core\Model\AppInterface */ - public function setRequest(\Magento\Core\Controller\Request\Http $request); + public function setRequest(\Magento\App\RequestInterface $request); /** * Retrieve response object * - * @return \Zend_Controller_Response_Http + * @return \Magento\App\ResponseInterface */ public function getResponse(); /** * Response setter * - * @param \Magento\Core\Controller\Response\Http $response + * @param \Magento\App\ResponseInterface $response * @return \Magento\Core\Model\AppInterface */ - public function setResponse(\Magento\Core\Controller\Response\Http $response); + public function setResponse(\Magento\App\ResponseInterface $response); /** * Set use session var instead of SID for URL diff --git a/app/code/Magento/Core/Model/Cache/Frontend/Factory.php b/app/code/Magento/Core/Model/Cache/Frontend/Factory.php index 9e3e4c648fd..0a1c04524fb 100644 --- a/app/code/Magento/Core/Model/Cache/Frontend/Factory.php +++ b/app/code/Magento/Core/Model/Cache/Frontend/Factory.php @@ -47,7 +47,7 @@ class Factory private $_filesystem; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ private $_dirs; @@ -97,7 +97,7 @@ class Factory /** * @param \Magento\ObjectManager $objectManager * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param \Magento\Core\Model\Resource $resource * @param array $enforcedOptions * @param array $decorators @@ -105,7 +105,7 @@ class Factory public function __construct( \Magento\ObjectManager $objectManager, \Magento\Filesystem $filesystem, - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, \Magento\Core\Model\Resource $resource, array $enforcedOptions = array(), array $decorators = array() @@ -130,21 +130,21 @@ class Factory foreach (array('backend_options', 'slow_backend_options') as $section) { if (!empty($options[$section]['cache_dir'])) { - $dir = $this->_dirs->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . $options[$section]['cache_dir']; + $dir = $this->_dirs->getDir(\Magento\App\Dir::VAR_DIR) . DS . $options[$section]['cache_dir']; $this->_filesystem->setIsAllowCreateDirectories(true); $this->_filesystem->ensureDirectoryExists($dir, 0777); $options[$section]['cache_dir'] = $dir; } } - $this->_backendOptions['cache_dir'] = $this->_dirs->getDir(\Magento\Core\Model\Dir::CACHE); + $this->_backendOptions['cache_dir'] = $this->_dirs->getDir(\Magento\App\Dir::CACHE); $idPrefix = isset($options['id_prefix']) ? $options['id_prefix'] : ''; if (!$idPrefix && isset($options['prefix'])) { $idPrefix = $options['prefix']; } if (empty($idPrefix)) { - $idPrefix = substr(md5($this->_dirs->getDir(\Magento\Core\Model\Dir::CONFIG)), 0, 3) . '_'; + $idPrefix = substr(md5($this->_dirs->getDir(\Magento\App\Dir::CONFIG)), 0, 3) . '_'; } $options['frontend_options']['cache_id_prefix'] = $idPrefix; diff --git a/app/code/Magento/Core/Model/Cache/State.php b/app/code/Magento/Core/Model/Cache/State.php index 2ef1d409549..6827d417cea 100644 --- a/app/code/Magento/Core/Model/Cache/State.php +++ b/app/code/Magento/Core/Model/Cache/State.php @@ -56,13 +56,13 @@ class State implements \Magento\Core\Model\Cache\StateInterface /** * @param \Magento\Core\Model\Resource\Cache $resource * @param \Magento\Core\Model\Cache\Frontend\Pool $cacheFrontendPool - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param bool $banAll Whether all cache types are forced to be disabled */ public function __construct( \Magento\Core\Model\Resource\Cache $resource, \Magento\Core\Model\Cache\Frontend\Pool $cacheFrontendPool, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, $banAll = false ) { $this->_resource = $resource; diff --git a/app/code/Magento/Core/Model/Config.php b/app/code/Magento/Core/Model/Config.php index 9b3041ed688..f5301f8c036 100644 --- a/app/code/Magento/Core/Model/Config.php +++ b/app/code/Magento/Core/Model/Config.php @@ -61,20 +61,6 @@ class Config implements \Magento\Core\Model\ConfigInterface */ protected $_secureUrlCache = array(); - /** - * Active modules array per namespace - * - * @var array - */ - private $_moduleNamespaces = null; - - /** - * Areas allowed to use - * - * @var array - */ - protected $_allowedAreas = null; - /** * Object manager * @@ -109,7 +95,7 @@ class Config implements \Magento\Core\Model\ConfigInterface protected $_configScope; /** - * @var \Magento\Core\Model\ModuleListInterface + * @var \Magento\App\ModuleListInterface */ protected $_moduleList; @@ -127,19 +113,17 @@ class Config implements \Magento\Core\Model\ConfigInterface * @param \Magento\Core\Model\ObjectManager $objectManager * @param \Magento\Core\Model\Config\StorageInterface $storage * @param \Magento\Core\Model\Config\Modules\Reader $moduleReader - * @param \Magento\Core\Model\ModuleListInterface $moduleList + * @param \Magento\App\ModuleListInterface $moduleList * @param \Magento\Config\ScopeInterface $configScope * @param \Magento\Core\Model\Config\SectionPool $sectionPool - * @param array $areas */ public function __construct( \Magento\Core\Model\ObjectManager $objectManager, \Magento\Core\Model\Config\StorageInterface $storage, \Magento\Core\Model\Config\Modules\Reader $moduleReader, - \Magento\Core\Model\ModuleListInterface $moduleList, + \Magento\App\ModuleListInterface $moduleList, \Magento\Config\ScopeInterface $configScope, - \Magento\Core\Model\Config\SectionPool $sectionPool, - array $areas = array() + \Magento\Core\Model\Config\SectionPool $sectionPool ) { \Magento\Profiler::start('config_load'); $this->_objectManager = $objectManager; @@ -149,7 +133,6 @@ class Config implements \Magento\Core\Model\ConfigInterface $this->_moduleList = $moduleList; $this->_configScope = $configScope; $this->_sectionPool = $sectionPool; - $this->_allowedAreas = $areas; \Magento\Profiler::stop('config_load'); } @@ -213,23 +196,6 @@ class Config implements \Magento\Core\Model\ConfigInterface return $this->_allowedAreas; } - /** - * Retrieve area config by area code - * - * @param string|null $areaCode - * @throws \InvalidArgumentException - * @return array - */ - public function getAreaConfig($areaCode = null) - { - $areaCode = empty($areaCode) ? $this->_configScope->getCurrentScope() : $areaCode; - $areas = $this->getAreas(); - if (!isset($areas[$areaCode])) { - throw new \InvalidArgumentException('Requested area (' . $areaCode . ') does not exist'); - } - return $areas[$areaCode]; - } - /** * Identify front name of the requested area. Return current area front name if area code is not specified. * @@ -262,20 +228,6 @@ class Config implements \Magento\Core\Model\ConfigInterface return $this->_moduleReader->getModuleDir($type, $moduleName); } - /** - * Set path to the corresponding module directory - * - * @param string $moduleName - * @param string $type directory type (etc, controllers, locale etc) - * @param string $path - * @return \Magento\Core\Model\Config - */ - public function setModuleDir($moduleName, $type, $path) - { - $this->_moduleReader->setModuleDir($moduleName, $type, $path); - return $this; - } - /** * Retrieve store Ids for $path with checking * diff --git a/app/code/Magento/Core/Model/Config/FileResolver.php b/app/code/Magento/Core/Model/Config/FileResolver.php index f1c50b237c9..21b798400f5 100644 --- a/app/code/Magento/Core/Model/Config/FileResolver.php +++ b/app/code/Magento/Core/Model/Config/FileResolver.php @@ -35,17 +35,17 @@ class FileResolver implements \Magento\Config\FileResolverInterface protected $_moduleReader; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_applicationDirs; /** * @param \Magento\Core\Model\Config\Modules\Reader $moduleReader - * @param \Magento\Core\Model\Dir $applicationDirs + * @param \Magento\App\Dir $applicationDirs */ public function __construct( \Magento\Core\Model\Config\Modules\Reader $moduleReader, - \Magento\Core\Model\Dir $applicationDirs + \Magento\App\Dir $applicationDirs ) { $this->_moduleReader = $moduleReader; $this->_applicationDirs = $applicationDirs; @@ -58,7 +58,7 @@ class FileResolver implements \Magento\Config\FileResolverInterface { switch ($scope) { case 'primary': - $appConfigDir = $this->_applicationDirs->getDir(\Magento\Core\Model\Dir::CONFIG); + $appConfigDir = $this->_applicationDirs->getDir(\Magento\App\Dir::CONFIG); // Create pattern similar to app/etc/{*config.xml,*/*config.xml} $filePattern = $appConfigDir . DIRECTORY_SEPARATOR . '{*' . $filename . ',*' . DIRECTORY_SEPARATOR . '*' . $filename . '}'; diff --git a/app/code/Magento/Core/Model/Config/FileResolver/Primary.php b/app/code/Magento/Core/Model/Config/FileResolver/Primary.php index 0e95f804cc1..b84b42fb2ed 100644 --- a/app/code/Magento/Core/Model/Config/FileResolver/Primary.php +++ b/app/code/Magento/Core/Model/Config/FileResolver/Primary.php @@ -31,14 +31,14 @@ namespace Magento\Core\Model\Config\FileResolver; class Primary implements \Magento\Config\FileResolverInterface { /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_applicationDirs; /** - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs */ - public function __construct(\Magento\Core\Model\Dir $dirs) + public function __construct(\Magento\App\Dir $dirs) { $this->_applicationDirs = $dirs; } @@ -53,7 +53,7 @@ class Primary implements \Magento\Config\FileResolverInterface */ public function get($filename, $scope) { - $configDir = $this->_applicationDirs->getDir(\Magento\Core\Model\Dir::CONFIG); + $configDir = $this->_applicationDirs->getDir(\Magento\App\Dir::CONFIG); $fileList = glob($configDir . DIRECTORY_SEPARATOR . '*' . DIRECTORY_SEPARATOR . $filename); if (file_exists($configDir . DIRECTORY_SEPARATOR . $filename)) { diff --git a/app/code/Magento/Core/Model/Config/Modules/Reader.php b/app/code/Magento/Core/Model/Config/Modules/Reader.php index f532af219e7..494bc763bbf 100644 --- a/app/code/Magento/Core/Model/Config/Modules/Reader.php +++ b/app/code/Magento/Core/Model/Config/Modules/Reader.php @@ -37,14 +37,14 @@ class Reader /** * Directory registry * - * @var \Magento\Core\Model\Module\Dir + * @var \Magento\App\Module\Dir */ protected $_moduleDirs; /** * Modules configuration provider * - * @var \Magento\Core\Model\ModuleListInterface + * @var \Magento\App\ModuleListInterface */ protected $_modulesList; @@ -56,14 +56,14 @@ class Reader protected $_prototypeFactory; /** - * @param \Magento\Core\Model\Module\Dir $moduleDirs + * @param \Magento\App\Module\Dir $moduleDirs * @param \Magento\Core\Model\Config\BaseFactory $prototypeFactory - * @param \Magento\Core\Model\ModuleListInterface $moduleList + * @param \Magento\App\ModuleListInterface $moduleList */ public function __construct( - \Magento\Core\Model\Module\Dir $moduleDirs, + \Magento\App\Module\Dir $moduleDirs, \Magento\Core\Model\Config\BaseFactory $prototypeFactory, - \Magento\Core\Model\ModuleListInterface $moduleList + \Magento\App\ModuleListInterface $moduleList ) { $this->_moduleDirs = $moduleDirs; $this->_prototypeFactory = $prototypeFactory; diff --git a/app/code/Magento/Core/Model/Config/Primary.php b/app/code/Magento/Core/Model/Config/Primary.php index 76b871e99cd..731419ba681 100644 --- a/app/code/Magento/Core/Model/Config/Primary.php +++ b/app/code/Magento/Core/Model/Config/Primary.php @@ -42,35 +42,35 @@ class Primary extends \Magento\Core\Model\Config\Base /** * Directory list * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; /** * @param string $baseDir * @param array $params - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\Config\LoaderInterface $loader */ public function __construct( $baseDir, array $params, - \Magento\Core\Model\Dir $dir = null, + \Magento\App\Dir $dir = null, \Magento\Core\Model\Config\LoaderInterface $loader = null ) { parent::__construct('<config/>'); $this->_params = $params; - $this->_dir = $dir ?: new \Magento\Core\Model\Dir( + $this->_dir = $dir ?: new \Magento\App\Dir( $baseDir, $this->getParam(\Magento\Core\Model\App::PARAM_APP_URIS, array()), $this->getParam(\Magento\Core\Model\App::PARAM_APP_DIRS, array()) ); \Magento\Autoload\IncludePath::addIncludePath(array( - $this->_dir->getDir(\Magento\Core\Model\Dir::GENERATION) + $this->_dir->getDir(\Magento\App\Dir::GENERATION) )); $this->_loader = $loader ?: new \Magento\Core\Model\Config\Loader\Primary( - $this->_dir->getDir(\Magento\Core\Model\Dir::CONFIG) + $this->_dir->getDir(\Magento\App\Dir::CONFIG) ); $this->_loader->load($this); } @@ -100,7 +100,7 @@ class Primary extends \Magento\Core\Model\Config\Base /** * Retrieve directories * - * @return \Magento\Core\Model\Dir + * @return \Magento\App\Dir */ public function getDirectories() { @@ -127,9 +127,9 @@ class Primary extends \Magento\Core\Model\Config\Base if (isset($pathInfo['path'])) { return $pathInfo['path']; } else if (isset($pathInfo['relativePath'])) { - return $this->_dir->getDir(\Magento\Core\Model\Dir::ROOT) . DIRECTORY_SEPARATOR . $pathInfo['relativePath']; + return $this->_dir->getDir(\Magento\App\Dir::ROOT) . DIRECTORY_SEPARATOR . $pathInfo['relativePath']; } else { - return $this->_dir->getDir(\Magento\Core\Model\Dir::DI); + return $this->_dir->getDir(\Magento\App\Dir::DI); } } @@ -155,7 +155,7 @@ class Primary extends \Magento\Core\Model\Config\Base $objectManager->configure(array( 'Magento\Core\Model\Config\Loader\Local' => array( 'parameters' => array( - 'configDirectory' => $this->_dir->getDir(\Magento\Core\Model\Dir::CONFIG), + 'configDirectory' => $this->_dir->getDir(\Magento\App\Dir::CONFIG), ) ), 'Magento\Core\Model\Cache\Frontend\Factory' => array( diff --git a/app/code/Magento/Core/Model/Config/Resource.php b/app/code/Magento/Core/Model/Config/Resource.php index 3cc04e5fe67..e6fbae397cd 100644 --- a/app/code/Magento/Core/Model/Config/Resource.php +++ b/app/code/Magento/Core/Model/Config/Resource.php @@ -30,6 +30,13 @@ class Resource extends \Magento\Config\Data\Scoped { const DEFAULT_SETUP_CONNECTION = 'default'; + /** + * List of connection names per resource + * + * @var array + */ + protected $_connectionNames = array(); + /** * @param \Magento\Core\Model\Resource\Config\Reader $reader * @param \Magento\Config\ScopeInterface $configScope diff --git a/app/code/Magento/Core/Model/Config/Section/Processor/Placeholder.php b/app/code/Magento/Core/Model/Config/Section/Processor/Placeholder.php index 8060d4ce366..b03e148880f 100644 --- a/app/code/Magento/Core/Model/Config/Section/Processor/Placeholder.php +++ b/app/code/Magento/Core/Model/Config/Section/Processor/Placeholder.php @@ -28,14 +28,14 @@ namespace Magento\Core\Model\Config\Section\Processor; class Placeholder { /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; /** - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request */ - public function __construct(\Magento\Core\Controller\Request\Http $request) + public function __construct(\Magento\App\RequestInterface $request) { $this->_request = $request; } diff --git a/app/code/Magento/Core/Model/Config/Section/Reader/DefaultReader.php b/app/code/Magento/Core/Model/Config/Section/Reader/DefaultReader.php index dffce7edd8f..4a8961cac0f 100644 --- a/app/code/Magento/Core/Model/Config/Section/Reader/DefaultReader.php +++ b/app/code/Magento/Core/Model/Config/Section/Reader/DefaultReader.php @@ -43,7 +43,7 @@ class DefaultReader protected $_collectionFactory; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; @@ -51,13 +51,13 @@ class DefaultReader * @param \Magento\Core\Model\Config\Initial $initialConfig * @param \Magento\Core\Model\Config\Section\Converter $converter * @param \Magento\Core\Model\Resource\Config\Value\Collection\ScopedFactory $collectionFactory - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState */ public function __construct( \Magento\Core\Model\Config\Initial $initialConfig, \Magento\Core\Model\Config\Section\Converter $converter, \Magento\Core\Model\Resource\Config\Value\Collection\ScopedFactory $collectionFactory, - \Magento\Core\Model\App\State $appState + \Magento\App\State $appState ) { $this->_initialConfig = $initialConfig; $this->_converter = $converter; diff --git a/app/code/Magento/Core/Model/Config/Section/Reader/Store.php b/app/code/Magento/Core/Model/Config/Section/Reader/Store.php index c8cb7551283..23091df8940 100644 --- a/app/code/Magento/Core/Model/Config/Section/Reader/Store.php +++ b/app/code/Magento/Core/Model/Config/Section/Reader/Store.php @@ -51,7 +51,7 @@ class Store protected $_storeFactory; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; @@ -61,7 +61,7 @@ class Store * @param \Magento\Core\Model\Config\Section\Store\Converter $converter * @param \Magento\Core\Model\Resource\Config\Value\Collection\ScopedFactory $collectionFactory * @param \Magento\Core\Model\StoreFactory $storeFactory - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState */ public function __construct( \Magento\Core\Model\Config\Initial $initialConfig, @@ -69,7 +69,7 @@ class Store \Magento\Core\Model\Config\Section\Store\Converter $converter, \Magento\Core\Model\Resource\Config\Value\Collection\ScopedFactory $collectionFactory, \Magento\Core\Model\StoreFactory $storeFactory, - \Magento\Core\Model\App\State $appState + \Magento\App\State $appState ) { $this->_initialConfig = $initialConfig; $this->_sectionPool = $sectionPool; diff --git a/app/code/Magento/Core/Model/Config/Section/Reader/Website.php b/app/code/Magento/Core/Model/Config/Section/Reader/Website.php index 3680d3387d0..e7553c068dc 100644 --- a/app/code/Magento/Core/Model/Config/Section/Reader/Website.php +++ b/app/code/Magento/Core/Model/Config/Section/Reader/Website.php @@ -51,7 +51,7 @@ class Website protected $_websiteFactory; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; @@ -61,7 +61,7 @@ class Website * @param \Magento\Core\Model\Config\Section\Converter $converter * @param \Magento\Core\Model\Resource\Config\Value\Collection\ScopedFactory $collectionFactory * @param \Magento\Core\Model\WebsiteFactory $websiteFactory - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState */ public function __construct( \Magento\Core\Model\Config\Initial $initialConfig, @@ -69,7 +69,7 @@ class Website \Magento\Core\Model\Config\Section\Converter $converter, \Magento\Core\Model\Resource\Config\Value\Collection\ScopedFactory $collectionFactory, \Magento\Core\Model\WebsiteFactory $websiteFactory, - \Magento\Core\Model\App\State $appState + \Magento\App\State $appState ) { $this->_initialConfig = $initialConfig; $this->_sectionPool = $sectionPool; diff --git a/app/code/Magento/Core/Model/Config/ValidationState.php b/app/code/Magento/Core/Model/Config/ValidationState.php index 520082edca0..ecd1e612ef0 100644 --- a/app/code/Magento/Core/Model/Config/ValidationState.php +++ b/app/code/Magento/Core/Model/Config/ValidationState.php @@ -47,6 +47,6 @@ class ValidationState implements \Magento\Config\ValidationStateInterface */ public function isValidated() { - return $this->_appMode == \Magento\Core\Model\App\State::MODE_DEVELOPER; + return $this->_appMode == \Magento\App\State::MODE_DEVELOPER; } } diff --git a/app/code/Magento/Core/Model/Context.php b/app/code/Magento/Core/Model/Context.php index 0e63672655d..7fd80fdfd48 100644 --- a/app/code/Magento/Core/Model/Context.php +++ b/app/code/Magento/Core/Model/Context.php @@ -28,7 +28,7 @@ namespace Magento\Core\Model; class Context implements \Magento\ObjectManager\ContextInterface { /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventDispatcher; @@ -44,21 +44,21 @@ class Context implements \Magento\ObjectManager\ContextInterface /** * @param \Magento\Core\Model\Logger $logger - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; /** * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Event\Manager $eventDispatcher + * @param \Magento\Event\ManagerInterface $eventDispatcher * @param \Magento\Core\Model\CacheInterface $cacheManager - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState */ public function __construct( \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Event\Manager $eventDispatcher, + \Magento\Event\ManagerInterface $eventDispatcher, \Magento\Core\Model\CacheInterface $cacheManager, - \Magento\Core\Model\App\State $appState + \Magento\App\State $appState ) { $this->_eventDispatcher = $eventDispatcher; $this->_cacheManager = $cacheManager; @@ -75,7 +75,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Model\Event\Manager + * @return \Magento\Event\ManagerInterface */ public function getEventDispatcher() { @@ -91,7 +91,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Model\App\State + * @return \Magento\App\State */ public function getAppState() { diff --git a/app/code/Magento/Core/Model/Cookie.php b/app/code/Magento/Core/Model/Cookie.php index 7ea96ff9662..b7a2ec5e4ea 100644 --- a/app/code/Magento/Core/Model/Cookie.php +++ b/app/code/Magento/Core/Model/Cookie.php @@ -56,12 +56,12 @@ class Cookie protected $_storeManager; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_httpRequest; /** - * @var \Magento\Core\Controller\Response\Http + * @var \Magento\App\ResponseInterface */ protected $_httpResponse; @@ -73,19 +73,19 @@ class Cookie protected $_coreStoreConfig; /** - * @param \Magento\Core\Controller\Request\Http $httpRequest - * @param \Magento\Core\Controller\Response\Http $httpResponse - * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Core\Model\StoreManager $storeManager + * @param \Magento\App\RequestInterface $request + * @param \Magento\App\ResponseInterface $response + * @param Store\Config $coreStoreConfig + * @param StoreManager $storeManager */ public function __construct( - \Magento\Core\Controller\Request\Http $httpRequest, - \Magento\Core\Controller\Response\Http $httpResponse, + \Magento\App\RequestInterface $request, + \Magento\App\ResponseInterface $response, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\StoreManager $storeManager ) { - $this->_httpRequest = $httpRequest; - $this->_httpResponse = $httpResponse; + $this->_httpRequest = $request; + $this->_httpResponse = $response; $this->_coreStoreConfig = $coreStoreConfig; $this->_storeManager = $storeManager; } @@ -118,7 +118,7 @@ class Cookie /** * Retrieve Request object * - * @return \Magento\Core\Controller\Request\Http + * @return \Magento\App\RequestInterface */ protected function _getRequest() { @@ -128,7 +128,7 @@ class Cookie /** * Retrieve Response object * - * @return \Magento\Core\Controller\Response\Http + * @return \Magento\App\ResponseInterface */ protected function _getResponse() { diff --git a/app/code/Magento/Core/Model/DataService/Path/Request.php b/app/code/Magento/Core/Model/DataService/Path/Request.php index d24c2d6d135..80440e34fb4 100644 --- a/app/code/Magento/Core/Model/DataService/Path/Request.php +++ b/app/code/Magento/Core/Model/DataService/Path/Request.php @@ -1,9 +1,9 @@ <?php /** - * Wrapper around \Magento\Core\Controller\Request\Http for the Navigator class. + * Wrapper around \Magento\App\Request\Http for the Navigator class. * - * HTTP Requests need to be exposed as data services for the front end (twig) to be able to access the - * request data. This class acts as a wrapper around the \Magento\Core\Controller\Request\Http object so + * HTTP Requests need to be exposed as data services for the front end to be able to access the + * request data. This class acts as a wrapper around the \Magento\App\Request\Http object so * that the data can be searched for and extracted via the Navigator class. * * Magento @@ -32,14 +32,14 @@ namespace Magento\Core\Model\DataService\Path; class Request implements \Magento\Core\Model\DataService\Path\NodeInterface { /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; /** - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request */ - public function __construct(\Magento\Core\Controller\Request\Http $request) + public function __construct(\Magento\App\RequestInterface $request) { $this->_request = $request; } diff --git a/app/code/Magento/Core/Model/Design.php b/app/code/Magento/Core/Model/Design.php index 932a8b07617..3f6695993aa 100644 --- a/app/code/Magento/Core/Model/Design.php +++ b/app/code/Magento/Core/Model/Design.php @@ -136,10 +136,10 @@ class Design extends \Magento\Core\Model\AbstractModel /** * Apply design change from self data into specified design package instance * - * @param \Magento\Core\Model\View\DesignInterface $packageInto + * @param \Magento\View\DesignInterface $packageInto * @return \Magento\Core\Model\Design */ - public function changeDesign(\Magento\Core\Model\View\DesignInterface $packageInto) + public function changeDesign(\Magento\View\DesignInterface $packageInto) { $design = $this->getDesign(); if ($design) { diff --git a/app/code/Magento/Core/Model/Design/Backend/Exceptions.php b/app/code/Magento/Core/Model/Design/Backend/Exceptions.php index e8627feb257..b6b02d75145 100644 --- a/app/code/Magento/Core/Model/Design/Backend/Exceptions.php +++ b/app/code/Magento/Core/Model/Design/Backend/Exceptions.php @@ -31,12 +31,12 @@ class Exceptions extends \Magento\Backend\Model\Config\Backend\Serialized\ArrayS /** * Design package instance * - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_design = null; /** - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Core\Model\StoreManager $storeManager @@ -46,7 +46,7 @@ class Exceptions extends \Magento\Backend\Model\Config\Backend\Serialized\ArrayS * @param array $data */ public function __construct( - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Core\Model\StoreManager $storeManager, diff --git a/app/code/Magento/Core/Model/Design/Backend/Theme.php b/app/code/Magento/Core/Model/Design/Backend/Theme.php index f9ee0af063e..679e4a723c0 100644 --- a/app/code/Magento/Core/Model/Design/Backend/Theme.php +++ b/app/code/Magento/Core/Model/Design/Backend/Theme.php @@ -31,12 +31,12 @@ class Theme extends \Magento\Core\Model\Config\Value /** * Design package instance * - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_design = null; /** - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Core\Model\StoreManager $storeManager @@ -46,7 +46,7 @@ class Theme extends \Magento\Core\Model\Config\Value * @param array $data */ public function __construct( - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Core\Model\StoreManager $storeManager, diff --git a/app/code/Magento/Core/Model/Design/Fallback/Factory.php b/app/code/Magento/Core/Model/Design/Fallback/Factory.php index 900d9e37c19..684b41d6ddf 100644 --- a/app/code/Magento/Core/Model/Design/Fallback/Factory.php +++ b/app/code/Magento/Core/Model/Design/Fallback/Factory.php @@ -30,16 +30,16 @@ namespace Magento\Core\Model\Design\Fallback; class Factory { /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ private $_dirs; /** * Constructor * - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs */ - public function __construct(\Magento\Core\Model\Dir $dirs) + public function __construct(\Magento\App\Dir $dirs) { $this->_dirs = $dirs; } @@ -51,7 +51,7 @@ class Factory */ public function createLocaleFileRule() { - $themesDir = $this->_dirs->getDir(\Magento\Core\Model\Dir::THEMES); + $themesDir = $this->_dirs->getDir(\Magento\App\Dir::THEMES); return new \Magento\Core\Model\Design\Fallback\Rule\Theme( new \Magento\Core\Model\Design\Fallback\Rule\Simple("$themesDir/<area>/<theme_path>/i18n/<locale>") ); @@ -64,8 +64,8 @@ class Factory */ public function createFileRule() { - $themesDir = $this->_dirs->getDir(\Magento\Core\Model\Dir::THEMES); - $modulesDir = $this->_dirs->getDir(\Magento\Core\Model\Dir::MODULES); + $themesDir = $this->_dirs->getDir(\Magento\App\Dir::THEMES); + $modulesDir = $this->_dirs->getDir(\Magento\App\Dir::MODULES); return new \Magento\Core\Model\Design\Fallback\Rule\ModularSwitch( new \Magento\Core\Model\Design\Fallback\Rule\Theme( new \Magento\Core\Model\Design\Fallback\Rule\Simple( @@ -92,9 +92,9 @@ class Factory */ public function createViewFileRule() { - $themesDir = $this->_dirs->getDir(\Magento\Core\Model\Dir::THEMES); - $modulesDir = $this->_dirs->getDir(\Magento\Core\Model\Dir::MODULES); - $pubLibDir = $this->_dirs->getDir(\Magento\Core\Model\Dir::PUB_LIB); + $themesDir = $this->_dirs->getDir(\Magento\App\Dir::THEMES); + $modulesDir = $this->_dirs->getDir(\Magento\App\Dir::MODULES); + $pubLibDir = $this->_dirs->getDir(\Magento\App\Dir::PUB_LIB); return new \Magento\Core\Model\Design\Fallback\Rule\ModularSwitch( new \Magento\Core\Model\Design\Fallback\Rule\Composite(array( new \Magento\Core\Model\Design\Fallback\Rule\Theme( diff --git a/app/code/Magento/Core/Model/Design/Fallback/Rule/Theme.php b/app/code/Magento/Core/Model/Design/Fallback/Rule/Theme.php index a64797d435b..f6ee233caee 100644 --- a/app/code/Magento/Core/Model/Design/Fallback/Rule/Theme.php +++ b/app/code/Magento/Core/Model/Design/Fallback/Rule/Theme.php @@ -52,13 +52,13 @@ class Theme implements \Magento\Core\Model\Design\Fallback\Rule\RuleInterface */ public function getPatternDirs(array $params) { - if (!array_key_exists('theme', $params) || !($params['theme'] instanceof \Magento\Core\Model\ThemeInterface)) { + if (!array_key_exists('theme', $params) || !($params['theme'] instanceof \Magento\View\Design\ThemeInterface)) { throw new \InvalidArgumentException( 'Parameter "theme" should be specified and should implement the theme interface.' ); } $result = array(); - /** @var $theme \Magento\Core\Model\ThemeInterface */ + /** @var $theme \Magento\View\Design\ThemeInterface */ $theme = $params['theme']; unset($params['theme']); while ($theme) { diff --git a/app/code/Magento/Core/Model/Design/FileResolution/Strategy/Fallback.php b/app/code/Magento/Core/Model/Design/FileResolution/Strategy/Fallback.php index 0d6342fed0e..e9eff08dfb5 100644 --- a/app/code/Magento/Core/Model/Design/FileResolution/Strategy/Fallback.php +++ b/app/code/Magento/Core/Model/Design/FileResolution/Strategy/Fallback.php @@ -72,12 +72,12 @@ class Fallback * Get existing file name, using fallback mechanism * * @param string $area - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @param string $file * @param string|null $module * @return string */ - public function getFile($area, \Magento\Core\Model\Theme $themeModel, $file, $module = null) + public function getFile($area, \Magento\View\Design\ThemeInterface $themeModel, $file, $module = null) { $params = array('area' => $area, 'theme' => $themeModel, 'namespace' => null, 'module' => null); if ($module) { @@ -90,12 +90,12 @@ class Fallback * Get locale file name, using fallback mechanism * * @param string $area - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @param string $locale * @param string $file * @return string */ - public function getLocaleFile($area, \Magento\Core\Model\Theme $themeModel, $locale, $file) + public function getLocaleFile($area, \Magento\View\Design\ThemeInterface $themeModel, $locale, $file) { $params = array('area' => $area, 'theme' => $themeModel, 'locale' => $locale); return $this->_resolveFile($this->_getLocaleFileRule(), $file, $params); @@ -105,13 +105,13 @@ class Fallback * Get theme file name, using fallback mechanism * * @param string $area - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @param string $locale * @param string $file * @param string|null $module * @return string */ - public function getViewFile($area, \Magento\Core\Model\Theme $themeModel, $locale, $file, $module = null) + public function getViewFile($area, \Magento\View\Design\ThemeInterface $themeModel, $locale, $file, $module = null) { $params = array( 'area' => $area, 'theme' => $themeModel, 'locale' => $locale, 'namespace' => null, 'module' => null diff --git a/app/code/Magento/Core/Model/Design/FileResolution/Strategy/Fallback/CachingProxy.php b/app/code/Magento/Core/Model/Design/FileResolution/Strategy/Fallback/CachingProxy.php index dc14008ca66..f46081438d6 100644 --- a/app/code/Magento/Core/Model/Design/FileResolution/Strategy/Fallback/CachingProxy.php +++ b/app/code/Magento/Core/Model/Design/FileResolution/Strategy/Fallback/CachingProxy.php @@ -125,12 +125,12 @@ class CachingProxy implements * Proxy to \Magento\Core\Model\Design\FileResolution\Strategy\Fallback::getFile() * * @param string $area - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @param string $file * @param string|null $module * @return string */ - public function getFile($area, \Magento\Core\Model\Theme $themeModel, $file, $module = null) + public function getFile($area, \Magento\View\Design\ThemeInterface $themeModel, $file, $module = null) { $result = $this->_getFromMap('file', $area, $themeModel, null, $module, $file); if (!$result) { @@ -144,12 +144,12 @@ class CachingProxy implements * Proxy to \Magento\Core\Model\Design\FileResolution\Strategy\Fallback::getLocaleFile() * * @param string $area - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @param string $locale * @param string $file * @return string */ - public function getLocaleFile($area, \Magento\Core\Model\Theme $themeModel, $locale, $file) + public function getLocaleFile($area, \Magento\View\Design\ThemeInterface $themeModel, $locale, $file) { $result = $this->_getFromMap('locale', $area, $themeModel, $locale, null, $file); if (!$result) { @@ -163,13 +163,13 @@ class CachingProxy implements * Proxy to \Magento\Core\Model\Design\FileResolution\Strategy\Fallback::getViewFile() * * @param string $area - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @param string $locale * @param string $file * @param string|null $module * @return string */ - public function getViewFile($area, \Magento\Core\Model\Theme $themeModel, $locale, $file, $module = null) + public function getViewFile($area, \Magento\View\Design\ThemeInterface $themeModel, $locale, $file, $module = null) { $result = $this->_getFromMap('view', $area, $themeModel, $locale, $module, $file); if (!$result) { @@ -184,14 +184,15 @@ class CachingProxy implements * * @param string $fileType * @param string $area - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @param string|null $locale * @param string|null $module * @param string $file * @return null|string */ - protected function _getFromMap($fileType, $area, \Magento\Core\Model\Theme $theme, $locale, $module, $file) - { + protected function _getFromMap( + $fileType, $area, \Magento\View\Design\ThemeInterface $theme, $locale, $module, $file + ) { $sectionKey = $this->_loadSection($area, $theme, $locale); $fileKey = "$fileType|$file|$module"; if (isset($this->_sections[$sectionKey]['data'][$fileKey])) { @@ -209,15 +210,16 @@ class CachingProxy implements * * @param string $fileType * @param string $area - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @param string|null $locale * @param string|null $module * @param string $file * @param string $filePath * @throws \Magento\Exception */ - protected function _setToMap($fileType, $area, \Magento\Core\Model\Theme $theme, $locale, $module, $file, $filePath) - { + protected function _setToMap( + $fileType, $area, \Magento\View\Design\ThemeInterface $theme, $locale, $module, $file, $filePath + ) { $pattern = $this->_baseDir . DIRECTORY_SEPARATOR; if (0 !== strpos($filePath, $pattern)) { throw new \Magento\Exception( @@ -236,11 +238,11 @@ class CachingProxy implements * Compose section file name * * @param string $area - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @param string|null $locale * @return string */ - protected function _getSectionFile($area, \Magento\Core\Model\Theme $themeModel, $locale) + protected function _getSectionFile($area, \Magento\View\Design\ThemeInterface $themeModel, $locale) { $theme = $themeModel->getId() ?: md5($themeModel->getThemePath()); return "{$area}_{$theme}_{$locale}.ser"; @@ -250,11 +252,11 @@ class CachingProxy implements * Load section and return its key * * @param string $area - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @param string|null $locale * @return string */ - protected function _loadSection($area, \Magento\Core\Model\Theme $themeModel, $locale) + protected function _loadSection($area, \Magento\View\Design\ThemeInterface $themeModel, $locale) { $sectionFile = $this->_getSectionFile($area, $themeModel, $locale); if (!isset($this->_sections[$sectionFile])) { @@ -274,15 +276,15 @@ class CachingProxy implements * Set file path to map. * * @param string $area - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @param string $locale * @param string|null $module * @param string $file * @param string $newFilePath * @return \Magento\Core\Model\Design\FileResolution\Strategy\Fallback\CachingProxy */ - public function setViewFilePathToMap($area, \Magento\Core\Model\Theme $themeModel, $locale, $module, $file, - $newFilePath + public function setViewFilePathToMap( + $area, \Magento\View\Design\ThemeInterface $themeModel, $locale, $module, $file, $newFilePath ) { $this->_setToMap('view', $area, $themeModel, $locale, $module, $file, $newFilePath); return $this; diff --git a/app/code/Magento/Core/Model/Design/FileResolution/Strategy/FileInterface.php b/app/code/Magento/Core/Model/Design/FileResolution/Strategy/FileInterface.php index 51df254a1bc..d78cc517678 100644 --- a/app/code/Magento/Core/Model/Design/FileResolution/Strategy/FileInterface.php +++ b/app/code/Magento/Core/Model/Design/FileResolution/Strategy/FileInterface.php @@ -35,10 +35,10 @@ interface FileInterface * Get a usual file path (e.g. template) * * @param string $area - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @param string $file * @param string|null $module * @return string */ - public function getFile($area, \Magento\Core\Model\Theme $themeModel, $file, $module = null); + public function getFile($area, \Magento\View\Design\ThemeInterface $themeModel, $file, $module = null); } diff --git a/app/code/Magento/Core/Model/Design/FileResolution/Strategy/LocaleInterface.php b/app/code/Magento/Core/Model/Design/FileResolution/Strategy/LocaleInterface.php index ec05f67229c..37e5e437682 100644 --- a/app/code/Magento/Core/Model/Design/FileResolution/Strategy/LocaleInterface.php +++ b/app/code/Magento/Core/Model/Design/FileResolution/Strategy/LocaleInterface.php @@ -35,10 +35,10 @@ interface LocaleInterface * Get locale file name (e.g. file with translations) * * @param string $area - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @param string $locale * @param string $file * @return string */ - public function getLocaleFile($area, \Magento\Core\Model\Theme $themeModel, $locale, $file); + public function getLocaleFile($area, \Magento\View\Design\ThemeInterface $themeModel, $locale, $file); } diff --git a/app/code/Magento/Core/Model/Design/FileResolution/Strategy/View/NotifiableInterface.php b/app/code/Magento/Core/Model/Design/FileResolution/Strategy/View/NotifiableInterface.php index 041ae1fbbe3..b0905dacd28 100644 --- a/app/code/Magento/Core/Model/Design/FileResolution/Strategy/View/NotifiableInterface.php +++ b/app/code/Magento/Core/Model/Design/FileResolution/Strategy/View/NotifiableInterface.php @@ -36,14 +36,14 @@ interface NotifiableInterface * new location. * * @param string $area - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @param string $locale * @param string|null $module * @param string $file * @param string $newFilePath * @return \Magento\Core\Model\Design\FileResolution\Strategy\Fallback\CachingProxy */ - public function setViewFilePathToMap($area, \Magento\Core\Model\Theme $themeModel, $locale, $module, $file, - $newFilePath + public function setViewFilePathToMap( + $area, \Magento\View\Design\ThemeInterface $themeModel, $locale, $module, $file, $newFilePath ); } diff --git a/app/code/Magento/Core/Model/Design/FileResolution/Strategy/ViewInterface.php b/app/code/Magento/Core/Model/Design/FileResolution/Strategy/ViewInterface.php index 7b51fe58fb5..5717bd25e6a 100644 --- a/app/code/Magento/Core/Model/Design/FileResolution/Strategy/ViewInterface.php +++ b/app/code/Magento/Core/Model/Design/FileResolution/Strategy/ViewInterface.php @@ -35,11 +35,11 @@ interface ViewInterface * Get theme file name (e.g. a javascript file) * * @param string $area - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @param string $locale * @param string $file * @param string|null $module * @return string */ - public function getViewFile($area, \Magento\Core\Model\Theme $themeModel, $locale, $file, $module = null); + public function getViewFile($area, \Magento\View\Design\ThemeInterface $themeModel, $locale, $file, $module = null); } diff --git a/app/code/Magento/Core/Model/Design/FileResolution/StrategyPool.php b/app/code/Magento/Core/Model/Design/FileResolution/StrategyPool.php index cd9fae0be21..0f18e0351ef 100644 --- a/app/code/Magento/Core/Model/Design/FileResolution/StrategyPool.php +++ b/app/code/Magento/Core/Model/Design/FileResolution/StrategyPool.php @@ -52,7 +52,7 @@ class StrategyPool protected $_filesystem; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs; @@ -88,14 +88,14 @@ class StrategyPool /** * @param \Magento\ObjectManager $objectManager - * @param \Magento\Core\Model\App\State $appState - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\State $appState + * @param \Magento\App\Dir $dirs * @param \Magento\Filesystem $filesystem */ public function __construct( \Magento\ObjectManager $objectManager, - \Magento\Core\Model\App\State $appState, - \Magento\Core\Model\Dir $dirs, + \Magento\App\State $appState, + \Magento\App\Dir $dirs, \Magento\Filesystem $filesystem ) { $this->_objectManager = $objectManager; @@ -164,11 +164,11 @@ class StrategyPool protected function _getStrategyClass($fileType, $skipProxy = false) { $mode = $this->_appState->getMode(); - if ($mode == \Magento\Core\Model\App\State::MODE_PRODUCTION) { + if ($mode == \Magento\App\State::MODE_PRODUCTION) { $strategyClasses = $this->_strategies['production_mode']; - } else if (($mode == \Magento\Core\Model\App\State::MODE_DEVELOPER) || $skipProxy) { + } else if (($mode == \Magento\App\State::MODE_DEVELOPER) || $skipProxy) { $strategyClasses = $this->_strategies['full_check']; - } else if ($mode == \Magento\Core\Model\App\State::MODE_DEFAULT) { + } else if ($mode == \Magento\App\State::MODE_DEFAULT) { $strategyClasses = $this->_strategies['caching_map']; } else { throw new \Magento\Core\Exception("Unknown mode to choose strategy: {$mode}"); @@ -186,11 +186,11 @@ class StrategyPool { switch ($className) { case 'Magento\Core\Model\Design\FileResolution\Strategy\Fallback\CachingProxy': - $mapDir = $this->_dirs->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DIRECTORY_SEPARATOR + $mapDir = $this->_dirs->getDir(\Magento\App\Dir::VAR_DIR) . DIRECTORY_SEPARATOR . self::FALLBACK_MAP_DIR; $arguments = array( 'mapDir' => str_replace('/', DIRECTORY_SEPARATOR, $mapDir), - 'baseDir' => $this->_dirs->getDir(\Magento\Core\Model\Dir::ROOT), + 'baseDir' => $this->_dirs->getDir(\Magento\App\Dir::ROOT), ); break; default: diff --git a/app/code/Magento/Core/Model/Email.php b/app/code/Magento/Core/Model/Email.php index 90e49948183..bbad0794757 100644 --- a/app/code/Magento/Core/Model/Email.php +++ b/app/code/Magento/Core/Model/Email.php @@ -53,18 +53,18 @@ class Email extends \Magento\Object /** * Layout factory * - * @var \Magento\Core\Model\LayoutFactory + * @var \Magento\View\LayoutFactory */ protected $_layoutFactory; /** - * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Core\Model\LayoutFactory $layoutFactory + * @param Store\Config $coreStoreConfig + * @param \Magento\View\LayoutFactory $layoutFactory * @param array $data */ public function __construct( \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Core\Model\LayoutFactory $layoutFactory, + \Magento\View\LayoutFactory $layoutFactory, array $data = array() ) { $this->_layoutFactory = $layoutFactory; diff --git a/app/code/Magento/Core/Model/Email/Template.php b/app/code/Magento/Core/Model/Email/Template.php index 787471494f1..183450178ab 100644 --- a/app/code/Magento/Core/Model/Email/Template.php +++ b/app/code/Magento/Core/Model/Email/Template.php @@ -132,7 +132,7 @@ class Template extends \Magento\Core\Model\Template protected $_emailFilterFactory; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -143,12 +143,12 @@ class Template extends \Magento\Core\Model\Template * @param \Magento\Filesystem $filesystem * @param \Magento\Core\Model\View\Url $viewUrl * @param \Magento\Core\Model\View\FileSystem $viewFileSystem - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig * @param \Magento\Core\Model\ConfigInterface $coreConfig * @param \Magento\Core\Model\Email\Template\FilterFactory $emailFilterFactory * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\Email\Template\Config $emailConfig * @param array $data * @@ -161,12 +161,12 @@ class Template extends \Magento\Core\Model\Template \Magento\Filesystem $filesystem, \Magento\Core\Model\View\Url $viewUrl, \Magento\Core\Model\View\FileSystem $viewFileSystem, - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig, \Magento\Core\Model\ConfigInterface $coreConfig, \Magento\Core\Model\Email\Template\FilterFactory $emailFilterFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Core\Model\Email\Template\Config $emailConfig, array $data = array() ) { diff --git a/app/code/Magento/Core/Model/Email/Template/Config/Reader.php b/app/code/Magento/Core/Model/Email/Template/Config/Reader.php index 6bd96655e1c..0fd11cdb394 100644 --- a/app/code/Magento/Core/Model/Email/Template/Config/Reader.php +++ b/app/code/Magento/Core/Model/Email/Template/Config/Reader.php @@ -28,7 +28,7 @@ namespace Magento\Core\Model\Email\Template\Config; class Reader extends \Magento\Config\Reader\Filesystem { /** - * @var \Magento\Core\Model\Module\Dir\ReverseResolver + * @var \Magento\App\Module\Dir\ReverseResolver */ private $_moduleDirResolver; @@ -37,14 +37,14 @@ class Reader extends \Magento\Config\Reader\Filesystem * @param \Magento\Core\Model\Email\Template\Config\Converter $converter * @param \Magento\Core\Model\Email\Template\Config\SchemaLocator $schemaLocator * @param \Magento\Config\ValidationStateInterface $validationState - * @param \Magento\Core\Model\Module\Dir\ReverseResolver $moduleDirResolver + * @param \Magento\App\Module\Dir\ReverseResolver $moduleDirResolver */ public function __construct( \Magento\Config\FileResolverInterface $fileResolver, \Magento\Core\Model\Email\Template\Config\Converter $converter, \Magento\Core\Model\Email\Template\Config\SchemaLocator $schemaLocator, \Magento\Config\ValidationStateInterface $validationState, - \Magento\Core\Model\Module\Dir\ReverseResolver $moduleDirResolver + \Magento\App\Module\Dir\ReverseResolver $moduleDirResolver ) { $fileName = 'email_templates.xml'; $idAttributes = array( diff --git a/app/code/Magento/Core/Model/Email/Template/Filter.php b/app/code/Magento/Core/Model/Email/Template/Filter.php index 048e80c3563..51baf6ce468 100644 --- a/app/code/Magento/Core/Model/Email/Template/Filter.php +++ b/app/code/Magento/Core/Model/Email/Template/Filter.php @@ -92,12 +92,12 @@ class Filter extends \Magento\Filter\Template protected $_storeManager; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; /** - * @var \Magento\Core\Model\LayoutFactory + * @var \Magento\View\LayoutFactory */ protected $_layoutFactory; @@ -115,8 +115,8 @@ class Filter extends \Magento\Filter\Template * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\VariableFactory $coreVariableFactory * @param \Magento\Core\Model\StoreManager $storeManager - * @param \Magento\Core\Model\Layout $layout - * @param \Magento\Core\Model\LayoutFactory $layoutFactory + * @param \Magento\View\LayoutInterface $layout + * @param \Magento\View\LayoutFactory $layoutFactory */ public function __construct( \Magento\Core\Model\Logger $logger, @@ -125,8 +125,8 @@ class Filter extends \Magento\Filter\Template \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\VariableFactory $coreVariableFactory, \Magento\Core\Model\StoreManager $storeManager, - \Magento\Core\Model\Layout $layout, - \Magento\Core\Model\LayoutFactory $layoutFactory + \Magento\View\LayoutInterface $layout, + \Magento\View\LayoutFactory $layoutFactory ) { $this->_coreData = $coreData; $this->_viewUrl = $viewUrl; @@ -269,7 +269,7 @@ class Filter extends \Magento\Filter\Template if (isset($params['area'])) { $layoutParams['area'] = $params['area']; } - /** @var $layout \Magento\Core\Model\Layout */ + /** @var $layout \Magento\View\LayoutInterface */ $layout = $this->_layoutFactory->create($layoutParams); $layout->getUpdate()->addHandle($params['handle']) ->load(); @@ -298,7 +298,6 @@ class Filter extends \Magento\Filter\Template $layout->addOutputElement($rootBlock->getNameInLayout()); } - $layout->setDirectOutput(false); $result = $layout->getOutput(); $layout->__destruct(); // To overcome bug with SimpleXML memory leak (https://bugs.php.net/bug.php?id=62468) return $result; diff --git a/app/code/Magento/Core/Model/EntryPoint/Cron.php b/app/code/Magento/Core/Model/EntryPoint/Cron.php index f8289d8e8dd..99faf24e5b2 100644 --- a/app/code/Magento/Core/Model/EntryPoint/Cron.php +++ b/app/code/Magento/Core/Model/EntryPoint/Cron.php @@ -35,10 +35,10 @@ class Cron extends \Magento\Core\Model\AbstractEntryPoint $app->setUseSessionInUrl(false); $app->requireInstalledInstance(); - /** @var $eventManager \Magento\Core\Model\Event\Manager */ - $eventManager = $this->_objectManager->get('Magento\Core\Model\Event\Manager'); - /** @var \Magento\Core\Model\Config\Scope $configScope */ - $configScope = $this->_objectManager->get('Magento\Core\Model\Config\Scope'); + /** @var $eventManager \Magento\Event\ManagerInterface */ + $eventManager = $this->_objectManager->get('Magento\Event\ManagerInterface'); + /** @var \Magento\Config\Scope $configScope */ + $configScope = $this->_objectManager->get('Magento\Config\ScopeInterface'); $configScope->setCurrentScope('crontab'); $eventManager->dispatch('default'); } diff --git a/app/code/Magento/Core/Model/EntryPoint/Http.php b/app/code/Magento/Core/Model/EntryPoint/Http.php index f7f626e22db..054c14c2dba 100644 --- a/app/code/Magento/Core/Model/EntryPoint/Http.php +++ b/app/code/Magento/Core/Model/EntryPoint/Http.php @@ -39,8 +39,8 @@ class Http extends \Magento\Core\Model\AbstractEntryPoint 'Location: ' . $this->_objectManager->get('Magento\Core\Model\StoreManager')->getStore()->getBaseUrl() ); } catch (\Magento\Core\Model\Store\Exception $e) { - require $this->_objectManager->get('Magento\Core\Model\Dir') - ->getDir(\Magento\Core\Model\Dir::PUB) . DS . 'errors' . DS . '404.php'; + require $this->_objectManager->get('Magento\App\Dir') + ->getDir(\Magento\App\Dir::PUB) . DS . 'errors' . DS . '404.php'; } catch (\Magento\BootstrapException $e) { header('Content-Type: text/plain', true, 503); echo $e->getMessage(); @@ -54,9 +54,14 @@ class Http extends \Magento\Core\Model\AbstractEntryPoint */ protected function _processRequest() { - $request = $this->_objectManager->get('Magento\Core\Controller\Request\Http'); - $response = $this->_objectManager->get('Magento\Core\Controller\Response\Http'); - $handler = $this->_objectManager->get('Magento\HTTP\Handler\Composite'); - $handler->handle($request, $response); + $request = $this->_objectManager->get('Magento\App\RequestInterface'); + $areas = $this->_objectManager->get('Magento\App\AreaList'); + $areaCode = $areas->getCodeByFrontName($request->getFrontName()); + $this->_objectManager->get('Magento\Config\Scope')->setCurrentScope($areaCode); + $this->_objectManager->configure( + $this->_objectManager->get('Magento\Core\Model\ObjectManager\ConfigLoader')->load($areaCode) + ); + $frontController = $this->_objectManager->get('Magento\App\FrontControllerInterface'); + $frontController->dispatch($request); } } diff --git a/app/code/Magento/Core/Model/EntryPoint/Media.php b/app/code/Magento/Core/Model/EntryPoint/Media.php index c74eb84749c..740b4cce7e2 100644 --- a/app/code/Magento/Core/Model/EntryPoint/Media.php +++ b/app/code/Magento/Core/Model/EntryPoint/Media.php @@ -110,7 +110,7 @@ class Media extends \Magento\Core\Model\AbstractEntryPoint protected function _processRequest() { try { - $appState = $this->_objectManager->get('Magento\Core\Model\App\State'); + $appState = $this->_objectManager->get('Magento\App\State'); if (!$appState->isInstalled()) { $this->_response->sendNotFound(); return; diff --git a/app/code/Magento/Core/Model/Event/Config/SchemaLocator.php b/app/code/Magento/Core/Model/Event/Config/SchemaLocator.php deleted file mode 100644 index 957e11ad964..00000000000 --- a/app/code/Magento/Core/Model/Event/Config/SchemaLocator.php +++ /dev/null @@ -1,71 +0,0 @@ -<?php -/** - * Event observers configuration schema locator - * - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\Core\Model\Event\Config; - -class SchemaLocator implements \Magento\Config\SchemaLocatorInterface -{ - /** - * Path to corresponding XSD file with validation rules for merged config - * - * @var string - */ - protected $_schema = null; - - /** - * Path to corresponding XSD file with validation rules for separate config files - * - * @var string - */ - protected $_perFileSchema = null; - - /** - * @param \Magento\Core\Model\Config\Modules\Reader $moduleReader - */ - public function __construct(\Magento\Core\Model\Config\Modules\Reader $moduleReader) - { - $this->_schema = $moduleReader->getModuleDir('etc', 'Magento_Core') . DIRECTORY_SEPARATOR . 'events.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/Core/Model/File/Storage.php b/app/code/Magento/Core/Model/File/Storage.php index e8d8fb4dd55..f9e3c77f5f9 100644 --- a/app/code/Magento/Core/Model/File/Storage.php +++ b/app/code/Magento/Core/Model/File/Storage.php @@ -97,7 +97,7 @@ class Storage extends \Magento\Core\Model\AbstractModel protected $_databaseFactory; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -110,7 +110,7 @@ class Storage extends \Magento\Core\Model\AbstractModel * @param \Magento\Core\Model\File\Storage\Flag $fileFlag * @param \Magento\Core\Model\File\Storage\FileFactory $fileFactory * @param \Magento\Core\Model\File\Storage\DatabaseFactory $databaseFactory - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param \Magento\Data\Collection\Db $resourceCollection * @param array $data @@ -124,7 +124,7 @@ class Storage extends \Magento\Core\Model\AbstractModel \Magento\Core\Model\File\Storage\Flag $fileFlag, \Magento\Core\Model\File\Storage\FileFactory $fileFactory, \Magento\Core\Model\File\Storage\DatabaseFactory $databaseFactory, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Core\Model\Resource\AbstractResource $resource = null, \Magento\Data\Collection\Db $resourceCollection = null, array $data = array() diff --git a/app/code/Magento/Core/Model/Layout.php b/app/code/Magento/Core/Model/Layout.php index 392352d6a01..559ae3853da 100644 --- a/app/code/Magento/Core/Model/Layout.php +++ b/app/code/Magento/Core/Model/Layout.php @@ -41,7 +41,7 @@ namespace Magento\Core\Model; * @SuppressWarnings(PHPMD.TooManyMethods) * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ -class Layout extends \Magento\Simplexml\Config +class Layout extends \Magento\Simplexml\Config implements \Magento\View\LayoutInterface { /**#@+ * Supported layout directives @@ -97,14 +97,14 @@ class Layout extends \Magento\Simplexml\Config const SCHEDULED_STRUCTURE_INDEX_LAYOUT_ELEMENT = 5; /** - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_design; /** * Layout Update module * - * @var \Magento\Core\Model\Layout\Merge + * @var \Magento\View\Layout\ProcessorInterface */ protected $_update; @@ -141,13 +141,6 @@ class Layout extends \Magento\Simplexml\Config */ protected $_helpers = array(); - /** - * Flag to have blocks' output go directly to browser as oppose to return result - * - * @var boolean - */ - protected $_directOutput = false; - /** * A variable for transporting output into observer during rendering * @@ -217,7 +210,7 @@ class Layout extends \Magento\Simplexml\Config /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -234,9 +227,9 @@ class Layout extends \Magento\Simplexml\Config protected $_logger; /** - * @var \Magento\Core\Model\Layout\MergeFactory + * @var \Magento\View\Layout\ProcessorFactory */ - protected $_mergeFactory; + protected $_processorFactory; /** * @var \Magento\Core\Model\Resource\Theme\CollectionFactory @@ -244,36 +237,36 @@ class Layout extends \Magento\Simplexml\Config protected $_themeFactory; /** - * @param \Magento\Core\Model\Layout\MergeFactory $mergeFactory - * @param \Magento\Core\Model\Resource\Theme\CollectionFactory $themeFactory - * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Event\Manager $eventManager - * @param \Magento\Core\Model\Factory\Helper $factoryHelper + * @param \Magento\View\Layout\ProcessorFactory $processorFactory + * @param Resource\Theme\CollectionFactory $themeFactory + * @param Logger $logger + * @param \Magento\Event\ManagerInterface $eventManager + * @param Factory\Helper $factoryHelper * @param \Magento\Core\Helper\Data $coreData - * @param \Magento\Core\Model\View\DesignInterface $design - * @param \Magento\Core\Model\BlockFactory $blockFactory + * @param \Magento\View\DesignInterface $design + * @param BlockFactory $blockFactory * @param \Magento\Data\Structure $structure - * @param \Magento\Core\Model\Layout\Argument\Processor $argumentProcessor - * @param \Magento\Core\Model\Layout\ScheduledStructure $scheduledStructure - * @param \Magento\Core\Model\DataService\Graph $dataServiceGraph - * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param $area + * @param Layout\Argument\Processor $argumentProcessor + * @param Layout\ScheduledStructure $scheduledStructure + * @param DataService\Graph $dataServiceGraph + * @param Store\Config $coreStoreConfig + * @param string $area */ public function __construct( - \Magento\Core\Model\Layout\MergeFactory $mergeFactory, + \Magento\View\Layout\ProcessorFactory $processorFactory, \Magento\Core\Model\Resource\Theme\CollectionFactory $themeFactory, \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Factory\Helper $factoryHelper, \Magento\Core\Helper\Data $coreData, - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Model\BlockFactory $blockFactory, \Magento\Data\Structure $structure, \Magento\Core\Model\Layout\Argument\Processor $argumentProcessor, \Magento\Core\Model\Layout\ScheduledStructure $scheduledStructure, \Magento\Core\Model\DataService\Graph $dataServiceGraph, \Magento\Core\Model\Store\Config $coreStoreConfig, - $area = \Magento\Core\Model\View\DesignInterface::DEFAULT_AREA + $area = \Magento\View\DesignInterface::DEFAULT_AREA ) { $this->_eventManager = $eventManager; $this->_factoryHelper = $factoryHelper; @@ -284,12 +277,12 @@ class Layout extends \Magento\Simplexml\Config $this->_area = $area; $this->_structure = $structure; $this->_argumentProcessor = $argumentProcessor; - $this->_elementClass = 'Magento\Core\Model\Layout\Element'; + $this->_elementClass = 'Magento\View\Layout\Element'; $this->setXml(simplexml_load_string('<layout/>', $this->_elementClass)); $this->_renderingOutput = new \Magento\Object; $this->_scheduledStructure = $scheduledStructure; $this->_dataServiceGraph = $dataServiceGraph; - $this->_mergeFactory = $mergeFactory; + $this->_processorFactory = $processorFactory; $this->_themeFactory = $themeFactory; $this->_logger = $logger; } @@ -313,13 +306,13 @@ class Layout extends \Magento\Simplexml\Config /** * Retrieve the layout update instance * - * @return \Magento\Core\Model\Layout\Merge + * @return \Magento\View\Layout\ProcessorInterface */ public function getUpdate() { if (!$this->_update) { $theme = $this->_getThemeInstance($this->getArea()); - $this->_update = $this->_mergeFactory->create(array('theme' => $theme)); + $this->_update = $this->_processorFactory->create(array('theme' => $theme)); } return $this->_update; } @@ -367,28 +360,6 @@ class Layout extends \Magento\Simplexml\Config $this->_area = $areaCode; } - /** - * Declaring layout direct output flag - * - * @param bool $flag - * @return \Magento\Core\Model\Layout - */ - public function setDirectOutput($flag) - { - $this->_directOutput = $flag; - return $this; - } - - /** - * Retrieve direct output flag - * - * @return bool - */ - public function isDirectOutput() - { - return $this->_directOutput; - } - /** * Layout xml generation * @@ -496,13 +467,13 @@ class Layout extends \Magento\Simplexml\Config /** * Traverse through all elements of specified XML-node and schedule structural elements of it * - * @param \Magento\Core\Model\Layout\Element $parent + * @param \Magento\View\Layout\Element $parent * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function _readStructure($parent) { foreach ($parent as $node) { - /** @var $node \Magento\Core\Model\Layout\Element */ + /** @var $node \Magento\View\Layout\Element */ switch ($node->getName()) { case self::TYPE_CONTAINER: $this->_scheduleStructure($node, $parent); @@ -558,7 +529,7 @@ class Layout extends \Magento\Simplexml\Config /** * Grab information about data service from the node * - * @param \Magento\Core\Model\Layout\Element $node + * @param \Magento\View\Layout\Element $node * @return \Magento\Core\Model\Layout */ protected function _initServiceCalls($node) @@ -584,9 +555,9 @@ class Layout extends \Magento\Simplexml\Config /** * Merge Container attributes * - * @param \Magento\Core\Model\Layout\Element $node + * @param \Magento\View\Layout\Element $node */ - protected function _mergeContainerAttributes(\Magento\Core\Model\Layout\Element $node) + protected function _mergeContainerAttributes(\Magento\View\Layout\Element $node) { $containerName = $node->getAttribute('name'); $element = $this->_scheduledStructure->getStructureElement($containerName, array()); @@ -628,14 +599,14 @@ class Layout extends \Magento\Simplexml\Config /** * Parse argument nodes and create prepared array of items * - * @param \Magento\Core\Model\Layout\Element $node + * @param \Magento\View\Layout\Element $node * @return array */ - protected function _parseArguments(\Magento\Core\Model\Layout\Element $node) + protected function _parseArguments(\Magento\View\Layout\Element $node) { $arguments = array(); foreach ($node->xpath('argument') as $argument) { - /** @var $argument \Magento\Core\Model\Layout\Element */ + /** @var $argument \Magento\View\Layout\Element */ $argumentName = (string)$argument['name']; $arguments[$argumentName] = $this->_argumentProcessor->parse($argument); } @@ -660,7 +631,7 @@ class Layout extends \Magento\Simplexml\Config /** * Schedule structural changes for move directive * - * @param \Magento\Core\Model\Layout\Element $node + * @param \Magento\View\Layout\Element $node * @throws \Magento\Exception * @return \Magento\Core\Model\Layout */ @@ -684,8 +655,8 @@ class Layout extends \Magento\Simplexml\Config /** * Populate queue for generating structural elements * - * @param \Magento\Core\Model\Layout\Element $node - * @param \Magento\Core\Model\Layout\Element $parent + * @param \Magento\View\Layout\Element $node + * @param \Magento\View\Layout\Element $parent * @see _scheduleElement() where the _scheduledStructure is used */ protected function _scheduleStructure($node, $parent) @@ -740,7 +711,7 @@ class Layout extends \Magento\Simplexml\Config /** * Analyze "before" and "after" information in the node and return sibling name and whether "after" or "before" * - * @param \Magento\Core\Model\Layout\Element $node + * @param \Magento\View\Layout\Element $node * @return array */ protected function _beforeAfterToSibling($node) @@ -971,8 +942,8 @@ class Layout extends \Magento\Simplexml\Config /** * Run action defined in layout update * - * @param \Magento\Core\Model\Layout\Element $node - * @param \Magento\Core\Model\Layout\Element $parent + * @param \Magento\View\Layout\Element $node + * @param \Magento\View\Layout\Element $parent */ protected function _generateAction($node, $parent) { diff --git a/app/code/Magento/Core/Model/Layout/Argument/AbstractHandler.php b/app/code/Magento/Core/Model/Layout/Argument/AbstractHandler.php index 1bd628e3de5..4c404907103 100644 --- a/app/code/Magento/Core/Model/Layout/Argument/AbstractHandler.php +++ b/app/code/Magento/Core/Model/Layout/Argument/AbstractHandler.php @@ -44,10 +44,10 @@ abstract class AbstractHandler /** * Retrieve value from argument * - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @return mixed|null */ - protected function _getArgumentValue(\Magento\Core\Model\Layout\Element $argument) + protected function _getArgumentValue(\Magento\View\Layout\Element $argument) { if ($this->_isUpdater($argument)) { return null; @@ -63,10 +63,10 @@ abstract class AbstractHandler /** * Check whether updater used and value not overwriten * - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @return string */ - protected function _isUpdater(\Magento\Core\Model\Layout\Element $argument) + protected function _isUpdater(\Magento\View\Layout\Element $argument) { $updaters = $argument->xpath('./updater'); if (!empty($updaters) && !isset($argument->value)) { @@ -78,26 +78,26 @@ abstract class AbstractHandler /** * Retrieve xsi:type attribute value from argument * - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @return string */ - protected function _getArgumentType(\Magento\Core\Model\Layout\Element $argument) + protected function _getArgumentType(\Magento\View\Layout\Element $argument) { return (string)$argument->attributes('xsi', true)->type; } /** * Parse argument node - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @return array */ - public function parse(\Magento\Core\Model\Layout\Element $argument) + public function parse(\Magento\View\Layout\Element $argument) { $result = array(); $updaters = array(); $result['type'] = $this->_getArgumentType($argument); foreach ($argument->xpath('./updater') as $updaterNode) { - /** @var $updaterNode \Magento\Core\Model\Layout\Element */ + /** @var $updaterNode \Magento\View\Layout\Element */ $updaters[uniqid() . '_' . mt_rand()] = trim((string)$updaterNode); } 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 b46e23c9c12..89d68ef43cd 100644 --- a/app/code/Magento/Core/Model/Layout/Argument/Handler/ArrayHandler.php +++ b/app/code/Magento/Core/Model/Layout/Argument/Handler/ArrayHandler.php @@ -93,17 +93,17 @@ class ArrayHandler extends \Magento\Core\Model\Layout\Argument\AbstractHandler /** * Retrive value from Array argument * - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @return array|null */ - protected function _getArgumentValue(\Magento\Core\Model\Layout\Element $argument) + protected function _getArgumentValue(\Magento\View\Layout\Element $argument) { $items = $argument->xpath('item'); if ($this->_isUpdater($argument) && empty($items)) { return null; } $result = array(); - /** @var $item \Magento\Core\Model\Layout\Element */ + /** @var $item \Magento\View\Layout\Element */ foreach ($items as $item) { $itemName = (string)$item['name']; $itemType = $this->_getArgumentType($item); diff --git a/app/code/Magento/Core/Model/Layout/Argument/Handler/Helper.php b/app/code/Magento/Core/Model/Layout/Argument/Handler/Helper.php index 69c0aa775d3..6d89b855167 100644 --- a/app/code/Magento/Core/Model/Layout/Argument/Handler/Helper.php +++ b/app/code/Magento/Core/Model/Layout/Argument/Handler/Helper.php @@ -89,10 +89,10 @@ class Helper extends \Magento\Core\Model\Layout\Argument\AbstractHandler /** * Retrieve value from argument * - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @return array */ - protected function _getArgumentValue(\Magento\Core\Model\Layout\Element $argument) + protected function _getArgumentValue(\Magento\View\Layout\Element $argument) { $value = array( 'helperClass' => '', diff --git a/app/code/Magento/Core/Model/Layout/Argument/Handler/Object.php b/app/code/Magento/Core/Model/Layout/Argument/Handler/Object.php index 63e4a3ab306..449bef65b43 100644 --- a/app/code/Magento/Core/Model/Layout/Argument/Handler/Object.php +++ b/app/code/Magento/Core/Model/Layout/Argument/Handler/Object.php @@ -89,10 +89,10 @@ class Object extends \Magento\Core\Model\Layout\Argument\AbstractHandler /** * Retrieve value from argument * - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @return array|null */ - protected function _getArgumentValue(\Magento\Core\Model\Layout\Element $argument) + protected function _getArgumentValue(\Magento\View\Layout\Element $argument) { $value = parent::_getArgumentValue($argument); if (!isset($value)) { diff --git a/app/code/Magento/Core/Model/Layout/Argument/Handler/Options.php b/app/code/Magento/Core/Model/Layout/Argument/Handler/Options.php index 46b9876c332..4005a11952b 100644 --- a/app/code/Magento/Core/Model/Layout/Argument/Handler/Options.php +++ b/app/code/Magento/Core/Model/Layout/Argument/Handler/Options.php @@ -76,10 +76,10 @@ class Options extends \Magento\Core\Model\Layout\Argument\AbstractHandler } /** - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @return array */ - protected function _getArgumentValue(\Magento\Core\Model\Layout\Element $argument) + protected function _getArgumentValue(\Magento\View\Layout\Element $argument) { return array('model' => (string)$argument['model']); } diff --git a/app/code/Magento/Core/Model/Layout/Argument/Handler/String.php b/app/code/Magento/Core/Model/Layout/Argument/Handler/String.php index 830d5f66519..a9573ee3871 100644 --- a/app/code/Magento/Core/Model/Layout/Argument/Handler/String.php +++ b/app/code/Magento/Core/Model/Layout/Argument/Handler/String.php @@ -78,10 +78,10 @@ class String extends \Magento\Core\Model\Layout\Argument\AbstractHandler /** * Retrieve value from argument * - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @return array|null */ - protected function _getArgumentValue(\Magento\Core\Model\Layout\Element $argument) + protected function _getArgumentValue(\Magento\View\Layout\Element $argument) { $value = parent::_getArgumentValue($argument); if (!isset($value)) { diff --git a/app/code/Magento/Core/Model/Layout/Argument/Handler/Url.php b/app/code/Magento/Core/Model/Layout/Argument/Handler/Url.php index 9bb03d1ada2..30267e09eab 100644 --- a/app/code/Magento/Core/Model/Layout/Argument/Handler/Url.php +++ b/app/code/Magento/Core/Model/Layout/Argument/Handler/Url.php @@ -36,15 +36,15 @@ namespace Magento\Core\Model\Layout\Argument\Handler; class Url extends \Magento\Core\Model\Layout\Argument\AbstractHandler { /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlModel; /** * @param \Magento\ObjectManager $objectManager - * @param \Magento\Core\Model\UrlInterface $urlModel + * @param \Magento\UrlInterface $urlModel */ - public function __construct(\Magento\Core\Model\UrlInterface $urlModel) + public function __construct(\Magento\UrlInterface $urlModel) { $this->_urlModel = $urlModel; } @@ -84,7 +84,7 @@ class Url extends \Magento\Core\Model\Layout\Argument\AbstractHandler * @param $argument * @return array */ - protected function _getArgumentValue(\Magento\Core\Model\Layout\Element $argument) + protected function _getArgumentValue(\Magento\View\Layout\Element $argument) { $result = array( 'path' => (string)$argument['path'], diff --git a/app/code/Magento/Core/Model/Layout/Argument/HandlerInterface.php b/app/code/Magento/Core/Model/Layout/Argument/HandlerInterface.php index eff9601c7c1..3cdf8e7b607 100644 --- a/app/code/Magento/Core/Model/Layout/Argument/HandlerInterface.php +++ b/app/code/Magento/Core/Model/Layout/Argument/HandlerInterface.php @@ -38,10 +38,10 @@ interface HandlerInterface /** * Parse specified argument node * - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @return array */ - public function parse(\Magento\Core\Model\Layout\Element $argument); + public function parse(\Magento\View\Layout\Element $argument); /** * Process argument value diff --git a/app/code/Magento/Core/Model/Layout/Argument/Processor.php b/app/code/Magento/Core/Model/Layout/Argument/Processor.php index c35a5865214..b4389dd83d6 100644 --- a/app/code/Magento/Core/Model/Layout/Argument/Processor.php +++ b/app/code/Magento/Core/Model/Layout/Argument/Processor.php @@ -67,11 +67,11 @@ class Processor /** * Parse given argument * - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @throws \InvalidArgumentException * @return array */ - public function parse(\Magento\Core\Model\Layout\Element $argument) + public function parse(\Magento\View\Layout\Element $argument) { $type = $this->_getArgumentType($argument); $handler = $this->_handlerFactory->getArgumentHandlerByType($type); @@ -98,10 +98,10 @@ class Processor /** * Get Argument's XSI type * - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @return string */ - protected function _getArgumentType(\Magento\Core\Model\Layout\Element $argument) + protected function _getArgumentType(\Magento\View\Layout\Element $argument) { return (string)$argument->attributes('xsi', true)->type; } diff --git a/app/code/Magento/Core/Model/Layout/File.php b/app/code/Magento/Core/Model/Layout/File.php index 39c81607e1c..2f61b36365a 100644 --- a/app/code/Magento/Core/Model/Layout/File.php +++ b/app/code/Magento/Core/Model/Layout/File.php @@ -40,16 +40,16 @@ class File private $_module; /** - * @var \Magento\Core\Model\ThemeInterface + * @var \Magento\View\Design\ThemeInterface */ private $_theme; /** * @param string $filename * @param string $module - * @param \Magento\Core\Model\ThemeInterface $theme + * @param \Magento\View\Design\ThemeInterface $theme */ - public function __construct($filename, $module, \Magento\Core\Model\ThemeInterface $theme = null) + public function __construct($filename, $module, \Magento\View\Design\ThemeInterface $theme = null) { $this->_filename = $filename; $this->_module = $module; @@ -89,7 +89,7 @@ class File /** * Retrieve instance of a theme a file belongs to * - * @return \Magento\Core\Model\ThemeInterface|null + * @return \Magento\View\Design\ThemeInterface|null */ public function getTheme() { diff --git a/app/code/Magento/Core/Model/Layout/File/Factory.php b/app/code/Magento/Core/Model/Layout/File/Factory.php index 3e87e14b403..9bc257d7422 100644 --- a/app/code/Magento/Core/Model/Layout/File/Factory.php +++ b/app/code/Magento/Core/Model/Layout/File/Factory.php @@ -47,10 +47,10 @@ class Factory * * @param string $filename * @param string $module - * @param \Magento\Core\Model\ThemeInterface $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return \Magento\Core\Model\Layout\File */ - public function create($filename, $module, \Magento\Core\Model\ThemeInterface $theme = null) + public function create($filename, $module, \Magento\View\Design\ThemeInterface $theme = null) { return $this->_objectManager->create( 'Magento\Core\Model\Layout\File', diff --git a/app/code/Magento/Core/Model/Layout/File/Source/Aggregated.php b/app/code/Magento/Core/Model/Layout/File/Source/Aggregated.php index 897522f23c5..89c4ad29fe2 100644 --- a/app/code/Magento/Core/Model/Layout/File/Source/Aggregated.php +++ b/app/code/Magento/Core/Model/Layout/File/Source/Aggregated.php @@ -80,7 +80,7 @@ class Aggregated implements \Magento\Core\Model\Layout\File\SourceInterface * * {@inheritdoc} */ - public function getFiles(\Magento\Core\Model\ThemeInterface $theme) + public function getFiles(\Magento\View\Design\ThemeInterface $theme) { $list = $this->_fileListFactory->create(); $list->add($this->_baseFiles->getFiles($theme)); @@ -95,10 +95,10 @@ class Aggregated implements \Magento\Core\Model\Layout\File\SourceInterface /** * Return the full theme inheritance sequence, from the root theme till a specified one * - * @param \Magento\Core\Model\ThemeInterface $theme - * @return \Magento\Core\Model\ThemeInterface[] Format: array([<root_theme>, ..., <parent_theme>,] <current_theme>) + * @param \Magento\View\Design\ThemeInterface $theme + * @return \Magento\View\Design\ThemeInterface[] Format: array([<root_theme>, ..., <parent_theme>,] <current_theme>) */ - protected function _getInheritedThemes(\Magento\Core\Model\ThemeInterface $theme) + protected function _getInheritedThemes(\Magento\View\Design\ThemeInterface $theme) { $result = array(); while ($theme) { diff --git a/app/code/Magento/Core/Model/Layout/File/Source/Base.php b/app/code/Magento/Core/Model/Layout/File/Source/Base.php index 8c94b82e04c..2276624f22f 100644 --- a/app/code/Magento/Core/Model/Layout/File/Source/Base.php +++ b/app/code/Magento/Core/Model/Layout/File/Source/Base.php @@ -35,7 +35,7 @@ class Base implements \Magento\Core\Model\Layout\File\SourceInterface private $_filesystem; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ private $_dirs; @@ -46,12 +46,12 @@ class Base implements \Magento\Core\Model\Layout\File\SourceInterface /** * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param \Magento\Core\Model\Layout\File\Factory $fileFactory */ public function __construct( \Magento\Filesystem $filesystem, - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, \Magento\Core\Model\Layout\File\Factory $fileFactory ) { $this->_filesystem = $filesystem; @@ -62,12 +62,12 @@ class Base implements \Magento\Core\Model\Layout\File\SourceInterface /** * {@inheritdoc} */ - public function getFiles(\Magento\Core\Model\ThemeInterface $theme) + public function getFiles(\Magento\View\Design\ThemeInterface $theme) { $namespace = $module = '*'; $area = $theme->getArea(); $files = $this->_filesystem->searchKeys( - $this->_dirs->getDir(\Magento\Core\Model\Dir::MODULES), + $this->_dirs->getDir(\Magento\App\Dir::MODULES), "{$namespace}/{$module}/view/{$area}/layout/*.xml" ); $result = array(); diff --git a/app/code/Magento/Core/Model/Layout/File/Source/Decorator/ModuleDependency.php b/app/code/Magento/Core/Model/Layout/File/Source/Decorator/ModuleDependency.php index bac1bb546fa..1fa4cb09466 100644 --- a/app/code/Magento/Core/Model/Layout/File/Source/Decorator/ModuleDependency.php +++ b/app/code/Magento/Core/Model/Layout/File/Source/Decorator/ModuleDependency.php @@ -36,7 +36,7 @@ class ModuleDependency private $_subject; /** - * @var \Magento\Core\Model\ModuleListInterface + * @var \Magento\App\ModuleListInterface */ private $_moduleList; @@ -49,11 +49,11 @@ class ModuleDependency /** * @param \Magento\Core\Model\Layout\File\SourceInterface $subject - * @param \Magento\Core\Model\ModuleListInterface $listInterface + * @param \Magento\App\ModuleListInterface $listInterface */ public function __construct( \Magento\Core\Model\Layout\File\SourceInterface $subject, - \Magento\Core\Model\ModuleListInterface $listInterface + \Magento\App\ModuleListInterface $listInterface ) { $this->_subject = $subject; $this->_moduleList = $listInterface; @@ -64,7 +64,7 @@ class ModuleDependency * * {@inheritdoc} */ - public function getFiles(\Magento\Core\Model\ThemeInterface $theme) + public function getFiles(\Magento\View\Design\ThemeInterface $theme) { $result = $this->_subject->getFiles($theme); usort($result, array($this, 'compareFiles')); diff --git a/app/code/Magento/Core/Model/Layout/File/Source/Decorator/ModuleOutput.php b/app/code/Magento/Core/Model/Layout/File/Source/Decorator/ModuleOutput.php index c0b8cc59ba2..f95a340b83c 100644 --- a/app/code/Magento/Core/Model/Layout/File/Source/Decorator/ModuleOutput.php +++ b/app/code/Magento/Core/Model/Layout/File/Source/Decorator/ModuleOutput.php @@ -56,7 +56,7 @@ class ModuleOutput implements \Magento\Core\Model\Layout\File\SourceInterface * * {@inheritdoc} */ - public function getFiles(\Magento\Core\Model\ThemeInterface $theme) + public function getFiles(\Magento\View\Design\ThemeInterface $theme) { $result = array(); foreach ($this->_subject->getFiles($theme) as $file) { diff --git a/app/code/Magento/Core/Model/Layout/File/Source/Override/Base.php b/app/code/Magento/Core/Model/Layout/File/Source/Override/Base.php index 02889c46ce1..121c33d0ca5 100644 --- a/app/code/Magento/Core/Model/Layout/File/Source/Override/Base.php +++ b/app/code/Magento/Core/Model/Layout/File/Source/Override/Base.php @@ -35,7 +35,7 @@ class Base implements \Magento\Core\Model\Layout\File\SourceInterface private $_filesystem; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ private $_dirs; @@ -46,12 +46,12 @@ class Base implements \Magento\Core\Model\Layout\File\SourceInterface /** * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param \Magento\Core\Model\Layout\File\Factory $fileFactory */ public function __construct( \Magento\Filesystem $filesystem, - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, \Magento\Core\Model\Layout\File\Factory $fileFactory ) { $this->_filesystem = $filesystem; @@ -62,12 +62,12 @@ class Base implements \Magento\Core\Model\Layout\File\SourceInterface /** * {@inheritdoc} */ - public function getFiles(\Magento\Core\Model\ThemeInterface $theme) + public function getFiles(\Magento\View\Design\ThemeInterface $theme) { $namespace = $module = '*'; $themePath = $theme->getFullPath(); $files = $this->_filesystem->searchKeys( - $this->_dirs->getDir(\Magento\Core\Model\Dir::THEMES), + $this->_dirs->getDir(\Magento\App\Dir::THEMES), "{$themePath}/{$namespace}_{$module}/layout/override/*.xml" ); $result = array(); diff --git a/app/code/Magento/Core/Model/Layout/File/Source/Override/Theme.php b/app/code/Magento/Core/Model/Layout/File/Source/Override/Theme.php index d490fa46373..ad8e7065fba 100644 --- a/app/code/Magento/Core/Model/Layout/File/Source/Override/Theme.php +++ b/app/code/Magento/Core/Model/Layout/File/Source/Override/Theme.php @@ -35,7 +35,7 @@ class Theme implements \Magento\Core\Model\Layout\File\SourceInterface private $_filesystem; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ private $_dirs; @@ -46,12 +46,12 @@ class Theme implements \Magento\Core\Model\Layout\File\SourceInterface /** * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param \Magento\Core\Model\Layout\File\Factory $fileFactory */ public function __construct( \Magento\Filesystem $filesystem, - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, \Magento\Core\Model\Layout\File\Factory $fileFactory ) { $this->_filesystem = $filesystem; @@ -62,12 +62,12 @@ class Theme implements \Magento\Core\Model\Layout\File\SourceInterface /** * {@inheritdoc} */ - public function getFiles(\Magento\Core\Model\ThemeInterface $theme) + public function getFiles(\Magento\View\Design\ThemeInterface $theme) { $namespace = $module = '*'; $themePath = $theme->getFullPath(); $files = $this->_filesystem->searchKeys( - $this->_dirs->getDir(\Magento\Core\Model\Dir::THEMES), + $this->_dirs->getDir(\Magento\App\Dir::THEMES), "{$themePath}/{$namespace}_{$module}/layout/override/*/*.xml" ); diff --git a/app/code/Magento/Core/Model/Layout/File/Source/Theme.php b/app/code/Magento/Core/Model/Layout/File/Source/Theme.php index a3ececa9408..2cdd4d4eec6 100644 --- a/app/code/Magento/Core/Model/Layout/File/Source/Theme.php +++ b/app/code/Magento/Core/Model/Layout/File/Source/Theme.php @@ -35,7 +35,7 @@ class Theme implements \Magento\Core\Model\Layout\File\SourceInterface private $_filesystem; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ private $_dirs; @@ -46,12 +46,12 @@ class Theme implements \Magento\Core\Model\Layout\File\SourceInterface /** * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param \Magento\Core\Model\Layout\File\Factory $fileFactory */ public function __construct( \Magento\Filesystem $filesystem, - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, \Magento\Core\Model\Layout\File\Factory $fileFactory ) { $this->_filesystem = $filesystem; @@ -62,12 +62,12 @@ class Theme implements \Magento\Core\Model\Layout\File\SourceInterface /** * {@inheritdoc} */ - public function getFiles(\Magento\Core\Model\ThemeInterface $theme) + public function getFiles(\Magento\View\Design\ThemeInterface $theme) { $namespace = $module = '*'; $themePath = $theme->getFullPath(); $files = $this->_filesystem->searchKeys( - $this->_dirs->getDir(\Magento\Core\Model\Dir::THEMES), + $this->_dirs->getDir(\Magento\App\Dir::THEMES), "{$themePath}/{$namespace}_{$module}/layout/*.xml" ); $result = array(); diff --git a/app/code/Magento/Core/Model/Layout/File/SourceInterface.php b/app/code/Magento/Core/Model/Layout/File/SourceInterface.php index 3b414b1e3f6..5f95486b05e 100644 --- a/app/code/Magento/Core/Model/Layout/File/SourceInterface.php +++ b/app/code/Magento/Core/Model/Layout/File/SourceInterface.php @@ -32,8 +32,8 @@ interface SourceInterface /** * Retrieve instances of layout files * - * @param \Magento\Core\Model\ThemeInterface $theme Theme that defines the design context + * @param \Magento\View\Design\ThemeInterface $theme Theme that defines the design context * @return \Magento\Core\Model\Layout\File[] */ - public function getFiles(\Magento\Core\Model\ThemeInterface $theme); + public function getFiles(\Magento\View\Design\ThemeInterface $theme); } diff --git a/app/code/Magento/Core/Model/Layout/Merge.php b/app/code/Magento/Core/Model/Layout/Merge.php index 0d460020c2c..7c7927de903 100644 --- a/app/code/Magento/Core/Model/Layout/Merge.php +++ b/app/code/Magento/Core/Model/Layout/Merge.php @@ -29,7 +29,7 @@ */ namespace Magento\Core\Model\Layout; -class Merge +class Merge implements \Magento\View\Layout\ProcessorInterface { /**#@+ * Available item type names @@ -56,7 +56,7 @@ class Merge /** * In-memory cache for loaded layout updates * - * @var \Magento\Core\Model\Layout\Element + * @var \Magento\View\Layout\Element */ protected $_layoutUpdatesCache; @@ -99,7 +99,7 @@ class Merge private $_resource; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ private $_appState; @@ -121,26 +121,26 @@ class Merge /** * Init merge model * - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Model\Layout\File\SourceInterface $fileSource, * @param \Magento\Core\Model\Resource\Layout\Update $resource - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Cache\FrontendInterface $cache * @param \Magento\Adminhtml\Model\LayoutUpdate\Validator $validator * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Theme $theme Non-injectable theme instance + * @param \Magento\View\Design\ThemeInterface $theme Non-injectable theme instance */ public function __construct( - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Core\Model\Layout\File\SourceInterface $fileSource, \Magento\Core\Model\Resource\Layout\Update $resource, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Cache\FrontendInterface $cache, \Magento\Adminhtml\Model\LayoutUpdate\Validator $validator, \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Theme $theme = null + \Magento\View\Design\ThemeInterface $theme = null ) { $this->_theme = $theme ?: $design->getDesignTheme(); $this->_store = $storeManager->getStore(); @@ -291,7 +291,7 @@ class Merge * Get handle xml node by handle name * * @param string $handleName - * @return \Magento\Core\Model\Layout\Element|null + * @return \Magento\View\Layout\Element|null */ protected function _getPageHandleNode($handleName) { @@ -366,7 +366,7 @@ class Merge } $xpath = '/layouts/*[' . implode(' or ', $conditions) . ']'; $nodes = $this->getFileLayoutUpdatesXml()->xpath($xpath) ?: array(); - /** @var $node \Magento\Core\Model\Layout\Element */ + /** @var $node \Magento\View\Layout\Element */ foreach ($nodes as $node) { $name = $node->getAttribute('id'); $info = array( @@ -424,7 +424,7 @@ class Merge } $layout = $this->asString(); - if ($this->_appState->getMode() === \Magento\Core\Model\App\State::MODE_DEVELOPER) { + if ($this->_appState->getMode() === \Magento\App\State::MODE_DEVELOPER) { if (!$this->_layoutValidator->isValid( $layout, \Magento\Adminhtml\Model\LayoutUpdate\Validator::LAYOUT_SCHEMA_MERGED, @@ -443,7 +443,7 @@ class Merge } /** - * Get layout updates as \Magento\Core\Model\Layout\Element object + * Get layout updates as \Magento\View\Layout\Element object * * @return \SimpleXMLElement */ @@ -463,7 +463,7 @@ class Merge */ protected function _loadXmlString($xmlString) { - return simplexml_load_string($xmlString, 'Magento\Core\Model\Layout\Element'); + return simplexml_load_string($xmlString, 'Magento\View\Layout\Element'); } /** @@ -582,7 +582,7 @@ class Merge /** * Retrieve already merged layout updates from files for specified area/theme/package/store * - * @return \Magento\Core\Model\Layout\Element + * @return \Magento\View\Layout\Element */ public function getFileLayoutUpdatesXml() { @@ -639,7 +639,7 @@ class Merge * Collect and merge layout updates from files * * @throws \Magento\Exception - * @return \Magento\Core\Model\Layout\Element + * @return \Magento\View\Layout\Element */ protected function _loadFileLayoutUpdatesXml() { @@ -649,7 +649,7 @@ class Merge foreach ($updateFiles as $file) { $fileStr = file_get_contents($file->getFilename()); $fileStr = $this->_substitutePlaceholders($fileStr); - /** @var $fileXml \Magento\Core\Model\Layout\Element */ + /** @var $fileXml \Magento\View\Layout\Element */ $fileXml = $this->_loadXmlString($fileStr); if (!$file->isBase() && $fileXml->xpath(self::XPATH_HANDLE_DECLARATION)) { throw new \Magento\Exception(sprintf( @@ -670,11 +670,11 @@ class Merge /** * Find the closest physical theme among ancestors and a theme itself * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return \Magento\Core\Model\Theme * @throws \Magento\Exception */ - protected function _getPhysicalTheme(\Magento\Core\Model\Theme $theme) + protected function _getPhysicalTheme(\Magento\View\Design\ThemeInterface $theme) { $result = $theme; while ($result->getId() && !$result->isPhysical()) { @@ -716,7 +716,7 @@ class Merge { $result = array(); $containerNodes = $this->asSimplexml()->xpath('//container'); - /** @var $oneContainerNode \Magento\Core\Model\Layout\Element */ + /** @var $oneContainerNode \Magento\View\Layout\Element */ foreach ($containerNodes as $oneContainerNode) { $label = $oneContainerNode->getAttribute('label'); if ($label) { diff --git a/app/code/Magento/Core/Model/Locale.php b/app/code/Magento/Core/Model/Locale.php index d5161ae22b1..3dfcfb390bc 100644 --- a/app/code/Magento/Core/Model/Locale.php +++ b/app/code/Magento/Core/Model/Locale.php @@ -66,7 +66,7 @@ class Locale implements \Magento\Core\Model\LocaleInterface /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -83,7 +83,7 @@ class Locale implements \Magento\Core\Model\LocaleInterface protected $_coreStoreConfig; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; @@ -103,20 +103,20 @@ class Locale implements \Magento\Core\Model\LocaleInterface protected $_app; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Translate $translate * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Locale\Config $config * @param \Magento\Core\Model\App $app * @param string $locale */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Translate $translate, \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Locale\Config $config, \Magento\Core\Model\App $app, diff --git a/app/code/Magento/Core/Model/Locale/Hierarchy/Config/FileResolver.php b/app/code/Magento/Core/Model/Locale/Hierarchy/Config/FileResolver.php index 61b2c3d9be6..59c603adf84 100644 --- a/app/code/Magento/Core/Model/Locale/Hierarchy/Config/FileResolver.php +++ b/app/code/Magento/Core/Model/Locale/Hierarchy/Config/FileResolver.php @@ -29,14 +29,14 @@ class FileResolver implements \Magento\Config\FileResolverInterface { /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_applicationDirs; /** - * @param \Magento\Core\Model\Dir $applicationDirs + * @param \Magento\App\Dir $applicationDirs */ - public function __construct(\Magento\Core\Model\Dir $applicationDirs) + public function __construct(\Magento\App\Dir $applicationDirs) { $this->_applicationDirs = $applicationDirs; } @@ -46,7 +46,7 @@ class FileResolver implements \Magento\Config\FileResolverInterface */ public function get($filename, $scope) { - $appLocaleDir = $this->_applicationDirs->getDir(\Magento\Core\Model\Dir::LOCALE); + $appLocaleDir = $this->_applicationDirs->getDir(\Magento\App\Dir::LOCALE); // Create pattern similar to app/locale/*/config.xml $filePattern = $appLocaleDir . DIRECTORY_SEPARATOR . '*' . DIRECTORY_SEPARATOR . $filename; $fileList = glob($filePattern, GLOB_BRACE); diff --git a/app/code/Magento/Core/Model/Logger.php b/app/code/Magento/Core/Model/Logger.php index deaf06c22e1..bc5bc45b052 100644 --- a/app/code/Magento/Core/Model/Logger.php +++ b/app/code/Magento/Core/Model/Logger.php @@ -44,7 +44,7 @@ class Logger protected $_loggers = array(); /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs = null; @@ -54,11 +54,11 @@ class Logger protected $_fileSystem; /** - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param \Magento\Io\File $fileSystem * @param string $defaultFile */ - public function __construct(\Magento\Core\Model\Dir $dirs, \Magento\Io\File $fileSystem, $defaultFile = '') + public function __construct(\Magento\App\Dir $dirs, \Magento\Io\File $fileSystem, $defaultFile = '') { $this->_dirs = $dirs; $this->_fileSystem = $fileSystem; @@ -81,7 +81,7 @@ class Logger { $file = $fileOrWrapper ?: "{$loggerKey}.log"; if (!preg_match('#^[a-z][a-z0-9+.-]*\://#i', $file)) { - $logDir = $this->_dirs->getDir(\Magento\Core\Model\Dir::LOG); + $logDir = $this->_dirs->getDir(\Magento\App\Dir::LOG); $this->_fileSystem->checkAndCreateFolder($logDir); $file = $logDir . DIRECTORY_SEPARATOR . $file; } diff --git a/app/code/Magento/Core/Model/ModuleManager.php b/app/code/Magento/Core/Model/ModuleManager.php index 8aecfcbdc4f..3aa3b8e9a28 100644 --- a/app/code/Magento/Core/Model/ModuleManager.php +++ b/app/code/Magento/Core/Model/ModuleManager.php @@ -40,7 +40,7 @@ class ModuleManager private $_storeConfig; /** - * @var \Magento\Core\Model\ModuleListInterface + * @var \Magento\App\ModuleListInterface */ private $_moduleList; @@ -51,12 +51,12 @@ class ModuleManager /** * @param \Magento\Core\Model\Store\ConfigInterface $storeConfig - * @param \Magento\Core\Model\ModuleListInterface $moduleList + * @param \Magento\App\ModuleListInterface $moduleList * @param array $outputConfigPaths */ public function __construct( \Magento\Core\Model\Store\ConfigInterface $storeConfig, - \Magento\Core\Model\ModuleListInterface $moduleList, + \Magento\App\ModuleListInterface $moduleList, array $outputConfigPaths = array() ) { $this->_storeConfig = $storeConfig; diff --git a/app/code/Magento/Core/Model/ObjectManager.php b/app/code/Magento/Core/Model/ObjectManager.php index 2b979512e9a..b06155b6cf3 100644 --- a/app/code/Magento/Core/Model/ObjectManager.php +++ b/app/code/Magento/Core/Model/ObjectManager.php @@ -92,11 +92,11 @@ class ObjectManager extends \Magento\ObjectManager\ObjectManager ); $localConfig = new \Magento\Core\Model\Config\Local(new \Magento\Core\Model\Config\Loader\Local( - $primaryConfig->getDirectories()->getDir(\Magento\Core\Model\Dir::CONFIG), + $primaryConfig->getDirectories()->getDir(\Magento\App\Dir::CONFIG), $primaryConfig->getParam(\Magento\Core\Model\App::PARAM_CUSTOM_LOCAL_CONFIG), $primaryConfig->getParam(\Magento\Core\Model\App::PARAM_CUSTOM_LOCAL_FILE) )); - $appMode = $primaryConfig->getParam(\Magento\Core\Model\App::PARAM_MODE, \Magento\Core\Model\App\State::MODE_DEFAULT); + $appMode = $primaryConfig->getParam(\Magento\Core\Model\App::PARAM_MODE, \Magento\App\State::MODE_DEFAULT); $factory = new \Magento\ObjectManager\Factory\Factory($config, $this, $definitions, array_replace( $localConfig->getParams(), $primaryConfig->getParams() @@ -104,7 +104,7 @@ class ObjectManager extends \Magento\ObjectManager\ObjectManager $sharedInstances['Magento\Core\Model\Config\Local'] = $localConfig; $sharedInstances['Magento\Core\Model\Config\Primary'] = $primaryConfig; - $sharedInstances['Magento\Core\Model\Dir'] = $primaryConfig->getDirectories(); + $sharedInstances['Magento\App\Dir'] = $primaryConfig->getDirectories(); $sharedInstances['Magento\Core\Model\ObjectManager'] = $this; parent::__construct($factory, $config, $sharedInstances); @@ -136,15 +136,18 @@ class ObjectManager extends \Magento\ObjectManager\ObjectManager new \Magento\Code\Generator\Io( new \Magento\Io\File(), $autoloader, - $primaryConfig->getDirectories()->getDir(\Magento\Core\Model\Dir::GENERATION) + $primaryConfig->getDirectories()->getDir(\Magento\App\Dir::GENERATION) ) )); } \Magento\Profiler::stop('global_primary'); - $verification = $this->get('Magento\Core\Model\Dir\Verification'); + $verification = $this->get('Magento\App\Dir\Verification'); $verification->createAndVerifyDirectories(); + $this->_config->setCache($this->get('Magento\Core\Model\ObjectManager\ConfigCache')); + $this->configure($this->get('Magento\Core\Model\ObjectManager\ConfigLoader')->load('global')); + $interceptionConfig = $this->create('Magento\Interception\Config\Config', array( 'relations' => $definitionFactory->createRelations(), 'omConfig' => $this->_config, @@ -171,8 +174,6 @@ class ObjectManager extends \Magento\ObjectManager\ObjectManager 'config' => $interceptionConfig, 'pluginList' => $pluginList )); - $this->_config->setCache($this->get('Magento\Core\Model\ObjectManager\ConfigCache')); - $this->configure($this->get('Magento\Core\Model\ObjectManager\ConfigLoader')->load('global')); $this->get('Magento\Core\Model\Resource')->setConfig($this->get('Magento\Core\Model\Config\Resource')); self::setInstance($this); diff --git a/app/code/Magento/Core/Model/ObjectManager/ConfigLoader/Primary.php b/app/code/Magento/Core/Model/ObjectManager/ConfigLoader/Primary.php index 5808e7caec9..d8d4bb71f00 100644 --- a/app/code/Magento/Core/Model/ObjectManager/ConfigLoader/Primary.php +++ b/app/code/Magento/Core/Model/ObjectManager/ConfigLoader/Primary.php @@ -33,15 +33,15 @@ class Primary protected $_appMode; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs; /** - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param string $appMode */ - public function __construct(\Magento\Core\Model\Dir $dirs, $appMode = \Magento\Core\Model\App\State::MODE_DEFAULT) + public function __construct(\Magento\App\Dir $dirs, $appMode = \Magento\App\State::MODE_DEFAULT) { $this->_dirs = $dirs; $this->_appMode = $appMode; diff --git a/app/code/Magento/Core/Model/ObjectManager/DefinitionFactory.php b/app/code/Magento/Core/Model/ObjectManager/DefinitionFactory.php index f5f49a51da3..a24fe3d0e10 100644 --- a/app/code/Magento/Core/Model/ObjectManager/DefinitionFactory.php +++ b/app/code/Magento/Core/Model/ObjectManager/DefinitionFactory.php @@ -92,7 +92,7 @@ class DefinitionFactory $definitionModel = $this->_getDefinitionModel($this->_definitionFormat); $output = new $definitionModel($definitions); } else { - $genDir = $this->_config->getDirectories()->getDir(\Magento\Core\Model\Dir::GENERATION); + $genDir = $this->_config->getDirectories()->getDir(\Magento\App\Dir::GENERATION); $autoloader = new \Magento\Autoload\IncludePath(); $generatorIo = new \Magento\Code\Generator\Io(new \Magento\Io\File(), $autoloader, $genDir); $generator = new \Magento\Code\Generator\ClassGenerator( diff --git a/app/code/Magento/Core/Model/Observer.php b/app/code/Magento/Core/Model/Observer.php index 39dd651575b..468be6d48c0 100644 --- a/app/code/Magento/Core/Model/Observer.php +++ b/app/code/Magento/Core/Model/Observer.php @@ -70,7 +70,7 @@ class Observer /** * @param \Magento\Core\Model\Cache\Frontend\Pool $cacheFrontendPool - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Model\Page $page * @param \Magento\Core\Model\ConfigInterface $config * @param \Magento\Core\Model\Page\Asset\PublicFileFactory $assetFileFactory @@ -79,7 +79,7 @@ class Observer */ public function __construct( \Magento\Core\Model\Cache\Frontend\Pool $cacheFrontendPool, - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Model\Page $page, \Magento\Core\Model\ConfigInterface $config, \Magento\Core\Model\Page\Asset\PublicFileFactory $assetFileFactory, diff --git a/app/code/Magento/Core/Model/Page/Asset/MergeService.php b/app/code/Magento/Core/Model/Page/Asset/MergeService.php index e7fc39ccff1..30731ab0bbe 100644 --- a/app/code/Magento/Core/Model/Page/Asset/MergeService.php +++ b/app/code/Magento/Core/Model/Page/Asset/MergeService.php @@ -52,12 +52,12 @@ class MergeService private $_filesystem; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ private $_dirs; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ private $_state; @@ -65,15 +65,15 @@ class MergeService * @param \Magento\ObjectManager $objectManager * @param \Magento\Core\Model\Store\Config $storeConfig * @param \Magento\Filesystem $filesystem, - * @param \Magento\Core\Model\Dir $dirs - * @param \Magento\Core\Model\App\State $state + * @param \Magento\App\Dir $dirs + * @param \Magento\App\State $state */ public function __construct( \Magento\ObjectManager $objectManager, \Magento\Core\Model\Store\Config $storeConfig, \Magento\Filesystem $filesystem, - \Magento\Core\Model\Dir $dirs, - \Magento\Core\Model\App\State $state + \Magento\App\Dir $dirs, + \Magento\App\State $state ) { $this->_objectManager = $objectManager; $this->_storeConfig = $storeConfig; @@ -101,7 +101,7 @@ class MergeService $isCssMergeEnabled = $this->_storeConfig->getConfigFlag(self::XML_PATH_MERGE_CSS_FILES); $isJsMergeEnabled = $this->_storeConfig->getConfigFlag(self::XML_PATH_MERGE_JS_FILES); if (($isCss && $isCssMergeEnabled) || ($isJs && $isJsMergeEnabled)) { - if ($this->_state->getMode() == \Magento\Core\Model\App\State::MODE_PRODUCTION) { + if ($this->_state->getMode() == \Magento\App\State::MODE_PRODUCTION) { $mergeStrategyClass = 'Magento\Core\Model\Page\Asset\MergeStrategy\FileExists'; } else { $mergeStrategyClass = 'Magento\Core\Model\Page\Asset\MergeStrategy\Checksum'; @@ -121,7 +121,7 @@ class MergeService */ public function cleanMergedJsCss() { - $mergedDir = $this->_dirs->getDir(\Magento\Core\Model\Dir::PUB_VIEW_CACHE) . '/' + $mergedDir = $this->_dirs->getDir(\Magento\App\Dir::PUB_VIEW_CACHE) . '/' . \Magento\Core\Model\Page\Asset\Merged::PUBLIC_MERGE_DIR; $this->_filesystem->delete($mergedDir); diff --git a/app/code/Magento/Core/Model/Page/Asset/MergeStrategy/Direct.php b/app/code/Magento/Core/Model/Page/Asset/MergeStrategy/Direct.php index a0910bec784..3361279a13f 100644 --- a/app/code/Magento/Core/Model/Page/Asset/MergeStrategy/Direct.php +++ b/app/code/Magento/Core/Model/Page/Asset/MergeStrategy/Direct.php @@ -35,7 +35,7 @@ class Direct implements \Magento\Core\Model\Page\Asset\MergeStrategyInterface private $_filesystem; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ private $_dirs; @@ -46,12 +46,12 @@ class Direct implements \Magento\Core\Model\Page\Asset\MergeStrategyInterface /** * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param \Magento\Core\Helper\Css $cssHelper */ public function __construct( \Magento\Filesystem $filesystem, - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, \Magento\Core\Helper\Css $cssHelper ) { $this->_filesystem = $filesystem; diff --git a/app/code/Magento/Core/Model/Page/Asset/Merged.php b/app/code/Magento/Core/Model/Page/Asset/Merged.php index c9a4fb8c1fa..8224ff51ffd 100644 --- a/app/code/Magento/Core/Model/Page/Asset/Merged.php +++ b/app/code/Magento/Core/Model/Page/Asset/Merged.php @@ -69,7 +69,7 @@ class Merged implements \Iterator /** * @param \Magento\ObjectManager $objectManager * @param \Magento\Core\Model\Logger $logger, - * @param \Magento\Core\Model\Dir $dirs, + * @param \Magento\App\Dir $dirs, * @param \Magento\Core\Model\Page\Asset\MergeStrategyInterface $mergeStrategy * @param array $assets * @throws \InvalidArgumentException @@ -77,7 +77,7 @@ class Merged implements \Iterator public function __construct( \Magento\ObjectManager $objectManager, \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, \Magento\Core\Model\Page\Asset\MergeStrategyInterface $mergeStrategy, array $assets ) { @@ -165,8 +165,8 @@ class Merged implements \Iterator */ protected function _getMergedFilePath(array $publicFiles) { - $jsDir = \Magento\Filesystem::fixSeparator($this->_dirs->getDir(\Magento\Core\Model\Dir::PUB_LIB)); - $publicDir = \Magento\Filesystem::fixSeparator($this->_dirs->getDir(\Magento\Core\Model\Dir::STATIC_VIEW)); + $jsDir = \Magento\Filesystem::fixSeparator($this->_dirs->getDir(\Magento\App\Dir::PUB_LIB)); + $publicDir = \Magento\Filesystem::fixSeparator($this->_dirs->getDir(\Magento\App\Dir::STATIC_VIEW)); $prefixRemovals = array($jsDir, $publicDir); $relFileNames = array(); @@ -175,7 +175,7 @@ class Merged implements \Iterator $relFileNames[] = str_replace($prefixRemovals, '', $file); } - $mergedDir = $this->_dirs->getDir(\Magento\Core\Model\Dir::PUB_VIEW_CACHE) . '/' + $mergedDir = $this->_dirs->getDir(\Magento\App\Dir::PUB_VIEW_CACHE) . '/' . self::PUBLIC_MERGE_DIR; return $mergedDir . '/' . md5(implode('|', $relFileNames)) . '.' . $this->_contentType; } diff --git a/app/code/Magento/Core/Model/Page/Asset/MinifyService.php b/app/code/Magento/Core/Model/Page/Asset/MinifyService.php index 65ea7e10b44..40843490f03 100644 --- a/app/code/Magento/Core/Model/Page/Asset/MinifyService.php +++ b/app/code/Magento/Core/Model/Page/Asset/MinifyService.php @@ -57,26 +57,26 @@ class MinifyService protected $_minifiers = array(); /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; /** * @param \Magento\Core\Model\Store\Config $config * @param \Magento\ObjectManager $objectManager - * @param \Magento\Core\Model\Dir $dirs - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\Dir $dirs + * @param \Magento\App\State $appState */ public function __construct( \Magento\Core\Model\Store\Config $config, \Magento\ObjectManager $objectManager, - \Magento\Core\Model\Dir $dirs, - \Magento\Core\Model\App\State $appState + \Magento\App\Dir $dirs, + \Magento\App\State $appState ) { $this->_storeConfig = $config; $this->_objectManager = $objectManager; @@ -123,7 +123,7 @@ class MinifyService 'adapter' => $adapter, ); switch ($this->_appState->getMode()) { - case \Magento\Core\Model\App\State::MODE_PRODUCTION: + case \Magento\App\State::MODE_PRODUCTION: $strategy = $this->_objectManager->create('Magento\Code\Minifier\Strategy\Lite', $strategyParams); break; default: @@ -134,7 +134,7 @@ class MinifyService $this->_minifiers[$contentType] = $this->_objectManager->create('Magento\Code\Minifier', array( 'strategy' => $strategy, - 'baseDir' => $this->_dirs->getDir(\Magento\Core\Model\Dir::PUB_VIEW_CACHE) . '/minify', + 'baseDir' => $this->_dirs->getDir(\Magento\App\Dir::PUB_VIEW_CACHE) . '/minify', ) ); } diff --git a/app/code/Magento/Core/Model/Resource/Config/Value/Collection/Scoped.php b/app/code/Magento/Core/Model/Resource/Config/Value/Collection/Scoped.php index bd5b17d3e75..6ff0dc81f5e 100644 --- a/app/code/Magento/Core/Model/Resource/Config/Value/Collection/Scoped.php +++ b/app/code/Magento/Core/Model/Resource/Config/Value/Collection/Scoped.php @@ -42,7 +42,7 @@ class Scoped extends \Magento\Core\Model\Resource\Db\Collection\AbstractCollecti protected $_scopeId; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -51,7 +51,7 @@ class Scoped extends \Magento\Core\Model\Resource\Db\Collection\AbstractCollecti * @param null $scopeId */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Core/Model/Resource/Db/Collection/AbstractCollection.php b/app/code/Magento/Core/Model/Resource/Db/Collection/AbstractCollection.php index 4ea612cf961..06108c61f90 100644 --- a/app/code/Magento/Core/Model/Resource/Db/Collection/AbstractCollection.php +++ b/app/code/Magento/Core/Model/Resource/Db/Collection/AbstractCollection.php @@ -116,19 +116,19 @@ abstract class AbstractCollection extends \Magento\Data\Collection\Db /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Core/Model/Resource/Layout/Update.php b/app/code/Magento/Core/Model/Resource/Layout/Update.php index 4c2caab91aa..37b921a5f41 100644 --- a/app/code/Magento/Core/Model/Resource/Layout/Update.php +++ b/app/code/Magento/Core/Model/Resource/Layout/Update.php @@ -60,11 +60,11 @@ class Update extends \Magento\Core\Model\Resource\Db\AbstractDb * Retrieve layout updates by handle * * @param string $handle - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @param \Magento\Core\Model\Store $store * @return string */ - public function fetchUpdatesByHandle($handle, \Magento\Core\Model\Theme $theme, \Magento\Core\Model\Store $store) + public function fetchUpdatesByHandle($handle, \Magento\View\Design\ThemeInterface $theme, \Magento\Core\Model\Store $store) { $bind = array( 'layout_update_handle' => $handle, diff --git a/app/code/Magento/Core/Model/Resource/Session.php b/app/code/Magento/Core/Model/Resource/Session.php index 407397cef45..913c2fb12be 100644 --- a/app/code/Magento/Core/Model/Resource/Session.php +++ b/app/code/Magento/Core/Model/Resource/Session.php @@ -58,7 +58,7 @@ class Session implements \Zend_Session_SaveHandler_Interface protected $_write; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -66,9 +66,9 @@ class Session implements \Zend_Session_SaveHandler_Interface * Constructor * * @param \Magento\Core\Model\Resource $resource - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir */ - public function __construct(\Magento\Core\Model\Resource $resource, \Magento\Core\Model\Dir $dir) + public function __construct(\Magento\Core\Model\Resource $resource, \Magento\App\Dir $dir) { $this->_sessionTable = $resource->getTableName('core_session'); $this->_write = $resource->getConnection('core_write'); diff --git a/app/code/Magento/Core/Model/Resource/Setup.php b/app/code/Magento/Core/Model/Resource/Setup.php index 99a72bcaa02..1bdde6f9065 100644 --- a/app/code/Magento/Core/Model/Resource/Setup.php +++ b/app/code/Magento/Core/Model/Resource/Setup.php @@ -25,7 +25,7 @@ */ namespace Magento\Core\Model\Resource; -class Setup implements \Magento\Core\Model\Resource\SetupInterface +class Setup implements \Magento\App\Updater\SetupInterface { /** * Setup resource name @@ -81,7 +81,7 @@ class Setup implements \Magento\Core\Model\Resource\SetupInterface protected $_modulesReader; /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -801,7 +801,7 @@ class Setup implements \Magento\Core\Model\Resource\SetupInterface } /** - * @return \Magento\Core\Model\Event\Manager + * @return \Magento\Event\ManagerInterface */ public function getEventManager() { diff --git a/app/code/Magento/Core/Model/Resource/Setup/Context.php b/app/code/Magento/Core/Model/Resource/Setup/Context.php index c839388a5ff..d885f8dd82d 100644 --- a/app/code/Magento/Core/Model/Resource/Setup/Context.php +++ b/app/code/Magento/Core/Model/Resource/Setup/Context.php @@ -31,7 +31,7 @@ class Context implements \Magento\ObjectManager\ContextInterface protected $_logger; /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -46,7 +46,7 @@ class Context implements \Magento\ObjectManager\ContextInterface protected $_modulesReader; /** - * @var \Magento\Core\Model\ModuleListInterface + * @var \Magento\App\ModuleListInterface */ protected $_moduleList; @@ -72,10 +72,10 @@ class Context implements \Magento\ObjectManager\ContextInterface /** * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Resource $resource * @param \Magento\Core\Model\Config\Modules\Reader $modulesReader - * @param \Magento\Core\Model\ModuleListInterface $moduleList + * @param \Magento\App\ModuleListInterface $moduleList * @param \Magento\Core\Model\Resource\Resource $resourceResource * @param \Magento\Core\Model\Resource\Setup\MigrationFactory $migrationFactory * @param \Magento\Core\Model\Resource\Theme\CollectionFactory $themeResourceFactory @@ -83,10 +83,10 @@ class Context implements \Magento\ObjectManager\ContextInterface */ public function __construct( \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Resource $resource, \Magento\Core\Model\Config\Modules\Reader $modulesReader, - \Magento\Core\Model\ModuleListInterface $moduleList, + \Magento\App\ModuleListInterface $moduleList, \Magento\Core\Model\Resource\Resource $resourceResource, \Magento\Core\Model\Resource\Setup\MigrationFactory $migrationFactory, \Magento\Core\Model\Resource\Theme\CollectionFactory $themeResourceFactory, @@ -104,7 +104,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Event\Manager + * @return \Magento\Event\ManagerInterface */ public function getEventManager() { @@ -112,7 +112,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Logger + * @return \Magento\Core\Model\Logger */ public function getLogger() { @@ -120,7 +120,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\ModuleListInterface + * @return \Magento\App\ModuleListInterface */ public function getModuleList() { @@ -128,7 +128,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Config\Modules\Reader + * @return \Magento\Core\Model\Config\Modules\Reader */ public function getModulesReader() { @@ -136,7 +136,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Resource + * @return \Magento\Core\Model\Resource */ public function getResourceModel() { @@ -144,7 +144,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Resource\Setup\MigrationFactory + * @return \Magento\Core\Model\Resource\Setup\MigrationFactory */ public function getMigrationFactory() { @@ -152,7 +152,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Resource\Resource + * @return \Magento\Core\Model\Resource\Resource */ public function getResourceResource() { @@ -160,7 +160,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Theme\CollectionFactory + * @return \Magento\Core\Model\Theme\CollectionFactory */ public function getThemeFactory() { @@ -168,7 +168,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Resource\Theme\CollectionFactory + * @return \Magento\Core\Model\Resource\Theme\CollectionFactory */ public function getThemeResourceFactory() { diff --git a/app/code/Magento/Core/Model/Resource/Setup/Migration.php b/app/code/Magento/Core/Model/Resource/Setup/Migration.php index 5da16eb9e80..480d4dec4f3 100644 --- a/app/code/Magento/Core/Model/Resource/Setup/Migration.php +++ b/app/code/Magento/Core/Model/Resource/Setup/Migration.php @@ -150,17 +150,17 @@ class Migration extends \Magento\Core\Model\Resource\Setup protected $_filesystem; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; /** - * @param \Magento\Core\Model\Resource\Setup\Context $context + * @param Context $context * @param \Magento\Filesystem $filesystem * @param \Magento\Core\Helper\Data $helper - * @param \Magento\Core\Model\Dir $dir - * @param string $resourceName - * @param string $confPathToMapFile + * @param \Magento\App\Dir $dir + * @param $resourceName + * @param $confPathToMapFile * @param string $moduleName * @param string $connectionName */ @@ -168,7 +168,7 @@ class Migration extends \Magento\Core\Model\Resource\Setup \Magento\Core\Model\Resource\Setup\Context $context, \Magento\Filesystem $filesystem, \Magento\Core\Helper\Data $helper, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, $resourceName, $confPathToMapFile, $moduleName = 'Magento_Core', diff --git a/app/code/Magento/Core/Model/Resource/Theme/Collection.php b/app/code/Magento/Core/Model/Resource/Theme/Collection.php index 0f7c4db359e..9b69e996c0f 100644 --- a/app/code/Magento/Core/Model/Resource/Theme/Collection.php +++ b/app/code/Magento/Core/Model/Resource/Theme/Collection.php @@ -161,15 +161,15 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl /** * Update all child themes relations * - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @return $this */ - public function updateChildRelations(\Magento\Core\Model\Theme $themeModel) + public function updateChildRelations(\Magento\View\Design\ThemeInterface $themeModel) { $parentThemeId = $themeModel->getParentId(); $this->addFieldToFilter('parent_id', array('eq' => $themeModel->getId()))->load(); - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($this->getItems() as $theme) { $theme->setParentId($parentThemeId)->save(); } diff --git a/app/code/Magento/Core/Model/Resource/Theme/File/Collection.php b/app/code/Magento/Core/Model/Resource/Theme/File/Collection.php index 3cf66ead44f..cbc6de8ddbb 100644 --- a/app/code/Magento/Core/Model/Resource/Theme/File/Collection.php +++ b/app/code/Magento/Core/Model/Resource/Theme/File/Collection.php @@ -67,10 +67,10 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl /** * Filter out files that do not belong to a theme * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return \Magento\Core\Model\Resource\Theme\File\Collection */ - public function addThemeFilter(\Magento\Core\Model\Theme $theme) + public function addThemeFilter(\Magento\View\Design\ThemeInterface $theme) { $this->addFieldToFilter('theme_id', $theme->getId()); return $this; diff --git a/app/code/Magento/Core/Model/Resource/Translate.php b/app/code/Magento/Core/Model/Resource/Translate.php index 976c2c043fa..215efc0aff9 100644 --- a/app/code/Magento/Core/Model/Resource/Translate.php +++ b/app/code/Magento/Core/Model/Resource/Translate.php @@ -37,7 +37,7 @@ namespace Magento\Core\Model\Resource; class Translate extends \Magento\Core\Model\Resource\Db\AbstractDb { /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; @@ -48,12 +48,12 @@ class Translate extends \Magento\Core\Model\Resource\Db\AbstractDb /** * @param \Magento\Core\Model\Resource $resource - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\StoreManager $storeManager */ public function __construct( \Magento\Core\Model\Resource $resource, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\StoreManager $storeManager ) { parent::__construct($resource); diff --git a/app/code/Magento/Core/Model/Resource/Type/Db/Pdo/Mysql.php b/app/code/Magento/Core/Model/Resource/Type/Db/Pdo/Mysql.php index 8550c7ac508..b0540c2c950 100644 --- a/app/code/Magento/Core/Model/Resource/Type/Db/Pdo/Mysql.php +++ b/app/code/Magento/Core/Model/Resource/Type/Db/Pdo/Mysql.php @@ -29,7 +29,7 @@ class Mysql extends \Magento\Core\Model\Resource\Type\Db /** * Dirs instance * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs; @@ -49,7 +49,7 @@ class Mysql extends \Magento\Core\Model\Resource\Type\Db protected $_isActive; /** - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param string $host * @param string $username * @param string $password @@ -60,7 +60,7 @@ class Mysql extends \Magento\Core\Model\Resource\Type\Db * @param bool $active */ public function __construct( - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, $host, $username, $password, diff --git a/app/code/Magento/Core/Model/Resource/Url/Rewrite/Collection.php b/app/code/Magento/Core/Model/Resource/Url/Rewrite/Collection.php index 9274787b510..63d5e9da94e 100644 --- a/app/code/Magento/Core/Model/Resource/Url/Rewrite/Collection.php +++ b/app/code/Magento/Core/Model/Resource/Url/Rewrite/Collection.php @@ -42,7 +42,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl protected $_storeManager; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -50,7 +50,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Core/Model/Session/AbstractSession.php b/app/code/Magento/Core/Model/Session/AbstractSession.php index c0c8ddbab7e..3760d5fd636 100644 --- a/app/code/Magento/Core/Model/Session/AbstractSession.php +++ b/app/code/Magento/Core/Model/Session/AbstractSession.php @@ -79,7 +79,7 @@ class AbstractSession extends \Magento\Object /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -120,12 +120,12 @@ class AbstractSession extends \Magento\Object protected $_messageFactory; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; @@ -135,7 +135,7 @@ class AbstractSession extends \Magento\Object protected $_storeManager; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; diff --git a/app/code/Magento/Core/Model/Session/Context.php b/app/code/Magento/Core/Model/Session/Context.php index 1b4025b0b97..530e968a78f 100644 --- a/app/code/Magento/Core/Model/Session/Context.php +++ b/app/code/Magento/Core/Model/Session/Context.php @@ -38,7 +38,7 @@ class Context implements \Magento\ObjectManager\ContextInterface protected $_logger; /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -96,12 +96,12 @@ class Context implements \Magento\ObjectManager\ContextInterface protected $_messageFactory; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; @@ -111,7 +111,7 @@ class Context implements \Magento\ObjectManager\ContextInterface protected $_storeManager; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -123,16 +123,16 @@ class Context implements \Magento\ObjectManager\ContextInterface /** * @param \Magento\Core\Model\Session\Validator $validator * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Http $coreHttp * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\Message\CollectionFactory $messageFactory * @param \Magento\Core\Model\Message $message * @param \Magento\Core\Model\Cookie $cookie - * @param \Magento\Core\Controller\Request\Http $request - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\RequestInterface $request + * @param \Magento\App\State $appState * @param \Magento\Core\Model\StoreManager $storeManager - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\Url $url * @param $saveMethod * @param null $savePath @@ -142,16 +142,16 @@ class Context implements \Magento\ObjectManager\ContextInterface public function __construct( \Magento\Core\Model\Session\Validator $validator, \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Http $coreHttp, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\Message\CollectionFactory $messageFactory, \Magento\Core\Model\Message $message, \Magento\Core\Model\Cookie $cookie, - \Magento\Core\Controller\Request\Http $request, - \Magento\Core\Model\App\State $appState, + \Magento\App\RequestInterface $request, + \Magento\App\State $appState, \Magento\Core\Model\StoreManager $storeManager, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Core\Model\Url $url, $saveMethod, $savePath = null, @@ -178,7 +178,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Event\Manager + * @return \Magento\Event\ManagerInterface */ public function getEventManager() { @@ -186,7 +186,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Helper\Http + * @return \Magento\Core\Helper\Http */ public function getHttpHelper() { @@ -194,7 +194,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Logger + * @return \Magento\Core\Model\Logger */ public function getLogger() { @@ -202,7 +202,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Store\Config + * @return \Magento\Core\Model\Store\Config */ public function getStoreConfig() { @@ -210,7 +210,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Session\Validator + * @return \Magento\Core\Model\Session\Validator */ public function getValidator() { @@ -250,7 +250,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\App\State + * @return \Magento\App\State */ public function getAppState() { @@ -258,7 +258,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Cookie + * @return \Magento\Core\Model\Cookie */ public function getCookie() { @@ -266,7 +266,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Dir + * @return \Magento\App\Dir */ public function getDir() { @@ -274,7 +274,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Message + * @return \Magento\Core\Model\Message */ public function getMessage() { @@ -282,7 +282,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Message\CollectionFactory + * @return \Magento\Core\Model\Message\CollectionFactory */ public function getMessageFactory() { @@ -290,7 +290,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Controller\Request\Http + * @return \Magento\App\RequestInterface */ public function getRequest() { @@ -298,7 +298,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\StoreManager + * @return \Magento\Core\Model\StoreManager */ public function getStoreManager() { @@ -306,7 +306,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \\Magento\Core\Model\Url + * @return \Magento\Core\Model\Url */ public function getUrl() { diff --git a/app/code/Magento/Core/Model/Store.php b/app/code/Magento/Core/Model/Store.php index 2b94ccf84d1..990294d8f77 100644 --- a/app/code/Magento/Core/Model/Store.php +++ b/app/code/Magento/Core/Model/Store.php @@ -246,7 +246,7 @@ class Store extends \Magento\Core\Model\AbstractModel protected $_url; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; @@ -256,7 +256,7 @@ class Store extends \Magento\Core\Model\AbstractModel protected $_isCustomEntryPoint = false; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; @@ -273,7 +273,7 @@ class Store extends \Magento\Core\Model\AbstractModel protected $_coreFileStorageDatabase = null; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -295,10 +295,10 @@ class Store extends \Magento\Core\Model\AbstractModel * @param \Magento\Core\Model\Registry $registry * @param \Magento\Core\Model\Cache\Type\Config $configCacheType * @param \Magento\Core\Model\Url $url - * @param \Magento\Core\Model\App\State $appState - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\State $appState + * @param \Magento\App\RequestInterface $request * @param \Magento\Core\Model\Resource\Config\Data $configDataResource - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\Config $coreConfig * @param \Magento\Core\Model\Resource\Store $resource @@ -313,10 +313,10 @@ class Store extends \Magento\Core\Model\AbstractModel \Magento\Core\Model\Registry $registry, \Magento\Core\Model\Cache\Type\Config $configCacheType, \Magento\Core\Model\Url $url, - \Magento\Core\Model\App\State $appState, - \Magento\Core\Controller\Request\Http $request, + \Magento\App\State $appState, + \Magento\App\RequestInterface $request, \Magento\Core\Model\Resource\Config\Data $configDataResource, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\Config $coreConfig, \Magento\Core\Model\Resource\Store $resource, @@ -359,7 +359,7 @@ class Store extends \Magento\Core\Model\AbstractModel { parent::__wakeup(); $this->_eventDispatcher = \Magento\Core\Model\ObjectManager::getInstance() - ->get('Magento\Core\Model\Event\Manager'); + ->get('Magento\Event\ManagerInterface'); $this->_cacheManager = \Magento\Core\Model\ObjectManager::getInstance() ->get('Magento\Core\Model\CacheInterface'); $this->_coreStoreConfig = \Magento\Core\Model\ObjectManager::getInstance() @@ -557,7 +557,7 @@ class Store extends \Magento\Core\Model\AbstractModel $url = $this->getConfig($path); if (!$url) { $url = $this->getBaseUrl(self::URL_TYPE_WEB, $secure) - . $this->_dir->getUri(\Magento\Core\Model\Dir::PUB_LIB); + . $this->_dir->getUri(\Magento\App\Dir::PUB_LIB); } break; @@ -566,7 +566,7 @@ class Store extends \Magento\Core\Model\AbstractModel $url = $this->getConfig($path); if (!$url) { $url = $this->getBaseUrl(self::URL_TYPE_WEB, $secure) - . $this->_dir->getUri(\Magento\Core\Model\Dir::STATIC_VIEW); + . $this->_dir->getUri(\Magento\App\Dir::STATIC_VIEW); } break; @@ -575,7 +575,7 @@ class Store extends \Magento\Core\Model\AbstractModel $url = $this->getConfig($path); if (!$url) { $url = $this->getBaseUrl(self::URL_TYPE_WEB, $secure) - . $this->_dir->getUri(\Magento\Core\Model\Dir::PUB_VIEW_CACHE); + . $this->_dir->getUri(\Magento\App\Dir::PUB_VIEW_CACHE); } break; @@ -586,7 +586,7 @@ class Store extends \Magento\Core\Model\AbstractModel $url = $this->getConfig($path); if (!$url) { $url = $this->getBaseUrl(self::URL_TYPE_WEB, $secure) - . $this->_dir->getUri(\Magento\Core\Model\Dir::MEDIA); + . $this->_dir->getUri(\Magento\App\Dir::MEDIA); } } break; @@ -644,16 +644,16 @@ class Store extends \Magento\Core\Model\AbstractModel * If we use Database file storage and server doesn't support rewrites (.htaccess in media folder) * we have to put name of fetching media script exactly into URL * - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param bool $secure * @return string|bool */ - protected function _getMediaScriptUrl(\Magento\Core\Model\Dir $dirs, $secure) + protected function _getMediaScriptUrl(\Magento\App\Dir $dirs, $secure) { if (!$this->getConfig(self::XML_PATH_USE_REWRITES) && $this->_coreFileStorageDatabase->checkDbUsage() ) { - return $this->getBaseUrl(self::URL_TYPE_WEB, $secure) . $dirs->getUri(\Magento\Core\Model\Dir::PUB) + return $this->getBaseUrl(self::URL_TYPE_WEB, $secure) . $dirs->getUri(\Magento\App\Dir::PUB) . '/' . self::MEDIA_REWRITE_SCRIPT; } return false; diff --git a/app/code/Magento/Core/Model/Store/Storage/Db.php b/app/code/Magento/Core/Model/Store/Storage/Db.php index 5c3daad80a8..48006d75d33 100644 --- a/app/code/Magento/Core/Model/Store/Storage/Db.php +++ b/app/code/Magento/Core/Model/Store/Storage/Db.php @@ -135,7 +135,7 @@ class Db implements \Magento\Core\Model\Store\StorageInterface /** * Application state model * - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; @@ -150,7 +150,7 @@ class Db implements \Magento\Core\Model\Store\StorageInterface * @param \Magento\Core\Model\Store\Group\Factory $groupFactory * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\Cookie $cookie - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Backend\Model\Url\Proxy $proxy * @param bool $isSingleStoreAllowed * @param string $scopeCode @@ -163,7 +163,7 @@ class Db implements \Magento\Core\Model\Store\StorageInterface \Magento\Core\Model\Store\Group\Factory $groupFactory, \Magento\Core\Model\Config $config, \Magento\Core\Model\Cookie $cookie, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Backend\Model\Url\Proxy $proxy, $isSingleStoreAllowed, $scopeCode, diff --git a/app/code/Magento/Core/Model/Store/StorageFactory.php b/app/code/Magento/Core/Model/Store/StorageFactory.php index 95135c130bc..ac28d5c395d 100644 --- a/app/code/Magento/Core/Model/Store/StorageFactory.php +++ b/app/code/Magento/Core/Model/Store/StorageFactory.php @@ -50,7 +50,7 @@ class StorageFactory protected $_cache = array(); /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -70,27 +70,27 @@ class StorageFactory protected $_app; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; /** * @param \Magento\ObjectManager $objectManager - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $log * @param \Magento\Core\Model\ConfigInterface $config * @param \Magento\Core\Model\App\Proxy $app - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param string $defaultStorageClassName * @param string $installedStoreClassName */ public function __construct( \Magento\ObjectManager $objectManager, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $log, \Magento\Core\Model\ConfigInterface $config, \Magento\Core\Model\App\Proxy $app, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, $defaultStorageClassName = 'Magento\Core\Model\Store\Storage\DefaultStorage', $installedStoreClassName = 'Magento\Core\Model\Store\Storage\Db' ) { diff --git a/app/code/Magento/Core/Model/StoreManager.php b/app/code/Magento/Core/Model/StoreManager.php index 263bab13342..a7b0c1fe6ee 100644 --- a/app/code/Magento/Core/Model/StoreManager.php +++ b/app/code/Magento/Core/Model/StoreManager.php @@ -35,14 +35,14 @@ class StoreManager implements \Magento\Core\Model\StoreManagerInterface /** * Event manager * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; /** * Request model * - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; @@ -83,14 +83,14 @@ class StoreManager implements \Magento\Core\Model\StoreManagerInterface /** * @param \Magento\Core\Model\Store\StorageFactory $factory - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @param \Magento\Core\Model\Factory\Helper $helperFactory * @param string $scopeCode * @param string $scopeType */ public function __construct( \Magento\Core\Model\Store\StorageFactory $factory, - \Magento\Core\Controller\Request\Http $request, + \Magento\App\RequestInterface $request, \Magento\Core\Model\Factory\Helper $helperFactory, $scopeCode = '', $scopeType = 'store' diff --git a/app/code/Magento/Core/Model/Template.php b/app/code/Magento/Core/Model/Template.php index 15c4affe69c..29b8ee28314 100644 --- a/app/code/Magento/Core/Model/Template.php +++ b/app/code/Magento/Core/Model/Template.php @@ -87,7 +87,7 @@ abstract class Template extends \Magento\Core\Model\AbstractModel /** * Design package instance * - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_design = null; @@ -102,7 +102,7 @@ abstract class Template extends \Magento\Core\Model\AbstractModel protected $_storeManager; /** - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Core\Model\App\Emulation $appEmulation @@ -110,7 +110,7 @@ abstract class Template extends \Magento\Core\Model\AbstractModel * @param array $data */ public function __construct( - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Core\Model\App\Emulation $appEmulation, diff --git a/app/code/Magento/Core/Model/TemplateEngine/Decorator/DebugHints.php b/app/code/Magento/Core/Model/TemplateEngine/Decorator/DebugHints.php new file mode 100644 index 00000000000..c7569483920 --- /dev/null +++ b/app/code/Magento/Core/Model/TemplateEngine/Decorator/DebugHints.php @@ -0,0 +1,103 @@ +<?php +/** + * Decorator that inserts debugging hints into the rendered block contents + * + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Core\Model\TemplateEngine\Decorator; + +class DebugHints implements \Magento\Core\Model\TemplateEngine\EngineInterface +{ + /** + * @var \Magento\Core\Model\TemplateEngine\EngineInterface + */ + private $_subject; + + /** + * @var bool + */ + private $_showBlockHints; + + /** + * @param \Magento\Core\Model\TemplateEngine\EngineInterface $subject + * @param bool $showBlockHints Whether to include block into the debugging information or not + */ + public function __construct( + \Magento\Core\Model\TemplateEngine\EngineInterface $subject, + $showBlockHints + ) { + $this->_subject = $subject; + $this->_showBlockHints = $showBlockHints; + } + + /** + * Insert debugging hints into the rendered block contents + * + * {@inheritdoc} + */ + public function render(\Magento\Core\Block\Template $block, $templateFile, array $dictionary = array()) + { + $result = $this->_subject->render($block, $templateFile, $dictionary); + if ($this->_showBlockHints) { + $result = $this->_renderBlockHints($result, $block); + } + $result = $this->_renderTemplateHints($result, $templateFile); + return $result; + } + + /** + * Insert template debugging hints into the rendered block contents + * + * @param string $blockHtml + * @param string $templateFile + * @return string + */ + protected function _renderTemplateHints($blockHtml, $templateFile) + { + return <<<HTML +<div style="position:relative; border:1px dotted red; margin:6px 2px; padding:18px 2px 2px 2px; zoom:1;"> +<div style="position:absolute; left:0; top:0; padding:2px 5px; background:red; color:white; font:normal 11px Arial; +text-align:left !important; z-index:998;" onmouseover="this.style.zIndex='999'" +onmouseout="this.style.zIndex='998'" title="{$templateFile}">{$templateFile}</div> +{$blockHtml} +</div> +HTML; + } + + /** + * Insert block debugging hints into the rendered block contents + * + * @param string $blockHtml + * @param \Magento\Core\Block\Template $block + * @return string + */ + protected function _renderBlockHints($blockHtml, \Magento\Core\Block\Template $block) + { + $blockClass = get_class($block); + return <<<HTML +<div style="position:absolute; right:0; top:0; padding:2px 5px; background:red; color:blue; font:normal 11px Arial; +text-align:left !important; z-index:998;" onmouseover="this.style.zIndex='999'" onmouseout="this.style.zIndex='998'" +title="{$blockClass}">{$blockClass}</div> +{$blockHtml} +HTML; + } +} diff --git a/app/code/Magento/Core/Model/TemplateEngine/Factory.php b/app/code/Magento/Core/Model/TemplateEngine/Factory.php index edb42aac889..bfa8d00ca74 100644 --- a/app/code/Magento/Core/Model/TemplateEngine/Factory.php +++ b/app/code/Magento/Core/Model/TemplateEngine/Factory.php @@ -1,6 +1,6 @@ <?php /** - * Factory class for Template Engine + * Factory that is able to create any template engine in the system * * Magento * @@ -20,8 +20,6 @@ * 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_Core * @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) */ @@ -29,34 +27,46 @@ namespace Magento\Core\Model\TemplateEngine; class Factory { + /** + * @var \Magento\ObjectManager + */ protected $_objectManager; /** - * Template engine types + * @var array */ - const ENGINE_TWIG = 'twig'; - const ENGINE_PHTML = 'phtml'; + protected $_engines; - public function __construct(\Magento\ObjectManager $objectManager) - { + /** + * @param \Magento\ObjectManager $objectManager + * @param array $engines Format: array('<name>' => 'TemplateEngine\Class', ...) + */ + public function __construct( + \Magento\ObjectManager $objectManager, + array $engines + ) { $this->_objectManager = $objectManager; + $this->_engines = $engines; } /** - * Gets the singleton instance of the appropriate template engine + * Retrieve a template engine instance by its unique name * * @param string $name * @return \Magento\Core\Model\TemplateEngine\EngineInterface - * @throws \InvalidArgumentException if template engine doesn't exist + * @throws \InvalidArgumentException If template engine doesn't exist + * @throws \UnexpectedValueException If template engine doesn't implement the necessary interface */ - public function get($name) + public function create($name) { - if (self::ENGINE_TWIG == $name) { - return $this->_objectManager->get('Magento\Core\Model\TemplateEngine\Twig'); - } else if (self::ENGINE_PHTML == $name) { - return $this->_objectManager->get('Magento\Core\Model\TemplateEngine\Php'); + if (!isset($this->_engines[$name])) { + throw new \InvalidArgumentException("Unknown template engine '$name'."); + } + $engineClass = $this->_engines[$name]; + $engineInstance = $this->_objectManager->create($engineClass); + if (!($engineInstance instanceof \Magento\Core\Model\TemplateEngine\EngineInterface)) { + throw new \UnexpectedValueException("$engineClass has to implement the template engine interface."); } - // unknown type, throw exception - throw new \InvalidArgumentException('Unknown template engine type: ' . $name); + return $engineInstance; } } diff --git a/app/code/Magento/Core/Model/TemplateEngine/Plugin/DebugHints.php b/app/code/Magento/Core/Model/TemplateEngine/Plugin/DebugHints.php new file mode 100644 index 00000000000..cb0e63a238c --- /dev/null +++ b/app/code/Magento/Core/Model/TemplateEngine/Plugin/DebugHints.php @@ -0,0 +1,87 @@ +<?php +/** + * Plugin for the template engine factory that makes a decision of whether to activate debugging hints or not + * + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Core\Model\TemplateEngine\Plugin; + +class DebugHints +{ + /**#@+ + * XPath of configuration of the debugging hints + */ + const XML_PATH_DEBUG_TEMPLATE_HINTS = 'dev/debug/template_hints'; + const XML_PATH_DEBUG_TEMPLATE_HINTS_BLOCKS = 'dev/debug/template_hints_blocks'; + /**#@-*/ + + /** + * @var \Magento\ObjectManager + */ + private $_objectManager; + + /** + * @var \Magento\Core\Model\Store\Config + */ + private $_storeConfig; + + /** + * @var \Magento\Core\Helper\Data + */ + private $_coreData; + + /** + * @param \Magento\ObjectManager $objectManager + * @param \Magento\Core\Model\Store\Config $storeConfig + * @param \Magento\Core\Helper\Data $coreData + */ + public function __construct( + \Magento\ObjectManager $objectManager, + \Magento\Core\Model\Store\Config $storeConfig, + \Magento\Core\Helper\Data $coreData + ) { + $this->_objectManager = $objectManager; + $this->_storeConfig = $storeConfig; + $this->_coreData = $coreData; + } + + /** + * Wrap template engine instance with the debugging hints decorator, depending of the store configuration + * + * @param \Magento\Core\Model\TemplateEngine\EngineInterface $invocationResult + * @return \Magento\Core\Model\TemplateEngine\EngineInterface + */ + public function afterCreate(\Magento\Core\Model\TemplateEngine\EngineInterface $invocationResult) + { + if ($this->_storeConfig->getConfig(self::XML_PATH_DEBUG_TEMPLATE_HINTS) && $this->_coreData->isDevAllowed()) { + $showBlockHints = $this->_storeConfig->getConfig(self::XML_PATH_DEBUG_TEMPLATE_HINTS_BLOCKS); + return $this->_objectManager->create( + 'Magento\Core\Model\TemplateEngine\Decorator\DebugHints', + array( + 'subject' => $invocationResult, + 'showBlockHints' => $showBlockHints, + ) + ); + } + return $invocationResult; + } +} diff --git a/app/code/Magento/Core/Model/App/Handler.php b/app/code/Magento/Core/Model/TemplateEngine/Pool.php similarity index 57% rename from app/code/Magento/Core/Model/App/Handler.php rename to app/code/Magento/Core/Model/TemplateEngine/Pool.php index 72c55e6c170..cffdaa8750d 100644 --- a/app/code/Magento/Core/Model/App/Handler.php +++ b/app/code/Magento/Core/Model/TemplateEngine/Pool.php @@ -1,6 +1,6 @@ <?php /** - * Application request handler. Launches front controller, request routing and dispatching process. + * In-memory pool of all template engines available in the system * * Magento * @@ -23,34 +23,39 @@ * @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\Core\Model\App; +namespace Magento\Core\Model\TemplateEngine; -class Handler implements \Magento\HTTP\HandlerInterface +class Pool { /** - * Application object - * - * @var \Magento\Core\Model\AppInterface + * @var Factory */ - protected $_app; + protected $_factory; /** - * @param \Magento\Core\Model\AppInterface $app + * @var EngineInterface[] */ - public function __construct(\Magento\Core\Model\AppInterface $app) + protected $_engines = array(); + + /** + * @param Factory $factory + */ + public function __construct(Factory $factory) { - $this->_app = $app; + $this->_factory = $factory; } /** - * Handle http request + * Retrieve a template engine instance by its unique name * - * @param \Zend_Controller_Request_Http $request - * @param \Zend_Controller_Response_Http $response + * @param string $name + * @return EngineInterface */ - public function handle(\Zend_Controller_Request_Http $request, \Zend_Controller_Response_Http $response) + public function get($name) { - $this->_app->setRequest($request)->setResponse($response)->run(); + if (!isset($this->_engines[$name])) { + $this->_engines[$name] = $this->_factory->create($name); + } + return $this->_engines[$name]; } } - diff --git a/app/code/Magento/Core/Model/TemplateEngine/Twig.php b/app/code/Magento/Core/Model/TemplateEngine/Twig.php deleted file mode 100644 index a93d4162ffc..00000000000 --- a/app/code/Magento/Core/Model/TemplateEngine/Twig.php +++ /dev/null @@ -1,106 +0,0 @@ -<?php -/** - * Template engine that enables Twig templates to be used for rendering. - * - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\Core\Model\TemplateEngine; - -class Twig implements \Magento\Core\Model\TemplateEngine\EngineInterface, - \Magento\Core\Model\TemplateEngine\BlockTrackerInterface -{ - /** - * @var \Magento\Core\Block\Template - */ - protected $_currentBlock; - - /** - * @var \Magento\Core\Model\TemplateEngine\Twig\EnvironmentFactory - */ - protected $_factory; - - /** - * @var \Magento\Core\Model\TemplateEngine\Twig\Extension - */ - protected $_extension; - - /** - * @var \Twig_Environment - */ - protected $_environment; - - /** - * Populates the environment based on the environment builder provided. - * - * @param \Magento\Core\Model\TemplateEngine\Twig\EnvironmentFactory $factory - * @param \Magento\Core\Model\TemplateEngine\Twig\Extension $extension - */ - public function __construct( - \Magento\Core\Model\TemplateEngine\Twig\EnvironmentFactory $factory, - \Magento\Core\Model\TemplateEngine\Twig\Extension $extension - ) { - $this->_factory = $factory; - $this->_extension = $extension; - - $this->_extension->setBlockTracker($this); - } - - /** - * Render the named Twig template using the given block as the context of the Twig helper functions/filters. - * - * @param \Magento\Core\Block\Template $block - * @param string $fileName - * @param array $dictionary - * @throws \Exception - * @return string - */ - public function render(\Magento\Core\Block\Template $block, $fileName, array $dictionary = array()) - { - if ($this->_environment === null) { - $this->_environment = $this->_factory->create(); - } - $dictionary['block'] = $block; - // save state from previous block - $previousBlock = $this->_currentBlock; - $this->_currentBlock = $block; - try { - $output = $this->_environment->render($fileName, $dictionary); - } catch (\Exception $renderException) { - // restore state for previous block - $this->_currentBlock = $previousBlock; - throw $renderException; - } - // restore state for previous block - $this->_currentBlock = $previousBlock; - return $output; - } - - /** - * Get the current block - * - * @return \Magento\Core\Block\Template - */ - public function getCurrentBlock() - { - return $this->_currentBlock; - } -} diff --git a/app/code/Magento/Core/Model/TemplateEngine/Twig/CommonFunctions.php b/app/code/Magento/Core/Model/TemplateEngine/Twig/CommonFunctions.php deleted file mode 100644 index a58e8b9a7ee..00000000000 --- a/app/code/Magento/Core/Model/TemplateEngine/Twig/CommonFunctions.php +++ /dev/null @@ -1,228 +0,0 @@ -<?php -/** - * Common functions needed for twig extension - * - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\Core\Model\TemplateEngine\Twig; - -class CommonFunctions -{ - /** - * @var \Magento\Core\Model\UrlInterface - */ - private $_urlBuilder; - - /** - * @var \Magento\Core\Helper\Url - */ - private $_urlHelper; - - /** - * @var \Magento\Core\Helper\Data - */ - private $_dataHelper; - - /** - * @var \Magento\Core\Model\StoreManager - */ - private $_storeManager; - - /** - * @var \Magento\Core\Model\View\Url - */ - private $_viewUrl; - - /** - * @var \Magento\Core\Model\View\Config - */ - private $_viewConfig; - - /** - * @var \Magento\Catalog\Helper\Image - */ - private $_helperImage; - - /** - * @var \Magento\Core\Model\Logger - */ - private $_logger; - - /** - * @var \Magento\Core\Model\LocaleInterface - */ - private $_locale; - - public function __construct( - \Magento\Core\Model\UrlInterface $urlBuilder, - \Magento\Core\Helper\Url $urlHelper, - \Magento\Core\Helper\Data $dataHelper, - \Magento\Core\Model\StoreManager $storeManager, - \Magento\Core\Model\View\Url $viewUrl, - \Magento\Core\Model\View\Config $viewConfig, - \Magento\Catalog\Helper\Image $helperImage, - \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\LocaleInterface $locale - ) { - $this->_urlBuilder = $urlBuilder; - $this->_urlHelper = $urlHelper; - $this->_dataHelper = $dataHelper; - $this->_storeManager = $storeManager; - $this->_viewUrl = $viewUrl; - $this->_viewConfig = $viewConfig; - $this->_helperImage = $helperImage; - $this->_logger = $logger; - $this->_locale = $locale; - } - - /** - * Returns a list of global functions to add to the existing list. - * - * @return array An array of global functions - */ - public function getFunctions() - { - $options = array('is_safe' => array('html')); - return array( - new \Twig_SimpleFunction('viewFileUrl', array($this, 'getViewFileUrl'), $options), - new \Twig_SimpleFunction('getSelectHtml', array($this, 'getSelectHtml'), $options), - new \Twig_SimpleFunction('getDateFormat', array($this->_locale, 'getDateFormat')), - new \Twig_SimpleFunction('getSelectFromToHtml', array($this, 'getSelectFromToHtml'), $options), - new \Twig_SimpleFunction('getUrl', array($this->_urlBuilder, 'getUrl'), $options), - new \Twig_SimpleFunction('encodeUrl', array($this->_urlHelper, 'getEncodedUrl'), $options), - new \Twig_SimpleFunction('getCurrentUrl', array($this->_urlHelper, 'getCurrentUrl'), $options), - new \Twig_SimpleFunction('isModuleOutputEnabled', - array($this->_dataHelper, 'isModuleOutputEnabled'), $options), - new \Twig_SimpleFunction('getStoreConfig', array($this->_storeManager->getStore(), 'getConfig'), $options), - new \Twig_SimpleFunction('getDesignVarValue', array($this->_viewConfig->getViewConfig(), 'getVarValue'), - $options), - new \Twig_SimpleFunction('getDefaultImage', array($this->_helperImage, 'getDefaultImage'), $options), - ); - } - - /** - * Retrieve url of themes file - * - * @param string $file path to file in theme - * @param array $params - * @return string - * @throws \Magento\Exception - */ - public function getViewFileUrl($file = null, array $params = array()) - { - try { - return $this->_viewUrl->getViewFileUrl($file, $params); - } catch (\Magento\Exception $e) { - $this->_logger->logException($e); - return $this->_urlBuilder->getUrl('', array('_direct' => 'core/index/notfound')); - } - } - - /** - * @param \Magento\Core\Block\Html\Select $selectBlock - * @param $identifier - * @param $name - * @param $nameOptionsById - * @param null $selectedValue - * @return mixed - */ - public function getSelectHtml($selectBlock, $identifier, $name, $nameOptionsById, $selectedValue = null) - { - - $options = array(); - foreach ($nameOptionsById as $value => $label) { - $options[] = array('value' => $value, 'label' => $label); - } - return $this->_initSelectBlock($selectBlock, $identifier, $name, $nameOptionsById, $selectedValue) - ->setOptions($options) - ->getHtml(); - } - - /** - * From \Magento\Catalog\Block\Product\View\Options\Type\Date: Return drop-down html with range of values - * - * @param \Magento\Core\Block\Html\Select $selectBlock - * @param string $name Id/name of html select element - * @param int $fromNumber Start position - * @param int $toNumber End position - * @param $nameOptionsById - * @param $optionsId - * @param null $value Value selected - * @return string Formatted Html - */ - public function getSelectFromToHtml( - $selectBlock, $name, $fromNumber, $toNumber, - $nameOptionsById, $optionsId, $value = null - ) { - $options = array( - array('value' => '', 'label' => '-') - ); - for ($i = $fromNumber; $i <= $toNumber; $i++) { - $options[] = array('value' => $i, 'label' => $this->_getValueWithLeadingZeros($i)); - } - return $this->_initSelectBlock($selectBlock, $optionsId, $name, $nameOptionsById, $value) - ->setOptions($options) - ->getHtml(); - } - - /** - * Initializes values in the selection list. - * From \Magento\Catalog\Block\Product\View\Options\Type\Date: HTML select element - * - * @param \Magento\Core\Block\Html\Select $selectBlock - * @param $identifier - * @param $name - * @param $nameOptionsById - * @param null $value - * @return \Magento\Core\Block\Html\Select - */ - protected function _initSelectBlock($selectBlock, $identifier, $name, $nameOptionsById, $value = null) - { - $selectBlock->setId('options_' . $identifier . '_' . $name); - $selectBlock->setClass('product-custom-option datetime-picker'); - $selectBlock->setExtraParams(); - $selectBlock->setName('options[' . $identifier . '][' . $name . ']'); - - $extraParams = 'style="width:auto"'; - $selectBlock->setExtraParams($extraParams); - - if (is_null($value)) { - $value = $nameOptionsById; - } - if (!is_null($value)) { - $selectBlock->setValue($value); - } - - return $selectBlock; - } - - /** - * From \Magento\Catalog\Block\Product\View\Options\Type\Date: Add Leading Zeros to number less than 10 - * - * @param int|string $value value to pad with zeros - * @return string - */ - protected function _getValueWithLeadingZeros($value) - { - return $value < 10 ? '0'.$value : $value; - } -} diff --git a/app/code/Magento/Core/Model/TemplateEngine/Twig/EnvironmentFactory.php b/app/code/Magento/Core/Model/TemplateEngine/Twig/EnvironmentFactory.php deleted file mode 100644 index 806220890a5..00000000000 --- a/app/code/Magento/Core/Model/TemplateEngine/Twig/EnvironmentFactory.php +++ /dev/null @@ -1,112 +0,0 @@ -<?php -/** - * Factory is used to hide the details of how a Twig Environment is built. - * - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\Core\Model\TemplateEngine\Twig; - -class EnvironmentFactory -{ - /** - * @var \Magento\Core\Model\TemplateEngine\Twig\Extension - */ - protected $_extension; - - /** - * @var \Magento\Filesystem - */ - protected $_filesystem; - - /** - * @var \Twig_Environment - */ - private $_environment; - - /** - * @var \Magento\Core\Model\Dir - */ - private $_dir; - - /** - * @var \Magento\Core\Model\Logger - */ - private $_logger; - - /** - * @var \Twig_LoaderInterface - */ - private $_loader; - - /** - * Create new instance of factory - * - * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\TemplateEngine\Twig\Extension $extension - * @param \Magento\Core\Model\Dir $dir - * @param \Magento\Core\Model\Logger $logger - * @param \Twig_LoaderInterface $loader - */ - public function __construct( - \Magento\Filesystem $filesystem, - \Magento\Core\Model\TemplateEngine\Twig\Extension $extension, - \Magento\Core\Model\Dir $dir, - \Magento\Core\Model\Logger $logger, - \Twig_LoaderInterface $loader - ) { - $this->_filesystem = $filesystem; - $this->_extension = $extension; - $this->_dir = $dir; - $this->_logger = $logger; - $this->_loader = $loader; - $this->_environment = null; - } - - /** - * Initialize (if necessary) and return the Twig environment. - * - * @return \Twig_Environment - */ - public function create() - { - if ($this->_environment === null) { - $this->_environment = new \Twig_Environment($this->_loader); - try { - $precompiledTmpltDir = $this->_dir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . '/twig_templates'; - $this->_filesystem->createDirectory($precompiledTmpltDir); - $this->_environment->setCache($precompiledTmpltDir); - } catch (\Magento\Filesystem\FilesystemException $e) { - // Twig will just run slowly but not worth stopping Magento for it - $this->_logger->logException($e); - } catch (\InvalidArgumentException $e) { - // Can happen if path isn't found, shouldn't stop Magento - $this->_logger->logException($e); - } - $this->_environment->enableStrictVariables(); - $this->_environment->addExtension(new \Twig_Extension_Escaper('html')); - $this->_environment->addExtension(new \Twig_Extension_Optimizer(1)); - $this->_environment->addExtension($this->_extension); - $this->_environmentInitialized = true; - } - return $this->_environment; - } -} diff --git a/app/code/Magento/Core/Model/TemplateEngine/Twig/Extension.php b/app/code/Magento/Core/Model/TemplateEngine/Twig/Extension.php deleted file mode 100644 index c87f4899f14..00000000000 --- a/app/code/Magento/Core/Model/TemplateEngine/Twig/Extension.php +++ /dev/null @@ -1,118 +0,0 @@ -<?php -/** - * A twig extension for Magento - * - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\Core\Model\TemplateEngine\Twig; - -class Extension extends \Twig_Extension -{ - const MAGENTO = 'Magento'; - - /** - * @var \Magento\Core\Model\TemplateEngine\Twig\LayoutFunctions - */ - protected $_layoutFunctions; - - /** - * @var \Magento\Core\Model\TemplateEngine\Twig\CommonFunctions - */ - protected $_commonFunctions; - - /** - * @var \Magento\Core\Model\TemplateEngine\BlockTrackerInterface - */ - private $_blockTracker; - - /** - * Create new Extension - * - * @param \Magento\Core\Model\TemplateEngine\Twig\CommonFunctions $commonFunctions - * @param \Magento\Core\Model\TemplateEngine\Twig\LayoutFunctions $layoutFunctions - */ - public function __construct( - \Magento\Core\Model\TemplateEngine\Twig\CommonFunctions $commonFunctions, - \Magento\Core\Model\TemplateEngine\Twig\LayoutFunctions $layoutFunctions - ) { - $this->_commonFunctions = $commonFunctions; - $this->_layoutFunctions = $layoutFunctions; - } - - /** - * Define the name of the extension to be used in Twig environment - * - * @return string - */ - public function getName() - { - return self::MAGENTO; - } - - /** - * Returns a list of global functions to add to the existing list. - * - * @return array An array of global functions - */ - public function getFunctions() - { - $functions = $this->_commonFunctions->getFunctions(); - $functions = array_merge($functions, $this->_layoutFunctions->getFunctions()); - - return $functions; - } - - /** - * Returns a list of filters to add to the existing list. - * - * @return array An array of filters - */ - public function getFilters() - { - $options = array('is_safe' => array('html')); - return array( - new \Twig_SimpleFilter('translate', array($this, 'translate'), $options), - ); - } - - /** - * Translate block sentence - * - * @return string - */ - public function translate() - { - return call_user_func_array('__', func_get_args()); - } - - /** - * Sets the block tracker - * - * @param \Magento\Core\Model\TemplateEngine\BlockTrackerInterface $blockTracker - */ - public function setBlockTracker(\Magento\Core\Model\TemplateEngine\BlockTrackerInterface $blockTracker) - { - $this->_blockTracker = $blockTracker; - // Need to inject this dependency at runtime to avoid cyclical dependency - $this->_layoutFunctions->setBlockTracker($blockTracker); - } -} diff --git a/app/code/Magento/Core/Model/TemplateEngine/Twig/FullFileName.php b/app/code/Magento/Core/Model/TemplateEngine/Twig/FullFileName.php deleted file mode 100644 index 997d6a6f6fd..00000000000 --- a/app/code/Magento/Core/Model/TemplateEngine/Twig/FullFileName.php +++ /dev/null @@ -1,121 +0,0 @@ -<?php -/** - * Custom Loader that gets the contents of the file name from provided absolute path - * - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\Core\Model\TemplateEngine\Twig; - -class FullFileName implements \Twig_LoaderInterface, \Twig_ExistsLoaderInterface -{ - /** - * Caches the exists of a template so that we don't have to check the disk every time. - * - * @var array - */ - private $_existsCache = array(); - - /** - * @var \Magento\Core\Model\App\State - */ - private $_appState; - - /** - * Create new instance of FullFileName loader - * - * @param \Magento\Core\Model\App\State - */ - public function __construct(\Magento\Core\Model\App\State $appState) - { - $this->_appState = $appState; - } - - - /** - * Gets the source code of a template, given its name. - * - * @param string $name The name of the template to load - * @return string The template source code - * @throws \Twig_Error_Loader When $name is not found - */ - public function getSource($name) - { - $return = file_get_contents($name); - if ($return === false) { - throw new \Twig_Error_Loader(sprintf('Unable to find "%s".', $name)); - } - // add to cache - $this->exists($name); - return $return; - } - - /** - * Gets the cache key to use for the cache for a given template name. - * - * @param string $name The name of the template to load - * @return string The cache key - */ - public function getCacheKey($name) - { - return $name; - } - - /** - * Returns true if the template is still fresh. - * - * @param string $name The template name - * @param int $time The last modification time of the cached template - * @return Boolean true if the template is fresh, false otherwise - * @throws \Twig_Error_Loader When last-modified time of $name cannot be found - */ - public function isFresh($name, $time) - { - if ($this->_appState->getMode() === \Magento\Core\Model\App\State::MODE_DEVELOPER) { - $lastModifiedTime = filemtime($name); - if ($lastModifiedTime === false) { - throw new \Twig_Error_Loader(sprintf('Could not get last-modified time for "%s".', $name)); - } - return $lastModifiedTime < $time; - } - - return true; - } - - /** - * Determines whether the template exists or not. - * - * Since the template name is interpreted as a fully-qualified path, - * this is equivalent to checking whether - * the file at the given location exists. - * - * @param string $name - * @return bool - * @throws \Twig_Error_Loader if $name is not a file - */ - public function exists($name) - { - if (!isset($this->_existsCache[$name])) { - $this->_existsCache[$name] = file_exists($name); - } - return $this->_existsCache[$name]; - } -} diff --git a/app/code/Magento/Core/Model/TemplateEngine/Twig/LayoutFunctions.php b/app/code/Magento/Core/Model/TemplateEngine/Twig/LayoutFunctions.php deleted file mode 100644 index 152dc3580db..00000000000 --- a/app/code/Magento/Core/Model/TemplateEngine/Twig/LayoutFunctions.php +++ /dev/null @@ -1,164 +0,0 @@ -<?php -/** - * Layout functions needed for twig extension - * - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\Core\Model\TemplateEngine\Twig; - -class LayoutFunctions -{ - - /** - * @var \Magento\Core\Model\Layout - */ - private $_layout; - - /** - * @var \Magento\Core\Model\TemplateEngine\BlockTrackerInterface - */ - private $_blockTracker; - - public function __construct( - \Magento\Core\Model\Layout $layout - ) { - $this->_layout = $layout; - } - - /** - * Sets the block tracker that is needed for dynamically determining the child html at runtime - * - * @param \Magento\Core\Model\TemplateEngine\BlockTrackerInterface $blockTracker - */ - public function setBlockTracker(\Magento\Core\Model\TemplateEngine\BlockTrackerInterface $blockTracker) - { - $this->_blockTracker = $blockTracker; - } - - /** - * Returns a list of global functions to add to the existing list. - * - * @return array An array of global functions - */ - public function getFunctions() - { - $options = array('is_safe' => array('html')); - return array( - new \Twig_SimpleFunction('getBlockData', array($this, 'getBlockData'), $options), - new \Twig_SimpleFunction('getMessagesHtml', - array($this->_layout->getMessagesBlock(), 'getGroupedHtml'), $options), - new \Twig_SimpleFunction('executeRenderer', array($this->_layout, 'executeRenderer'), $options), - new \Twig_SimpleFunction('getChildHtml', array($this, 'getChildHtml'), $options), - new \Twig_SimpleFunction('getGroupChildNames', array($this, 'getGroupChildNames'), $options), - new \Twig_SimpleFunction('getBlockNameByAlias', array($this, 'getBlockNameByAlias'), $options), - new \Twig_SimpleFunction('createBlock', array($this->_layout, 'createBlock')), - new \Twig_SimpleFunction('getElementAlias', array($this->_layout, 'getElementAlias'), $options), - new \Twig_SimpleFunction('renderElement', array($this->_layout, 'renderElement'), $options), - ); - } - - /** - * Returns data assigned to the block instance - * - * @param $name - * @param string $key - * @return mixed|null - */ - public function getBlockData($name, $key = '') - { - $block = $this->_layout->getBlock($name); - if ($block) { - return $block->getData($key); - } - return null; - } - - /** - * Render Block defined by the alias from the parent block defined by the name - * - * @param $name - * @param string $alias - * @param bool $useCache - * @return string - */ - public function renderBlock($name, $alias = '', $useCache = true) - { - $out = ''; - if ($alias) { - $childName = $this->_layout->getChildName($name, $alias); - if ($childName) { - $out = $this->_layout->renderElement($childName, $useCache); - } - } else { - foreach ($this->_layout->getChildNames($name) as $child) { - $out .= $this->_layout->renderElement($child, $useCache); - } - } - - return $out; - } - - /** - * Render children of the current block defined by alias - * - * @param string $alias - * @param bool $useCache - * @return string - */ - public function getChildHtml($alias = '', $useCache = true) - { - $name = $this->_blockTracker->getCurrentBlock()->getNameInLayout(); - return $this->renderBlock($name, $alias, $useCache); - } - - /** - * Get a group of child blocks - * - * Returns an array of <alias> => <block> - * or an array of <alias> => <callback_result> - * The callback currently supports only $this methods and passes the alias as parameter - * - * @param string $parentName - * @param string $groupName - * @return array - */ - public function getGroupChildNames($parentName, $groupName) - { - return $this->_layout->getGroupChildNames($parentName, $groupName); - } - - /** - * Get name of the block defined by alias in context of parent block defined by name - * - * @param $parentName - * @param $alias - * @return bool|string - */ - public function getBlockNameByAlias($parentName, $alias) - { - $name = $this->_layout->getChildName($parentName, $alias); - if (!$name) { - return ''; - } - return $name; - } -} diff --git a/app/code/Magento/Core/Model/Theme.php b/app/code/Magento/Core/Model/Theme.php index 3a462a139d9..38fc8e2c318 100644 --- a/app/code/Magento/Core/Model/Theme.php +++ b/app/code/Magento/Core/Model/Theme.php @@ -29,7 +29,7 @@ namespace Magento\Core\Model; /** * Theme model class * - * @method \Magento\Core\Model\Theme save() + * @method \Magento\View\Design\ThemeInterface save() * @method string getPackageCode() * @method string getParentThemePath() * @method string getParentId() @@ -41,22 +41,22 @@ namespace Magento\Core\Model; * @method int getType() * @method array getAssignedStores() * @method \Magento\Core\Model\Resource\Theme\Collection getCollection() - * @method \Magento\Core\Model\Theme setAssignedStores(array $stores) - * @method \Magento\Core\Model\Theme addData(array $data) - * @method \Magento\Core\Model\Theme setParentId(int $id) - * @method \Magento\Core\Model\Theme setParentTheme($parentTheme) - * @method \Magento\Core\Model\Theme setPackageCode(string $packageCode) - * @method \Magento\Core\Model\Theme setThemeCode(string $themeCode) - * @method \Magento\Core\Model\Theme setThemePath(string $themePath) - * @method \Magento\Core\Model\Theme setThemeVersion(string $themeVersion) - * @method \Magento\Core\Model\Theme setArea(string $area) - * @method \Magento\Core\Model\Theme setThemeTitle(string $themeTitle) - * @method \Magento\Core\Model\Theme setType(int $type) - * @method \Magento\Core\Model\Theme setCode(string $code) + * @method \Magento\View\Design\ThemeInterface setAssignedStores(array $stores) + * @method \Magento\View\Design\ThemeInterface addData(array $data) + * @method \Magento\View\Design\ThemeInterface setParentId(int $id) + * @method \Magento\View\Design\ThemeInterface setParentTheme($parentTheme) + * @method \Magento\View\Design\ThemeInterface setPackageCode(string $packageCode) + * @method \Magento\View\Design\ThemeInterface setThemeCode(string $themeCode) + * @method \Magento\View\Design\ThemeInterface setThemePath(string $themePath) + * @method \Magento\View\Design\ThemeInterface setThemeVersion(string $themeVersion) + * @method \Magento\View\Design\ThemeInterface setArea(string $area) + * @method \Magento\View\Design\ThemeInterface setThemeTitle(string $themeTitle) + * @method \Magento\View\Design\ThemeInterface setType(int $type) + * @method \Magento\View\Design\ThemeInterface setCode(string $code) * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class Theme extends \Magento\Core\Model\AbstractModel implements \Magento\Core\Model\ThemeInterface +class Theme extends \Magento\Core\Model\AbstractModel implements \Magento\View\Design\ThemeInterface { /**#@+ * Theme types group diff --git a/app/code/Magento/Core/Model/Theme/Collection.php b/app/code/Magento/Core/Model/Theme/Collection.php index 3599b97bbe2..0308169d709 100644 --- a/app/code/Magento/Core/Model/Theme/Collection.php +++ b/app/code/Magento/Core/Model/Theme/Collection.php @@ -59,17 +59,17 @@ class Collection extends \Magento\Data\Collection /** * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param \Magento\Core\Model\EntityFactory $entityFactory */ public function __construct( \Magento\Filesystem $filesystem, - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, \Magento\Core\Model\EntityFactory $entityFactory ) { parent::__construct($entityFactory); $this->_filesystem = $filesystem; - $this->setBaseDir($dirs->getDir(\Magento\Core\Model\Dir::THEMES)); + $this->setBaseDir($dirs->getDir(\Magento\App\Dir::THEMES)); } /** @@ -188,11 +188,11 @@ class Collection extends \Magento\Data\Collection protected function _updateRelations() { $themeItems = $this->getItems(); - /** @var $theme \Magento\Object|\Magento\Core\Model\ThemeInterface */ + /** @var $theme \Magento\Object|\Magento\View\Design\ThemeInterface */ foreach ($themeItems as $theme) { $parentThemePath = $theme->getData('parent_theme_path'); if ($parentThemePath) { - $themePath = $theme->getArea() . \Magento\Core\Model\ThemeInterface::PATH_SEPARATOR . $parentThemePath; + $themePath = $theme->getArea() . \Magento\View\Design\ThemeInterface::PATH_SEPARATOR . $parentThemePath; if (isset($themeItems[$themePath])) { $theme->setParentTheme($themeItems[$themePath]); } @@ -277,7 +277,7 @@ class Collection extends \Magento\Data\Collection protected function _renderFilters() { $filters = $this->getFilter(array()); - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($this->getItems() as $itemKey => $theme) { $removeItem = false; foreach ($filters as $filter) { @@ -340,10 +340,10 @@ class Collection extends \Magento\Data\Collection /** * Checks that a theme present in filesystem collection * - * @param \Magento\Core\Model\ThemeInterface $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return bool */ - public function hasTheme(\Magento\Core\Model\ThemeInterface $theme) + public function hasTheme(\Magento\View\Design\ThemeInterface $theme) { $themeItems = $this->getItems(); return $theme->getThemePath() && isset($themeItems[$theme->getFullPath()]); diff --git a/app/code/Magento/Core/Model/Theme/CopyService.php b/app/code/Magento/Core/Model/Theme/CopyService.php index 718e309013c..8af315c0e13 100644 --- a/app/code/Magento/Core/Model/Theme/CopyService.php +++ b/app/code/Magento/Core/Model/Theme/CopyService.php @@ -52,7 +52,7 @@ class CopyService protected $_updateFactory; /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -66,7 +66,7 @@ class CopyService * @param \Magento\Core\Model\Theme\FileFactory $fileFactory * @param \Magento\Core\Model\Layout\Link $link * @param \Magento\Core\Model\Layout\UpdateFactory $updateFactory - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Theme\Customization\Path $customization */ public function __construct( @@ -74,7 +74,7 @@ class CopyService \Magento\Core\Model\Theme\FileFactory $fileFactory, \Magento\Core\Model\Layout\Link $link, \Magento\Core\Model\Layout\UpdateFactory $updateFactory, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Theme\Customization\Path $customization ) { $this->_filesystem = $filesystem; @@ -88,10 +88,10 @@ class CopyService /** * Copy customizations from one theme to another * - * @param \Magento\Core\Model\Theme $source - * @param \Magento\Core\Model\Theme $target + * @param \Magento\View\Design\ThemeInterface $source + * @param \Magento\View\Design\ThemeInterface $target */ - public function copy(\Magento\Core\Model\Theme $source, \Magento\Core\Model\Theme $target) + public function copy(\Magento\View\Design\ThemeInterface $source, \Magento\View\Design\ThemeInterface $target) { $this->_copyDatabaseCustomization($source, $target); $this->_copyLayoutCustomization($source, $target); @@ -101,11 +101,13 @@ class CopyService /** * Copy customizations stored in a database from one theme to another, overriding existing data * - * @param \Magento\Core\Model\Theme $source - * @param \Magento\Core\Model\Theme $target + * @param \Magento\View\Design\ThemeInterface $source + * @param \Magento\View\Design\ThemeInterface $target */ - protected function _copyDatabaseCustomization(\Magento\Core\Model\Theme $source, \Magento\Core\Model\Theme $target) - { + protected function _copyDatabaseCustomization( + \Magento\View\Design\ThemeInterface $source, + \Magento\View\Design\ThemeInterface $target + ) { /** @var $themeFile \Magento\Core\Model\Theme\File */ foreach ($target->getCustomization()->getFiles() as $themeFile) { $themeFile->delete(); @@ -130,11 +132,13 @@ class CopyService /** * Add layout links to general layout updates for themes * - * @param \Magento\Core\Model\Theme $source - * @param \Magento\Core\Model\Theme $target + * @param \Magento\View\Design\ThemeInterface $source + * @param \Magento\View\Design\ThemeInterface $target */ - protected function _copyLayoutCustomization(\Magento\Core\Model\Theme $source, \Magento\Core\Model\Theme $target) - { + protected function _copyLayoutCustomization( + \Magento\View\Design\ThemeInterface $source, + \Magento\View\Design\ThemeInterface $target + ) { $update = $this->_updateFactory->create(); /** @var $targetUpdates \Magento\Core\Model\Resource\Layout\Update\Collection */ $targetUpdates = $update->getCollection(); @@ -163,12 +167,12 @@ class CopyService /** * Copy customizations stored in a file system from one theme to another, overriding existing data * - * @param \Magento\Core\Model\Theme $source - * @param \Magento\Core\Model\Theme $target + * @param \Magento\View\Design\ThemeInterface $source + * @param \Magento\View\Design\ThemeInterface $target */ protected function _copyFilesystemCustomization( - \Magento\Core\Model\Theme $source, - \Magento\Core\Model\Theme $target + \Magento\View\Design\ThemeInterface $source, + \Magento\View\Design\ThemeInterface $target ) { $sourcePath = $this->_customizationPath->getCustomizationPath($source); $targetPath = $this->_customizationPath->getCustomizationPath($target); diff --git a/app/code/Magento/Core/Model/Theme/Customization.php b/app/code/Magento/Core/Model/Theme/Customization.php index 2c6d7d65eff..e0bd1b786a0 100644 --- a/app/code/Magento/Core/Model/Theme/Customization.php +++ b/app/code/Magento/Core/Model/Theme/Customization.php @@ -59,12 +59,12 @@ class Customization implements \Magento\Core\Model\Theme\CustomizationInterface /** * @param \Magento\Core\Model\Resource\Theme\File\CollectionFactory $fileFactory * @param \Magento\Core\Model\Theme\Customization\Path $customizationPath - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme */ public function __construct( \Magento\Core\Model\Resource\Theme\File\CollectionFactory $fileFactory, \Magento\Core\Model\Theme\Customization\Path $customizationPath, - \Magento\Core\Model\Theme $theme = null + \Magento\View\Design\ThemeInterface $theme = null ) { $this->_fileFactory = $fileFactory; $this->_customizationPath = $customizationPath; diff --git a/app/code/Magento/Core/Model/Theme/Customization/Path.php b/app/code/Magento/Core/Model/Theme/Customization/Path.php index ec49ab44db9..0addfb608d3 100644 --- a/app/code/Magento/Core/Model/Theme/Customization/Path.php +++ b/app/code/Magento/Core/Model/Theme/Customization/Path.php @@ -37,16 +37,16 @@ class Path const DIR_NAME = 'theme_customization'; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; /** * Initialize dependencies * - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir */ - public function __construct(\Magento\Core\Model\Dir $dir) + public function __construct(\Magento\App\Dir $dir) { $this->_dir = $dir; } @@ -54,14 +54,14 @@ class Path /** * Returns customization absolute path * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return string|null */ - public function getCustomizationPath(\Magento\Core\Model\Theme $theme) + public function getCustomizationPath(\Magento\View\Design\ThemeInterface $theme) { $path = null; if ($theme->getId()) { - $path = $this->_dir->getDir(\Magento\Core\Model\Dir::MEDIA) + $path = $this->_dir->getDir(\Magento\App\Dir::MEDIA) . DIRECTORY_SEPARATOR . self::DIR_NAME . DIRECTORY_SEPARATOR . $theme->getId(); } @@ -71,14 +71,14 @@ class Path /** * Get directory where themes files are stored * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return string|null */ - public function getThemeFilesPath(\Magento\Core\Model\Theme $theme) + public function getThemeFilesPath(\Magento\View\Design\ThemeInterface $theme) { $path = null; if ($theme->getFullPath()) { - $physicalThemesDir = $this->_dir->getDir(\Magento\Core\Model\Dir::THEMES); + $physicalThemesDir = $this->_dir->getDir(\Magento\App\Dir::THEMES); $path = \Magento\Filesystem::fixSeparator($physicalThemesDir . DIRECTORY_SEPARATOR . $theme->getFullPath()); } return $path; @@ -87,10 +87,10 @@ class Path /** * Get path to custom view configuration file * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return string|null */ - public function getCustomViewConfigPath(\Magento\Core\Model\Theme $theme) + public function getCustomViewConfigPath(\Magento\View\Design\ThemeInterface $theme) { $path = null; if ($theme->getId()) { diff --git a/app/code/Magento/Core/Model/Theme/Domain/Factory.php b/app/code/Magento/Core/Model/Theme/Domain/Factory.php index bf4f93a1a7d..6353cc6a7d9 100644 --- a/app/code/Magento/Core/Model/Theme/Domain/Factory.php +++ b/app/code/Magento/Core/Model/Theme/Domain/Factory.php @@ -56,11 +56,11 @@ class Factory /** * Create new config object * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return \Magento\Core\Model\Theme\Domain\Virtual|\Magento\Core\Model\Theme\Domain\Staging * @throws \Magento\Core\Exception */ - public function create(\Magento\Core\Model\Theme $theme) + public function create(\Magento\View\Design\ThemeInterface $theme) { if (!isset($this->_types[$theme->getType()])) { throw new \Magento\Core\Exception(sprintf('Invalid type of theme domain model "%s"', $theme->getType())); diff --git a/app/code/Magento/Core/Model/Theme/Domain/Physical.php b/app/code/Magento/Core/Model/Theme/Domain/Physical.php index 427f1d4bba1..3cd53635583 100644 --- a/app/code/Magento/Core/Model/Theme/Domain/Physical.php +++ b/app/code/Magento/Core/Model/Theme/Domain/Physical.php @@ -54,13 +54,13 @@ class Physical protected $_themeCollection; /** - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @param \Magento\Core\Model\ThemeFactory $themeFactory * @param \Magento\Core\Model\Theme\CopyService $themeCopyService * @param \Magento\Core\Model\Resource\Theme\Collection $themeCollection */ public function __construct( - \Magento\Core\Model\Theme $theme, + \Magento\View\Design\ThemeInterface $theme, \Magento\Core\Model\ThemeFactory $themeFactory, \Magento\Core\Model\Theme\CopyService $themeCopyService, \Magento\Core\Model\Resource\Theme\Collection $themeCollection @@ -74,7 +74,7 @@ class Physical /** * Create theme customization * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return \Magento\Core\Model\Theme */ public function createVirtualTheme($theme) @@ -86,7 +86,7 @@ class Physical $themeData['theme_title'] = $this->_getVirtualThemeTitle($theme); $themeData['type'] = \Magento\Core\Model\Theme::TYPE_VIRTUAL; - /** @var $themeCustomization \Magento\Core\Model\Theme */ + /** @var $themeCustomization \Magento\View\Design\ThemeInterface */ $themeCustomization = $this->_themeFactory->create()->setData($themeData); $themeCustomization->getThemeImage()->createPreviewImageCopy($theme->getPreviewImage()); $themeCustomization->save(); @@ -99,7 +99,7 @@ class Physical /** * Get virtual theme title * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return string */ protected function _getVirtualThemeTitle($theme) diff --git a/app/code/Magento/Core/Model/Theme/Domain/Staging.php b/app/code/Magento/Core/Model/Theme/Domain/Staging.php index f43153fc5e8..f1302a2d0ce 100644 --- a/app/code/Magento/Core/Model/Theme/Domain/Staging.php +++ b/app/code/Magento/Core/Model/Theme/Domain/Staging.php @@ -44,11 +44,11 @@ class Staging protected $_themeCopyService; /** - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @param \Magento\Core\Model\Theme\CopyService $themeCopyService */ public function __construct( - \Magento\Core\Model\Theme $theme, + \Magento\View\Design\ThemeInterface $theme, \Magento\Core\Model\Theme\CopyService $themeCopyService ) { $this->_theme = $theme; diff --git a/app/code/Magento/Core/Model/Theme/Domain/Virtual.php b/app/code/Magento/Core/Model/Theme/Domain/Virtual.php index 29600e46f1b..491a5f07087 100644 --- a/app/code/Magento/Core/Model/Theme/Domain/Virtual.php +++ b/app/code/Magento/Core/Model/Theme/Domain/Virtual.php @@ -63,13 +63,13 @@ class Virtual protected $_customizationConfig; /** - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @param \Magento\Core\Model\ThemeFactory $themeFactory * @param \Magento\Core\Model\Theme\CopyService $themeCopyService * @param \Magento\Theme\Model\Config\Customization $customizationConfig */ public function __construct( - \Magento\Core\Model\Theme $theme, + \Magento\View\Design\ThemeInterface $theme, \Magento\Core\Model\ThemeFactory $themeFactory, \Magento\Core\Model\Theme\CopyService $themeCopyService, \Magento\Theme\Model\Config\Customization $customizationConfig @@ -104,7 +104,7 @@ class Virtual */ public function getPhysicalTheme() { - /** @var $parentTheme \Magento\Core\Model\Theme */ + /** @var $parentTheme \Magento\View\Design\ThemeInterface */ $parentTheme = $this->_theme->getParentTheme(); while ($parentTheme && !$parentTheme->isPhysical()) { $parentTheme = $parentTheme->getParentTheme(); diff --git a/app/code/Magento/Core/Model/Theme/File.php b/app/code/Magento/Core/Model/Theme/File.php index 067f18d71fa..c7fb466d569 100644 --- a/app/code/Magento/Core/Model/Theme/File.php +++ b/app/code/Magento/Core/Model/Theme/File.php @@ -126,7 +126,7 @@ class File extends \Magento\Core\Model\AbstractModel /** * {@inheritdoc} */ - public function setTheme(\Magento\Core\Model\Theme $theme) + public function setTheme(\Magento\View\Design\ThemeInterface $theme) { $this->_theme = $theme; $this->setData('theme_id', $theme->getId()); diff --git a/app/code/Magento/Core/Model/Theme/FileInterface.php b/app/code/Magento/Core/Model/Theme/FileInterface.php index 09374c19d21..71de934f586 100644 --- a/app/code/Magento/Core/Model/Theme/FileInterface.php +++ b/app/code/Magento/Core/Model/Theme/FileInterface.php @@ -49,10 +49,10 @@ interface FileInterface /** * Attaches selected theme to current file * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return $this */ - public function setTheme(\Magento\Core\Model\Theme $theme); + public function setTheme(\Magento\View\Design\ThemeInterface $theme); /** * Get theme model diff --git a/app/code/Magento/Core/Model/Theme/FlyweightFactory.php b/app/code/Magento/Core/Model/Theme/FlyweightFactory.php index 6524b43832a..7c5ec567b8a 100644 --- a/app/code/Magento/Core/Model/Theme/FlyweightFactory.php +++ b/app/code/Magento/Core/Model/Theme/FlyweightFactory.php @@ -64,7 +64,7 @@ class FlyweightFactory * @return \Magento\Core\Model\Theme|null * @throws \InvalidArgumentException */ - public function create($themeKey, $area = \Magento\Core\Model\View\DesignInterface::DEFAULT_AREA) + public function create($themeKey, $area = \Magento\View\DesignInterface::DEFAULT_AREA) { if (is_numeric($themeKey)) { $themeModel = $this->_loadById($themeKey); @@ -92,8 +92,8 @@ class FlyweightFactory return $this->_themes[$themeId]; } - /** @var $themeModel \Magento\Core\Model\Theme */ - $themeModel = $this->_objectManager->create('Magento\Core\Model\Theme'); + /** @var $themeModel \Magento\View\Design\ThemeInterface */ + $themeModel = $this->_objectManager->create('Magento\View\Design\ThemeInterface'); $themeModel->load($themeId); return $themeModel; } @@ -107,7 +107,7 @@ class FlyweightFactory */ protected function _loadByPath($themePath, $area) { - $fullPath = $area . \Magento\Core\Model\ThemeInterface::PATH_SEPARATOR . $themePath; + $fullPath = $area . \Magento\View\Design\ThemeInterface::PATH_SEPARATOR . $themePath; if (isset($this->_themesByPath[$fullPath])) { return $this->_themesByPath[$fullPath]; } @@ -121,10 +121,10 @@ class FlyweightFactory /** * Add theme to shared collection * - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @return $this */ - protected function _addTheme(\Magento\Core\Model\Theme $themeModel) + protected function _addTheme(\Magento\View\Design\ThemeInterface $themeModel) { if ($themeModel->getId()) { $this->_themes[$themeModel->getId()] = $themeModel; diff --git a/app/code/Magento/Core/Model/Theme/Image.php b/app/code/Magento/Core/Model/Theme/Image.php index 1b36c85986d..19c0909655e 100644 --- a/app/code/Magento/Core/Model/Theme/Image.php +++ b/app/code/Magento/Core/Model/Theme/Image.php @@ -79,7 +79,7 @@ class Image * @param \Magento\Core\Model\Theme\Image\Uploader $uploader * @param \Magento\Core\Model\Theme\Image\Path $themeImagePath * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme */ public function __construct( \Magento\Filesystem $filesystem, @@ -87,7 +87,7 @@ class Image \Magento\Core\Model\Theme\Image\Uploader $uploader, \Magento\Core\Model\Theme\Image\Path $themeImagePath, \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Theme $theme = null + \Magento\View\Design\ThemeInterface $theme = null ) { $this->_filesystem = $filesystem; $this->_imageFactory = $imageFactory; diff --git a/app/code/Magento/Core/Model/Theme/Image/Path.php b/app/code/Magento/Core/Model/Theme/Image/Path.php index 7203ce50b64..9fc553dd6a7 100644 --- a/app/code/Magento/Core/Model/Theme/Image/Path.php +++ b/app/code/Magento/Core/Model/Theme/Image/Path.php @@ -42,7 +42,7 @@ class Path const DEFAULT_PREVIEW_IMAGE = 'Magento_Core::theme/default_preview.jpg'; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -59,12 +59,12 @@ class Path /** * Initialize dependencies * - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\View\Url $viewUrl * @param \Magento\Core\Model\StoreManager $storeManager */ public function __construct( - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Core\Model\View\Url $viewUrl, \Magento\Core\Model\StoreManager $storeManager ) { @@ -101,7 +101,7 @@ class Path */ public function getImagePreviewDirectory() { - return $this->_dir->getDir(\Magento\Core\Model\Dir::MEDIA) . DIRECTORY_SEPARATOR + return $this->_dir->getDir(\Magento\App\Dir::MEDIA) . DIRECTORY_SEPARATOR . str_replace('/', DIRECTORY_SEPARATOR, self::PREVIEW_DIRECTORY_PATH); } @@ -113,7 +113,7 @@ class Path public function getTemporaryDirectory() { return implode(DIRECTORY_SEPARATOR, array( - $this->_dir->getDir(\Magento\Core\Model\Dir::MEDIA), 'theme', 'origin' + $this->_dir->getDir(\Magento\App\Dir::MEDIA), 'theme', 'origin' )); } } diff --git a/app/code/Magento/Core/Model/Theme/Observer.php b/app/code/Magento/Core/Model/Theme/Observer.php index 21e2622a20d..c985b9bc41c 100644 --- a/app/code/Magento/Core/Model/Theme/Observer.php +++ b/app/code/Magento/Core/Model/Theme/Observer.php @@ -47,7 +47,7 @@ class Observer protected $_themeConfig; /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventDispatcher; @@ -55,13 +55,13 @@ class Observer * @param \Magento\Core\Model\Theme\ImageFactory $themeImageFactory * @param \Magento\Core\Model\Resource\Layout\Update\Collection $updateCollection * @param \Magento\Theme\Model\Config\Customization $themeConfig - * @param \Magento\Core\Model\Event\Manager $eventDispatcher + * @param \Magento\Event\ManagerInterface $eventDispatcher */ public function __construct( \Magento\Core\Model\Theme\ImageFactory $themeImageFactory, \Magento\Core\Model\Resource\Layout\Update\Collection $updateCollection, \Magento\Theme\Model\Config\Customization $themeConfig, - \Magento\Core\Model\Event\Manager $eventDispatcher + \Magento\Event\ManagerInterface $eventDispatcher ) { $this->_themeImageFactory = $themeImageFactory; $this->_updateCollection = $updateCollection; @@ -81,7 +81,7 @@ class Observer if ($theme instanceof \Magento\Core\Model\Theme) { return; } - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ if ($this->_themeConfig->isThemeAssignedToStore($theme)) { throw new \Magento\Core\Exception(__('Theme isn\'t deletable.')); } @@ -98,7 +98,7 @@ class Observer { $theme = $observer->getEvent()->getData('theme'); if ($theme instanceof \Magento\Core\Model\Theme) { - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ if ($this->_themeConfig->isThemeAssignedToStore($theme)) { $this->_eventDispatcher->dispatch('assigned_theme_changed', array('theme' => $this)); } diff --git a/app/code/Magento/Core/Model/Theme/Registration.php b/app/code/Magento/Core/Model/Theme/Registration.php index 6dbd31069e5..2e0d0a8a565 100644 --- a/app/code/Magento/Core/Model/Theme/Registration.php +++ b/app/code/Magento/Core/Model/Theme/Registration.php @@ -109,7 +109,7 @@ class Registration * Register theme and recursively all its ascendants * Second param is optional and is used to prevent circular references in inheritance chain * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @param array $inheritanceChain * @return \Magento\Core\Model\Theme\Collection * @throws \Magento\Core\Exception @@ -146,10 +146,10 @@ class Registration /** * Save preview image for theme * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return $this */ - protected function _savePreviewImage(\Magento\Core\Model\Theme $theme) + protected function _savePreviewImage(\Magento\View\Design\ThemeInterface $theme) { $themeDirectory = $theme->getCustomization()->getThemeFilesPath(); if (!$theme->getPreviewImage() || !$themeDirectory) { @@ -181,7 +181,7 @@ class Registration public function checkPhysicalThemes() { $themes = $this->_collectionFactory->create()->addTypeFilter(\Magento\Core\Model\Theme::TYPE_PHYSICAL); - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($themes as $theme) { if (!$this->_themeCollection->hasTheme($theme)) { $theme->setType(\Magento\Core\Model\Theme::TYPE_VIRTUAL)->save(); @@ -201,7 +201,7 @@ class Registration list($parentType, $childType) = $typesSequence; $collection = $this->_collectionFactory->create(); $collection->addTypeRelationFilter($parentType, $childType); - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($collection as $theme) { $parentId = $this->_getResetParentId($theme); if ($theme->getParentId() != $parentId) { @@ -215,10 +215,10 @@ class Registration /** * Reset parent themes by type * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return int|null */ - protected function _getResetParentId(\Magento\Core\Model\Theme $theme) + protected function _getResetParentId(\Magento\View\Design\ThemeInterface $theme) { $parentTheme = $theme->getParentTheme(); while ($parentTheme) { diff --git a/app/code/Magento/Core/Model/Translate.php b/app/code/Magento/Core/Model/Translate.php index 30338a4be86..ea8f4e757c7 100644 --- a/app/code/Magento/Core/Model/Translate.php +++ b/app/code/Magento/Core/Model/Translate.php @@ -139,7 +139,7 @@ class Translate protected $_localeHierarchy = array(); /** - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_viewDesign; @@ -164,7 +164,7 @@ class Translate protected $_placeholderRender; /** - * @var \Magento\Core\Model\ModuleList + * @var \Magento\App\ModuleList */ protected $_moduleList; @@ -189,13 +189,13 @@ class Translate protected $_app; /** - * @param \Magento\Core\Model\View\DesignInterface $viewDesign + * @param \Magento\View\DesignInterface $viewDesign * @param \Magento\Core\Model\Locale\Hierarchy\Config $config * @param \Magento\Core\Model\Translate\Factory $translateFactory * @param \Magento\Cache\FrontendInterface $cache * @param \Magento\Core\Model\View\FileSystem $viewFileSystem * @param \Magento\Phrase\Renderer\Placeholder $placeholderRender - * @param \Magento\Core\Model\ModuleList $moduleList + * @param \Magento\App\ModuleList $moduleList * @param \Magento\Core\Model\Config\Modules\Reader $modulesReader * @param \Magento\Core\Model\Config $coreConfig * @param \Magento\Core\Model\StoreManager $storeManager @@ -205,13 +205,13 @@ class Translate * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\View\DesignInterface $viewDesign, + \Magento\View\DesignInterface $viewDesign, \Magento\Core\Model\Locale\Hierarchy\Config $config, \Magento\Core\Model\Translate\Factory $translateFactory, \Magento\Cache\FrontendInterface $cache, \Magento\Core\Model\View\FileSystem $viewFileSystem, \Magento\Phrase\Renderer\Placeholder $placeholderRender, - \Magento\Core\Model\ModuleList $moduleList, + \Magento\App\ModuleList $moduleList, \Magento\Core\Model\Config\Modules\Reader $modulesReader, \Magento\Core\Model\Config $coreConfig, \Magento\Core\Model\StoreManager $storeManager, @@ -474,7 +474,7 @@ class Translate */ protected function _getModuleTranslationFile($moduleName, $locale) { - $file = $this->_modulesReader->getModuleDir(\Magento\Core\Model\Dir::LOCALE, $moduleName); + $file = $this->_modulesReader->getModuleDir(\Magento\App\Dir::LOCALE, $moduleName); $file .= DS . $locale . '.csv'; return $file; } @@ -487,7 +487,7 @@ class Translate */ protected function _getThemeTranslationFile($locale) { - return $this->_viewFileSystem->getFilename(\Magento\Core\Model\Dir::LOCALE . DS . $locale . '.csv'); + return $this->_viewFileSystem->getFilename(\Magento\App\Dir::LOCALE . DS . $locale . '.csv'); } /** diff --git a/app/code/Magento/Core/Model/Translate/Inline.php b/app/code/Magento/Core/Model/Translate/Inline.php index 5e4b5a434e5..ec89a025037 100644 --- a/app/code/Magento/Core/Model/Translate/Inline.php +++ b/app/code/Magento/Core/Model/Translate/Inline.php @@ -73,7 +73,7 @@ class Inline implements \Magento\Core\Model\Translate\InlineInterface protected $_url; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -87,11 +87,11 @@ class Inline implements \Magento\Core\Model\Translate\InlineInterface /** * Initialize inline translation model * - * @param \Magento\Core\Model\Translate\InlineParser $parser + * @param InlineParser $parser * @param \Magento\Core\Model\Translate $translate * @param \Magento\Backend\Model\Url $backendUrl * @param \Magento\Core\Model\Url $url - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @param \Magento\Core\Model\Store\Config $coreStoreConfig */ public function __construct( @@ -99,7 +99,7 @@ class Inline implements \Magento\Core\Model\Translate\InlineInterface \Magento\Core\Model\Translate $translate, \Magento\Backend\Model\Url $backendUrl, \Magento\Core\Model\Url $url, - \Magento\Core\Model\Layout $layout, + \Magento\View\LayoutInterface $layout, \Magento\Core\Model\Store\Config $coreStoreConfig ) { $this->_coreStoreConfig = $coreStoreConfig; diff --git a/app/code/Magento/Core/Model/Translate/InlineParser.php b/app/code/Magento/Core/Model/Translate/InlineParser.php index 7541a7d1750..95911821938 100644 --- a/app/code/Magento/Core/Model/Translate/InlineParser.php +++ b/app/code/Magento/Core/Model/Translate/InlineParser.php @@ -125,7 +125,7 @@ class InlineParser ); /** - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_design; @@ -154,13 +154,13 @@ class InlineParser * * @param \Magento\Core\Model\Resource\Translate\String $resource * @param \Magento\Core\Model\StoreManager $storeManager - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Helper\Data $helper * @param \Zend_Filter_Interface $inputFilter */ public function __construct( \Magento\Core\Model\Resource\Translate\String $resource, - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Helper\Data $helper, \Magento\Core\Model\StoreManager $storeManager, \Zend_Filter_Interface $inputFilter @@ -173,7 +173,7 @@ class InlineParser } /** - * @return \Magento\Core\Model\View\DesignInterface + * @return \Magento\View\DesignInterface */ public function getDesignPackage() { diff --git a/app/code/Magento/Core/Model/Url.php b/app/code/Magento/Core/Model/Url.php index 207c27abb87..6b458f92202 100644 --- a/app/code/Magento/Core/Model/Url.php +++ b/app/code/Magento/Core/Model/Url.php @@ -78,7 +78,12 @@ */ namespace Magento\Core\Model; -class Url extends \Magento\Object implements \Magento\Core\Model\UrlInterface +use Magento\Core\Model\App; +use Magento\Core\Model\Session; +use Magento\Core\Model\Store; +use Magento\Core\Model\StoreManager; + +class Url extends \Magento\Object implements \Magento\UrlInterface { /** * Configuration data cache @@ -106,9 +111,9 @@ class Url extends \Magento\Object implements \Magento\Core\Model\UrlInterface ); /** - * Controller request object + * Request instance * - * @var \Zend_Controller_Request_Http + * @var \Magento\App\RequestInterface */ protected $_request; @@ -154,21 +159,27 @@ class Url extends \Magento\Object implements \Magento\Core\Model\UrlInterface protected $_session; /** - * Constructor - * - * By default is looking for first argument as array and assigns it as object - * attributes This behavior may change in child classes + * Router list * - * @param \Magento\Core\Model\Url\SecurityInfoInterface $urlSecurityInfo - * @param \Magento\Core\Model\Store\Config $coreStoreConfig + * @var \Magento\App\RouterListInterface + */ + protected $_routerList; + + /** + * @param \Magento\App\RouterListInterface $routerList + * @param \Magento\App\RequestInterface $request + * @param Url\SecurityInfoInterface $urlSecurityInfo + * @param Store\Config $coreStoreConfig * @param \Magento\Core\Helper\Data $coreData - * @param \Magento\Core\Model\App $app - * @param \Magento\Core\Model\StoreManager $storeManager - * @param \Magento\Core\Model\Session $session + * @param App $app + * @param StoreManager $storeManager + * @param Session $session * @param array $data */ public function __construct( - \Magento\Core\Model\Url\SecurityInfoInterface $urlSecurityInfo, + \Magento\App\RouterListInterface $routerList, + \Magento\App\RequestInterface $request, + Url\SecurityInfoInterface $urlSecurityInfo, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Helper\Data $coreData, \Magento\Core\Model\App $app, @@ -176,6 +187,8 @@ class Url extends \Magento\Object implements \Magento\Core\Model\UrlInterface \Magento\Core\Model\Session $session, array $data = array() ) { + $this->_request = $request; + $this->_routerList = $routerList; $this->_urlSecurityInfo = $urlSecurityInfo; $this->_coreStoreConfig = $coreStoreConfig; $this->_coreData = $coreData; @@ -325,10 +338,10 @@ class Url extends \Magento\Object implements \Magento\Core\Model\UrlInterface /** * Set request * - * @param \Zend_Controller_Request_Http $request + * @param \Magento\App\RequestInterface $request * @return \Magento\Core\Model\Url */ - public function setRequest(\Zend_Controller_Request_Http $request) + public function setRequest(\Magento\App\RequestInterface $request) { $this->_request = $request; return $this; @@ -337,13 +350,10 @@ class Url extends \Magento\Object implements \Magento\Core\Model\UrlInterface /** * Zend request object * - * @return \Magento\Core\Controller\Request\Http + * @return \Magento\App\RequestInterface */ public function getRequest() { - if (!$this->_request) { - $this->_request = $this->_app->getRequest(); - } return $this->_request; } @@ -537,7 +547,7 @@ class Url extends \Magento\Object implements \Magento\Core\Model\UrlInterface public function getRoutePath($routeParams = array()) { if (!$this->hasData('route_path')) { - $routePath = $this->getRequest()->getAlias(\Magento\Core\Model\Url\Rewrite::REWRITE_REQUEST_PATH_ALIAS); + $routePath = $this->getRequest()->getAlias(Url\Rewrite::REWRITE_REQUEST_PATH_ALIAS); if (!empty($routeParams['_use_rewrite']) && ($routePath !== null)) { $this->setData('route_path', $routePath); return $routePath; @@ -587,7 +597,7 @@ class Url extends \Magento\Object implements \Magento\Core\Model\UrlInterface { if (!$this->hasData('route_front_name')) { $routeId = $this->getRouteName(); - $router = $this->_app->getFrontController()->getRouterList()->getRouterByRoute($routeId); + $router = $this->_routerList->getRouterByRoute($routeId); $frontName = $router->getFrontNameByRoute($routeId); $this->setRouteFrontName($frontName); @@ -1192,7 +1202,7 @@ class Url extends \Magento\Object implements \Magento\Core\Model\UrlInterface { $key = 'use_session_id_for_url_' . (int) $secure; if (is_null($this->getData($key))) { - $httpHost = $this->_app->getFrontController()->getRequest()->getHttpHost(); + $httpHost = $this->_request->getHttpHost(); $urlHost = parse_url($this->getStore()->getBaseUrl(\Magento\Core\Model\Store::URL_TYPE_LINK, $secure), PHP_URL_HOST); diff --git a/app/code/Magento/Core/Model/Url/Rewrite.php b/app/code/Magento/Core/Model/Url/Rewrite.php index 67ca0c0fdd8..313ea3ac05a 100644 --- a/app/code/Magento/Core/Model/Url/Rewrite.php +++ b/app/code/Magento/Core/Model/Url/Rewrite.php @@ -81,7 +81,7 @@ class Rewrite extends \Magento\Core\Model\AbstractModel protected $_app; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; @@ -95,7 +95,7 @@ class Rewrite extends \Magento\Core\Model\AbstractModel * @param \Magento\Core\Model\Registry $registry * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\App $app - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param \Magento\Data\Collection\Db $resourceCollection @@ -106,7 +106,7 @@ class Rewrite extends \Magento\Core\Model\AbstractModel \Magento\Core\Model\Registry $registry, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\App $app, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Resource\AbstractResource $resource = null, \Magento\Data\Collection\Db $resourceCollection = null, @@ -240,14 +240,14 @@ class Rewrite extends \Magento\Core\Model\AbstractModel return $this; } + /** - * Implement logic of custom rewrites + * Perform custom url rewrites * - * @param \Zend_Controller_Request_Http $request - * @param \Zend_Controller_Response_Http $response - * @return \Magento\Core\Model\Url + * @param \Magento\App\RequestInterface $request + * @return bool */ - public function rewrite(\Zend_Controller_Request_Http $request=null, \Zend_Controller_Response_Http $response=null) + public function rewrite(\Magento\App\RequestInterface $request = null) { if (!$this->_appState->isInstalled()) { return false; @@ -255,9 +255,6 @@ class Rewrite extends \Magento\Core\Model\AbstractModel if (is_null($request)) { $request = $this->_app->getFrontController()->getRequest(); } - if (is_null($response)) { - $response = $this->_app->getFrontController()->getResponse(); - } if (is_null($this->getStoreId()) || false === $this->getStoreId()) { $this->setStoreId($this->_storeManager->getStore()->getId()); } diff --git a/app/code/Magento/Core/Model/View/Config.php b/app/code/Magento/Core/Model/View/Config.php index d4f22e275de..628d99c58c0 100644 --- a/app/code/Magento/Core/Model/View/Config.php +++ b/app/code/Magento/Core/Model/View/Config.php @@ -29,7 +29,7 @@ */ namespace Magento\Core\Model\View; -class Config +class Config implements \Magento\View\ConfigInterface { /** * List of view configuration objects per theme @@ -91,7 +91,7 @@ class Config public function getViewConfig(array $params = array()) { $this->_viewService->updateDesignParams($params); - /** @var $currentTheme \Magento\Core\Model\Theme */ + /** @var $currentTheme \Magento\View\Design\ThemeInterface */ $currentTheme = $params['themeModel']; $key = $currentTheme->getId(); if (isset($this->_viewConfigs[$key])) { diff --git a/app/code/Magento/Core/Model/View/DeployedFilesManager.php b/app/code/Magento/Core/Model/View/DeployedFilesManager.php index 5a4c021ec07..6fb6a5e1ef9 100644 --- a/app/code/Magento/Core/Model/View/DeployedFilesManager.php +++ b/app/code/Magento/Core/Model/View/DeployedFilesManager.php @@ -83,7 +83,7 @@ class DeployedFilesManager implements \Magento\Core\Model\View\PublicFilesManage */ protected function _getDeployedFilePath($filePath, $params) { - /** @var $themeModel \Magento\Core\Model\Theme */ + /** @var $themeModel \Magento\View\Design\ThemeInterface */ $themeModel = $params['themeModel']; $themePath = $themeModel->getThemePath(); while (empty($themePath) && $themeModel) { diff --git a/app/code/Magento/Core/Model/View/Design.php b/app/code/Magento/Core/Model/View/Design.php index d00868d9097..9ee5dafee23 100644 --- a/app/code/Magento/Core/Model/View/Design.php +++ b/app/code/Magento/Core/Model/View/Design.php @@ -29,7 +29,7 @@ */ namespace Magento\Core\Model\View; -class Design implements \Magento\Core\Model\View\DesignInterface +class Design implements \Magento\View\DesignInterface { /** * Common node path to theme design configuration diff --git a/app/code/Magento/Core/Model/View/Design/Proxy.php b/app/code/Magento/Core/Model/View/Design/Proxy.php index 70fc9df0c85..cae0f470c42 100644 --- a/app/code/Magento/Core/Model/View/Design/Proxy.php +++ b/app/code/Magento/Core/Model/View/Design/Proxy.php @@ -29,7 +29,7 @@ */ namespace Magento\Core\Model\View\Design; -class Proxy implements \Magento\Core\Model\View\DesignInterface +class Proxy implements \Magento\View\DesignInterface { /** * @var \Magento\ObjectManager @@ -64,7 +64,7 @@ class Proxy implements \Magento\Core\Model\View\DesignInterface * Set package area * * @param string $area - * @return \Magento\Core\Model\View\DesignInterface + * @return \Magento\View\DesignInterface */ public function setArea($area) { @@ -86,7 +86,7 @@ class Proxy implements \Magento\Core\Model\View\DesignInterface * * @param \Magento\Core\Model\Theme|int|string $theme * @param string $area - * @return \Magento\Core\Model\View\DesignInterface + * @return \Magento\View\DesignInterface */ public function setDesignTheme($theme, $area = null) { @@ -108,7 +108,7 @@ class Proxy implements \Magento\Core\Model\View\DesignInterface /** * Set default design theme * - * @return \Magento\Core\Model\View\DesignInterface + * @return \Magento\View\DesignInterface */ public function setDefaultDesignTheme() { diff --git a/app/code/Magento/Core/Model/View/Publisher.php b/app/code/Magento/Core/Model/View/Publisher.php index b94a60feffe..1385462c670 100644 --- a/app/code/Magento/Core/Model/View/Publisher.php +++ b/app/code/Magento/Core/Model/View/Publisher.php @@ -89,7 +89,7 @@ class Publisher implements \Magento\Core\Model\View\PublicFilesManagerInterface protected $_allowFilesDuplication; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -106,7 +106,7 @@ class Publisher implements \Magento\Core\Model\View\PublicFilesManagerInterface * @param \Magento\Core\Helper\Css $cssHelper * @param \Magento\Core\Model\View\Service $viewService * @param \Magento\Core\Model\View\FileSystem $viewFileSystem - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\Config\Modules\Reader $modulesReader * @param $allowFilesDuplication */ @@ -116,7 +116,7 @@ class Publisher implements \Magento\Core\Model\View\PublicFilesManagerInterface \Magento\Core\Helper\Css $cssHelper, \Magento\Core\Model\View\Service $viewService, \Magento\Core\Model\View\FileSystem $viewFileSystem, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Core\Model\Config\Modules\Reader $modulesReader, $allowFilesDuplication ) { @@ -252,7 +252,7 @@ class Publisher implements \Magento\Core\Model\View\PublicFilesManagerInterface */ protected function _needToProcessFile($filePath) { - $jsPath = $this->_dir->getDir(\Magento\Core\Model\Dir::PUB_LIB) . DS; + $jsPath = $this->_dir->getDir(\Magento\App\Dir::PUB_LIB) . DS; if (strncmp($filePath, $jsPath, strlen($jsPath)) === 0) { return false; } @@ -271,7 +271,7 @@ class Publisher implements \Magento\Core\Model\View\PublicFilesManagerInterface return true; } - return ($this->_viewService->getAppMode() == \Magento\Core\Model\App\State::MODE_DEVELOPER) + return ($this->_viewService->getAppMode() == \Magento\App\State::MODE_DEVELOPER) && $this->_getExtension($filePath) == self::CONTENT_TYPE_CSS; } @@ -296,7 +296,7 @@ class Publisher implements \Magento\Core\Model\View\PublicFilesManagerInterface */ protected function _buildPublicViewRedundantFilename($file, array $params) { - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ $theme = $params['themeModel']; if ($theme->getThemePath()) { $designPath = str_replace('/', DS, $theme->getThemePath()); @@ -321,7 +321,7 @@ class Publisher implements \Magento\Core\Model\View\PublicFilesManagerInterface */ protected function _buildPublicViewSufficientFilename($filename, array $params) { - $designDir = $this->_dir->getDir(\Magento\Core\Model\Dir::THEMES) . DS; + $designDir = $this->_dir->getDir(\Magento\App\Dir::THEMES) . DS; if (0 === strpos($filename, $designDir)) { // theme file $publicFile = substr($filename, strlen($designDir)); @@ -388,7 +388,7 @@ class Publisher implements \Magento\Core\Model\View\PublicFilesManagerInterface $filePath = $this->_viewService->extractScope($fileId, $params); } else { /* Check if module file overridden on theme level based on _module property and file path */ - if ($params['module'] && strpos($parentFilePath, $this->_dir->getDir(\Magento\Core\Model\Dir::THEMES)) === 0) { + if ($params['module'] && strpos($parentFilePath, $this->_dir->getDir(\Magento\App\Dir::THEMES)) === 0) { /* Add module directory to relative URL */ $filePath = dirname($params['module'] . '/' . $parentFileName) . '/' . $fileId; diff --git a/app/code/Magento/Core/Model/View/Service.php b/app/code/Magento/Core/Model/View/Service.php index 656e0c8f5c6..bbf4b542a6c 100644 --- a/app/code/Magento/Core/Model/View/Service.php +++ b/app/code/Magento/Core/Model/View/Service.php @@ -37,12 +37,12 @@ class Service const SCOPE_SEPARATOR = '::'; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; /** - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ private $_design; @@ -52,24 +52,21 @@ class Service protected $_themeFactory; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; /** - * View files system model - * - * - * @param \Magento\Core\Model\App\State $appState - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\App\State $appState + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Model\Theme\FlyweightFactory $themeFactory - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir */ public function __construct( - \Magento\Core\Model\App\State $appState, - \Magento\Core\Model\View\DesignInterface $design, + \Magento\App\State $appState, + \Magento\View\DesignInterface $design, \Magento\Core\Model\Theme\FlyweightFactory $themeFactory, - \Magento\Core\Model\Dir $dir + \Magento\App\Dir $dir ) { $this->_appState = $appState; $this->_design = $design; @@ -113,7 +110,7 @@ class Service */ public function isViewFileOperationAllowed() { - return $this->getAppMode() != \Magento\Core\Model\App\State::MODE_PRODUCTION; + return $this->getAppMode() != \Magento\App\State::MODE_PRODUCTION; } /** @@ -133,7 +130,7 @@ class Service */ public function getPublicDir() { - return $this->_dir->getDir(\Magento\Core\Model\Dir::STATIC_VIEW); + return $this->_dir->getDir(\Magento\App\Dir::STATIC_VIEW); } /** diff --git a/app/code/Magento/Core/Model/View/Url.php b/app/code/Magento/Core/Model/View/Url.php index e7945e13f0e..c89537d232f 100644 --- a/app/code/Magento/Core/Model/View/Url.php +++ b/app/code/Magento/Core/Model/View/Url.php @@ -42,7 +42,7 @@ class Url protected $_filesystem; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs; @@ -71,7 +71,7 @@ class Url * View files URL model * * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\View\Service $viewService * @param \Magento\Core\Model\View\Publisher $publisher @@ -79,7 +79,7 @@ class Url */ public function __construct( \Magento\Filesystem $filesystem, - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\View\Service $viewService, \Magento\Core\Model\View\Publisher $publisher, @@ -140,10 +140,10 @@ class Url public function getPublicFileUrl($publicFilePath, $isSecure = null) { foreach (array( - \Magento\Core\Model\Store::URL_TYPE_LIB => \Magento\Core\Model\Dir::PUB_LIB, - \Magento\Core\Model\Store::URL_TYPE_MEDIA => \Magento\Core\Model\Dir::MEDIA, - \Magento\Core\Model\Store::URL_TYPE_STATIC => \Magento\Core\Model\Dir::STATIC_VIEW, - \Magento\Core\Model\Store::URL_TYPE_CACHE => \Magento\Core\Model\Dir::PUB_VIEW_CACHE, + \Magento\Core\Model\Store::URL_TYPE_LIB => \Magento\App\Dir::PUB_LIB, + \Magento\Core\Model\Store::URL_TYPE_MEDIA => \Magento\App\Dir::MEDIA, + \Magento\Core\Model\Store::URL_TYPE_STATIC => \Magento\App\Dir::STATIC_VIEW, + \Magento\Core\Model\Store::URL_TYPE_CACHE => \Magento\App\Dir::PUB_VIEW_CACHE, ) as $urlType => $dirType ) { $dir = $this->_dirs->getDir($dirType); diff --git a/app/code/Magento/Core/data/core_setup/data-upgrade-1.6.0.10-1.6.0.11.php b/app/code/Magento/Core/data/core_setup/data-upgrade-1.6.0.10-1.6.0.11.php index a8cc99ff1f8..6282084b476 100644 --- a/app/code/Magento/Core/data/core_setup/data-upgrade-1.6.0.10-1.6.0.11.php +++ b/app/code/Magento/Core/data/core_setup/data-upgrade-1.6.0.10-1.6.0.11.php @@ -28,7 +28,7 @@ $filesystemCollection = $this->_themeFactory->create(); $filesystemCollection->addDefaultPattern('*'); -/** @var $theme \Magento\Core\Model\Theme */ +/** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($this->_themeResourceFactory->create() as $theme) { $themeType = $filesystemCollection->hasTheme($theme) ? \Magento\Core\Model\Theme::TYPE_PHYSICAL diff --git a/app/code/Magento/Core/data/core_setup/data-upgrade-1.6.0.12-1.6.0.13.php b/app/code/Magento/Core/data/core_setup/data-upgrade-1.6.0.12-1.6.0.13.php index d638d7d01cb..f686c6ba074 100644 --- a/app/code/Magento/Core/data/core_setup/data-upgrade-1.6.0.12-1.6.0.13.php +++ b/app/code/Magento/Core/data/core_setup/data-upgrade-1.6.0.12-1.6.0.13.php @@ -27,7 +27,7 @@ /** @var $themeDbCollection \Magento\Core\Model\Resource\Theme\Collection */ $themeDbCollection = $this->_themeResourceFactory->create(); -/** @var $theme \Magento\Core\Model\Theme */ +/** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($this->_themeFactory->create()->addDefaultPattern('*') as $theme) { $dbTheme = $themeDbCollection->getThemeByFullPath($theme->getFullPath()); $dbTheme->setCode($theme->getCode()); diff --git a/app/code/Magento/Core/etc/di.xml b/app/code/Magento/Core/etc/di.xml index 1f881c8023d..6da0b5e55b8 100644 --- a/app/code/Magento/Core/etc/di.xml +++ b/app/code/Magento/Core/etc/di.xml @@ -25,13 +25,14 @@ --> <config> <preference for="Magento\Acl\CacheInterface" type="Magento\Core\Model\Acl\Cache" /> + <preference for="Magento\App\Updater\SetupInterface" type="Magento\Core\Model\Resource\Setup" /> + <preference for="Magento\App\Module\ResourceResolverInterface" type="Magento\App\Module\ResourceResolver" /> <preference for="Magento\AuthorizationInterface" type="Magento\Authorization" /> <preference for="Magento\Authorization\Policy" type="Magento\Authorization\Policy\DefaultPolicy" /> <preference for="Magento\Authorization\RoleLocator" type="Magento\Authorization\RoleLocator\DefaultRoleLocator" /> <preference for="Magento\Core\Model\Session\AbstractSession" type="Magento\Core\Model\Session" /> <preference for="Magento\Core\Model\LocaleInterface" type="Magento\Core\Model\Locale" /> <preference for="Magento\Core\Model\Page\Asset\MergeStrategyInterface" type="Magento\Core\Model\Page\Asset\MergeStrategy\Direct" /> - <preference for="Twig_LoaderInterface" type="Magento\Core\Model\TemplateEngine\Twig\FullFileName" /> <preference for="Magento\Core\Model\DataService\ConfigInterface" type="Magento\Core\Model\DataService\Config" /> <preference for="Magento\Core\Model\ConfigInterface" type="Magento\Core\Model\Config" /> <preference for="Magento\Core\Model\Config\DataInterface" type="Magento\Core\Model\Config\Data" /> @@ -42,7 +43,22 @@ <preference for="Magento\Config\ConverterInterface" type="Magento\Config\Converter\Dom"/> <preference for="Magento\Phrase\RendererInterface" type="Magento\Phrase\Renderer\Composite" /> <preference for="Magento\Core\Model\Url\SecurityInfoInterface" type="Magento\Core\Model\Url\SecurityInfo\Proxy" /> - <preference for="Magento\Core\Model\Module\ResourceResolverInterface" type="Magento\Core\Model\Module\ResourceResolver" /> + <type name="Magento\App\FrontController"> + <plugin name="install" type="Magento\Core\App\FrontController\Plugin\Install" sortOrder="40"/> + <plugin name="requestPreprocessor" type="Magento\Core\App\FrontController\Plugin\RequestPreprocessor" sortOrder="50"/> + </type> + <type name="Magento\App\AreaList"> + <param name="areas"> + <value> + <frontend> + <frontName /> + </frontend> + </value> + </param> + <param name="default"> + <value>frontend</value> + </param> + </type> <type name="Magento\Data\Structure" shared="false" /> <type name="Magento\Data\Collection\Db\FetchStrategy\Cache"> <param name="cache"> @@ -240,7 +256,7 @@ <instance type="Magento\Core\Model\Config\SectionPool\Proxy" /> </param> </type> - <type name="Magento\Core\Model\RouterList" shared="true"> + <type name="Magento\App\RouterList" shared="true"> <param name="routerList"> <value> <standard> @@ -249,7 +265,7 @@ <sortOrder>20</sortOrder> </standard> <default> - <instance>Magento\Core\Controller\Varien\Router\DefaultRouter</instance> + <instance>Magento\App\Router\DefaultRouter</instance> <disable type="bool">false</disable> <sortOrder>100</sortOrder> </default> @@ -267,11 +283,11 @@ <value>standard</value> </param> </type> - <type name="Magento\Core\Model\NoRouteHandlerList"> + <type name="Magento\App\Router\NoRouteHandlerList"> <param name="handlerClassesList"> <value> <default> - <instance>Magento\Core\Model\Router\NoRouteHandler</instance> + <instance>Magento\Core\App\Router\NoRouteHandler</instance> <sortOrder>100</sortOrder> </default> </value> @@ -293,7 +309,7 @@ <type name="Magento\Core\Model\View\Design"> <param name="themes"> <value> - <frontend>magento_demo</frontend> + <frontend>magento_plushe</frontend> <adminhtml>magento_backend</adminhtml> <install>magento_basic</install> </value> @@ -367,18 +383,21 @@ </type> <type name="Magento\Core\Model\StoreManager"> <param name="request"> - <instance type="Magento\Core\Controller\Request\Http\Proxy" /> + <instance type="Magento\App\Request\Http\Proxy" /> </param> </type> <type name="Magento\Core\Model\Config\Section\Processor\Placeholder"> <param name="request"> - <instance type="Magento\Core\Controller\Request\Http\Proxy" /> + <instance type="Magento\App\Request\Http\Proxy" /> </param> </type> <type name="Magento\Core\Helper\Context"> <param name="urlBuilder"> <instance type="Magento\Core\Model\Url\Proxy" /> </param> + <param name='httpRequest'> + <instance type="Magento\App\Request\Http\Proxy" /> + </param> </type> <type name="Magento\Core\Helper\String"> <param name="locale"> @@ -395,19 +414,17 @@ <instance type="Magento\Core\Model\File\Storage\File\Proxy" /> </param> </type> - <type name="Magento\Core\Model\Session\AbstractSession"> - <param name="url"> - <instance type="Magento\Core\Model\Url\Proxy" /> - </param> - </type> <type name="Magento\Core\Model\View\Service"> <param name="design"> <instance type="Magento\Core\Model\View\Design\Proxy" /> </param> </type> - <type name="Magento\Core\Controller\Varien\Front"> - <param name="backendData"> - <instance type="Magento\Backend\Helper\Data\Proxy" /> + <type name="Magento\Core\Model\TemplateEngine\Factory"> + <plugin name="debug_hints" type="Magento\Core\Model\TemplateEngine\Plugin\DebugHints" sortOrder="10"/> + <param name="engines"> + <value> + <phtml>Magento\Core\Model\TemplateEngine\Php</phtml> + </value> </param> </type> </config> diff --git a/app/code/Magento/Core/functions.php b/app/code/Magento/Core/functions.php index 5e6b3cb810e..c8264b4e4ed 100644 --- a/app/code/Magento/Core/functions.php +++ b/app/code/Magento/Core/functions.php @@ -163,11 +163,11 @@ function mageCoreErrorHandler($errorNo, $errorStr, $errorFile, $errorLine) $errorMessage .= ": {$errorStr} in {$errorFile} on line {$errorLine}"; $exception = new \Exception($errorMessage); $errorMessage .= $exception->getTraceAsString(); - $appState = \Magento\Core\Model\ObjectManager::getInstance()->get('Magento\Core\Model\App\State'); - if ($appState == \Magento\Core\Model\App\State::MODE_DEVELOPER) { + $appState = \Magento\Core\Model\ObjectManager::getInstance()->get('Magento\App\State'); + if ($appState == \Magento\App\State::MODE_DEVELOPER) { throw $exception; } else { - $dirs = new \Magento\Core\Model\Dir('.'); + $dirs = new \Magento\App\Dir('.'); $fileSystem = new \Magento\Io\File(); $logger = new \Magento\Core\Model\Logger($dirs, $fileSystem); $logger->log($errorMessage, \Zend_Log::ERR); diff --git a/app/code/Magento/Core/view/adminhtml/prototype/magento.css b/app/code/Magento/Core/view/adminhtml/prototype/magento.css index aa5a2895496..d9ba2471caf 100644 --- a/app/code/Magento/Core/view/adminhtml/prototype/magento.css +++ b/app/code/Magento/Core/view/adminhtml/prototype/magento.css @@ -161,7 +161,7 @@ } .popup-window .magento_message .fieldset .widget-option-label { - padding: 5px 0 0; + padding: 6px 0 0; } .popup-window [id$="_focus_anchor"]:focus { diff --git a/app/code/Magento/Cron/etc/di.xml b/app/code/Magento/Cron/etc/di.xml index a3b7139d8be..2a0f0c9f40e 100644 --- a/app/code/Magento/Cron/etc/di.xml +++ b/app/code/Magento/Cron/etc/di.xml @@ -45,8 +45,5 @@ <param name="app"> <instance type="Magento\Core\Model\App" /> </param> - <param name="coreConfig"> - <instance type="Magento\Core\Model\Config" /> - </param> </type> </config> diff --git a/app/code/Magento/CurrencySymbol/Helper/Data.php b/app/code/Magento/CurrencySymbol/Helper/Data.php index de19ed5b169..6bf93795882 100644 --- a/app/code/Magento/CurrencySymbol/Helper/Data.php +++ b/app/code/Magento/CurrencySymbol/Helper/Data.php @@ -42,28 +42,28 @@ class Data extends \Magento\Core\Helper\Data /** * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Http $coreHttp * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Locale $locale * @param \Magento\Core\Model\Date $dateModel - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\Encryption $encryptor * @param \Magento\CurrencySymbol\Model\System\Currencysymbol\Factory $symbolFactory * @param bool $dbCompatibleMode */ public function __construct( \Magento\Core\Helper\Context $context, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Http $coreHttp, \Magento\Core\Model\Config $config, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Locale $locale, \Magento\Core\Model\Date $dateModel, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\Encryption $encryptor, \Magento\CurrencySymbol\Model\System\Currencysymbol\Factory $symbolFactory, $dbCompatibleMode = true diff --git a/app/code/Magento/CurrencySymbol/Model/System/Currencysymbol.php b/app/code/Magento/CurrencySymbol/Model/System/Currencysymbol.php index 06a219d0ac0..7cc457a3342 100644 --- a/app/code/Magento/CurrencySymbol/Model/System/Currencysymbol.php +++ b/app/code/Magento/CurrencySymbol/Model/System/Currencysymbol.php @@ -85,7 +85,7 @@ class Currencysymbol /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -134,7 +134,7 @@ class Currencysymbol * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Model\LocaleInterface $locale * @param \Magento\Core\Model\System\Store $systemStore - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager */ public function __construct( \Magento\Core\Model\Store\Config $coreStoreConfig, @@ -144,7 +144,7 @@ class Currencysymbol \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Core\Model\LocaleInterface $locale, \Magento\Core\Model\System\Store $systemStore, - \Magento\Core\Model\Event\Manager $eventManager + \Magento\Event\ManagerInterface $eventManager ) { $this->_coreConfig = $coreConfig; $this->_configFactory = $configFactory; diff --git a/app/code/Magento/CurrencySymbol/view/adminhtml/grid.phtml b/app/code/Magento/CurrencySymbol/view/adminhtml/grid.phtml index 1e967819ada..658bb74ade6 100644 --- a/app/code/Magento/CurrencySymbol/view/adminhtml/grid.phtml +++ b/app/code/Magento/CurrencySymbol/view/adminhtml/grid.phtml @@ -37,34 +37,30 @@ <input name="form_key" type="hidden" value="<?php echo $this->getFormKey() ?>" /> <div class="grid"> - <div class="hor-scroll"> - <table cellspacing="0" class="data table-cat-img-sizes"> - <colgroup> - <col width="15%"/> - <col /> - </colgroup> - <thead> - <tr class="headings"> - <th><span class="nobr"><span class="not-sort"><?php echo __('Currency'); ?></span></span></th> - <th><span class="nobr"><span class="not-sort"><?php echo __('Symbol'); ?><span class="required"><em>*</em></span></span></span></th> - </tr> - </thead> - <tbody> - <?php foreach($this->getCurrencySymbolsData() as $code => $data): ?> - <tr> - <td class="label"> - <label for="custom_currency_symbol<?php echo $code; ?>"><?php echo $code; ?> (<?php echo $data['displayName']; ?>)</label> - </td> - <td class="value"> + <table class="data"> + <thead> + <tr class="headings"> + <th class="no-link col-currency"><span><label><?php echo __('Currency'); ?></label></span></th> + <th class="no-link col-symbol"><span><label class="required"><?php echo __('Symbol'); ?></label></span></th> + </tr> + </thead> + <tbody> + <?php foreach($this->getCurrencySymbolsData() as $code => $data): ?> + <tr> + <td class="col-currency"> + <label class="label" for="custom_currency_symbol<?php echo $code; ?>"><?php echo $code; ?> (<?php echo $data['displayName']; ?>)</label> + </td> + <td class="col-symbol"> + <div class="control"> <input id="custom_currency_symbol<?php echo $code; ?>" class=" required-entry input-text" type="text" value="<?php echo $this->helper('Magento\Core\Helper\Data')->quoteEscape($data['displaySymbol']); ?>"<?php echo $data['inherited'] ? ' disabled="disabled"' : '';?> name="custom_currency_symbol[<?php echo $code; ?>]"> <input id="custom_currency_symbol_inherit<?php echo $code; ?>" class="checkbox config-inherit" type="checkbox" onclick="toggleUseDefault(<?php echo '\'' . $code . '\',\'' . $this->helper('Magento\Core\Helper\Data')->quoteEscape($data['parentSymbol'], true) . '\''; ?>)"<?php echo $data['inherited'] ? ' checked="checked"' : ''; ?> value="1" name="inherit_custom_currency_symbol[<?php echo $code; ?>]"> - <label for="custom_currency_symbol_inherit<?php echo $code; ?>"><?php echo $this->getInheritText(); ?></label> - </td> - </tr> - <?php endforeach; ?> - </tbody> - </table> - </div> + <label class="label" for="custom_currency_symbol_inherit<?php echo $code; ?>"><?php echo $this->getInheritText(); ?></label> + </div> + </td> + </tr> + <?php endforeach; ?> + </tbody> + </table> </div> </form> <script type="text/javascript"> diff --git a/app/code/Magento/Customer/Controller/Account.php b/app/code/Magento/Customer/Controller/Account.php index 23e1053e5e8..703d1481dd3 100644 --- a/app/code/Magento/Customer/Controller/Account.php +++ b/app/code/Magento/Customer/Controller/Account.php @@ -146,7 +146,7 @@ class Account extends \Magento\Core\Controller\Front\Action parent::preDispatch(); - if (!$this->_objectManager->get('Magento\Core\Model\App\State')->isInstalled()) { + if (!$this->_objectManager->get('Magento\App\State')->isInstalled()) { return; } diff --git a/app/code/Magento/Customer/Helper/Data.php b/app/code/Magento/Customer/Helper/Data.php index b5eb6ecc2c5..9d2360c4f79 100644 --- a/app/code/Magento/Customer/Helper/Data.php +++ b/app/code/Magento/Customer/Helper/Data.php @@ -112,7 +112,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -144,7 +144,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper protected $_formFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Customer\Helper\Address $customerAddress * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Helper\Context $context @@ -155,7 +155,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper * @param \Magento\Customer\Model\FormFactory $formFactory */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Customer\Helper\Address $customerAddress, \Magento\Core\Helper\Data $coreData, \Magento\Core\Helper\Context $context, @@ -704,7 +704,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper /** * Perform customer data filtration based on form code and form object * - * @param \Zend_Controller_Request_Http $request + * @param \Magento\App\RequestInterface $request * @param string $formCode The code of EAV form to take the list of attributes from * @param \Magento\Core\Model\AbstractModel $entity entity model for the form * @param array $additionalAttributes The list of attribute codes to skip filtration for @@ -712,7 +712,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper * @param \Magento\Eav\Model\Form|null $eavForm EAV form model to use for extraction * @return array Filtered customer data */ - public function extractCustomerData(\Zend_Controller_Request_Http $request, $formCode, $entity, + public function extractCustomerData(\Magento\App\RequestInterface $request, $formCode, $entity, $additionalAttributes = array(), $scope = null, $eavForm = null ) { if (is_null($eavForm)) { diff --git a/app/code/Magento/Customer/Model/Address.php b/app/code/Magento/Customer/Model/Address.php index cf7486547b9..e32b17e2625 100644 --- a/app/code/Magento/Customer/Model/Address.php +++ b/app/code/Magento/Customer/Model/Address.php @@ -47,7 +47,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress protected $_customerFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Directory\Helper\Data $directoryData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry @@ -63,7 +63,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Directory\Helper\Data $directoryData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, diff --git a/app/code/Magento/Customer/Model/Address/AbstractAddress.php b/app/code/Magento/Customer/Model/Address/AbstractAddress.php index 1ff8c13e3df..1edffbe2a09 100644 --- a/app/code/Magento/Customer/Model/Address/AbstractAddress.php +++ b/app/code/Magento/Customer/Model/Address/AbstractAddress.php @@ -82,7 +82,7 @@ class AbstractAddress extends \Magento\Core\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -107,7 +107,7 @@ class AbstractAddress extends \Magento\Core\Model\AbstractModel protected $_countryFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Directory\Helper\Data $directoryData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry @@ -120,7 +120,7 @@ class AbstractAddress extends \Magento\Core\Model\AbstractModel * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Directory\Helper\Data $directoryData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, diff --git a/app/code/Magento/Customer/Model/Customer.php b/app/code/Magento/Customer/Model/Customer.php index 9ee1a4f237e..8869c0f9162 100644 --- a/app/code/Magento/Customer/Model/Customer.php +++ b/app/code/Magento/Customer/Model/Customer.php @@ -150,12 +150,12 @@ class Customer extends \Magento\Core\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Customer\Helper\Data $customerData * @param \Magento\Core\Helper\Data $coreData * Core store config @@ -200,7 +200,7 @@ class Customer extends \Magento\Core\Model\AbstractModel protected $_attributeFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Customer\Helper\Data $customerData * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Model\Context $context @@ -221,7 +221,7 @@ class Customer extends \Magento\Core\Model\AbstractModel * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Customer\Helper\Data $customerData, \Magento\Core\Helper\Data $coreData, \Magento\Core\Model\Context $context, diff --git a/app/code/Magento/Customer/Model/Resource/Customer/Collection.php b/app/code/Magento/Customer/Model/Resource/Customer/Collection.php index 71377352a93..7a3c6a46f84 100644 --- a/app/code/Magento/Customer/Model/Resource/Customer/Collection.php +++ b/app/code/Magento/Customer/Model/Resource/Customer/Collection.php @@ -42,7 +42,7 @@ class Collection extends \Magento\Eav\Model\Entity\Collection\AbstractCollection protected $_fieldsetConfig; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -54,7 +54,7 @@ class Collection extends \Magento\Eav\Model\Entity\Collection\AbstractCollection * @param \Magento\Core\Model\Fieldset\Config $fieldsetConfig */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Customer/Model/Session.php b/app/code/Magento/Customer/Model/Session.php index e7dda583082..98337ee4572 100644 --- a/app/code/Magento/Customer/Model/Session.php +++ b/app/code/Magento/Customer/Model/Session.php @@ -130,7 +130,7 @@ class Session extends \Magento\Core\Model\Session\AbstractSession } $this->init($namespace, $sessionName); - $this->_eventManager->dispatch('customer_session_init', array('customer_session'=>$this)); + $this->_eventManager->dispatch('customer_session_init', array('customer_session' => $this)); } /** diff --git a/app/code/Magento/Customer/etc/di.xml b/app/code/Magento/Customer/etc/di.xml index b369f18220f..4932fb7b9cc 100644 --- a/app/code/Magento/Customer/etc/di.xml +++ b/app/code/Magento/Customer/etc/di.xml @@ -24,25 +24,7 @@ */ --> <config> - <type name="Magento\Customer\Helper\Data"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Customer\Model\Address\AbstractAddress"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Customer\Model\Customer"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> <type name="Magento\Customer\Model\Session"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> <param name="configShare"> <instance type="Magento\Customer\Model\Config\Share\Proxy" /> </param> @@ -53,8 +35,8 @@ <instance type="Magento\Customer\Model\Resource\Customer\Proxy" /> </param> </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <customer_setup>Magento\Customer\Model\Resource\Setup</customer_setup> </value> @@ -70,4 +52,9 @@ <instance type="Magento\Customer\Model\Resource\Customer\Proxy" /> </param> </type> + <type name="Magento\Customer\Model\Customer"> + <param name="customerData"> + <instance type="Magento\Customer\Helper\Data\Proxy" /> + </param> + </type> </config> diff --git a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Container.php b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Container.php index 9e6f8e3d13b..59462ec0e78 100644 --- a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Container.php +++ b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Container.php @@ -27,7 +27,7 @@ /** * Editor toolbar * - * @method \Magento\DesignEditor\Block\Adminhtml\Editor\Container setTheme(\Magento\Core\Model\Theme $theme) + * @method \Magento\DesignEditor\Block\Adminhtml\Editor\Container setTheme(\Magento\View\Design\ThemeInterface $theme) */ namespace Magento\DesignEditor\Block\Adminhtml\Editor; diff --git a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Toolbar/Buttons/Edit.php b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Toolbar/Buttons/Edit.php index afe775972ba..a3ebf1ad542 100644 --- a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Toolbar/Buttons/Edit.php +++ b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Toolbar/Buttons/Edit.php @@ -247,11 +247,11 @@ class Edit /** * Checks themes for changes by time * - * @param \Magento\Core\Model\Theme $sourceTheme - * @param \Magento\Core\Model\Theme $targetTheme + * @param \Magento\View\Design\ThemeInterface $sourceTheme + * @param \Magento\View\Design\ThemeInterface $targetTheme * @return bool */ - protected function _hasThemeChanged(\Magento\Core\Model\Theme $sourceTheme, \Magento\Core\Model\Theme $targetTheme) + protected function _hasThemeChanged(\Magento\View\Design\ThemeInterface $sourceTheme, \Magento\View\Design\ThemeInterface $targetTheme) { $sourceChange = $this->_changeFactory->create(); $sourceChange->loadByThemeId($sourceTheme->getId()); diff --git a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Toolbar/Buttons/Save.php b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Toolbar/Buttons/Save.php index 8917b9acfb4..2e9050e5962 100644 --- a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Toolbar/Buttons/Save.php +++ b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Toolbar/Buttons/Save.php @@ -87,7 +87,7 @@ class Save /** * Set current theme * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return $this */ public function setTheme($theme) 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 dc05176d01c..5dde246aea6 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 @@ -145,7 +145,7 @@ class Custom extends \Magento\Backend\Block\Widget\Form\Generic /** * Get theme file (with custom CSS) * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return \Magento\Core\Model\Theme\FileInterface|null */ protected function _getCustomCss($theme) diff --git a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Backgrounds.php b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Backgrounds.php index 1f20b97b04b..41061ebb767 100644 --- a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Backgrounds.php +++ b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Backgrounds.php @@ -29,7 +29,7 @@ namespace Magento\DesignEditor\Block\Adminhtml\Editor\Tools\QuickStyles; /** * Block that renders Quick Styles > Backgrounds tab * - * @method \Magento\Core\Model\Theme getTheme() + * @method \Magento\View\Design\ThemeInterface getTheme() * @method setTheme($theme) * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) diff --git a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Buttons.php b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Buttons.php index e935648e7d1..af82670491e 100644 --- a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Buttons.php +++ b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Buttons.php @@ -29,7 +29,7 @@ namespace Magento\DesignEditor\Block\Adminhtml\Editor\Tools\QuickStyles; /** * Block that renders Quick Styles > Buttons & Icons tab * - * @method \Magento\Core\Model\Theme getTheme() + * @method \Magento\View\Design\ThemeInterface getTheme() * @method setTheme($theme) * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) diff --git a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Fonts.php b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Fonts.php index 03f6bc32806..a86453ad848 100644 --- a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Fonts.php +++ b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Fonts.php @@ -29,7 +29,7 @@ namespace Magento\DesignEditor\Block\Adminhtml\Editor\Tools\QuickStyles; /** * Block that renders Quick Styles > Fonts tab * - * @method \Magento\Core\Model\Theme getTheme() + * @method \Magento\View\Design\ThemeInterface getTheme() * @method setTheme($theme) * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) diff --git a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Header.php b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Header.php index 49f8939b4f4..0374dcf715a 100644 --- a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Header.php +++ b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Header.php @@ -29,7 +29,7 @@ namespace Magento\DesignEditor\Block\Adminhtml\Editor\Tools\QuickStyles; /** * Block that renders JS tab * - * @method \Magento\Core\Model\Theme getTheme() + * @method \Magento\View\Design\ThemeInterface getTheme() * @method setTheme($theme) * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) diff --git a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Tips.php b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Tips.php index 492444801c7..a7d7ccd1949 100644 --- a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Tips.php +++ b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/QuickStyles/Tips.php @@ -29,7 +29,7 @@ namespace Magento\DesignEditor\Block\Adminhtml\Editor\Tools\QuickStyles; /** * Block that renders JS tab * - * @method \Magento\Core\Model\Theme getTheme() + * @method \Magento\View\Design\ThemeInterface getTheme() * @method setTheme($theme) * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) diff --git a/app/code/Magento/DesignEditor/Block/Adminhtml/Theme.php b/app/code/Magento/DesignEditor/Block/Adminhtml/Theme.php index 696db16c251..535cd5d7834 100644 --- a/app/code/Magento/DesignEditor/Block/Adminhtml/Theme.php +++ b/app/code/Magento/DesignEditor/Block/Adminhtml/Theme.php @@ -27,8 +27,8 @@ /** * Design editor theme * - * @method \Magento\DesignEditor\Block\Adminhtml\Theme setTheme(\Magento\Core\Model\Theme $theme) - * @method \Magento\Core\Model\Theme getTheme() + * @method \Magento\DesignEditor\Block\Adminhtml\Theme setTheme(\Magento\View\Design\ThemeInterface $theme) + * @method \Magento\View\Design\ThemeInterface getTheme() */ namespace Magento\DesignEditor\Block\Adminhtml; diff --git a/app/code/Magento/DesignEditor/Block/Adminhtml/Theme/Selector/SelectorList/AbstractSelectorList.php b/app/code/Magento/DesignEditor/Block/Adminhtml/Theme/Selector/SelectorList/AbstractSelectorList.php index e1523e7d4d7..322f003f054 100644 --- a/app/code/Magento/DesignEditor/Block/Adminhtml/Theme/Selector/SelectorList/AbstractSelectorList.php +++ b/app/code/Magento/DesignEditor/Block/Adminhtml/Theme/Selector/SelectorList/AbstractSelectorList.php @@ -75,7 +75,7 @@ abstract class AbstractSelectorList $items = array(); if (!empty($themeCollection)) { - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($themeCollection as $theme) { $itemBlock->setTheme($theme); $this->_addThemeButtons($itemBlock); 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 b8f91119101..cc45e215ef3 100644 --- a/app/code/Magento/DesignEditor/Controller/Adminhtml/System/Design/Editor.php +++ b/app/code/Magento/DesignEditor/Controller/Adminhtml/System/Design/Editor.php @@ -171,7 +171,7 @@ class Editor extends \Magento\Adminhtml\Controller\Action ? $theme : $theme->getDomainModel(\Magento\Core\Model\Theme::TYPE_PHYSICAL)->createVirtualTheme($theme); - /** @var $themeCustomization \Magento\Core\Model\Theme */ + /** @var $themeCustomization \Magento\View\Design\ThemeInterface */ $this->_themeConfig->assignToStore($themeCustomization, $this->_getStores()); $successMessage = $hadThemeAssigned @@ -270,8 +270,8 @@ class Editor extends \Magento\Adminhtml\Controller\Action public function duplicateAction() { $themeId = (int)$this->getRequest()->getParam('theme_id'); - /** @var $themeCopy \Magento\Core\Model\Theme */ - $themeCopy = $this->_objectManager->create('Magento\Core\Model\Theme'); + /** @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'); try { @@ -386,7 +386,7 @@ class Editor extends \Magento\Adminhtml\Controller\Action /** * Pass data to the Tools panel blocks that is needed it for rendering * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @param string $mode * @return \Magento\DesignEditor\Controller\Adminhtml\System\Design\Editor */ @@ -413,8 +413,8 @@ class Editor extends \Magento\Adminhtml\Controller\Action /** * Pass data to the Toolbar panel blocks that is needed for rendering * - * @param \Magento\Core\Model\Theme $theme - * @param \Magento\Core\Model\Theme $editableTheme + * @param \Magento\View\Design\ThemeInterface $theme + * @param \Magento\View\Design\ThemeInterface $editableTheme * @param string $mode * @return \Magento\DesignEditor\Controller\Adminhtml\System\Design\Editor */ @@ -444,7 +444,7 @@ class Editor extends \Magento\Adminhtml\Controller\Action /** * Set to iframe block selected mode and theme * - * @param \Magento\Core\Model\Theme $editableTheme + * @param \Magento\View\Design\ThemeInterface $editableTheme * @param string $mode * @return \Magento\DesignEditor\Controller\Adminhtml\System\Design\Editor */ diff --git a/app/code/Magento/DesignEditor/Controller/Adminhtml/System/Design/Editor/Tools.php b/app/code/Magento/DesignEditor/Controller/Adminhtml/System/Design/Editor/Tools.php index 70febe71373..3340589ee83 100644 --- a/app/code/Magento/DesignEditor/Controller/Adminhtml/System/Design/Editor/Tools.php +++ b/app/code/Magento/DesignEditor/Controller/Adminhtml/System/Design/Editor/Tools.php @@ -316,8 +316,8 @@ class Tools extends \Magento\Adminhtml\Controller\Action $storeId = (int)$this->getRequest()->getParam('store_id'); $themeId = (int)$this->getRequest()->getParam('theme_id'); try { - /** @var $theme \Magento\Core\Model\Theme */ - $theme = $this->_objectManager->create('Magento\Core\Model\Theme'); + /** @var $theme \Magento\View\Design\ThemeInterface */ + $theme = $this->_objectManager->create('Magento\View\Design\ThemeInterface'); if (!$theme->load($themeId)->getId() || !$theme->isEditable()) { throw new \Magento\Core\Exception( __('The file can\'t be found or edited.') @@ -361,8 +361,8 @@ class Tools extends \Magento\Adminhtml\Controller\Action $storeId = (int)$this->getRequest()->getParam('store_id'); $themeId = (int)$this->getRequest()->getParam('theme_id'); try { - /** @var $theme \Magento\Core\Model\Theme */ - $theme = $this->_objectManager->create('Magento\Core\Model\Theme'); + /** @var $theme \Magento\View\Design\ThemeInterface */ + $theme = $this->_objectManager->create('Magento\View\Design\ThemeInterface'); if (!$theme->load($themeId)->getId() || !$theme->isEditable()) { throw new \Magento\Core\Exception( __('The file can\'t be found or edited.') diff --git a/app/code/Magento/DesignEditor/Controller/Varien/Router/Standard.php b/app/code/Magento/DesignEditor/Controller/Varien/Router/Standard.php index b36ec1c4a6b..db0afa6961d 100644 --- a/app/code/Magento/DesignEditor/Controller/Varien/Router/Standard.php +++ b/app/code/Magento/DesignEditor/Controller/Varien/Router/Standard.php @@ -42,36 +42,49 @@ class Standard extends \Magento\Core\Controller\Varien\Router\Base protected $_excludedRouters = array('admin', 'vde'); /** - * @param \Magento\Core\Controller\Varien\Action\Factory $controllerFactory + * Router list + * + * @var \Magento\App\RouterListInterface + */ + protected $_routerList; + + /** + * @var \Magento\Core\App\Request\RewriteService + */ + protected $_urlRewriteService; + + /** + * @param \Magento\App\RouterListInterface $routerList + * @param \Magento\App\ActionFactory $controllerFactory * @param \Magento\ObjectManager $objectManager * @param \Magento\Filesystem $filesystem * @param \Magento\Core\Model\App $app - * @param \Magento\Core\Model\Config\Scope $configScope * @param \Magento\Core\Model\Route\Config $routeConfig * @param \Magento\Core\Model\Url\SecurityInfoInterface $securityInfo * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\Url $url * @param \Magento\Core\Model\StoreManager $storeManager - * @param \Magento\Core\Model\App\State $appState - * @param $areaCode - * @param $baseController - * @param $routerId - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @param \Magento\App\State $appState + * @param \Magento\Core\App\Request\RewriteService $urlRewriteService + * @param string $areaCode + * @param string $baseController + * @param string $routerId */ public function __construct( - \Magento\Core\Controller\Varien\Action\Factory $controllerFactory, + \Magento\App\RouterListInterface $routerList, + \Magento\App\ActionFactory $controllerFactory, \Magento\ObjectManager $objectManager, \Magento\Filesystem $filesystem, \Magento\Core\Model\App $app, - \Magento\Core\Model\Config\Scope $configScope, \Magento\Core\Model\Route\Config $routeConfig, \Magento\Core\Model\Url\SecurityInfoInterface $securityInfo, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\Config $config, \Magento\Core\Model\Url $url, \Magento\Core\Model\StoreManager $storeManager, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, + \Magento\Core\App\Request\RewriteService $urlRewriteService, $areaCode, $baseController, $routerId @@ -80,7 +93,6 @@ class Standard extends \Magento\Core\Controller\Varien\Router\Base $controllerFactory, $filesystem, $app, - $configScope, $coreStoreConfig, $routeConfig, $securityInfo, @@ -92,16 +104,18 @@ class Standard extends \Magento\Core\Controller\Varien\Router\Base $baseController, $routerId ); + $this->_urlRewriteService = $urlRewriteService; $this->_objectManager = $objectManager; + $this->_routerList = $routerList; } /** * Match provided request and if matched - return corresponding controller * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @return \Magento\Core\Controller\Front\Action|null */ - public function match(\Magento\Core\Controller\Request\Http $request) + public function match(\Magento\App\RequestInterface $request) { // if URL has VDE prefix if (!$this->_objectManager->get('Magento\DesignEditor\Helper\Data')->isVdeRequest($request)) { @@ -120,14 +134,14 @@ class Standard extends \Magento\Core\Controller\Varien\Router\Base $this->_prepareVdeRequest($request); // apply rewrites - $this->getFront()->applyRewrites($request); + $this->_urlRewriteService->applyRewrites($request); // match routers $controller = null; $routers = $this->_getMatchedRouters(); - /** @var $router \Magento\Core\Controller\Varien\Router\AbstractRouter */ + /** @var $router \Magento\App\Router\AbstractRouter */ foreach ($routers as $router) { - /** @var $controller \Magento\Core\Controller\Varien\AbstractAction */ + /** @var $controller \Magento\App\Action\AbstractAction */ $controller = $router->match($request); if ($controller) { $this->_objectManager->get('Magento\DesignEditor\Model\State') @@ -145,10 +159,10 @@ class Standard extends \Magento\Core\Controller\Varien\Router\Base /** * Modify request path to imitate basic request * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @return \Magento\DesignEditor\Controller\Varien\Router\Standard */ - protected function _prepareVdeRequest(\Magento\Core\Controller\Request\Http $request) + protected function _prepareVdeRequest(\Magento\App\RequestInterface $request) { list($vdeFrontName, $designMode, $themeId) = explode('/', trim($request->getPathInfo(), '/')); $request->setAlias('editorMode', $designMode); @@ -166,7 +180,7 @@ class Standard extends \Magento\Core\Controller\Varien\Router\Base */ protected function _getMatchedRouters() { - $routers = $this->getFront()->getRouters(); + $routers = $this->_routerList->getRouters(); foreach (array_keys($routers) as $name) { if (in_array($name, $this->_excludedRouters)) { unset($routers[$name]); diff --git a/app/code/Magento/DesignEditor/Helper/Data.php b/app/code/Magento/DesignEditor/Helper/Data.php index 55290944ab1..20ec1e30070 100644 --- a/app/code/Magento/DesignEditor/Helper/Data.php +++ b/app/code/Magento/DesignEditor/Helper/Data.php @@ -98,10 +98,10 @@ class Data extends \Magento\Core\Helper\AbstractHelper /** * This method returns an indicator of whether or not the current request is for vde * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @return bool */ - public function isVdeRequest(\Magento\Core\Controller\Request\Http $request = null) + public function isVdeRequest(\Magento\App\RequestInterface $request = null) { if (null !== $request) { $result = false; @@ -139,10 +139,10 @@ class Data extends \Magento\Core\Helper\AbstractHelper /** * Sets the translation mode for the current request (null, text, script, or alt); * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @return \Magento\DesignEditor\Helper\Data */ - public function setTranslationMode(\Magento\Core\Controller\Request\Http $request) + public function setTranslationMode(\Magento\App\RequestInterface $request) { $this->_translationMode = $request->getParam(self::TRANSLATION_MODE, null); return $this; diff --git a/app/code/Magento/DesignEditor/Model/Editor/Tools/Controls/Configuration.php b/app/code/Magento/DesignEditor/Model/Editor/Tools/Controls/Configuration.php index 72ea1000604..be61a865b4b 100644 --- a/app/code/Magento/DesignEditor/Model/Editor/Tools/Controls/Configuration.php +++ b/app/code/Magento/DesignEditor/Model/Editor/Tools/Controls/Configuration.php @@ -39,7 +39,7 @@ class Configuration /** * Application Event Dispatcher * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventDispatcher; @@ -49,7 +49,7 @@ class Configuration protected $_configuration; /** - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_design; @@ -95,29 +95,27 @@ class Configuration /** * View config model * - * @var \Magento\Core\Model\View\Config + * @var \Magento\View\ConfigInterface */ protected $_viewConfigLoader; /** - * Initialize dependencies - * - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Event\Manager $eventDispatcher - * @param \Magento\Core\Model\View\Config $viewConfig - * @param \Magento\DesignEditor\Model\Config\Control\AbstractControl|null $configuration - * @param \Magento\Core\Model\Theme|null $theme - * @param \Magento\Core\Model\Theme $parentTheme + * @param \Magento\Event\ManagerInterface $eventDispatcher + * @param \Magento\View\ConfigInterface $viewConfig + * @param \Magento\DesignEditor\Model\Config\Control\AbstractControl $configuration + * @param \Magento\View\Design\ThemeInterface $theme + * @param \Magento\View\Design\ThemeInterface $parentTheme */ public function __construct( - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Filesystem $filesystem, - \Magento\Core\Model\Event\Manager $eventDispatcher, - \Magento\Core\Model\View\Config $viewConfig, + \Magento\Event\ManagerInterface $eventDispatcher, + \Magento\View\ConfigInterface $viewConfig, \Magento\DesignEditor\Model\Config\Control\AbstractControl $configuration = null, - \Magento\Core\Model\Theme $theme = null, - \Magento\Core\Model\Theme $parentTheme = null + \Magento\View\Design\ThemeInterface $theme = null, + \Magento\View\Design\ThemeInterface $parentTheme = null ) { $this->_configuration = $configuration; $this->_theme = $theme; @@ -137,11 +135,11 @@ class Configuration protected function _initViewConfigs() { $this->_viewConfig = $this->_viewConfigLoader->getViewConfig(array( - 'area' => \Magento\Core\Model\View\DesignInterface::DEFAULT_AREA, + 'area' => \Magento\View\DesignInterface::DEFAULT_AREA, 'themeModel' => $this->_theme )); $this->_viewConfigParent = $this->_viewConfigLoader->getViewConfig(array( - 'area' => \Magento\Core\Model\View\DesignInterface::DEFAULT_AREA, + 'area' => \Magento\View\DesignInterface::DEFAULT_AREA, 'themeModel' => $this->_parentTheme )); return $this; diff --git a/app/code/Magento/DesignEditor/Model/Editor/Tools/Controls/Factory.php b/app/code/Magento/DesignEditor/Model/Editor/Tools/Controls/Factory.php index 14c8f566c14..28ce76acf9d 100644 --- a/app/code/Magento/DesignEditor/Model/Editor/Tools/Controls/Factory.php +++ b/app/code/Magento/DesignEditor/Model/Editor/Tools/Controls/Factory.php @@ -74,7 +74,7 @@ class Factory * Get file path by type * * @param string $type - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return string * @throws \Magento\Exception */ @@ -84,7 +84,7 @@ class Factory throw new \Magento\Exception("Unknown control configuration type: \"{$type}\""); } return $this->_viewFileSystem->getFilename($this->_fileNames[$type], array( - 'area' => \Magento\Core\Model\View\DesignInterface::DEFAULT_AREA, + 'area' => \Magento\View\DesignInterface::DEFAULT_AREA, 'themeModel' => $theme )); } @@ -93,16 +93,16 @@ class Factory * Create new instance * * @param string $type - * @param \Magento\Core\Model\Theme $theme - * @param \Magento\Core\Model\Theme $parentTheme + * @param \Magento\View\Design\ThemeInterface $theme + * @param \Magento\View\Design\ThemeInterface $parentTheme * @param array $files * @return \Magento\DesignEditor\Model\Editor\Tools\Controls\Configuration * @throws \Magento\Exception */ public function create( $type, - \Magento\Core\Model\Theme $theme = null, - \Magento\Core\Model\Theme $parentTheme = null, + \Magento\View\Design\ThemeInterface $theme = null, + \Magento\View\Design\ThemeInterface $parentTheme = null, array $files = array() ) { $files[] = $this->_getFilePathByType($type, $theme); diff --git a/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/Form/Renderer/Factory.php b/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/Form/Renderer/Factory.php index 5843892df78..a42124a6ea1 100644 --- a/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/Form/Renderer/Factory.php +++ b/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/Form/Renderer/Factory.php @@ -27,7 +27,7 @@ /** * Block that renders JS tab * - * @method \Magento\Core\Model\Theme getTheme() + * @method \Magento\View\Design\ThemeInterface getTheme() * @method setTheme($theme) * */ @@ -41,7 +41,7 @@ class Factory /** * Layout model * - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -91,9 +91,9 @@ class Factory protected $_sharedRenderers = array(); /** - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout */ - public function __construct(\Magento\Core\Model\Layout $layout) + public function __construct(\Magento\View\LayoutInterface $layout) { $this->_layout = $layout; } diff --git a/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/ImageUploader.php b/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/ImageUploader.php index b904f1f07df..675ded3a017 100644 --- a/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/ImageUploader.php +++ b/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/ImageUploader.php @@ -114,7 +114,7 @@ class ImageUploader extends \Magento\Object */ protected function _getTheme() { - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ $theme = $this->getTheme(); if (!$theme->getId()) { throw new \InvalidArgumentException('Theme was not found.'); diff --git a/app/code/Magento/DesignEditor/Model/Observer.php b/app/code/Magento/DesignEditor/Model/Observer.php index 8458b5f2950..b8bcf058f48 100644 --- a/app/code/Magento/DesignEditor/Model/Observer.php +++ b/app/code/Magento/DesignEditor/Model/Observer.php @@ -100,7 +100,7 @@ class Observer { /** @var $configuration \Magento\DesignEditor\Model\Editor\Tools\Controls\Configuration */ $configuration = $event->getData('configuration'); - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ $theme = $event->getData('theme'); if ($configuration->getControlConfig() instanceof \Magento\DesignEditor\Model\Config\Control\QuickStyles) { /** @var $renderer \Magento\DesignEditor\Model\Editor\Tools\QuickStyles\Renderer */ diff --git a/app/code/Magento/DesignEditor/Model/State.php b/app/code/Magento/DesignEditor/Model/State.php index 0aa25adc1a1..adcbb59ffd5 100644 --- a/app/code/Magento/DesignEditor/Model/State.php +++ b/app/code/Magento/DesignEditor/Model/State.php @@ -124,9 +124,9 @@ class State * Update system data for current VDE environment * * @param string $areaCode - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request */ - public function update($areaCode, \Magento\Core\Controller\Request\Http $request) + public function update($areaCode, \Magento\App\RequestInterface $request) { $mode = $request->getAlias('editorMode') ?: self::MODE_NAVIGATION; $this->_themeContext->setEditableThemeById($request->getAlias('themeId')); diff --git a/app/code/Magento/DesignEditor/Model/Url/NavigationMode.php b/app/code/Magento/DesignEditor/Model/Url/NavigationMode.php index d00a0222100..a318c32563b 100644 --- a/app/code/Magento/DesignEditor/Model/Url/NavigationMode.php +++ b/app/code/Magento/DesignEditor/Model/Url/NavigationMode.php @@ -53,8 +53,8 @@ class NavigationMode extends \Magento\Core\Model\Url protected $_themeId; /** - * Constructor - * + * @param \Magento\App\RouterListInterface $routerList + * @param \Magento\App\RequestInterface $request * @param \Magento\Core\Model\Url\SecurityInfoInterface $securityInfo * @param \Magento\DesignEditor\Helper\Data $helper * @param \Magento\Core\Model\Store\Config $coreStoreConfig @@ -65,6 +65,8 @@ class NavigationMode extends \Magento\Core\Model\Url * @param array $data */ public function __construct( + \Magento\App\RouterListInterface $routerList, + \Magento\App\RequestInterface $request, \Magento\Core\Model\Url\SecurityInfoInterface $securityInfo, \Magento\DesignEditor\Helper\Data $helper, \Magento\Core\Model\Store\Config $coreStoreConfig, @@ -82,7 +84,9 @@ class NavigationMode extends \Magento\Core\Model\Url if (isset($data['themeId'])) { $this->_themeId = $data['themeId']; } - parent::__construct($securityInfo, $coreStoreConfig, $coreData, $app, $storeManager, $session, $data); + parent::__construct( + $routerList, $request, $securityInfo, $coreStoreConfig, $coreData, $app, $storeManager, $session, $data + ); } /** diff --git a/app/code/Magento/DesignEditor/etc/di.xml b/app/code/Magento/DesignEditor/etc/di.xml index 7cd73bcc8b9..6ee998169cc 100644 --- a/app/code/Magento/DesignEditor/etc/di.xml +++ b/app/code/Magento/DesignEditor/etc/di.xml @@ -24,7 +24,7 @@ */ --> <config> - <type name="Magento\Core\Model\RouterList"> + <type name="Magento\App\RouterList"> <param name="routerList"> <value> <vde> diff --git a/app/code/Magento/DesignEditor/view/adminhtml/css/styles.css b/app/code/Magento/DesignEditor/view/adminhtml/css/styles.css index bf8dbd8f1ed..259f42af44c 100644 --- a/app/code/Magento/DesignEditor/view/adminhtml/css/styles.css +++ b/app/code/Magento/DesignEditor/view/adminhtml/css/styles.css @@ -306,6 +306,7 @@ #theme_selector_tabs .tabs-horiz > .ui-state-active a { background: #fff; border: 0; + margin-top: 0; box-shadow: none; } diff --git a/app/code/Magento/Directory/Model/Currency/DefaultLocator.php b/app/code/Magento/Directory/Model/Currency/DefaultLocator.php index a20bc27b18c..dcc2b93d2ba 100644 --- a/app/code/Magento/Directory/Model/Currency/DefaultLocator.php +++ b/app/code/Magento/Directory/Model/Currency/DefaultLocator.php @@ -48,10 +48,10 @@ class DefaultLocator /** * Retrieve default currency for selected store, website or website group * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @return string */ - public function getDefaultCurrency(\Magento\Core\Controller\Request\Http $request) + public function getDefaultCurrency(\Magento\App\RequestInterface $request) { if ($request->getParam('store')) { $store = $request->getParam('store'); diff --git a/app/code/Magento/Directory/Model/Resource/Country/Collection.php b/app/code/Magento/Directory/Model/Resource/Country/Collection.php index 09b993c6823..ccb1254e921 100644 --- a/app/code/Magento/Directory/Model/Resource/Country/Collection.php +++ b/app/code/Magento/Directory/Model/Resource/Country/Collection.php @@ -59,7 +59,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl /** * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\String $stringHelper * @param \Magento\Core\Model\LocaleInterface $locale * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy @@ -70,7 +70,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl */ public function __construct( \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\String $stringHelper, \Magento\Core\Model\LocaleInterface $locale, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, diff --git a/app/code/Magento/Directory/Model/Resource/Region/Collection.php b/app/code/Magento/Directory/Model/Resource/Region/Collection.php index dc9808713c3..a5551a69e8b 100644 --- a/app/code/Magento/Directory/Model/Resource/Region/Collection.php +++ b/app/code/Magento/Directory/Model/Resource/Region/Collection.php @@ -51,7 +51,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl protected $_locale; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -59,7 +59,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Directory/etc/di.xml b/app/code/Magento/Directory/etc/di.xml index 9ec72be3c11..c22053d60be 100644 --- a/app/code/Magento/Directory/etc/di.xml +++ b/app/code/Magento/Directory/etc/di.xml @@ -35,13 +35,8 @@ </value> </param> </type> - <type name="Magento\Directory\Model\Currency\Import\Factory"> - <param name="coreConfig"> - <instance type="Magento\Core\Model\Config\Proxy" /> - </param> - </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <directory_setup>Magento\Directory\Model\Resource\Setup</directory_setup> </value> diff --git a/app/code/Magento/Downloadable/Helper/Download.php b/app/code/Magento/Downloadable/Helper/Download.php index 7e1b20798cd..a8ab22f10a9 100644 --- a/app/code/Magento/Downloadable/Helper/Download.php +++ b/app/code/Magento/Downloadable/Helper/Download.php @@ -116,7 +116,7 @@ class Download extends \Magento\Core\Helper\AbstractHelper protected $_app; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirModel; @@ -127,7 +127,7 @@ class Download extends \Magento\Core\Helper\AbstractHelper * @param \Magento\Core\Helper\Context $context * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\App $app - * @param \Magento\Core\Model\Dir $dirModel + * @param \Magento\App\Dir $dirModel */ public function __construct( \Magento\Core\Helper\Data $coreData, @@ -136,7 +136,7 @@ class Download extends \Magento\Core\Helper\AbstractHelper \Magento\Core\Helper\Context $context, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\App $app, - \Magento\Core\Model\Dir $dirModel + \Magento\App\Dir $dirModel ) { $this->_coreData = $coreData; $this->_downloadableFile = $downloadableFile; @@ -239,7 +239,7 @@ class Download extends \Magento\Core\Helper\AbstractHelper if (!is_file($this->_resourceFile)) { $this->_coreFileStorageDb->saveFileToFilesystem($this->_resourceFile); } - $this->_handle->open(array('path' => $this->_dirModel->getDir(\Magento\Core\Model\Dir::VAR_DIR))); + $this->_handle->open(array('path' => $this->_dirModel->getDir(\Magento\App\Dir::VAR_DIR))); if (!$this->_handle->fileExists($this->_resourceFile, true)) { throw new \Magento\Core\Exception(__("We can't find this file.")); } @@ -333,7 +333,7 @@ class Download extends \Magento\Core\Helper\AbstractHelper /** * Retrieve Http Request Object * - * @return \Magento\Core\Controller\Request\Http + * @return \Magento\App\RequestInterface */ public function getHttpRequest() { @@ -343,7 +343,7 @@ class Download extends \Magento\Core\Helper\AbstractHelper /** * Retrieve Http Response Object * - * @return \Magento\Core\Controller\Response\Http + * @return \Magento\App\ResponseInterface */ public function getHttpResponse() { diff --git a/app/code/Magento/Downloadable/Model/Link.php b/app/code/Magento/Downloadable/Model/Link.php index a8f2084ef74..b7096373192 100644 --- a/app/code/Magento/Downloadable/Model/Link.php +++ b/app/code/Magento/Downloadable/Model/Link.php @@ -68,14 +68,14 @@ class Link extends \Magento\Core\Model\AbstractModel const LINK_SHAREABLE_CONFIG = 2; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirModel; /** * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\Dir $dirModel + * @param \Magento\App\Dir $dirModel * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param \Magento\Data\Collection\Db $resourceCollection * @param array $data @@ -83,7 +83,7 @@ class Link extends \Magento\Core\Model\AbstractModel public function __construct( \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\Dir $dirModel, + \Magento\App\Dir $dirModel, \Magento\Core\Model\Resource\AbstractResource $resource = null, \Magento\Data\Collection\Db $resourceCollection = null, array $data = array() @@ -130,7 +130,7 @@ class Link extends \Magento\Core\Model\AbstractModel */ public function getBaseTmpPath() { - return $this->_dirModel->getDir(\Magento\Core\Model\Dir::MEDIA) + return $this->_dirModel->getDir(\Magento\App\Dir::MEDIA) . DS . 'downloadable' . DS . 'tmp' . DS . 'links'; } @@ -141,7 +141,7 @@ class Link extends \Magento\Core\Model\AbstractModel */ public function getBasePath() { - return $this->_dirModel->getDir(\Magento\Core\Model\Dir::MEDIA) . DS . 'downloadable' . DS . 'files' . DS . 'links'; + return $this->_dirModel->getDir(\Magento\App\Dir::MEDIA) . DS . 'downloadable' . DS . 'files' . DS . 'links'; } /** @@ -151,7 +151,7 @@ class Link extends \Magento\Core\Model\AbstractModel */ public function getBaseSampleTmpPath() { - return $this->_dirModel->getDir(\Magento\Core\Model\Dir::MEDIA) . DS . 'downloadable' . DS . 'tmp' . DS . 'link_samples'; + return $this->_dirModel->getDir(\Magento\App\Dir::MEDIA) . DS . 'downloadable' . DS . 'tmp' . DS . 'link_samples'; } /** @@ -161,7 +161,7 @@ class Link extends \Magento\Core\Model\AbstractModel */ public function getBaseSamplePath() { - return $this->_dirModel->getDir(\Magento\Core\Model\Dir::MEDIA) . DS . 'downloadable' . DS . 'files' . DS . 'link_samples'; + return $this->_dirModel->getDir(\Magento\App\Dir::MEDIA) . DS . 'downloadable' . DS . 'files' . DS . 'link_samples'; } /** diff --git a/app/code/Magento/Downloadable/Model/Product/Type.php b/app/code/Magento/Downloadable/Model/Product/Type.php index 5d5d40c72a7..b2c8757af3a 100644 --- a/app/code/Magento/Downloadable/Model/Product/Type.php +++ b/app/code/Magento/Downloadable/Model/Product/Type.php @@ -81,7 +81,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\Virtual * @param \Magento\Catalog\Model\Product\Option $catalogProductOption * @param \Magento\Eav\Model\Config $eavConfig * @param \Magento\Catalog\Model\Product\Type $catalogProductType - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Downloadable\Helper\File $downloadableFile * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Helper\File\Storage\Database $fileStorageDb @@ -101,7 +101,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\Virtual \Magento\Catalog\Model\Product\Option $catalogProductOption, \Magento\Eav\Model\Config $eavConfig, \Magento\Catalog\Model\Product\Type $catalogProductType, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Downloadable\Helper\File $downloadableFile, \Magento\Core\Helper\Data $coreData, \Magento\Core\Helper\File\Storage\Database $fileStorageDb, diff --git a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/AbstractItems.php b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/AbstractItems.php index ce98c4445a2..aa5f61dc45f 100644 --- a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/AbstractItems.php +++ b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/AbstractItems.php @@ -59,7 +59,7 @@ abstract class AbstractItems extends \Magento\Sales\Model\Order\Pdf\Items\Abstra * @param \Magento\Tax\Helper\Data $taxData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory * @param \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory @@ -71,7 +71,7 @@ abstract class AbstractItems extends \Magento\Sales\Model\Order\Pdf\Items\Abstra \Magento\Tax\Helper\Data $taxData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory, \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory, diff --git a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Creditmemo.php b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Creditmemo.php index 956e67a1a54..a1e3651a476 100644 --- a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Creditmemo.php +++ b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Creditmemo.php @@ -42,7 +42,7 @@ class Creditmemo * @param \Magento\Tax\Helper\Data $taxData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory * @param \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory @@ -55,7 +55,7 @@ class Creditmemo \Magento\Tax\Helper\Data $taxData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory, \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory, diff --git a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Invoice.php b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Invoice.php index e6b20089679..16c5f1f2f97 100644 --- a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Invoice.php +++ b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Invoice.php @@ -49,7 +49,7 @@ class Invoice * @param \Magento\Tax\Helper\Data $taxData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory * @param \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory @@ -62,7 +62,7 @@ class Invoice \Magento\Tax\Helper\Data $taxData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory, \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory, diff --git a/app/code/Magento/Downloadable/Model/Sample.php b/app/code/Magento/Downloadable/Model/Sample.php index 68080e4d369..df718f6ad27 100644 --- a/app/code/Magento/Downloadable/Model/Sample.php +++ b/app/code/Magento/Downloadable/Model/Sample.php @@ -51,14 +51,14 @@ class Sample extends \Magento\Core\Model\AbstractModel const XML_PATH_SAMPLES_TITLE = 'catalog/downloadable/samples_title'; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirModel; /** * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\Dir $dirModel + * @param \Magento\App\Dir $dirModel * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param \Magento\Data\Collection\Db $resourceCollection * @param array $data @@ -66,7 +66,7 @@ class Sample extends \Magento\Core\Model\AbstractModel public function __construct( \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\Dir $dirModel, + \Magento\App\Dir $dirModel, \Magento\Core\Model\Resource\AbstractResource $resource = null, \Magento\Data\Collection\Db $resourceCollection = null, array $data = array() @@ -128,7 +128,7 @@ class Sample extends \Magento\Core\Model\AbstractModel */ public function getBaseTmpPath() { - return $this->_dirModel->getDir(\Magento\Core\Model\Dir::MEDIA) + return $this->_dirModel->getDir(\Magento\App\Dir::MEDIA) . DS . 'downloadable' . DS . 'tmp' . DS . 'samples'; } @@ -139,7 +139,7 @@ class Sample extends \Magento\Core\Model\AbstractModel */ public function getBasePath() { - return $this->_dirModel->getDir(\Magento\Core\Model\Dir::MEDIA) + return $this->_dirModel->getDir(\Magento\App\Dir::MEDIA) . DS . 'downloadable' . DS . 'files' . DS . 'samples'; } diff --git a/app/code/Magento/Downloadable/etc/di.xml b/app/code/Magento/Downloadable/etc/di.xml index 521398d74ba..57276d1bee8 100644 --- a/app/code/Magento/Downloadable/etc/di.xml +++ b/app/code/Magento/Downloadable/etc/di.xml @@ -39,8 +39,8 @@ <value>Virtual / Downloadable</value> </param> </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <downloadable_setup>Magento\Catalog\Model\Resource\Setup</downloadable_setup> </value> diff --git a/app/code/Magento/Eav/Model/Attribute/Data/AbstractData.php b/app/code/Magento/Eav/Model/Attribute/Data/AbstractData.php index f9a3fd48b87..2fbd942534b 100644 --- a/app/code/Magento/Eav/Model/Attribute/Data/AbstractData.php +++ b/app/code/Magento/Eav/Model/Attribute/Data/AbstractData.php @@ -513,10 +513,10 @@ abstract class AbstractData /** * Return Original Attribute value from Request * - * @param \Zend_Controller_Request_Http $request + * @param \Magento\App\RequestInterface $request * @return mixed */ - protected function _getRequestValue(\Zend_Controller_Request_Http $request) + protected function _getRequestValue(\Magento\App\RequestInterface $request) { $attrCode = $this->getAttribute()->getAttributeCode(); if ($this->_requestScope) { @@ -552,10 +552,10 @@ abstract class AbstractData /** * Extract data from request and return value * - * @param \Zend_Controller_Request_Http $request + * @param \Magento\App\RequestInterface $request * @return array|string */ - abstract public function extractValue(\Zend_Controller_Request_Http $request); + abstract public function extractValue(\Magento\App\RequestInterface $request); /** * Validate data diff --git a/app/code/Magento/Eav/Model/Attribute/Data/Date.php b/app/code/Magento/Eav/Model/Attribute/Data/Date.php index 6c5d6380277..7e4cdd6ed90 100644 --- a/app/code/Magento/Eav/Model/Attribute/Data/Date.php +++ b/app/code/Magento/Eav/Model/Attribute/Data/Date.php @@ -39,10 +39,10 @@ class Date extends \Magento\Eav\Model\Attribute\Data\AbstractData /** * Extract data from request and return value * - * @param \Zend_Controller_Request_Http $request + * @param \Magento\App\RequestInterface $request * @return array|string */ - public function extractValue(\Zend_Controller_Request_Http $request) + public function extractValue(\Magento\App\RequestInterface $request) { $value = $this->_getRequestValue($request); return $this->_applyInputFilter($value); diff --git a/app/code/Magento/Eav/Model/Attribute/Data/File.php b/app/code/Magento/Eav/Model/Attribute/Data/File.php index 94b4674ce37..c82f6124290 100644 --- a/app/code/Magento/Eav/Model/Attribute/Data/File.php +++ b/app/code/Magento/Eav/Model/Attribute/Data/File.php @@ -55,7 +55,7 @@ class File extends \Magento\Eav\Model\Attribute\Data\AbstractData protected $_fileValidator; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_coreDir; @@ -64,14 +64,14 @@ class File extends \Magento\Eav\Model\Attribute\Data\AbstractData * @param \Magento\Core\Model\Logger $logger * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Model\File\Validator\NotProtectedExtension $fileValidator - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir */ public function __construct( \Magento\Core\Model\LocaleInterface $locale, \Magento\Core\Model\Logger $logger, \Magento\Core\Helper\Data $coreData, \Magento\Core\Model\File\Validator\NotProtectedExtension $fileValidator, - \Magento\Core\Model\Dir $coreDir + \Magento\App\Dir $coreDir ) { parent::__construct($locale, $logger); $this->_coreData = $coreData; @@ -82,10 +82,10 @@ class File extends \Magento\Eav\Model\Attribute\Data\AbstractData /** * Extract data from request and return value * - * @param \Zend_Controller_Request_Http $request + * @param \Magento\App\RequestInterface $request * @return array|string */ - public function extractValue(\Zend_Controller_Request_Http $request) + public function extractValue(\Magento\App\RequestInterface $request) { if ($this->getIsAjaxRequest()) { return false; diff --git a/app/code/Magento/Eav/Model/Attribute/Data/Multiline.php b/app/code/Magento/Eav/Model/Attribute/Data/Multiline.php index 510a48209f9..a8d64da9265 100644 --- a/app/code/Magento/Eav/Model/Attribute/Data/Multiline.php +++ b/app/code/Magento/Eav/Model/Attribute/Data/Multiline.php @@ -39,10 +39,10 @@ class Multiline extends \Magento\Eav\Model\Attribute\Data\Text /** * Extract data from request and return value * - * @param \Zend_Controller_Request_Http $request + * @param \Magento\App\RequestInterface $request * @return array|string */ - public function extractValue(\Zend_Controller_Request_Http $request) + public function extractValue(\Magento\App\RequestInterface $request) { $value = $this->_getRequestValue($request); if (!is_array($value)) { diff --git a/app/code/Magento/Eav/Model/Attribute/Data/Multiselect.php b/app/code/Magento/Eav/Model/Attribute/Data/Multiselect.php index 80c90751240..d65cfdd4a76 100644 --- a/app/code/Magento/Eav/Model/Attribute/Data/Multiselect.php +++ b/app/code/Magento/Eav/Model/Attribute/Data/Multiselect.php @@ -39,10 +39,10 @@ class Multiselect extends \Magento\Eav\Model\Attribute\Data\Select /** * Extract data from request and return value * - * @param \Zend_Controller_Request_Http $request + * @param \Magento\App\RequestInterface $request * @return array|string */ - public function extractValue(\Zend_Controller_Request_Http $request) + public function extractValue(\Magento\App\RequestInterface $request) { $values = $this->_getRequestValue($request); if ($values !== false && !is_array($values)) { diff --git a/app/code/Magento/Eav/Model/Attribute/Data/Select.php b/app/code/Magento/Eav/Model/Attribute/Data/Select.php index 2fa560170dc..365f9446d2f 100644 --- a/app/code/Magento/Eav/Model/Attribute/Data/Select.php +++ b/app/code/Magento/Eav/Model/Attribute/Data/Select.php @@ -39,10 +39,10 @@ class Select extends \Magento\Eav\Model\Attribute\Data\AbstractData /** * Extract data from request and return value * - * @param \Zend_Controller_Request_Http $request + * @param \Magento\App\RequestInterface $request * @return array|string */ - public function extractValue(\Zend_Controller_Request_Http $request) + public function extractValue(\Magento\App\RequestInterface $request) { return $this->_getRequestValue($request); } diff --git a/app/code/Magento/Eav/Model/Attribute/Data/Text.php b/app/code/Magento/Eav/Model/Attribute/Data/Text.php index aed4b398ea2..7fa5fce942c 100644 --- a/app/code/Magento/Eav/Model/Attribute/Data/Text.php +++ b/app/code/Magento/Eav/Model/Attribute/Data/Text.php @@ -58,10 +58,10 @@ class Text extends \Magento\Eav\Model\Attribute\Data\AbstractData /** * Extract data from request and return value * - * @param \Zend_Controller_Request_Http $request + * @param \Magento\App\RequestInterface $request * @return array|string */ - public function extractValue(\Zend_Controller_Request_Http $request) + public function extractValue(\Magento\App\RequestInterface $request) { $value = $this->_getRequestValue($request); return $this->_applyInputFilter($value); diff --git a/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php b/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php index 7ccf50a293f..dcf4bb40492 100644 --- a/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php +++ b/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php @@ -106,7 +106,7 @@ abstract class AbstractCollection extends \Magento\Data\Collection\Db /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -136,7 +136,7 @@ abstract class AbstractCollection extends \Magento\Data\Collection\Db protected $_universalFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -147,7 +147,7 @@ abstract class AbstractCollection extends \Magento\Data\Collection\Db * @param \Magento\Validator\UniversalFactory $universalFactory */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Eav/Model/Form.php b/app/code/Magento/Eav/Model/Form.php index 319777a7f28..2a956d65520 100644 --- a/app/code/Magento/Eav/Model/Form.php +++ b/app/code/Magento/Eav/Model/Form.php @@ -150,7 +150,7 @@ abstract class Form protected $_universalFactory; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_httpRequest; @@ -165,7 +165,7 @@ abstract class Form * @param \Magento\Core\Model\Config\Modules\Reader $modulesReader * @param \Magento\Eav\Model\AttributeDataFactory $attrDataFactory * @param \Magento\Validator\UniversalFactory $universalFactory - * @param \Magento\Core\Controller\Request\Http $httpRequest + * @param \Magento\App\RequestInterface $httpRequest * @param \Magento\Validator\ConfigFactory $validatorConfigFactory * * @throws \Magento\Core\Exception @@ -176,7 +176,7 @@ abstract class Form \Magento\Core\Model\Config\Modules\Reader $modulesReader, \Magento\Eav\Model\AttributeDataFactory $attrDataFactory, \Magento\Validator\UniversalFactory $universalFactory, - \Magento\Core\Controller\Request\Http $httpRequest, + \Magento\App\RequestInterface $httpRequest, \Magento\Validator\ConfigFactory $validatorConfigFactory ) { if (empty($this->_moduleName)) { @@ -427,7 +427,7 @@ abstract class Form * Prepare request with data and returns it * * @param array $data - * @return \Zend_Controller_Request_Http + * @return \Magento\App\RequestInterface */ public function prepareRequest(array $data) { @@ -442,12 +442,12 @@ abstract class Form /** * Extract data from request and return associative data array * - * @param \Zend_Controller_Request_Http $request + * @param \Magento\App\RequestInterface $request * @param string $scope the request scope * @param boolean $scopeOnly search value only in scope or search value in global too * @return array */ - public function extractData(\Zend_Controller_Request_Http $request, $scope = null, $scopeOnly = true) + public function extractData(\Magento\App\RequestInterface $request, $scope = null, $scopeOnly = true) { $data = array(); /** @var $attribute \Magento\Eav\Model\Attribute */ diff --git a/app/code/Magento/Eav/Model/Resource/Attribute/Collection.php b/app/code/Magento/Eav/Model/Resource/Attribute/Collection.php index 9901304aac9..cd9824f73c1 100644 --- a/app/code/Magento/Eav/Model/Resource/Attribute/Collection.php +++ b/app/code/Magento/Eav/Model/Resource/Attribute/Collection.php @@ -67,7 +67,7 @@ abstract class Collection protected $_storeManager; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -76,7 +76,7 @@ abstract class Collection * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Grid/Collection.php b/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Grid/Collection.php index 17076959378..82f846a28e0 100644 --- a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Grid/Collection.php +++ b/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Grid/Collection.php @@ -42,7 +42,7 @@ class Collection protected $_registryManager; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -50,7 +50,7 @@ class Collection * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Option/Collection.php b/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Option/Collection.php index cd4bf421442..d75e0043fd3 100644 --- a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Option/Collection.php +++ b/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Option/Collection.php @@ -54,7 +54,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl protected $_storeManager; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -63,7 +63,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Eav/Model/Resource/Form/Attribute/Collection.php b/app/code/Magento/Eav/Model/Resource/Form/Attribute/Collection.php index a5cfacf0f2c..60d32a352a5 100644 --- a/app/code/Magento/Eav/Model/Resource/Form/Attribute/Collection.php +++ b/app/code/Magento/Eav/Model/Resource/Form/Attribute/Collection.php @@ -75,7 +75,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl protected $_eavConfig; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -84,7 +84,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Eav/Model/Resource/Form/Fieldset/Collection.php b/app/code/Magento/Eav/Model/Resource/Form/Fieldset/Collection.php index 911d2048361..f3ccdab233a 100644 --- a/app/code/Magento/Eav/Model/Resource/Form/Fieldset/Collection.php +++ b/app/code/Magento/Eav/Model/Resource/Form/Fieldset/Collection.php @@ -49,7 +49,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl protected $_storeManager; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -57,7 +57,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Eav/etc/di.xml b/app/code/Magento/Eav/etc/di.xml index c01f91591b7..230dd2cffd6 100644 --- a/app/code/Magento/Eav/etc/di.xml +++ b/app/code/Magento/Eav/etc/di.xml @@ -24,18 +24,13 @@ */ --> <config> - <type name="Magento\Eav\Model\Entity\Collection\AbstractCollection"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy"/> - </param> - </type> <type name="Magento\Eav\Model\Resource\Helper"> <param name="modulePrefix"> <value>eav</value> </param> </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <eav_setup>Magento\Eav\Model\Entity\Setup</eav_setup> </value> diff --git a/app/code/Magento/GiftMessage/Helper/Message.php b/app/code/Magento/GiftMessage/Helper/Message.php index 9d8681cc486..cf2cf73ac3c 100644 --- a/app/code/Magento/GiftMessage/Helper/Message.php +++ b/app/code/Magento/GiftMessage/Helper/Message.php @@ -63,7 +63,7 @@ class Message extends \Magento\Core\Helper\Data protected $_productFactory; /** - * @var \Magento\Core\Model\LayoutFactory + * @var \Magento\View\LayoutFactory */ protected $_layoutFactory; @@ -74,37 +74,36 @@ class Message extends \Magento\Core\Helper\Data /** * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Http $coreHttp * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Locale $locale * @param \Magento\Core\Model\Date $dateModel - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\Encryption $encryptor * @param \Magento\Catalog\Model\ProductFactory $productFactory - * @param \Magento\Core\Model\LayoutFactory $layoutFactory + * @param \Magento\View\LayoutFactory $layoutFactory * @param \Magento\GiftMessage\Model\MessageFactory $giftMessageFactory * @param bool $dbCompatibleMode */ public function __construct( \Magento\Core\Helper\Context $context, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Http $coreHttp, \Magento\Core\Model\Config $config, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Locale $locale, \Magento\Core\Model\Date $dateModel, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\Encryption $encryptor, \Magento\Catalog\Model\ProductFactory $productFactory, - \Magento\Core\Model\LayoutFactory $layoutFactory, + \Magento\View\LayoutFactory $layoutFactory, \Magento\GiftMessage\Model\MessageFactory $giftMessageFactory, $dbCompatibleMode = true - ) - { + ) { $this->_productFactory = $productFactory; $this->_layoutFactory = $layoutFactory; $this->_giftMessageFactory = $giftMessageFactory; diff --git a/app/code/Magento/GiftMessage/etc/di.xml b/app/code/Magento/GiftMessage/etc/di.xml index 8a374d90d75..5849ad45bb0 100644 --- a/app/code/Magento/GiftMessage/etc/di.xml +++ b/app/code/Magento/GiftMessage/etc/di.xml @@ -24,8 +24,8 @@ */ --> <config> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <giftmessage_setup>Magento\GiftMessage\Model\Resource\Setup</giftmessage_setup> </value> diff --git a/app/code/Magento/GoogleCheckout/Block/Adminhtml/Shipping/Merchant.php b/app/code/Magento/GoogleCheckout/Block/Adminhtml/Shipping/Merchant.php index e75101a63c8..484498d3915 100644 --- a/app/code/Magento/GoogleCheckout/Block/Adminhtml/Shipping/Merchant.php +++ b/app/code/Magento/GoogleCheckout/Block/Adminhtml/Shipping/Merchant.php @@ -75,11 +75,23 @@ class Merchant { $this->setElement($element); - $html = '<div id="merchant_allowed_methods_template" style="display:none">'; + $html = '<table style="display: none;"><tbody id="merchant_allowed_methods_template">'; $html .= $this->_getRowTemplateHtml(); - $html .= '</div>'; + $html .= '</tbody></table>'; + + $html .= '<table cellspacing="0" class="data-table">'; + $html .= '<thead><tr>'; + $html .= '<th class="col-shipping-method">' . __('Shipping Method') . '</th>'; + $html .= '<th class="col-default-price">' . __('Default Price') . '</th>'; + $html .= '<th class="col-actions">' . __('Action') . '</th>'; + $html .= '</tr></thead>'; + $html .= '<tfoot><tr><td colspan="3">'; + + $html .= $this->_getAddRowButtonHtml('merchant_allowed_methods_container', 'merchant_allowed_methods_template', __('Add Shipping Method')); + + $html .= '</td></tr></tfoot>'; + $html .= '<tbody id="merchant_allowed_methods_container">'; - $html .= '<ul id="merchant_allowed_methods_container">'; if ($this->_getValue('method')) { foreach ($this->_getValue('method') as $i => $f) { if ($i) { @@ -87,9 +99,9 @@ class Merchant } } } - $html .= '</ul>'; - $html .= $this->_getAddRowButtonHtml('merchant_allowed_methods_container', - 'merchant_allowed_methods_template', __('Add Shipping Method')); + + $html .= '</tbody>'; + $html .= '</table>'; return $html; } @@ -102,33 +114,34 @@ class Merchant */ protected function _getRowTemplateHtml($rowIndex = 0) { - $html = '<li>'; + $html = '<tr>'; + $html .= '<td class="col-shipping-method">'; $html .= '<select name="' . $this->getElement()->getName() . '[method][]" ' . $this->_getDisabled() . '>'; $html .= '<option value="">' . __('* Select shipping method') . '</option>'; foreach ($this->getShippingMethods() as $carrierCode => $carrier) { - $html .= '<optgroup label="' . $this->escapeHtml($carrier['title']) - . '" style="border-top:solid 1px black; margin-top:3px;">'; + $html .= '<optgroup label="' . $this->escapeHtml($carrier['title']) . '">'; foreach ($carrier['methods'] as $methodCode => $method) { $code = $carrierCode . '/' . $methodCode; $html .= '<option value="' . $this->escapeHtml($code) . '" ' . $this->_getSelected('method/' . $rowIndex, $code) - . ' style="background:white;">' . $this->escapeHtml($method['title']) . '</option>'; + . '>' . $this->escapeHtml($method['title']) . '</option>'; } $html .= '</optgroup>'; } - $html .= '</select>'; - $html .= '<div style="margin:5px 0 10px;">'; - $html .= '<label>' . __('Default price:') . '</label> '; - $html .= '<input class="input-text" style="width:70px;" name="' + $html .= '</select>'; + $html .= '</td>'; + $html .= '<td class="col-default-price">'; + $html .= '<input type="text" class="input-text" name="' . $this->getElement()->getName() . '[price][]" value="' . $this->_getValue('price/' . $rowIndex) . '" ' . $this->_getDisabled() . '/> '; - + $html .= '</td>'; + $html .= '<td class="col-actions">'; $html .= $this->_getRemoveRowButtonHtml(); - $html .= '</div>'; - $html .= '</li>'; + $html .= '</td>'; + $html .= '</tr>'; return $html; } @@ -206,12 +219,12 @@ class Merchant return $this->_addRowButtonHtml[$container]; } - protected function _getRemoveRowButtonHtml($selector = 'li', $title = 'Remove') + protected function _getRemoveRowButtonHtml($selector = 'tr', $title = 'Remove') { if (!$this->_removeRowButtonHtml) { $this->_removeRowButtonHtml = $this->getLayout()->createBlock('Magento\Adminhtml\Block\Widget\Button') ->setType('button') - ->setClass('delete v-middle ' . $this->_getDisabled()) + ->setClass('delete ' . $this->_getDisabled()) ->setLabel(__($title)) ->setOnClick("Element.remove($(this).up('" . $selector . "'))") ->setDisabled($this->_getDisabled()) diff --git a/app/code/Magento/GoogleCheckout/Model/Api.php b/app/code/Magento/GoogleCheckout/Model/Api.php index 288c9a5f54f..d9a42fa732a 100644 --- a/app/code/Magento/GoogleCheckout/Model/Api.php +++ b/app/code/Magento/GoogleCheckout/Model/Api.php @@ -38,7 +38,7 @@ class Api extends \Magento\Object /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -56,13 +56,13 @@ class Api extends \Magento\Object /** * @param \Magento\ObjectManager $objectManager - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param array $data */ public function __construct( \Magento\ObjectManager $objectManager, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Store\Config $coreStoreConfig, array $data = array() ) { diff --git a/app/code/Magento/GoogleCheckout/Model/Api/Xml/Callback.php b/app/code/Magento/GoogleCheckout/Model/Api/Xml/Callback.php index 889d734a6dd..db7d6de4e20 100644 --- a/app/code/Magento/GoogleCheckout/Model/Api/Xml/Callback.php +++ b/app/code/Magento/GoogleCheckout/Model/Api/Xml/Callback.php @@ -54,12 +54,12 @@ class Callback extends \Magento\GoogleCheckout\Model\Api\Xml\AbstractXml /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\GoogleCheckout\Helper\Data $googleCheckoutData * @param \Magento\Tax\Helper\Data $taxData @@ -69,7 +69,7 @@ class Callback extends \Magento\GoogleCheckout\Model\Api\Xml\AbstractXml * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\GoogleCheckout\Helper\Data $googleCheckoutData, \Magento\Tax\Helper\Data $taxData, diff --git a/app/code/Magento/GoogleCheckout/Model/Api/Xml/Checkout.php b/app/code/Magento/GoogleCheckout/Model/Api/Xml/Checkout.php index eeba753a115..cf44cff5d64 100644 --- a/app/code/Magento/GoogleCheckout/Model/Api/Xml/Checkout.php +++ b/app/code/Magento/GoogleCheckout/Model/Api/Xml/Checkout.php @@ -88,12 +88,12 @@ class Checkout extends \Magento\GoogleCheckout\Model\Api\Xml\AbstractXml /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Customer\Helper\Data $customerData * @param \Magento\GoogleCheckout\Helper\Data $googleCheckoutData * @param \Magento\Tax\Helper\Data $taxData @@ -104,7 +104,7 @@ class Checkout extends \Magento\GoogleCheckout\Model\Api\Xml\AbstractXml * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Customer\Helper\Data $customerData, \Magento\GoogleCheckout\Helper\Data $googleCheckoutData, \Magento\Tax\Helper\Data $taxData, diff --git a/app/code/Magento/GoogleCheckout/Model/Payment.php b/app/code/Magento/GoogleCheckout/Model/Payment.php index fda566db005..9c4543a17cd 100644 --- a/app/code/Magento/GoogleCheckout/Model/Payment.php +++ b/app/code/Magento/GoogleCheckout/Model/Payment.php @@ -67,7 +67,7 @@ class Payment extends \Magento\Payment\Model\Method\AbstractMethod \Magento\Core\Model\DateFactory $dateFactory, \Magento\Core\Model\UrlFactory $urlFactory, \Magento\GoogleCheckout\Model\ApiFactory $apiFactory, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, diff --git a/app/code/Magento/GoogleCheckout/etc/di.xml b/app/code/Magento/GoogleCheckout/etc/di.xml index 67a1d13ed44..9a41af1b6f0 100644 --- a/app/code/Magento/GoogleCheckout/etc/di.xml +++ b/app/code/Magento/GoogleCheckout/etc/di.xml @@ -24,23 +24,8 @@ */ --> <config> - <type name="Magento\GoogleCheckout\Model\Api\Xml\Callback"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\GoogleCheckout\Model\Api"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\GoogleCheckout\Model\Api\Xml\Checkout"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <googlecheckout_setup>Magento\Catalog\Model\Resource\Setup</googlecheckout_setup> </value> diff --git a/app/code/Magento/GoogleOptimizer/Model/Observer/AbstractSave.php b/app/code/Magento/GoogleOptimizer/Model/Observer/AbstractSave.php index d78677ec2e2..00777d43666 100644 --- a/app/code/Magento/GoogleOptimizer/Model/Observer/AbstractSave.php +++ b/app/code/Magento/GoogleOptimizer/Model/Observer/AbstractSave.php @@ -38,7 +38,7 @@ abstract class AbstractSave protected $_modelCode; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; @@ -50,12 +50,12 @@ abstract class AbstractSave /** * @param \Magento\GoogleOptimizer\Helper\Data $helper * @param \Magento\GoogleOptimizer\Model\Code $modelCode - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request */ public function __construct( \Magento\GoogleOptimizer\Helper\Data $helper, \Magento\GoogleOptimizer\Model\Code $modelCode, - \Magento\Core\Controller\Request\Http $request + \Magento\App\RequestInterface $request ) { $this->_helper = $helper; $this->_modelCode = $modelCode; diff --git a/app/code/Magento/GoogleOptimizer/Model/Observer/Block/Category/Tab.php b/app/code/Magento/GoogleOptimizer/Model/Observer/Block/Category/Tab.php index 7978da3a95d..f2087c54e58 100644 --- a/app/code/Magento/GoogleOptimizer/Model/Observer/Block/Category/Tab.php +++ b/app/code/Magento/GoogleOptimizer/Model/Observer/Block/Category/Tab.php @@ -33,16 +33,18 @@ class Tab protected $_helper; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; /** * @param \Magento\GoogleOptimizer\Helper\Data $helper - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout */ - public function __construct(\Magento\GoogleOptimizer\Helper\Data $helper, \Magento\Core\Model\Layout $layout) - { + public function __construct( + \Magento\GoogleOptimizer\Helper\Data $helper, + \Magento\View\LayoutInterface $layout + ) { $this->_helper = $helper; $this->_layout = $layout; } diff --git a/app/code/Magento/GoogleShopping/Model/Resource/Item/Collection.php b/app/code/Magento/GoogleShopping/Model/Resource/Item/Collection.php index 49dc395e18e..3691bb7700b 100644 --- a/app/code/Magento/GoogleShopping/Model/Resource/Item/Collection.php +++ b/app/code/Magento/GoogleShopping/Model/Resource/Item/Collection.php @@ -52,7 +52,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl /** * @param \Magento\Core\Model\Resource\Helper $resourceHelper * @param \Magento\Eav\Model\Config $config - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -61,7 +61,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl public function __construct( \Magento\Core\Model\Resource\Helper $resourceHelper, \Magento\Eav\Model\Config $config, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/GoogleShopping/etc/di.xml b/app/code/Magento/GoogleShopping/etc/di.xml index 1e27d2ca7f3..f456df2403c 100644 --- a/app/code/Magento/GoogleShopping/etc/di.xml +++ b/app/code/Magento/GoogleShopping/etc/di.xml @@ -34,8 +34,8 @@ <instance type="Magento\GoogleShopping\Model\Resource\Helper" /> </param> </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <googleshopping_setup>Magento\GoogleShopping\Model\Resource\Setup</googleshopping_setup> </value> 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 f2f2b4dd2ac..06c6c06660a 100644 --- a/app/code/Magento/ImportExport/Block/Adminhtml/Import/Edit/Form.php +++ b/app/code/Magento/ImportExport/Block/Adminhtml/Import/Edit/Form.php @@ -139,6 +139,7 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic 'label' => __('Select File to Import'), 'title' => __('Select File to Import'), 'required' => true, + 'class' => 'input-file' )); $form->setUseContainer(true); diff --git a/app/code/Magento/ImportExport/Helper/Data.php b/app/code/Magento/ImportExport/Helper/Data.php index 3fba7ad5eeb..c28dc46c609 100644 --- a/app/code/Magento/ImportExport/Helper/Data.php +++ b/app/code/Magento/ImportExport/Helper/Data.php @@ -49,28 +49,28 @@ class Data extends \Magento\Core\Helper\Data /** * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Http $coreHttp * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Locale $locale * @param \Magento\Core\Model\Date $dateModel - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\Encryption $encryptor * @param \Magento\File\Size $fileSize * @param bool $dbCompatibleMode */ public function __construct( \Magento\Core\Helper\Context $context, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Http $coreHttp, \Magento\Core\Model\Config $config, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Locale $locale, \Magento\Core\Model\Date $dateModel, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\Encryption $encryptor, \Magento\File\Size $fileSize, $dbCompatibleMode = true diff --git a/app/code/Magento/ImportExport/Model/AbstractModel.php b/app/code/Magento/ImportExport/Model/AbstractModel.php index 33771467b69..a749ad4b64f 100644 --- a/app/code/Magento/ImportExport/Model/AbstractModel.php +++ b/app/code/Magento/ImportExport/Model/AbstractModel.php @@ -68,7 +68,7 @@ abstract class AbstractModel extends \Magento\Object protected $_logger; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -79,13 +79,13 @@ abstract class AbstractModel extends \Magento\Object /** * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\Log\AdapterFactory $adapterFactory * @param array $data */ public function __construct( \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Core\Model\Log\AdapterFactory $adapterFactory, array $data = array() ) { diff --git a/app/code/Magento/ImportExport/Model/Export.php b/app/code/Magento/ImportExport/Model/Export.php index 7eaa510f103..0bbe6ba51d8 100644 --- a/app/code/Magento/ImportExport/Model/Export.php +++ b/app/code/Magento/ImportExport/Model/Export.php @@ -77,7 +77,7 @@ class Export extends \Magento\ImportExport\Model\AbstractModel /** * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\Log\AdapterFactory $adapterFactory * @param \Magento\ImportExport\Model\Export\ConfigInterface $exportConfig * @param \Magento\ImportExport\Model\Export\Entity\Factory $entityFactory @@ -86,7 +86,7 @@ class Export extends \Magento\ImportExport\Model\AbstractModel */ public function __construct( \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Core\Model\Log\AdapterFactory $adapterFactory, \Magento\ImportExport\Model\Export\ConfigInterface $exportConfig, \Magento\ImportExport\Model\Export\Entity\Factory $entityFactory, diff --git a/app/code/Magento/ImportExport/Model/Import.php b/app/code/Magento/ImportExport/Model/Import.php index 5a1b7a36b59..f10e6a2a7ce 100644 --- a/app/code/Magento/ImportExport/Model/Import.php +++ b/app/code/Magento/ImportExport/Model/Import.php @@ -132,7 +132,7 @@ class Import extends \Magento\ImportExport\Model\AbstractModel /** * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\Log\AdapterFactory $adapterFactory * @param \Magento\ImportExport\Helper\Data $importExportData * @param \Magento\Core\Model\Config $coreConfig @@ -148,7 +148,7 @@ class Import extends \Magento\ImportExport\Model\AbstractModel */ public function __construct( \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Core\Model\Log\AdapterFactory $adapterFactory, \Magento\ImportExport\Helper\Data $importExportData, \Magento\Core\Model\Config $coreConfig, diff --git a/app/code/Magento/ImportExport/Model/Import/Entity/Product.php b/app/code/Magento/ImportExport/Model/Import/Entity/Product.php index 47a288bc7aa..a4a1ace7c87 100644 --- a/app/code/Magento/ImportExport/Model/Import/Entity/Product.php +++ b/app/code/Magento/ImportExport/Model/Import/Entity/Product.php @@ -311,7 +311,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -371,7 +371,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity protected $_uploaderFactory; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -398,7 +398,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity * @param \Magento\Eav\Model\Config $config * @param \Magento\Core\Model\Resource $resource * @param \Magento\ImportExport\Model\Resource\Helper $resourceHelper - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\CatalogInventory\Helper\Data $catalogInventoryData * @param \Magento\Catalog\Helper\Data $catalogData * @param \Magento\ImportExport\Model\Import\Config $importConfig @@ -413,7 +413,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity * @param \Magento\Catalog\Model\Resource\Product\LinkFactory $linkFactory * @param \Magento\ImportExport\Model\Import\Proxy\ProductFactory $proxyProdFactory * @param \Magento\ImportExport\Model\Import\UploaderFactory $uploaderFactory - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\CatalogInventory\Model\Resource\Stock\ItemFactory $stockResItemFac * @param \Magento\CatalogInventory\Model\Stock\ItemFactory $stockItemFactory * @param \Magento\Core\Model\LocaleInterface $locale @@ -427,7 +427,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity \Magento\Eav\Model\Config $config, \Magento\Core\Model\Resource $resource, \Magento\ImportExport\Model\Resource\Helper $resourceHelper, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\CatalogInventory\Helper\Data $catalogInventoryData, \Magento\Catalog\Helper\Data $catalogData, \Magento\ImportExport\Model\Import\Config $importConfig, @@ -443,7 +443,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity \Magento\Catalog\Model\Resource\Product\LinkFactory $linkFactory, \Magento\ImportExport\Model\Import\Proxy\ProductFactory $proxyProdFactory, \Magento\ImportExport\Model\Import\UploaderFactory $uploaderFactory, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\CatalogInventory\Model\Resource\Stock\ItemFactory $stockResItemFac, \Magento\CatalogInventory\Model\Stock\ItemFactory $stockItemFactory, \Magento\Core\Model\LocaleInterface $locale, @@ -1356,7 +1356,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity $this->_fileUploader->init(); - $mediaDir = $this->_dir->getDir(\Magento\Core\Model\Dir::MEDIA); + $mediaDir = $this->_dir->getDir(\Magento\App\Dir::MEDIA); if (!$mediaDir) { throw new \Magento\Exception('Media directory is unavailable.'); } diff --git a/app/code/Magento/ImportExport/etc/di.xml b/app/code/Magento/ImportExport/etc/di.xml index 941ef286b9b..6153f2371f7 100644 --- a/app/code/Magento/ImportExport/etc/di.xml +++ b/app/code/Magento/ImportExport/etc/di.xml @@ -26,9 +26,4 @@ <config> <preference for="Magento\ImportExport\Model\Import\ConfigInterface" type="Magento\ImportExport\Model\Import\Config" /> <preference for="Magento\ImportExport\Model\Export\ConfigInterface" type="Magento\ImportExport\Model\Export\Config" /> - <type name="Magento\ImportExport\Model\Import\Entity\Product"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> </config> diff --git a/app/code/Magento/Index/Model/Indexer.php b/app/code/Magento/Index/Model/Indexer.php index 7f10a6c6344..fa11acee412 100644 --- a/app/code/Magento/Index/Model/Indexer.php +++ b/app/code/Magento/Index/Model/Indexer.php @@ -46,7 +46,7 @@ class Indexer /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -63,13 +63,13 @@ class Indexer /** * @param \Magento\Index\Model\Resource\Process\CollectionFactory $collectionFactory * @param \Magento\Index\Model\Resource\Process $resourceProcess - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Index\Model\EventFactory $indexEventFactory */ public function __construct( \Magento\Index\Model\Resource\Process\CollectionFactory $collectionFactory, \Magento\Index\Model\Resource\Process $resourceProcess, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Index\Model\EventFactory $indexEventFactory ) { $this->_collectionFactory = $collectionFactory; diff --git a/app/code/Magento/Index/Model/Lock/Storage.php b/app/code/Magento/Index/Model/Lock/Storage.php index b21b07addfb..cb5d9cfd46a 100644 --- a/app/code/Magento/Index/Model/Lock/Storage.php +++ b/app/code/Magento/Index/Model/Lock/Storage.php @@ -32,7 +32,7 @@ namespace Magento\Index\Model\Lock; class Storage { /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs; @@ -49,11 +49,11 @@ class Storage protected $_fileHandlers = array(); /** - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param \Magento\Index\Model\Process\FileFactory $fileFactory */ public function __construct( - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, \Magento\Index\Model\Process\FileFactory $fileFactory ) { $this->_dirs = $dirs; @@ -70,7 +70,7 @@ class Storage { if (!isset($this->_fileHandlers[$processId])) { $file = $this->_fileFactory->create(); - $varDirectory = $this->_dirs->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DIRECTORY_SEPARATOR . 'locks'; + $varDirectory = $this->_dirs->getDir(\Magento\App\Dir::VAR_DIR) . DIRECTORY_SEPARATOR . 'locks'; $file->setAllowCreateFolders(true); $file->open(array('path' => $varDirectory)); diff --git a/app/code/Magento/Index/Model/Process.php b/app/code/Magento/Index/Model/Process.php index 452c9921d6c..800068cf3dd 100644 --- a/app/code/Magento/Index/Model/Process.php +++ b/app/code/Magento/Index/Model/Process.php @@ -99,7 +99,7 @@ class Process extends \Magento\Core\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -127,7 +127,7 @@ class Process extends \Magento\Core\Model\AbstractModel * @param \Magento\Index\Model\Resource\Event $resourceEvent * @param \Magento\Index\Model\Indexer\Factory $indexerFactory * @param \Magento\Index\Model\Indexer $indexer - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Context $context * @param \Magento\Index\Model\Indexer\ConfigInterface $indexerConfig * @param \Magento\Core\Model\Registry $registry @@ -143,7 +143,7 @@ class Process extends \Magento\Core\Model\AbstractModel \Magento\Index\Model\Resource\Event $resourceEvent, \Magento\Index\Model\Indexer\Factory $indexerFactory, \Magento\Index\Model\Indexer $indexer, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Context $context, \Magento\Index\Model\Indexer\ConfigInterface $indexerConfig, \Magento\Core\Model\Registry $registry, diff --git a/app/code/Magento/Index/Model/Shell.php b/app/code/Magento/Index/Model/Shell.php index c9317a43ab2..b3822a9f143 100644 --- a/app/code/Magento/Index/Model/Shell.php +++ b/app/code/Magento/Index/Model/Shell.php @@ -51,13 +51,13 @@ class Shell extends \Magento\Core\Model\AbstractShell * @param \Magento\Index\Model\Indexer $indexer * @param \Magento\Filesystem $filesystem * @param string $entryPoint - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir */ public function __construct( \Magento\Index\Model\Indexer $indexer, \Magento\Filesystem $filesystem, $entryPoint, - \Magento\Core\Model\Dir $dir + \Magento\App\Dir $dir ) { $this->_indexer = $indexer; parent::__construct($filesystem, $entryPoint, $dir); diff --git a/app/code/Magento/Index/Model/System/Message/IndexOutdated.php b/app/code/Magento/Index/Model/System/Message/IndexOutdated.php index a194f1e4187..7321b1d3e8a 100644 --- a/app/code/Magento/Index/Model/System/Message/IndexOutdated.php +++ b/app/code/Magento/Index/Model/System/Message/IndexOutdated.php @@ -31,7 +31,7 @@ class IndexOutdated implements \Magento\AdminNotification\Model\System\MessageIn protected $_indexer; /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; @@ -47,12 +47,12 @@ class IndexOutdated implements \Magento\AdminNotification\Model\System\MessageIn /** * @param \Magento\Index\Model\Indexer $indexer - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\AuthorizationInterface $authorization */ public function __construct( \Magento\Index\Model\Indexer $indexer, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\UrlInterface $urlBuilder, \Magento\AuthorizationInterface $authorization ) { $this->_indexer = $indexer; diff --git a/app/code/Magento/Index/etc/di.xml b/app/code/Magento/Index/etc/di.xml index c9943f1663b..ed8c9c225cb 100644 --- a/app/code/Magento/Index/etc/di.xml +++ b/app/code/Magento/Index/etc/di.xml @@ -25,18 +25,8 @@ --> <config> <preference for="Magento\Index\Model\Indexer\ConfigInterface" type="Magento\Index\Model\Indexer\Config" /> - <type name="Magento\Index\Model\Indexer"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Index\Model\Process"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <index_setup>Magento\Index\Model\Resource\Setup</index_setup> </value> diff --git a/app/code/Magento/Install/Controller/Action.php b/app/code/Magento/Install/Controller/Action.php index 08b4771dbaf..208b96f10b2 100644 --- a/app/code/Magento/Install/Controller/Action.php +++ b/app/code/Magento/Install/Controller/Action.php @@ -30,12 +30,12 @@ namespace Magento\Install\Controller; class Action extends \Magento\Core\Controller\Varien\Action { /** - * @var \Magento\Core\Model\Config\Scope + * @var \Magento\Config\Scope */ protected $_configScope; /** - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_viewDesign; @@ -54,25 +54,25 @@ class Action extends \Magento\Core\Controller\Varien\Action /** * Application state * - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; /** * @param \Magento\Core\Controller\Varien\Action\Context $context - * @param \Magento\Core\Model\Config\Scope $configScope - * @param \Magento\Core\Model\View\DesignInterface $viewDesign + * @param \Magento\Config\Scope $configScope + * @param \Magento\View\DesignInterface $viewDesign * @param \Magento\Core\Model\Theme\CollectionFactory $collectionFactory * @param \Magento\Core\Model\App $app - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState */ public function __construct( \Magento\Core\Controller\Varien\Action\Context $context, - \Magento\Core\Model\Config\Scope $configScope, - \Magento\Core\Model\View\DesignInterface $viewDesign, + \Magento\Config\Scope $configScope, + \Magento\View\DesignInterface $viewDesign, \Magento\Core\Model\Theme\CollectionFactory $collectionFactory, \Magento\Core\Model\App $app, - \Magento\Core\Model\App\State $appState + \Magento\App\State $appState ) { $this->_configScope = $configScope; $this->_viewDesign = $viewDesign; diff --git a/app/code/Magento/Install/Controller/Index.php b/app/code/Magento/Install/Controller/Index.php index 577385efaaf..b7169cfa109 100644 --- a/app/code/Magento/Install/Controller/Index.php +++ b/app/code/Magento/Install/Controller/Index.php @@ -35,27 +35,27 @@ class Index extends \Magento\Install\Controller\Action /** * Core directory model * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_coreDir; /** * @param \Magento\Core\Controller\Varien\Action\Context $context - * @param \Magento\Core\Model\Config\Scope $configScope - * @param \Magento\Core\Model\View\DesignInterface $viewDesign + * @param \Magento\Config\Scope $configScope + * @param \Magento\View\DesignInterface $viewDesign * @param \Magento\Core\Model\Theme\CollectionFactory $collectionFactory * @param \Magento\Core\Model\App $app - * @param \Magento\Core\Model\App\State $appState - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\State $appState + * @param \Magento\App\Dir $coreDir */ public function __construct( \Magento\Core\Controller\Varien\Action\Context $context, - \Magento\Core\Model\Config\Scope $configScope, - \Magento\Core\Model\View\DesignInterface $viewDesign, + \Magento\Config\Scope $configScope, + \Magento\View\DesignInterface $viewDesign, \Magento\Core\Model\Theme\CollectionFactory $collectionFactory, \Magento\Core\Model\App $app, - \Magento\Core\Model\App\State $appState, - \Magento\Core\Model\Dir $coreDir + \Magento\App\State $appState, + \Magento\App\Dir $coreDir ) { parent::__construct($context, $configScope, $viewDesign, $collectionFactory, $app, $appState); $this->_coreDir = $coreDir; @@ -68,7 +68,7 @@ class Index extends \Magento\Install\Controller\Action { $this->setFlag('', self::FLAG_NO_CHECK_INSTALLATION, true); if (!$this->_appState->isInstalled()) { - foreach (glob($this->_coreDir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . '/*', GLOB_ONLYDIR) as $dir) { + foreach (glob($this->_coreDir->getDir(\Magento\App\Dir::VAR_DIR) . '/*', GLOB_ONLYDIR) as $dir) { \Magento\Io\File::rmdirRecursive($dir); } } diff --git a/app/code/Magento/Install/Controller/Wizard.php b/app/code/Magento/Install/Controller/Wizard.php index 7eebb257a9c..363d8b6fc9e 100644 --- a/app/code/Magento/Install/Controller/Wizard.php +++ b/app/code/Magento/Install/Controller/Wizard.php @@ -55,7 +55,7 @@ class Wizard extends \Magento\Install\Controller\Action /** * DB Updater * - * @var \Magento\Core\Model\Db\UpdaterInterface + * @var \Magento\App\UpdaterInterface */ protected $_dbUpdater; @@ -68,28 +68,28 @@ class Wizard extends \Magento\Install\Controller\Action /** * @param \Magento\Core\Controller\Varien\Action\Context $context - * @param \Magento\Core\Model\Config\Scope $configScope - * @param \Magento\Core\Model\View\DesignInterface $viewDesign + * @param \Magento\Config\Scope $configScope + * @param \Magento\View\DesignInterface $viewDesign * @param \Magento\Core\Model\Theme\CollectionFactory $collectionFactory * @param \Magento\Core\Model\App $app - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Install\Model\Installer $installer * @param \Magento\Install\Model\Wizard $wizard * @param \Magento\Core\Model\Session\Generic $session - * @param \Magento\Core\Model\Db\UpdaterInterface $dbUpdater + * @param \Magento\App\UpdaterInterface $dbUpdater * @param \Magento\Core\Model\StoreManagerInterface $storeManager */ public function __construct( \Magento\Core\Controller\Varien\Action\Context $context, - \Magento\Core\Model\Config\Scope $configScope, - \Magento\Core\Model\View\DesignInterface $viewDesign, + \Magento\Config\Scope $configScope, + \Magento\View\DesignInterface $viewDesign, \Magento\Core\Model\Theme\CollectionFactory $collectionFactory, \Magento\Core\Model\App $app, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Install\Model\Installer $installer, \Magento\Install\Model\Wizard $wizard, \Magento\Core\Model\Session\Generic $session, - \Magento\Core\Model\Db\UpdaterInterface $dbUpdater, + \Magento\App\UpdaterInterface $dbUpdater, \Magento\Core\Model\StoreManagerInterface $storeManager ) { parent::__construct($context, $configScope, $viewDesign, $collectionFactory, $app, $appState); diff --git a/app/code/Magento/Install/Model/Config.php b/app/code/Magento/Install/Model/Config.php index c94a3d77d13..16aeea67b0e 100644 --- a/app/code/Magento/Install/Model/Config.php +++ b/app/code/Magento/Install/Model/Config.php @@ -46,7 +46,7 @@ class Config /** * Directory model * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_coreDir; @@ -54,9 +54,9 @@ class Config /** * @param \Magento\Install\Model\Config\Data $dataStorage - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir */ - public function __construct(\Magento\Install\Model\Config\Data $dataStorage, \Magento\Core\Model\Dir $coreDir) + public function __construct(\Magento\Install\Model\Config\Data $dataStorage, \Magento\App\Dir $coreDir) { $this->_dataStorage = $dataStorage; $this->_coreDir = $coreDir; diff --git a/app/code/Magento/Install/Model/EntryPoint/Upgrade.php b/app/code/Magento/Install/Model/EntryPoint/Upgrade.php index a02dcdc9554..3c357ab43d8 100644 --- a/app/code/Magento/Install/Model/EntryPoint/Upgrade.php +++ b/app/code/Magento/Install/Model/EntryPoint/Upgrade.php @@ -51,8 +51,8 @@ class Upgrade extends \Magento\Core\Model\AbstractEntryPoint $cacheFrontend->clean(); } - /** @var $updater \Magento\Core\Model\Db\Updater */ - $updater = $this->_objectManager->get('Magento\Core\Model\Db\Updater'); + /** @var $updater \Magento\App\Updater */ + $updater = $this->_objectManager->get('Magento\App\Updater'); $updater->updateScheme(); $updater->updateData(); diff --git a/app/code/Magento/Install/Model/Installer.php b/app/code/Magento/Install/Model/Installer.php index 256b4c69473..74c5037923e 100644 --- a/app/code/Magento/Install/Model/Installer.php +++ b/app/code/Magento/Install/Model/Installer.php @@ -42,7 +42,7 @@ class Installer extends \Magento\Object /** * DB updated model * - * @var \Magento\Core\Model\Db\UpdaterInterface + * @var \Magento\App\UpdaterInterface */ protected $_dbUpdater; @@ -78,7 +78,7 @@ class Installer extends \Magento\Object protected $_coreData = null; /** - * @var \Magento\Core\Model\Resource\SetupFactory + * @var \Magento\App\Updater\SetupFactory */ protected $_setupFactory; @@ -113,7 +113,7 @@ class Installer extends \Magento\Object /** * Application * - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; @@ -155,15 +155,15 @@ class Installer extends \Magento\Object /** * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Model\ConfigInterface $config - * @param \Magento\Core\Model\Db\UpdaterInterface $dbUpdater + * @param \Magento\App\UpdaterInterface $dbUpdater * @param \Magento\Core\Model\CacheInterface $cache * @param \Magento\Core\Model\Cache\TypeListInterface $cacheTypeList * @param \Magento\Core\Model\Cache\StateInterface $cacheState - * @param \Magento\Core\Model\Resource\SetupFactory $setupFactory + * @param \Magento\App\Updater\SetupFactory $setupFactory * @param \Magento\Core\Model\Config\Primary $primaryConfig * @param \Magento\Core\Model\Config\Local $localConfig * @param \Magento\Core\Model\App $app - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\User\Model\UserFactory $userModelFactory * @param \Magento\Install\Model\Installer\Filesystem $filesystem @@ -176,15 +176,15 @@ class Installer extends \Magento\Object public function __construct( \Magento\Core\Helper\Data $coreData, \Magento\Core\Model\ConfigInterface $config, - \Magento\Core\Model\Db\UpdaterInterface $dbUpdater, + \Magento\App\UpdaterInterface $dbUpdater, \Magento\Core\Model\CacheInterface $cache, \Magento\Core\Model\Cache\TypeListInterface $cacheTypeList, \Magento\Core\Model\Cache\StateInterface $cacheState, - \Magento\Core\Model\Resource\SetupFactory $setupFactory, + \Magento\App\Updater\SetupFactory $setupFactory, \Magento\Core\Model\Config\Primary $primaryConfig, \Magento\Core\Model\Config\Local $localConfig, \Magento\Core\Model\App $app, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\User\Model\UserFactory $userModelFactory, \Magento\Install\Model\Installer\Filesystem $filesystem, @@ -336,9 +336,7 @@ class Installer extends \Magento\Object * Saving host information into DB */ /** @var $setupModel \Magento\Core\Model\Resource\Setup */ - $setupModel = $this->_setupFactory->create( - 'Magento\Core\Model\Resource\Setup', array('resourceName' => 'core_setup', 'moduleName' => 'Magento_Core') - ); + $setupModel = $this->_setupFactory->create('core_setup', 'Magento_Core'); if (!empty($data['use_rewrites'])) { $setupModel->setConfigData(\Magento\Core\Model\Store::XML_PATH_USE_REWRITES, 1); diff --git a/app/code/Magento/Install/Model/Installer/Config.php b/app/code/Magento/Install/Model/Installer/Config.php index afcd2ab5d62..15e3c728588 100644 --- a/app/code/Magento/Install/Model/Installer/Config.php +++ b/app/code/Magento/Install/Model/Installer/Config.php @@ -45,12 +45,12 @@ class Config extends \Magento\Install\Model\Installer\AbstractInstaller protected $_localConfigFile; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs; @@ -70,20 +70,20 @@ class Config extends \Magento\Install\Model\Installer\AbstractInstaller /** * @param \Magento\Install\Model\Installer $installer - * @param \Magento\Core\Controller\Request\Http $request - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\RequestInterface $request + * @param \Magento\App\Dir $dirs * @param \Magento\Filesystem $filesystem * @param \Magento\Core\Model\StoreManagerInterface $storeManager */ public function __construct( \Magento\Install\Model\Installer $installer, - \Magento\Core\Controller\Request\Http $request, - \Magento\Core\Model\Dir $dirs, + \Magento\App\RequestInterface $request, + \Magento\App\Dir $dirs, \Magento\Filesystem $filesystem, \Magento\Core\Model\StoreManagerInterface $storeManager ) { parent::__construct($installer); - $this->_localConfigFile = $dirs->getDir(\Magento\Core\Model\Dir::CONFIG) . DIRECTORY_SEPARATOR . 'local.xml'; + $this->_localConfigFile = $dirs->getDir(\Magento\App\Dir::CONFIG) . DIRECTORY_SEPARATOR . 'local.xml'; $this->_dirs = $dirs; $this->_request = $request; $this->_filesystem = $filesystem; @@ -111,9 +111,9 @@ class Config extends \Magento\Install\Model\Installer\AbstractInstaller $data = $this->getConfigData(); $defaults = array( - 'root_dir' => $this->_dirs->getDir(\Magento\Core\Model\Dir::ROOT), - 'app_dir' => $this->_dirs->getDir(\Magento\Core\Model\Dir::APP), - 'var_dir' => $this->_dirs->getDir(\Magento\Core\Model\Dir::VAR_DIR), + 'root_dir' => $this->_dirs->getDir(\Magento\App\Dir::ROOT), + 'app_dir' => $this->_dirs->getDir(\Magento\App\Dir::APP), + 'var_dir' => $this->_dirs->getDir(\Magento\App\Dir::VAR_DIR), 'base_url' => $this->_request->getDistroBaseUrl(), ); foreach ($defaults as $index => $value) { @@ -151,7 +151,7 @@ class Config extends \Magento\Install\Model\Installer\AbstractInstaller $this->_getInstaller()->getDataModel()->setConfigData($data); - $path = $this->_dirs->getDir(\Magento\Core\Model\Dir::CONFIG) . DIRECTORY_SEPARATOR . 'local.xml.template'; + $path = $this->_dirs->getDir(\Magento\App\Dir::CONFIG) . DIRECTORY_SEPARATOR . 'local.xml.template'; $contents = $this->_filesystem->read($path); foreach ($data as $index => $value) { $contents = str_replace('{{' . $index . '}}', '<![CDATA[' . $value . ']]>', $contents); @@ -197,9 +197,9 @@ class Config extends \Magento\Install\Model\Installer\AbstractInstaller protected function _checkUrl($baseUrl) { try { - $pubLibDir = $this->_dirs->getDir(\Magento\Core\Model\Dir::PUB_LIB); + $pubLibDir = $this->_dirs->getDir(\Magento\App\Dir::PUB_LIB); $staticFile = $this->_findFirstFileRelativePath($pubLibDir, '/.+\.(html?|js|css|gif|jpe?g|png)$/'); - $staticUrl = $baseUrl . $this->_dirs->getUri(\Magento\Core\Model\Dir::PUB_LIB) . '/' . $staticFile; + $staticUrl = $baseUrl . $this->_dirs->getUri(\Magento\App\Dir::PUB_LIB) . '/' . $staticFile; $client = new \Magento\HTTP\ZendClient($staticUrl); $response = $client->request('GET'); } catch (\Exception $e){ diff --git a/app/code/Magento/Install/Model/Installer/Console.php b/app/code/Magento/Install/Model/Installer/Console.php index fb0d59ee3d9..e6f031c5e27 100644 --- a/app/code/Magento/Install/Model/Installer/Console.php +++ b/app/code/Magento/Install/Model/Installer/Console.php @@ -96,7 +96,7 @@ class Console extends \Magento\Install\Model\Installer\AbstractInstaller /** * DB updater * - * @var \Magento\Core\Model\Db\UpdaterInterface + * @var \Magento\App\UpdaterInterface */ protected $_dbUpdater; @@ -110,14 +110,14 @@ class Console extends \Magento\Install\Model\Installer\AbstractInstaller /** * Application State * - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; /** * Core Dir model * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_coreDir; @@ -138,22 +138,22 @@ class Console extends \Magento\Install\Model\Installer\AbstractInstaller /** * @param \Magento\Install\Model\Installer $installer * @param \Magento\Core\Model\Config\Resource $resourceConfig - * @param \Magento\Core\Model\Db\UpdaterInterface $dbUpdater + * @param \Magento\App\UpdaterInterface $dbUpdater * @param \Magento\Filesystem $filesystem * @param \Magento\Install\Model\Installer\Data $installerData - * @param \Magento\Core\Model\App\State $appState - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\State $appState + * @param \Magento\App\Dir $coreDir * @param \Magento\Core\Model\LocaleInterface $locale * @param \Magento\ObjectManager $objectManager */ public function __construct( \Magento\Install\Model\Installer $installer, \Magento\Core\Model\Config\Resource $resourceConfig, - \Magento\Core\Model\Db\UpdaterInterface $dbUpdater, + \Magento\App\UpdaterInterface $dbUpdater, \Magento\Filesystem $filesystem, \Magento\Install\Model\Installer\Data $installerData, - \Magento\Core\Model\App\State $appState, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\State $appState, + \Magento\App\Dir $coreDir, \Magento\Core\Model\LocaleInterface $locale, \Magento\ObjectManager $objectManager ) { @@ -409,10 +409,10 @@ class Console extends \Magento\Install\Model\Installer\AbstractInstaller $this->_cleanUpDatabase(); /* Remove temporary directories and local.xml */ - foreach (glob($this->_coreDir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . '/*', GLOB_ONLYDIR) as $dir) { + foreach (glob($this->_coreDir->getDir(\Magento\App\Dir::VAR_DIR) . '/*', GLOB_ONLYDIR) as $dir) { $this->_filesystem->delete($dir); } - $this->_filesystem->delete($this->_coreDir->getDir(\Magento\Core\Model\Dir::CONFIG) + $this->_filesystem->delete($this->_coreDir->getDir(\Magento\App\Dir::CONFIG) . DIRECTORY_SEPARATOR . '/local.xml'); return true; } diff --git a/app/code/Magento/Install/Model/Installer/Filesystem.php b/app/code/Magento/Install/Model/Installer/Filesystem.php index a8554112e43..687d2275147 100644 --- a/app/code/Magento/Install/Model/Installer/Filesystem.php +++ b/app/code/Magento/Install/Model/Installer/Filesystem.php @@ -55,7 +55,7 @@ class Filesystem extends \Magento\Install\Model\Installer\AbstractInstaller protected $_installConfig; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -70,13 +70,13 @@ class Filesystem extends \Magento\Install\Model\Installer\AbstractInstaller * @param \Magento\Install\Model\Installer $installer * @param \Magento\Filesystem $filesystem * @param \Magento\Install\Model\Config $installConfig - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir */ public function __construct( \Magento\Install\Model\Installer $installer, \Magento\Filesystem $filesystem, \Magento\Install\Model\Config $installConfig, - \Magento\Core\Model\Dir $dir + \Magento\App\Dir $dir ) { parent::__construct($installer); $this->_filesystem = $filesystem; diff --git a/app/code/Magento/Install/Model/Wizard.php b/app/code/Magento/Install/Model/Wizard.php index 3d3e4c1a1a0..7efa2688855 100644 --- a/app/code/Magento/Install/Model/Wizard.php +++ b/app/code/Magento/Install/Model/Wizard.php @@ -41,14 +41,14 @@ class Wizard /** * Url builder * - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; /** * Init install wizard */ - public function __construct(\Magento\Core\Model\UrlInterface $urlBuilder, \Magento\Install\Model\Config $installConfig) + public function __construct(\Magento\UrlInterface $urlBuilder, \Magento\Install\Model\Config $installConfig) { $this->_steps = $installConfig->getWizardSteps(); $this->_urlBuilder = $urlBuilder; diff --git a/app/code/Magento/Log/Model/Resource/Log.php b/app/code/Magento/Log/Model/Resource/Log.php index 8a52c8e2c1b..0215c8d55ec 100644 --- a/app/code/Magento/Log/Model/Resource/Log.php +++ b/app/code/Magento/Log/Model/Resource/Log.php @@ -39,7 +39,7 @@ class Log extends \Magento\Core\Model\Resource\Db\AbstractDb /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -50,12 +50,12 @@ class Log extends \Magento\Core\Model\Resource\Db\AbstractDb /** * @param \Magento\Core\Model\Date $date - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Resource $resource */ public function __construct( \Magento\Core\Model\Date $date, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Resource $resource ) { $this->_date = $date; diff --git a/app/code/Magento/Log/Model/Resource/Visitor/Online/Collection.php b/app/code/Magento/Log/Model/Resource/Visitor/Online/Collection.php index 8b3e8d1a708..18d724d14e2 100644 --- a/app/code/Magento/Log/Model/Resource/Visitor/Online/Collection.php +++ b/app/code/Magento/Log/Model/Resource/Visitor/Online/Collection.php @@ -50,7 +50,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl /** * @param \Magento\Customer\Model\CustomerFactory $customerFactory - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -58,7 +58,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl */ public function __construct( \Magento\Customer\Model\CustomerFactory $customerFactory, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Log/Model/Resource/Visitor/Online/Grid/Collection.php b/app/code/Magento/Log/Model/Resource/Visitor/Online/Grid/Collection.php index 34204d6e09c..08217b631be 100644 --- a/app/code/Magento/Log/Model/Resource/Visitor/Online/Grid/Collection.php +++ b/app/code/Magento/Log/Model/Resource/Visitor/Online/Grid/Collection.php @@ -35,7 +35,7 @@ class Collection extends \Magento\Log\Model\Resource\Visitor\Online\Collection /** * @param \Magento\Log\Model\Visitor\OnlineFactory $onlineFactory * @param \Magento\Customer\Model\CustomerFactory $customerFactory - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -44,7 +44,7 @@ class Collection extends \Magento\Log\Model\Resource\Visitor\Online\Collection public function __construct( \Magento\Log\Model\Visitor\OnlineFactory $onlineFactory, \Magento\Customer\Model\CustomerFactory $customerFactory, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Log/Model/Shell.php b/app/code/Magento/Log/Model/Shell.php index acec697b53a..8172d9c5d1c 100644 --- a/app/code/Magento/Log/Model/Shell.php +++ b/app/code/Magento/Log/Model/Shell.php @@ -43,14 +43,14 @@ class Shell extends \Magento\Core\Model\AbstractShell /** * @param \Magento\Log\Model\Shell\Command\Factory $commandFactory * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Dir $entryPoint - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $entryPoint + * @param \Magento\App\Dir $dir */ public function __construct( \Magento\Log\Model\Shell\Command\Factory $commandFactory, \Magento\Filesystem $filesystem, $entryPoint, - \Magento\Core\Model\Dir $dir + \Magento\App\Dir $dir ) { parent::__construct($filesystem, $entryPoint, $dir); $this->_commandFactory = $commandFactory; diff --git a/app/code/Magento/Log/Model/Visitor.php b/app/code/Magento/Log/Model/Visitor.php index 1b55a934aee..33d3a4775ab 100644 --- a/app/code/Magento/Log/Model/Visitor.php +++ b/app/code/Magento/Log/Model/Visitor.php @@ -69,7 +69,7 @@ class Visitor extends \Magento\Core\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -116,7 +116,7 @@ class Visitor extends \Magento\Core\Model\AbstractModel * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Customer\Model\CustomerFactory $customerFactory * @param \Magento\Sales\Model\QuoteFactory $quoteFactory * @param \Magento\Core\Model\Session $session @@ -135,7 +135,7 @@ class Visitor extends \Magento\Core\Model\AbstractModel \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Customer\Model\CustomerFactory $customerFactory, \Magento\Sales\Model\QuoteFactory $quoteFactory, \Magento\Core\Model\Session $session, diff --git a/app/code/Magento/Log/etc/di.xml b/app/code/Magento/Log/etc/di.xml index 755ba033659..2b08c245291 100644 --- a/app/code/Magento/Log/etc/di.xml +++ b/app/code/Magento/Log/etc/di.xml @@ -30,9 +30,6 @@ </param> </type> <type name="Magento\Log\Model\Visitor"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> <param name="ignoredUserAgents"> <value> <google1>Googlebot/1.0 (googlebot@googlebot.com http://googlebot.com/)</google1> @@ -41,16 +38,4 @@ </value> </param> </type> - <type name="Magento\Log\Model\Resource\Log"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - <param name="ignores"> - <value> - <install>install</install> - <adminhtml>adminhtml</adminhtml> - <admin>admin</admin> - </value> - </param> - </type> </config> diff --git a/app/code/Magento/Newsletter/Helper/Data.php b/app/code/Magento/Newsletter/Helper/Data.php index b51604f303d..1111128060d 100644 --- a/app/code/Magento/Newsletter/Helper/Data.php +++ b/app/code/Magento/Newsletter/Helper/Data.php @@ -39,7 +39,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper /** * Url * - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_url; @@ -47,11 +47,11 @@ class Data extends \Magento\Core\Helper\AbstractHelper * Constructor * * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\UrlInterface $url + * @param \Magento\UrlInterface $url */ public function __construct( \Magento\Core\Helper\Context $context, - \Magento\Core\Model\UrlInterface $url + \Magento\UrlInterface $url ) { parent::__construct($context); $this->_url = $url; diff --git a/app/code/Magento/Newsletter/Model/Queue.php b/app/code/Magento/Newsletter/Model/Queue.php index 77b0ed99abc..ae8e581e959 100644 --- a/app/code/Magento/Newsletter/Model/Queue.php +++ b/app/code/Magento/Newsletter/Model/Queue.php @@ -139,7 +139,7 @@ class Queue extends \Magento\Core\Model\Template /** * Construct * - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Core\Model\App\Emulation $appEmulation @@ -154,7 +154,7 @@ class Queue extends \Magento\Core\Model\Template * @param array $data */ public function __construct( - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Core\Model\App\Emulation $appEmulation, diff --git a/app/code/Magento/Newsletter/Model/Resource/Problem/Collection.php b/app/code/Magento/Newsletter/Model/Resource/Problem/Collection.php index 0817e7a1e9d..818ff4a80a3 100644 --- a/app/code/Magento/Newsletter/Model/Resource/Problem/Collection.php +++ b/app/code/Magento/Newsletter/Model/Resource/Problem/Collection.php @@ -57,7 +57,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl /** * Construct * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -65,7 +65,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Newsletter/Model/Resource/Queue/Collection.php b/app/code/Magento/Newsletter/Model/Resource/Queue/Collection.php index c8d19e9e262..42d5499f175 100644 --- a/app/code/Magento/Newsletter/Model/Resource/Queue/Collection.php +++ b/app/code/Magento/Newsletter/Model/Resource/Queue/Collection.php @@ -60,7 +60,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl /** * Construct * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -68,7 +68,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Newsletter/Model/Resource/Subscriber/Collection.php b/app/code/Magento/Newsletter/Model/Resource/Subscriber/Collection.php index 20a687ced5f..de21c679c74 100644 --- a/app/code/Magento/Newsletter/Model/Resource/Subscriber/Collection.php +++ b/app/code/Magento/Newsletter/Model/Resource/Subscriber/Collection.php @@ -82,7 +82,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl /** * Construct * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -90,7 +90,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Newsletter/Model/Template.php b/app/code/Magento/Newsletter/Model/Template.php index fc73a0c80ea..680a6729621 100644 --- a/app/code/Magento/Newsletter/Model/Template.php +++ b/app/code/Magento/Newsletter/Model/Template.php @@ -82,7 +82,7 @@ class Template extends \Magento\Core\Model\Template /** * Http-request, used to determine current store in multi-store mode * - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; @@ -108,11 +108,11 @@ class Template extends \Magento\Core\Model\Template protected $_templateFactory; /** - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @param \Magento\Newsletter\Model\Template\Filter $filter * @param \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig * @param \Magento\Newsletter\Model\TemplateFactory $templateFactory @@ -120,11 +120,11 @@ class Template extends \Magento\Core\Model\Template * @param array $data */ public function __construct( - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Controller\Request\Http $request, + \Magento\App\RequestInterface $request, \Magento\Newsletter\Model\Template\Filter $filter, \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig, \Magento\Newsletter\Model\TemplateFactory $templateFactory, diff --git a/app/code/Magento/Newsletter/etc/di.xml b/app/code/Magento/Newsletter/etc/di.xml index 807ef648c1a..b428f17ca3f 100644 --- a/app/code/Magento/Newsletter/etc/di.xml +++ b/app/code/Magento/Newsletter/etc/di.xml @@ -24,8 +24,8 @@ */ --> <config> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <newsletter_setup>Magento\Newsletter\Model\Resource\Setup</newsletter_setup> </value> diff --git a/app/code/Magento/Oauth/Helper/Data.php b/app/code/Magento/Oauth/Helper/Data.php index 6bee4929e0e..cc60e4f4059 100644 --- a/app/code/Magento/Oauth/Helper/Data.php +++ b/app/code/Magento/Oauth/Helper/Data.php @@ -103,7 +103,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper /** * Process HTTP request object and prepare for token validation * - * @param \Zend_Controller_Request_Http $httpRequest + * @param \Magento\App\RequestInterface $httpRequest * @param array $bodyParams array of key value body parameters * @return array */ @@ -255,12 +255,12 @@ class Data extends \Magento\Core\Helper\AbstractHelper * Create response string for problem during request and set HTTP error code * * @param \Exception $exception - * @param \Zend_Controller_Response_Http $response OPTIONAL If NULL - will use internal getter + * @param \Magento\App\ResponseInterface $response OPTIONAL If NULL - will use internal getter * @return string */ public function prepareErrorResponse( \Exception $exception, - \Zend_Controller_Response_Http $response = null + \Magento\App\ResponseInterface $response = null ) { $errorMap = $this->_errors; $errorsToHttpCode = $this->_errorsToHttpCode; diff --git a/app/code/Magento/Oauth/Model/Consumer.php b/app/code/Magento/Oauth/Model/Consumer.php index 025bd7ab90b..958bfb9380d 100644 --- a/app/code/Magento/Oauth/Model/Consumer.php +++ b/app/code/Magento/Oauth/Model/Consumer.php @@ -58,7 +58,7 @@ class Consumer extends \Magento\Core\Model\AbstractModel const SECRET_LENGTH = 32; /** - * @var \Magento\Core\Model\Url\Validator + * @var \Magento\Url\Validator */ protected $urlValidator; @@ -69,7 +69,7 @@ class Consumer extends \Magento\Core\Model\AbstractModel /** * @param \Magento\Oauth\Model\Consumer\Validator\KeyLengthFactory $keyLengthFactory - * @param \Magento\Core\Model\Url\Validator $urlValidator + * @param \Magento\Url\Validator $urlValidator * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Core\Model\Resource\AbstractResource $resource @@ -78,7 +78,7 @@ class Consumer extends \Magento\Core\Model\AbstractModel */ public function __construct( \Magento\Oauth\Model\Consumer\Validator\KeyLengthFactory $keyLengthFactory, - \Magento\Core\Model\Url\Validator $urlValidator, + \Magento\Url\Validator $urlValidator, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Core\Model\Resource\AbstractResource $resource = null, diff --git a/app/code/Magento/Oauth/Model/Token.php b/app/code/Magento/Oauth/Model/Token.php index c37daa3b383..2b521313ba7 100644 --- a/app/code/Magento/Oauth/Model/Token.php +++ b/app/code/Magento/Oauth/Model/Token.php @@ -87,7 +87,7 @@ class Token extends \Magento\Core\Model\AbstractModel protected $_consumerFactory; /** - * @var \Magento\Core\Model\Url\Validator + * @var \Magento\Url\Validator */ protected $urlValidator; @@ -98,7 +98,7 @@ class Token extends \Magento\Core\Model\AbstractModel /** * @param \Magento\Oauth\Model\Consumer\Validator\KeyLengthFactory $keyLengthFactory - * @param \Magento\Core\Model\Url\Validator $urlValidator + * @param \Magento\Url\Validator $urlValidator * @param \Magento\Oauth\Model\Consumer\Factory $consumerFactory * @param \Magento\Oauth\Helper\Service $oauthData * @param \Magento\Core\Model\Context $context @@ -109,7 +109,7 @@ class Token extends \Magento\Core\Model\AbstractModel */ public function __construct( \Magento\Oauth\Model\Consumer\Validator\KeyLengthFactory $keyLengthFactory, - \Magento\Core\Model\Url\Validator $urlValidator, + \Magento\Url\Validator $urlValidator, \Magento\Oauth\Model\Consumer\Factory $consumerFactory, \Magento\Oauth\Helper\Service $oauthData, \Magento\Core\Model\Context $context, diff --git a/app/code/Magento/Ogone/Block/Placeform.php b/app/code/Magento/Ogone/Block/Placeform.php index 499337ffd8f..8ceb4e11a34 100644 --- a/app/code/Magento/Ogone/Block/Placeform.php +++ b/app/code/Magento/Ogone/Block/Placeform.php @@ -77,7 +77,7 @@ class Placeform extends \Magento\Core\Block\Template } /** - * Return order instance with loaded onformation by increment id + * Return order instance with loaded information by increment id * * @return \Magento\Sales\Model\Order */ diff --git a/app/code/Magento/Ogone/Model/Api.php b/app/code/Magento/Ogone/Model/Api.php index dc45938c57d..1c0008bf831 100644 --- a/app/code/Magento/Ogone/Model/Api.php +++ b/app/code/Magento/Ogone/Model/Api.php @@ -189,7 +189,7 @@ class Api extends \Magento\Payment\Model\Method\AbstractMethod protected $_coreString = null; /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; @@ -206,24 +206,24 @@ class Api extends \Magento\Payment\Model\Method\AbstractMethod /** * Construct * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Model\LocaleInterface $locale - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Core\Helper\String $coreString * @param \Magento\Ogone\Model\Config $config * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Core\Model\LocaleInterface $locale, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\UrlInterface $urlBuilder, \Magento\Core\Helper\String $coreString, \Magento\Ogone\Model\Config $config, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, @@ -433,9 +433,9 @@ class Api extends \Magento\Payment\Model\Method\AbstractMethod protected function _getOgonePaymentOperation() { $value = $this->getPaymentAction(); - if ($value==Magento_Payment_Model_Method_AbstractMethod::ACTION_AUTHORIZE) { + if ($value == \Magento\Payment\Model\Method\AbstractMethod::ACTION_AUTHORIZE) { $value = \Magento\Ogone\Model\Api::OGONE_AUTHORIZE_ACTION; - } elseif ($value==Magento_Payment_Model_Method_AbstractMethod::ACTION_AUTHORIZE_CAPTURE) { + } elseif ($value == \Magento\Payment\Model\Method\AbstractMethod::ACTION_AUTHORIZE_CAPTURE) { $value = \Magento\Ogone\Model\Api::OGONE_AUTHORIZE_CAPTURE_ACTION; } return $value; diff --git a/app/code/Magento/Ogone/Model/Config.php b/app/code/Magento/Ogone/Model/Config.php index 7dc096c362e..7539df6ea65 100644 --- a/app/code/Magento/Ogone/Model/Config.php +++ b/app/code/Magento/Ogone/Model/Config.php @@ -41,18 +41,29 @@ class Config extends \Magento\Payment\Model\Config protected $_coreData = null; /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; /** - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Core\Helper\Data $coreData + * @param \Magento\Core\Model\Store\Config $coreStoreConfig + * @param \Magento\Core\Model\Config $coreConfig + * @param \Magento\Payment\Model\Method\Factory $paymentMethodFactory + * @param \Magento\Core\Model\LocaleInterface $locale + * @param \Magento\Config\DataInterface $dataStorage */ public function __construct( - \Magento\Core\Model\UrlInterface $urlBuilder, - \Magento\Core\Helper\Data $coreData + \Magento\UrlInterface $urlBuilder, + \Magento\Core\Helper\Data $coreData, + \Magento\Core\Model\Store\Config $coreStoreConfig, + \Magento\Core\Model\Config $coreConfig, + \Magento\Payment\Model\Method\Factory $paymentMethodFactory, + \Magento\Core\Model\LocaleInterface $locale, + \Magento\Config\DataInterface $dataStorage ) { + parent::__construct($coreStoreConfig, $coreConfig, $paymentMethodFactory, $locale, $dataStorage); $this->_urlBuilder = $urlBuilder; $this->_coreData = $coreData; } diff --git a/app/code/Magento/Page/Block/Html/Head.php b/app/code/Magento/Page/Block/Html/Head.php index 9e9715f762d..9a920200f54 100644 --- a/app/code/Magento/Page/Block/Html/Head.php +++ b/app/code/Magento/Page/Block/Html/Head.php @@ -90,7 +90,7 @@ class Head extends \Magento\Core\Block\Template protected $_storeManager; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dir; @@ -101,7 +101,7 @@ class Head extends \Magento\Core\Block\Template /** * @param \Magento\Core\Model\LocaleInterface $locale - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Helper\File\Storage\Database $fileStorageDatabase * @param \Magento\Core\Helper\Data $coreData @@ -114,7 +114,7 @@ class Head extends \Magento\Core\Block\Template */ public function __construct( \Magento\Core\Model\LocaleInterface $locale, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Core\Helper\File\Storage\Database $fileStorageDatabase, \Magento\Core\Helper\Data $coreData, diff --git a/app/code/Magento/Page/Block/Html/Header.php b/app/code/Magento/Page/Block/Html/Header.php index 9c72976000e..4028d10002b 100644 --- a/app/code/Magento/Page/Block/Html/Header.php +++ b/app/code/Magento/Page/Block/Html/Header.php @@ -41,19 +41,19 @@ class Header extends \Magento\Core\Block\Template protected $_customerSession; /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; /** - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Customer\Model\Session $customerSession * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Block\Template\Context $context * @param array $data */ public function __construct( - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Customer\Model\Session $customerSession, \Magento\Core\Helper\Data $coreData, \Magento\Core\Block\Template\Context $context, @@ -131,7 +131,7 @@ class Header extends \Magento\Core\Block\Template $storeLogoPath = $this->_storeConfig->getConfig('design/header/logo_src'); $logoUrl = $this->_urlBuilder->getBaseUrl(array('_type' => \Magento\Core\Model\Store::URL_TYPE_MEDIA)) . $folderName . '/' . $storeLogoPath; - $absolutePath = $this->_dirs->getDir(\Magento\Core\Model\Dir::MEDIA) . DIRECTORY_SEPARATOR + $absolutePath = $this->_dirs->getDir(\Magento\App\Dir::MEDIA) . DIRECTORY_SEPARATOR . $folderName . DIRECTORY_SEPARATOR . $storeLogoPath; if (!is_null($storeLogoPath) && $this->_isFile($absolutePath)) { diff --git a/app/code/Magento/Page/Block/Html/Welcome.php b/app/code/Magento/Page/Block/Html/Welcome.php index 099fae0df0f..e9588db92f7 100644 --- a/app/code/Magento/Page/Block/Html/Welcome.php +++ b/app/code/Magento/Page/Block/Html/Welcome.php @@ -36,18 +36,18 @@ namespace Magento\Page\Block\Html; class Welcome extends \Magento\Core\Block\Template { /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; /** - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Block\Template\Context $context * @param array $data */ public function __construct( - \Magento\Core\Model\Layout $layout, + \Magento\View\LayoutInterface $layout, \Magento\Core\Helper\Data $coreData, \Magento\Core\Block\Template\Context $context, array $data = array() diff --git a/app/code/Magento/Page/Block/Js/Components.php b/app/code/Magento/Page/Block/Js/Components.php index 41b2c7e2f6f..1c1e3116fbf 100644 --- a/app/code/Magento/Page/Block/Js/Components.php +++ b/app/code/Magento/Page/Block/Js/Components.php @@ -29,20 +29,20 @@ namespace Magento\Page\Block\Js; class Components extends \Magento\Core\Block\Template { /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; /** * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Block\Template\Context $context - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param array $data */ public function __construct( \Magento\Core\Helper\Data $coreData, \Magento\Core\Block\Template\Context $context, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, array $data = array() ) { parent::__construct($coreData, $context, $data); @@ -54,6 +54,6 @@ class Components extends \Magento\Core\Block\Template */ public function isDeveloperMode() { - return $this->_appState->getMode() == \Magento\Core\Model\App\State::MODE_DEVELOPER; + return $this->_appState->getMode() == \Magento\App\State::MODE_DEVELOPER; } } diff --git a/app/code/Magento/Page/Helper/Layout.php b/app/code/Magento/Page/Helper/Layout.php index d0f750cbda1..10986749410 100644 --- a/app/code/Magento/Page/Helper/Layout.php +++ b/app/code/Magento/Page/Helper/Layout.php @@ -36,7 +36,7 @@ namespace Magento\Page\Helper; class Layout extends \Magento\Core\Helper\AbstractHelper { /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -47,12 +47,12 @@ class Layout extends \Magento\Core\Helper\AbstractHelper /** * @param \Magento\Page\Model\Config $config - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @param \Magento\Core\Helper\Context $context */ public function __construct( \Magento\Page\Model\Config $config, - \Magento\Core\Model\Layout $layout, + \Magento\View\LayoutInterface $layout, \Magento\Core\Helper\Context $context ) { parent::__construct($context); diff --git a/app/code/Magento/Paygate/Model/Authorizenet.php b/app/code/Magento/Paygate/Model/Authorizenet.php index a5951a0a4f1..c79fd2a9da4 100644 --- a/app/code/Magento/Paygate/Model/Authorizenet.php +++ b/app/code/Magento/Paygate/Model/Authorizenet.php @@ -239,9 +239,9 @@ class Authorizenet extends \Magento\Payment\Model\Method\Cc * @param \Magento\Sales\Model\OrderFactory $orderFactory * @param \Magento\Core\Model\Session\AbstractSession $session * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Paygate\Helper\Data $paygateData - * @param \Magento\Core\Model\ModuleListInterface $moduleList + * @param \Magento\App\ModuleListInterface $moduleList * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory @@ -256,9 +256,9 @@ class Authorizenet extends \Magento\Payment\Model\Method\Cc \Magento\Sales\Model\OrderFactory $orderFactory, \Magento\Core\Model\Session\AbstractSession $session, \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Paygate\Helper\Data $paygateData, - \Magento\Core\Model\ModuleListInterface $moduleList, + \Magento\App\ModuleListInterface $moduleList, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, diff --git a/app/code/Magento/Payment/Helper/Data.php b/app/code/Magento/Payment/Helper/Data.php index 51423c76a49..c8abd936ef1 100644 --- a/app/code/Magento/Payment/Helper/Data.php +++ b/app/code/Magento/Payment/Helper/Data.php @@ -44,7 +44,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper /** * Layout * - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -74,7 +74,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper * * @param \Magento\Core\Helper\Context $context * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @param \Magento\Payment\Model\Method\Factory $paymentMethodFactory * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\App\Emulation $appEmulation @@ -83,7 +83,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper public function __construct( \Magento\Core\Helper\Context $context, \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Core\Model\Layout $layout, + \Magento\View\LayoutInterface $layout, \Magento\Payment\Model\Method\Factory $paymentMethodFactory, \Magento\Core\Model\Config $config, \Magento\Core\Model\App\Emulation $appEmulation, diff --git a/app/code/Magento/Payment/Model/Method/AbstractMethod.php b/app/code/Magento/Payment/Model/Method/AbstractMethod.php index e32b415b960..8bb3acd26fa 100644 --- a/app/code/Magento/Payment/Model/Method/AbstractMethod.php +++ b/app/code/Magento/Payment/Model/Method/AbstractMethod.php @@ -122,7 +122,7 @@ abstract class AbstractMethod extends \Magento\Object /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -136,14 +136,14 @@ abstract class AbstractMethod extends \Magento\Object /** * Construct * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, diff --git a/app/code/Magento/Payment/Model/Method/Cc.php b/app/code/Magento/Payment/Model/Method/Cc.php index 3925b4065c8..577b38313c7 100644 --- a/app/code/Magento/Payment/Model/Method/Cc.php +++ b/app/code/Magento/Payment/Model/Method/Cc.php @@ -33,7 +33,7 @@ class Cc extends \Magento\Payment\Model\Method\AbstractMethod protected $_canSaveCc = false; /** - * @var \Magento\Core\Model\ModuleListInterface + * @var \Magento\App\ModuleListInterface */ protected $_moduleList; @@ -62,9 +62,9 @@ class Cc extends \Magento\Payment\Model\Method\AbstractMethod * Construct * * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Core\Model\ModuleListInterface $moduleList + * @param \Magento\App\ModuleListInterface $moduleList * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory * @param \Magento\Core\Model\LocaleInterface $locale @@ -73,9 +73,9 @@ class Cc extends \Magento\Payment\Model\Method\AbstractMethod */ public function __construct( \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Core\Model\ModuleListInterface $moduleList, + \Magento\App\ModuleListInterface $moduleList, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, \Magento\Core\Model\LocaleInterface $locale, diff --git a/app/code/Magento/Payment/Model/Method/Free.php b/app/code/Magento/Payment/Model/Method/Free.php index e359032fc86..da2eb6c120e 100644 --- a/app/code/Magento/Payment/Model/Method/Free.php +++ b/app/code/Magento/Payment/Model/Method/Free.php @@ -61,7 +61,7 @@ class Free extends \Magento\Payment\Model\Method\AbstractMethod /** * Construct * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory @@ -69,7 +69,7 @@ class Free extends \Magento\Payment\Model\Method\AbstractMethod * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, diff --git a/app/code/Magento/Payment/etc/di.xml b/app/code/Magento/Payment/etc/di.xml index 6a264f78790..e2e5198884e 100644 --- a/app/code/Magento/Payment/etc/di.xml +++ b/app/code/Magento/Payment/etc/di.xml @@ -24,21 +24,6 @@ */ --> <config> - <type name="Magento\Payment\Model\Method\AbstractMethod"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Paypal\Model\Cart"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Paypal\Model\Payment\Transaction"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> <type name="Magento\Payment\Model\Config\Reader"> <param name="fileName"> <value>payment.xml</value> diff --git a/app/code/Magento/Paypal/Controller/Express.php b/app/code/Magento/Paypal/Controller/Express.php index ac44a462e64..8445f06224e 100644 --- a/app/code/Magento/Paypal/Controller/Express.php +++ b/app/code/Magento/Paypal/Controller/Express.php @@ -63,7 +63,7 @@ class Express extends \Magento\Paypal\Controller\Express\AbstractExpress /** * @param \Magento\Core\Controller\Varien\Action\Context $context * @param \Magento\Customer\Model\Session $customerSession - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Sales\Model\QuoteFactory $quoteFactory * @param \Magento\Checkout\Model\Session $checkoutSession * @param \Magento\Sales\Model\OrderFactory $orderFactory @@ -77,7 +77,7 @@ class Express extends \Magento\Paypal\Controller\Express\AbstractExpress public function __construct( \Magento\Core\Controller\Varien\Action\Context $context, \Magento\Customer\Model\Session $customerSession, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\UrlInterface $urlBuilder, \Magento\Sales\Model\QuoteFactory $quoteFactory, \Magento\Checkout\Model\Session $checkoutSession, \Magento\Sales\Model\OrderFactory $orderFactory, diff --git a/app/code/Magento/Paypal/Controller/Express/AbstractExpress.php b/app/code/Magento/Paypal/Controller/Express/AbstractExpress.php index b2427eaf694..2ceb1810858 100644 --- a/app/code/Magento/Paypal/Controller/Express/AbstractExpress.php +++ b/app/code/Magento/Paypal/Controller/Express/AbstractExpress.php @@ -80,7 +80,7 @@ abstract class AbstractExpress extends \Magento\Core\Controller\Front\Action protected $_customerSession; /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; @@ -112,7 +112,7 @@ abstract class AbstractExpress extends \Magento\Core\Controller\Front\Action /** * @param \Magento\Core\Controller\Varien\Action\Context $context * @param \Magento\Customer\Model\Session $customerSession - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Sales\Model\QuoteFactory $quoteFactory * @param \Magento\Checkout\Model\Session $checkoutSession * @param \Magento\Sales\Model\OrderFactory $orderFactory @@ -122,7 +122,7 @@ abstract class AbstractExpress extends \Magento\Core\Controller\Front\Action public function __construct( \Magento\Core\Controller\Varien\Action\Context $context, \Magento\Customer\Model\Session $customerSession, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\UrlInterface $urlBuilder, \Magento\Sales\Model\QuoteFactory $quoteFactory, \Magento\Checkout\Model\Session $checkoutSession, \Magento\Sales\Model\OrderFactory $orderFactory, diff --git a/app/code/Magento/Paypal/Controller/Payflowadvanced.php b/app/code/Magento/Paypal/Controller/Payflowadvanced.php index bc453b5f527..e47af1598a8 100644 --- a/app/code/Magento/Paypal/Controller/Payflowadvanced.php +++ b/app/code/Magento/Paypal/Controller/Payflowadvanced.php @@ -63,7 +63,7 @@ class Payflowadvanced extends \Magento\Paypal\Controller\Express\AbstractExpress /** * @param \Magento\Core\Controller\Varien\Action\Context $context * @param \Magento\Customer\Model\Session $customerSession - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Sales\Model\QuoteFactory $quoteFactory * @param \Magento\Checkout\Model\Session $checkoutSession * @param \Magento\Sales\Model\OrderFactory $orderFactory @@ -76,7 +76,7 @@ class Payflowadvanced extends \Magento\Paypal\Controller\Express\AbstractExpress public function __construct( \Magento\Core\Controller\Varien\Action\Context $context, \Magento\Customer\Model\Session $customerSession, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\UrlInterface $urlBuilder, \Magento\Sales\Model\QuoteFactory $quoteFactory, \Magento\Checkout\Model\Session $checkoutSession, \Magento\Sales\Model\OrderFactory $orderFactory, diff --git a/app/code/Magento/Paypal/Controller/Standard.php b/app/code/Magento/Paypal/Controller/Standard.php index b461e833636..067d2eb018a 100644 --- a/app/code/Magento/Paypal/Controller/Standard.php +++ b/app/code/Magento/Paypal/Controller/Standard.php @@ -93,7 +93,7 @@ class Standard extends \Magento\Core\Controller\Front\Action $order = $this->_objectManager->create('Magento\Sales\Model\Order') ->loadByIncrementId($session->getLastRealOrderId()); if ($order->getId()) { - $this->_objectManager->get('Magento\Core\Model\Event\Manager')->dispatch( + $this->_objectManager->get('Magento\Event\ManagerInterface')->dispatch( 'paypal_payment_cancel', array( 'order' => $order, diff --git a/app/code/Magento/Paypal/Helper/Hss.php b/app/code/Magento/Paypal/Helper/Hss.php index 2da590c3e79..01fa0368572 100644 --- a/app/code/Magento/Paypal/Helper/Hss.php +++ b/app/code/Magento/Paypal/Helper/Hss.php @@ -46,19 +46,19 @@ class Hss extends \Magento\Core\Helper\AbstractHelper protected $_checkoutSession; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; /** * @param \Magento\Core\Helper\Context $context * @param \Magento\Checkout\Model\Session $checkoutSession - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout */ public function __construct( \Magento\Core\Helper\Context $context, \Magento\Checkout\Model\Session $checkoutSession, - \Magento\Core\Model\Layout $layout + \Magento\View\LayoutInterface $layout ) { $this->_checkoutSession = $checkoutSession; $this->_layout = $layout; diff --git a/app/code/Magento/Paypal/Model/Cart.php b/app/code/Magento/Paypal/Model/Cart.php index 18b4c918d59..b805e7236a5 100644 --- a/app/code/Magento/Paypal/Model/Cart.php +++ b/app/code/Magento/Paypal/Model/Cart.php @@ -111,7 +111,7 @@ class Cart /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -121,13 +121,13 @@ class Cart protected $_storeManager; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param array $params * @throws \Exception */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\StoreManagerInterface $storeManager, $params = array() ) { diff --git a/app/code/Magento/Paypal/Model/Cert.php b/app/code/Magento/Paypal/Model/Cert.php index 4b12a573464..b6d50975ff9 100644 --- a/app/code/Magento/Paypal/Model/Cert.php +++ b/app/code/Magento/Paypal/Model/Cert.php @@ -44,7 +44,7 @@ class Cert extends \Magento\Core\Model\AbstractModel protected $_coreData; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_coreDir; @@ -52,7 +52,7 @@ class Cert extends \Magento\Core\Model\AbstractModel * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param \Magento\Data\Collection\Db $resourceCollection * @param array $data @@ -61,7 +61,7 @@ class Cert extends \Magento\Core\Model\AbstractModel \Magento\Core\Helper\Data $coreData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Core\Model\Resource\AbstractResource $resource = null, \Magento\Data\Collection\Db $resourceCollection = null, array $data = array() @@ -157,7 +157,7 @@ class Cert extends \Magento\Core\Model\AbstractModel */ protected function _getBaseDir() { - return $this->_coreDir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . self::BASEPATH_PAYPAL_CERT; + return $this->_coreDir->getDir(\Magento\App\Dir::VAR_DIR) . DS . self::BASEPATH_PAYPAL_CERT; } /** diff --git a/app/code/Magento/Paypal/Model/Direct.php b/app/code/Magento/Paypal/Model/Direct.php index dc5f2936c14..f671cdad2b9 100644 --- a/app/code/Magento/Paypal/Model/Direct.php +++ b/app/code/Magento/Paypal/Model/Direct.php @@ -84,12 +84,12 @@ class Direct extends \Magento\Payment\Model\Method\Cc protected $_storeManager; /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_requestHttp; @@ -100,17 +100,17 @@ class Direct extends \Magento\Payment\Model\Method\Cc /** * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Core\Model\ModuleListInterface $moduleList + * @param \Magento\App\ModuleListInterface $moduleList * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory * @param \Magento\Core\Model\LocaleInterface $locale * @param \Magento\Centinel\Model\Service $centinelService * @param \Magento\Paypal\Model\Method\ProTypeFactory $proTypeFactory * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\UrlInterface $urlBuilder - * @param \Magento\Core\Controller\Request\Http $requestHttp + * @param \Magento\UrlInterface $urlBuilder + * @param \Magento\App\RequestInterface $requestHttp * @param \Magento\Paypal\Model\CartFactory $cartFactory * @param array $data * @@ -118,17 +118,17 @@ class Direct extends \Magento\Payment\Model\Method\Cc */ public function __construct( \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Core\Model\ModuleListInterface $moduleList, + \Magento\App\ModuleListInterface $moduleList, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, \Magento\Core\Model\LocaleInterface $locale, \Magento\Centinel\Model\Service $centinelService, \Magento\Paypal\Model\Method\ProTypeFactory $proTypeFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\UrlInterface $urlBuilder, - \Magento\Core\Controller\Request\Http $requestHttp, + \Magento\UrlInterface $urlBuilder, + \Magento\App\RequestInterface $requestHttp, \Magento\Paypal\Model\CartFactory $cartFactory, array $data = array() ) { diff --git a/app/code/Magento/Paypal/Model/Express.php b/app/code/Magento/Paypal/Model/Express.php index 40def386897..fa9cac4cf23 100644 --- a/app/code/Magento/Paypal/Model/Express.php +++ b/app/code/Magento/Paypal/Model/Express.php @@ -103,7 +103,7 @@ class Express extends \Magento\Payment\Model\Method\AbstractMethod protected $_storeManager; /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; @@ -113,24 +113,24 @@ class Express extends \Magento\Payment\Model\Method\AbstractMethod protected $_cartFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory * @param \Magento\Paypal\Model\Method\ProTypeFactory $proTypeFactory * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Paypal\Model\CartFactory $cartFactory * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, \Magento\Paypal\Model\Method\ProTypeFactory $proTypeFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\UrlInterface $urlBuilder, \Magento\Paypal\Model\CartFactory $cartFactory, array $data = array() ) { diff --git a/app/code/Magento/Paypal/Model/Hostedpro.php b/app/code/Magento/Paypal/Model/Hostedpro.php index 324b76e18db..9a70f8e3944 100644 --- a/app/code/Magento/Paypal/Model/Hostedpro.php +++ b/app/code/Magento/Paypal/Model/Hostedpro.php @@ -79,17 +79,17 @@ class Hostedpro extends \Magento\Paypal\Model\Direct /** * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Core\Model\ModuleListInterface $moduleList + * @param \Magento\App\ModuleListInterface $moduleList * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory * @param \Magento\Core\Model\LocaleInterface $locale * @param \Magento\Centinel\Model\Service $centinelService * @param \Magento\Paypal\Model\Method\ProTypeFactory $proTypeFactory * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\UrlInterface $urlBuilder - * @param \Magento\Core\Controller\Request\Http $requestHttp + * @param \Magento\UrlInterface $urlBuilder + * @param \Magento\App\RequestInterface $requestHttp * @param \Magento\Paypal\Model\CartFactory $cartFactory * @param \Magento\Paypal\Model\Hostedpro\RequestFactory $hostedproRequestFactory * @param array $data @@ -98,17 +98,17 @@ class Hostedpro extends \Magento\Paypal\Model\Direct */ public function __construct( \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Core\Model\ModuleListInterface $moduleList, + \Magento\App\ModuleListInterface $moduleList, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, \Magento\Core\Model\LocaleInterface $locale, \Magento\Centinel\Model\Service $centinelService, \Magento\Paypal\Model\Method\ProTypeFactory $proTypeFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\UrlInterface $urlBuilder, - \Magento\Core\Controller\Request\Http $requestHttp, + \Magento\UrlInterface $urlBuilder, + \Magento\App\RequestInterface $requestHttp, \Magento\Paypal\Model\CartFactory $cartFactory, \Magento\Paypal\Model\Hostedpro\RequestFactory $hostedproRequestFactory, array $data = array() diff --git a/app/code/Magento/Paypal/Model/Ipn.php b/app/code/Magento/Paypal/Model/Ipn.php index d62553639b3..a4930e9350b 100644 --- a/app/code/Magento/Paypal/Model/Ipn.php +++ b/app/code/Magento/Paypal/Model/Ipn.php @@ -80,7 +80,7 @@ class Ipn protected $_orderFactory; /** - * @var \Magento\Core\Controller\Response\Http + * @var \Magento\App\ResponseInterface */ protected $_responseHttp; @@ -96,7 +96,7 @@ class Ipn /** * @param \Magento\Sales\Model\OrderFactory $orderFactory - * @param \Magento\Core\Controller\Response\Http $responseHttp + * @param \Magento\App\ResponseInterface $responseHttp * @param \Magento\Paypal\Model\ConfigFactory $configFactory * @param \Magento\Sales\Model\Recurring\ProfileFactory $profileFactory * @param \Magento\Paypal\Model\Info $paypalInfo @@ -104,7 +104,7 @@ class Ipn */ public function __construct( \Magento\Sales\Model\OrderFactory $orderFactory, - \Magento\Core\Controller\Response\Http $responseHttp, + \Magento\App\ResponseInterface $responseHttp, \Magento\Paypal\Model\ConfigFactory $configFactory, \Magento\Sales\Model\Recurring\ProfileFactory $profileFactory, \Magento\Paypal\Model\Info $paypalInfo, diff --git a/app/code/Magento/Paypal/Model/Method/Agreement.php b/app/code/Magento/Paypal/Model/Method/Agreement.php index b9ac4d1f23f..1f539b47215 100644 --- a/app/code/Magento/Paypal/Model/Method/Agreement.php +++ b/app/code/Magento/Paypal/Model/Method/Agreement.php @@ -66,7 +66,7 @@ class Agreement extends \Magento\Sales\Model\Payment\Method\Billing\AbstractAgre protected $_storeManager; /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; @@ -76,28 +76,28 @@ class Agreement extends \Magento\Sales\Model\Payment\Method\Billing\AbstractAgre protected $_cartFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Paypal\Model\Method\ProTypeFactory $proTypeFactory * @param \Magento\Sales\Model\Billing\AgreementFactory $agreementFactory - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Paypal\Model\CartFactory $cartFactory * @param array $data * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, \Magento\Sales\Model\Billing\AgreementFactory $agreementFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Paypal\Model\Method\ProTypeFactory $proTypeFactory, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\UrlInterface $urlBuilder, \Magento\Paypal\Model\CartFactory $cartFactory, array $data = array() ) { diff --git a/app/code/Magento/Paypal/Model/Payflowlink.php b/app/code/Magento/Paypal/Model/Payflowlink.php index 8dd2b00938b..61410d9f25a 100644 --- a/app/code/Magento/Paypal/Model/Payflowlink.php +++ b/app/code/Magento/Paypal/Model/Payflowlink.php @@ -141,9 +141,9 @@ class Payflowlink extends \Magento\Paypal\Model\Payflowpro /** * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Core\Model\ModuleListInterface $moduleList + * @param \Magento\App\ModuleListInterface $moduleList * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory * @param \Magento\Core\Model\LocaleInterface $locale @@ -154,7 +154,7 @@ class Payflowlink extends \Magento\Paypal\Model\Payflowpro * @param \Magento\Paypal\Model\Payflow\RequestFactory $requestFactory * @param \Magento\Sales\Model\QuoteFactory $quoteFactory * @param \Magento\Sales\Model\OrderFactory $orderFactory - * @param \Magento\Core\Controller\Request\Http $requestHttp + * @param \Magento\App\RequestInterface $requestHttp * @param \Magento\Core\Model\WebsiteFactory $websiteFactory * @param array $data * @@ -162,9 +162,9 @@ class Payflowlink extends \Magento\Paypal\Model\Payflowpro */ public function __construct( \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Core\Model\ModuleListInterface $moduleList, + \Magento\App\ModuleListInterface $moduleList, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, \Magento\Core\Model\LocaleInterface $locale, @@ -175,7 +175,7 @@ class Payflowlink extends \Magento\Paypal\Model\Payflowpro \Magento\Paypal\Model\Payflow\RequestFactory $requestFactory, \Magento\Sales\Model\QuoteFactory $quoteFactory, \Magento\Sales\Model\OrderFactory $orderFactory, - \Magento\Core\Controller\Request\Http $requestHttp, + \Magento\App\RequestInterface $requestHttp, \Magento\Core\Model\WebsiteFactory $websiteFactory, array $data = array() ) { diff --git a/app/code/Magento/Paypal/Model/Payflowpro.php b/app/code/Magento/Paypal/Model/Payflowpro.php index 7640898d2a5..5f2496cc756 100644 --- a/app/code/Magento/Paypal/Model/Payflowpro.php +++ b/app/code/Magento/Paypal/Model/Payflowpro.php @@ -132,9 +132,9 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc /** * @param \Magento\Core\Model\Logger $logger - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Core\Model\ModuleListInterface $moduleList + * @param \Magento\App\ModuleListInterface $moduleList * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory * @param \Magento\Core\Model\LocaleInterface $locale @@ -148,9 +148,9 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc */ public function __construct( \Magento\Core\Model\Logger $logger, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Core\Model\ModuleListInterface $moduleList, + \Magento\App\ModuleListInterface $moduleList, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, \Magento\Core\Model\LocaleInterface $locale, @@ -214,7 +214,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc /** * Authorize payment * - * @param \\Magento\Object|\\Magento\Sales\Model\Order\Payment $payment + * @param \Magento\Object|\Magento\Sales\Model\Order\Payment $payment * @param float $amount * @return \Magento\Paypal\Model\Payflowpro */ @@ -244,7 +244,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc /** * Capture payment * - * @param \\Magento\Object|\\Magento\Sales\Model\Order\Payment $payment + * @param \Magento\Object|\Magento\Sales\Model\Order\Payment $payment * @param float $amount * @return \Magento\Paypal\Model\Payflowpro */ @@ -284,7 +284,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc /** * Void payment * - * @param \\Magento\Object|\\Magento\Sales\Model\Order\Payment $payment + * @param \Magento\Object|\Magento\Sales\Model\Order\Payment $payment * @return \Magento\Paypal\Model\Payflowpro */ public function void(\Magento\Object $payment) @@ -318,7 +318,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc /** * Refund capture * - * @param \\Magento\Object|\\Magento\Sales\Model\Order\Payment $payment + * @param \Magento\Object|\Magento\Sales\Model\Order\Payment $payment * @param float $amount * @return \Magento\Paypal\Model\Payflowpro */ @@ -472,7 +472,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc /** * Return request object with information for 'authorization' or 'sale' action * - * @param \\Magento\Object|\\Magento\Sales\Model\Order\Payment $payment + * @param \Magento\Object|\Magento\Sales\Model\Order\Payment $payment * @param float $amount * @return \Magento\Object */ @@ -527,7 +527,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc /** * Return request object with basic information for gateway request * - * @param \\Magento\Object|\\Magento\Sales\Model\Order\Payment $payment + * @param \Magento\Object|\Magento\Sales\Model\Order\Payment $payment * @return \Magento\Object */ protected function _buildBasicRequest(\Magento\Object $payment) diff --git a/app/code/Magento/Paypal/Model/Payment/Transaction.php b/app/code/Magento/Paypal/Model/Payment/Transaction.php index 505b756eaae..2c7533f7cb4 100644 --- a/app/code/Magento/Paypal/Model/Payment/Transaction.php +++ b/app/code/Magento/Paypal/Model/Payment/Transaction.php @@ -69,7 +69,7 @@ class Transaction extends \Magento\Core\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -79,7 +79,7 @@ class Transaction extends \Magento\Core\Model\AbstractModel protected $_dateFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Core\Model\DateFactory $dateFactory @@ -88,7 +88,7 @@ class Transaction extends \Magento\Core\Model\AbstractModel * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Core\Model\DateFactory $dateFactory, diff --git a/app/code/Magento/Paypal/Model/Report/Settlement.php b/app/code/Magento/Paypal/Model/Report/Settlement.php index 52bf7100bda..ea17542067c 100644 --- a/app/code/Magento/Paypal/Model/Report/Settlement.php +++ b/app/code/Magento/Paypal/Model/Report/Settlement.php @@ -159,7 +159,7 @@ class Settlement extends \Magento\Core\Model\AbstractModel ); /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_coreDir; @@ -171,7 +171,7 @@ class Settlement extends \Magento\Core\Model\AbstractModel /** * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param \Magento\Data\Collection\Db $resourceCollection @@ -180,7 +180,7 @@ class Settlement extends \Magento\Core\Model\AbstractModel public function __construct( \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Core\Model\Resource\AbstractResource $resource = null, \Magento\Data\Collection\Db $resourceCollection = null, @@ -231,7 +231,7 @@ class Settlement extends \Magento\Core\Model\AbstractModel $fetched = 0; $listing = $this->_filterReportsList($connection->rawls()); foreach ($listing as $filename => $attributes) { - $localCsv = tempnam($this->_coreDir->getDir(\Magento\Core\Model\Dir::TMP), 'PayPal_STL'); + $localCsv = tempnam($this->_coreDir->getDir(\Magento\App\Dir::TMP), 'PayPal_STL'); if ($connection->read($filename, $localCsv)) { if (!is_writable($localCsv)) { throw new \Magento\Core\Exception(__('We cannot create a target file for reading reports.')); diff --git a/app/code/Magento/Paypal/Model/Standard.php b/app/code/Magento/Paypal/Model/Standard.php index cead16f362b..1b25bc6b720 100644 --- a/app/code/Magento/Paypal/Model/Standard.php +++ b/app/code/Magento/Paypal/Model/Standard.php @@ -68,7 +68,7 @@ class Standard extends \Magento\Payment\Model\Method\AbstractMethod protected $_checkoutSession; /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; @@ -98,13 +98,13 @@ class Standard extends \Magento\Payment\Model\Method\AbstractMethod protected $_configFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory * @param \Magento\Core\Model\Session\Generic $paypalSession * @param \Magento\Checkout\Model\Session $checkoutSession - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Sales\Model\OrderFactory $orderFactory * @param \Magento\Paypal\Model\Api\StandardFactory $apiStandardFactory @@ -115,13 +115,13 @@ class Standard extends \Magento\Payment\Model\Method\AbstractMethod * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, \Magento\Core\Model\Session\Generic $paypalSession, \Magento\Checkout\Model\Session $checkoutSession, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\UrlInterface $urlBuilder, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Sales\Model\OrderFactory $orderFactory, \Magento\Paypal\Model\Api\StandardFactory $apiStandardFactory, diff --git a/app/code/Magento/Paypal/etc/di.xml b/app/code/Magento/Paypal/etc/di.xml index dd6094b824f..8fdbdbc7fd9 100644 --- a/app/code/Magento/Paypal/etc/di.xml +++ b/app/code/Magento/Paypal/etc/di.xml @@ -24,8 +24,8 @@ */ --> <config> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <paypal_setup>Magento\Sales\Model\Resource\Setup</paypal_setup> </value> diff --git a/app/code/Magento/PaypalUk/Model/Express.php b/app/code/Magento/PaypalUk/Model/Express.php index 2bf1884d635..155b82aa0e4 100644 --- a/app/code/Magento/PaypalUk/Model/Express.php +++ b/app/code/Magento/PaypalUk/Model/Express.php @@ -57,25 +57,25 @@ class Express extends \Magento\Paypal\Model\Express /** * @param \Magento\Paypal\Model\InfoFactory $paypalInfoFactory - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory * @param \Magento\Paypal\Model\Method\ProTypeFactory $proTypeFactory * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Paypal\Model\CartFactory $cartFactory * @param array $data */ public function __construct( \Magento\Paypal\Model\InfoFactory $paypalInfoFactory, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, \Magento\Paypal\Model\Method\ProTypeFactory $proTypeFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\UrlInterface $urlBuilder, \Magento\Paypal\Model\CartFactory $cartFactory, array $data = array() ) { diff --git a/app/code/Magento/Persistent/Helper/Data.php b/app/code/Magento/Persistent/Helper/Data.php index 1d5dd26675f..22107706a0d 100644 --- a/app/code/Magento/Persistent/Helper/Data.php +++ b/app/code/Magento/Persistent/Helper/Data.php @@ -68,14 +68,14 @@ class Data extends \Magento\Core\Helper\Data /** * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Http $coreHttp * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Locale $locale * @param \Magento\Core\Model\Date $dateModel - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\Encryption $encryptor * @param \Magento\Core\Helper\Url $coreUrl * @param \Magento\Checkout\Helper\Data $checkoutData @@ -84,14 +84,14 @@ class Data extends \Magento\Core\Helper\Data */ public function __construct( \Magento\Core\Helper\Context $context, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Http $coreHttp, \Magento\Core\Model\Config $config, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Locale $locale, \Magento\Core\Model\Date $dateModel, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\Encryption $encryptor, \Magento\Core\Helper\Url $coreUrl, \Magento\Checkout\Helper\Data $checkoutData, diff --git a/app/code/Magento/Persistent/Helper/Session.php b/app/code/Magento/Persistent/Helper/Session.php index 3310699d036..b28b2b32d7f 100644 --- a/app/code/Magento/Persistent/Helper/Session.php +++ b/app/code/Magento/Persistent/Helper/Session.php @@ -82,14 +82,14 @@ class Session extends \Magento\Core\Helper\Data /** * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Http $coreHttp * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Locale $locale * @param \Magento\Core\Model\Date $dateModel - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\Encryption $encryptor * @param \Magento\Persistent\Helper\Data $persistentData * @param \Magento\Checkout\Model\Session $checkoutSession @@ -99,14 +99,14 @@ class Session extends \Magento\Core\Helper\Data */ public function __construct( \Magento\Core\Helper\Context $context, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Http $coreHttp, \Magento\Core\Model\Config $config, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Locale $locale, \Magento\Core\Model\Date $dateModel, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\Encryption $encryptor, \Magento\Persistent\Helper\Data $persistentData, \Magento\Checkout\Model\Session $checkoutSession, diff --git a/app/code/Magento/Persistent/Model/Observer.php b/app/code/Magento/Persistent/Model/Observer.php index ad2fe4cd08e..07d256bef1e 100644 --- a/app/code/Magento/Persistent/Model/Observer.php +++ b/app/code/Magento/Persistent/Model/Observer.php @@ -64,21 +64,21 @@ class Observer /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; /** * Layout model * - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; /** * Request http * - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_requestHttp; @@ -113,7 +113,7 @@ class Observer /** * Url model * - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_url; @@ -146,9 +146,7 @@ class Observer protected $_websiteCollectionFactory; /** - * Construct - * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Persistent\Helper\Session $persistentSession * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Persistent\Helper\Data $persistentData @@ -156,18 +154,18 @@ class Observer * @param \Magento\Core\Model\Session $session * @param \Magento\Checkout\Model\Session $checkoutSession * @param \Magento\Customer\Model\Session $customerSession - * @param \Magento\Core\Model\UrlInterface $url - * @param \Magento\Persistent\Model\SessionFactory $sessionFactory + * @param \Magento\UrlInterface $url + * @param SessionFactory $sessionFactory * @param \Magento\Sales\Model\QuoteFactory $quoteFactory * @param \Magento\Customer\Model\CustomerFactory $customerFactory - * @param \Magento\Persistent\Model\Persistent\ConfigFactory $persistentConfigFactory - * @param \Magento\Core\Controller\Request\Http $requestHttp - * @param \Magento\Core\Model\Layout $layout - * + * @param Persistent\ConfigFactory $persistentConfigFactory + * @param \Magento\App\RequestInterface $requestHttp + * @param \Magento\View\LayoutInterface $layout + * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Persistent\Helper\Session $persistentSession, \Magento\Core\Helper\Data $coreData, \Magento\Persistent\Helper\Data $persistentData, @@ -175,13 +173,13 @@ class Observer \Magento\Core\Model\Session $session, \Magento\Checkout\Model\Session $checkoutSession, \Magento\Customer\Model\Session $customerSession, - \Magento\Core\Model\UrlInterface $url, + \Magento\UrlInterface $url, \Magento\Persistent\Model\SessionFactory $sessionFactory, \Magento\Sales\Model\QuoteFactory $quoteFactory, \Magento\Customer\Model\CustomerFactory $customerFactory, \Magento\Persistent\Model\Persistent\ConfigFactory $persistentConfigFactory, - \Magento\Core\Controller\Request\Http $requestHttp, - \Magento\Core\Model\Layout $layout + \Magento\App\RequestInterface $requestHttp, + \Magento\View\LayoutInterface $layout ) { $this->_eventManager = $eventManager; $this->_persistentSession = $persistentSession; diff --git a/app/code/Magento/Persistent/Model/Observer/Session.php b/app/code/Magento/Persistent/Model/Observer/Session.php index f782830eaa3..9ff965a3d5d 100644 --- a/app/code/Magento/Persistent/Model/Observer/Session.php +++ b/app/code/Magento/Persistent/Model/Observer/Session.php @@ -195,7 +195,7 @@ class Session /** @var $sessionModel \Magento\Persistent\Model\Session */ $sessionModel = $this->_persistentSession->getSession(); - /** @var $request \Magento\Core\Controller\Request\Http */ + /** @var $request \Magento\App\RequestInterface */ $request = $observer->getEvent()->getFront()->getRequest(); // Quote Id could be changed only by logged in customer diff --git a/app/code/Magento/Persistent/Model/Persistent/Config.php b/app/code/Magento/Persistent/Model/Persistent/Config.php index a28921f2c6b..e890c87ff90 100644 --- a/app/code/Magento/Persistent/Model/Persistent/Config.php +++ b/app/code/Magento/Persistent/Model/Persistent/Config.php @@ -51,14 +51,14 @@ class Config /** * Layout model * - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; /** * App state model * - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; @@ -70,19 +70,17 @@ class Config protected $_persistentFactory; /** - * Construct - * * @param \Magento\Config\DomFactory $domFactory * @param \Magento\Core\Model\Config\Modules\Reader $moduleReader - * @param \Magento\Core\Model\Layout $layout - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\View\LayoutInterface $layout + * @param \Magento\App\State $appState * @param \Magento\Persistent\Model\Factory $persistentFactory */ public function __construct( \Magento\Config\DomFactory $domFactory, \Magento\Core\Model\Config\Modules\Reader $moduleReader, - \Magento\Core\Model\Layout $layout, - \Magento\Core\Model\App\State $appState, + \Magento\View\LayoutInterface $layout, + \Magento\App\State $appState, \Magento\Persistent\Model\Factory $persistentFactory ) { $this->_domFactory = $domFactory; @@ -234,7 +232,7 @@ class Config if (method_exists($object, $method)) { $object->$method($instance); - } elseif ($this->_appState->getMode() == \Magento\Core\Model\App\State::MODE_DEVELOPER) { + } elseif ($this->_appState->getMode() == \Magento\App\State::MODE_DEVELOPER) { throw new \Magento\Core\Exception('Method "' . $method.'" is not defined in "' . get_class($object) . '"'); } diff --git a/app/code/Magento/Persistent/etc/di.xml b/app/code/Magento/Persistent/etc/di.xml index c7f561c5e64..1328c683ff4 100644 --- a/app/code/Magento/Persistent/etc/di.xml +++ b/app/code/Magento/Persistent/etc/di.xml @@ -32,9 +32,4 @@ <instance type="Magento\Core\Model\ConfigProxy" /> </param> </type> - <type name="Magento\Persistent\Model\Observer"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> </config> diff --git a/app/code/Magento/ProductAlert/Helper/Data.php b/app/code/Magento/ProductAlert/Helper/Data.php index dc030b92b3e..993bdfb520c 100644 --- a/app/code/Magento/ProductAlert/Helper/Data.php +++ b/app/code/Magento/ProductAlert/Helper/Data.php @@ -58,7 +58,7 @@ class Data extends \Magento\Core\Helper\Url protected $_coreStoreConfig; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -71,7 +71,7 @@ class Data extends \Magento\Core\Helper\Url * @param \Magento\Core\Helper\Context $context * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Registry $coreRegistry - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Customer\Model\Session $session */ @@ -79,7 +79,7 @@ class Data extends \Magento\Core\Helper\Url \Magento\Core\Helper\Context $context, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Registry $coreRegistry, - \Magento\Core\Model\Layout $layout, + \Magento\View\LayoutInterface $layout, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Customer\Model\Session $session ) { diff --git a/app/code/Magento/Rating/Model/Resource/Rating/Collection.php b/app/code/Magento/Rating/Model/Resource/Rating/Collection.php index 2762780c626..215f1e57437 100644 --- a/app/code/Magento/Rating/Model/Resource/Rating/Collection.php +++ b/app/code/Magento/Rating/Model/Resource/Rating/Collection.php @@ -46,7 +46,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl protected $_ratingCollectionF; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -55,7 +55,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Rating/Model/Resource/Rating/Grid/Collection.php b/app/code/Magento/Rating/Model/Resource/Rating/Grid/Collection.php index ef3cb4aa100..a7bd91c2c58 100644 --- a/app/code/Magento/Rating/Model/Resource/Rating/Grid/Collection.php +++ b/app/code/Magento/Rating/Model/Resource/Rating/Grid/Collection.php @@ -43,7 +43,7 @@ class Collection extends \Magento\Rating\Model\Resource\Rating\Collection protected $_coreRegistry = null; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -53,7 +53,7 @@ class Collection extends \Magento\Rating\Model\Resource\Rating\Collection * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Rating/Model/Resource/Rating/Option/Vote/Collection.php b/app/code/Magento/Rating/Model/Resource/Rating/Option/Vote/Collection.php index f758284160d..e04759091c8 100644 --- a/app/code/Magento/Rating/Model/Resource/Rating/Option/Vote/Collection.php +++ b/app/code/Magento/Rating/Model/Resource/Rating/Option/Vote/Collection.php @@ -48,7 +48,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl protected $_ratingCollectionF; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -57,7 +57,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Reports/Model/Resource/Customer/Collection.php b/app/code/Magento/Reports/Model/Resource/Customer/Collection.php index d1f05e4a3ea..a71dc4f87f6 100644 --- a/app/code/Magento/Reports/Model/Resource/Customer/Collection.php +++ b/app/code/Magento/Reports/Model/Resource/Customer/Collection.php @@ -88,7 +88,7 @@ class Collection extends \Magento\Customer\Model\Resource\Customer\Collection protected $_quoteItemFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -104,7 +104,7 @@ class Collection extends \Magento\Customer\Model\Resource\Customer\Collection * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Reports/Model/Resource/Order/Collection.php b/app/code/Magento/Reports/Model/Resource/Order/Collection.php index 60f82642a2e..8ee0676fd40 100644 --- a/app/code/Magento/Reports/Model/Resource/Order/Collection.php +++ b/app/code/Magento/Reports/Model/Resource/Order/Collection.php @@ -78,7 +78,7 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection protected $_reportOrderFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\Store\Config $coreStoreConfig @@ -91,7 +91,7 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\Store\Config $coreStoreConfig, diff --git a/app/code/Magento/Reports/Model/Resource/Product/Collection.php b/app/code/Magento/Reports/Model/Resource/Product/Collection.php index 9fabb5e94e6..1c87e5a4e12 100644 --- a/app/code/Magento/Reports/Model/Resource/Product/Collection.php +++ b/app/code/Magento/Reports/Model/Resource/Product/Collection.php @@ -79,7 +79,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection /** * Construct * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -103,7 +103,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Reports/Model/Resource/Product/Index/Collection/AbstractCollection.php b/app/code/Magento/Reports/Model/Resource/Product/Index/Collection/AbstractCollection.php index 2dd78e3c1e1..45eca209d6e 100644 --- a/app/code/Magento/Reports/Model/Resource/Product/Index/Collection/AbstractCollection.php +++ b/app/code/Magento/Reports/Model/Resource/Product/Index/Collection/AbstractCollection.php @@ -52,7 +52,7 @@ abstract class AbstractCollection /** * Construct * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -74,7 +74,7 @@ abstract class AbstractCollection * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Reports/Model/Resource/Product/Lowstock/Collection.php b/app/code/Magento/Reports/Model/Resource/Product/Lowstock/Collection.php index 2afeb3038db..257bddb3104 100644 --- a/app/code/Magento/Reports/Model/Resource/Product/Lowstock/Collection.php +++ b/app/code/Magento/Reports/Model/Resource/Product/Lowstock/Collection.php @@ -65,7 +65,7 @@ class Collection extends \Magento\Reports\Model\Resource\Product\Collection /** * Construct * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -91,7 +91,7 @@ class Collection extends \Magento\Reports\Model\Resource\Product\Collection * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Reports/Model/Resource/Quote/Collection.php b/app/code/Magento/Reports/Model/Resource/Quote/Collection.php index b09265518cd..bae1bc57c35 100644 --- a/app/code/Magento/Reports/Model/Resource/Quote/Collection.php +++ b/app/code/Magento/Reports/Model/Resource/Quote/Collection.php @@ -66,7 +66,7 @@ class Collection extends \Magento\Sales\Model\Resource\Quote\Collection protected $_customerResource; public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Reports/Model/Resource/Report/Product/Viewed/Collection.php b/app/code/Magento/Reports/Model/Resource/Report/Product/Viewed/Collection.php index 7a1fa1e8710..ebdd74a71cc 100644 --- a/app/code/Magento/Reports/Model/Resource/Report/Product/Viewed/Collection.php +++ b/app/code/Magento/Reports/Model/Resource/Report/Product/Viewed/Collection.php @@ -48,14 +48,14 @@ class Collection protected $_selectedColumns = array(); /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory * @param \Magento\Sales\Model\Resource\Report $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Reports/Model/Resource/Review/Customer/Collection.php b/app/code/Magento/Reports/Model/Resource/Review/Customer/Collection.php index 8e449dd33ea..77380a7f39f 100644 --- a/app/code/Magento/Reports/Model/Resource/Review/Customer/Collection.php +++ b/app/code/Magento/Reports/Model/Resource/Review/Customer/Collection.php @@ -42,7 +42,7 @@ class Collection extends \Magento\Review\Model\Resource\Review\Collection protected $_customerResource; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Review\Helper\Data $reviewData * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy @@ -53,7 +53,7 @@ class Collection extends \Magento\Review\Model\Resource\Review\Collection * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Review\Helper\Data $reviewData, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, diff --git a/app/code/Magento/Reports/Model/Resource/Wishlist/Collection.php b/app/code/Magento/Reports/Model/Resource/Wishlist/Collection.php index 2b6aa325a14..24ed7cc5a23 100644 --- a/app/code/Magento/Reports/Model/Resource/Wishlist/Collection.php +++ b/app/code/Magento/Reports/Model/Resource/Wishlist/Collection.php @@ -49,7 +49,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl protected $_customerResFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -57,7 +57,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Reports/etc/di.xml b/app/code/Magento/Reports/etc/di.xml index 22a81ff091f..2b2880ac3f0 100644 --- a/app/code/Magento/Reports/etc/di.xml +++ b/app/code/Magento/Reports/etc/di.xml @@ -27,8 +27,8 @@ <type name="Magento\Log\Model\Resource\Log"> <plugin name="reportLog" type="Magento\Reports\Model\Plugin\Log" /> </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <reports_setup>Magento\Reports\Model\Resource\Setup</reports_setup> </value> diff --git a/app/code/Magento/Review/Controller/Product.php b/app/code/Magento/Review/Controller/Product.php index 86776f1f3ec..c502941b829 100644 --- a/app/code/Magento/Review/Controller/Product.php +++ b/app/code/Magento/Review/Controller/Product.php @@ -55,7 +55,7 @@ class Product extends \Magento\Core\Controller\Front\Action protected $_customerSession; /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlModel; @@ -108,7 +108,7 @@ class Product extends \Magento\Core\Controller\Front\Action * @param \Magento\Core\Controller\Varien\Action\Context $context * @param \Magento\Core\Model\Registry $coreRegistry * @param \Magento\Customer\Model\Session $customerSession - * @param \Magento\Core\Model\UrlInterface $urlModel + * @param \Magento\UrlInterface $urlModel * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Model\CategoryFactory $categoryFactory * @param \Magento\Core\Model\Logger $logger @@ -123,7 +123,7 @@ class Product extends \Magento\Core\Controller\Front\Action \Magento\Core\Controller\Varien\Action\Context $context, \Magento\Core\Model\Registry $coreRegistry, \Magento\Customer\Model\Session $customerSession, - \Magento\Core\Model\UrlInterface $urlModel, + \Magento\UrlInterface $urlModel, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\CategoryFactory $categoryFactory, \Magento\Core\Model\Logger $logger, diff --git a/app/code/Magento/Review/Model/Resource/Review/Collection.php b/app/code/Magento/Review/Model/Resource/Review/Collection.php index 572dd087836..d43ea819a42 100644 --- a/app/code/Magento/Review/Model/Resource/Review/Collection.php +++ b/app/code/Magento/Review/Model/Resource/Review/Collection.php @@ -95,7 +95,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl protected $_storeManager; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Review\Helper\Data $reviewData * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy @@ -105,7 +105,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Review\Helper\Data $reviewData, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, diff --git a/app/code/Magento/Review/Model/Resource/Review/Product/Collection.php b/app/code/Magento/Review/Model/Resource/Review/Product/Collection.php index 72ce1276950..63df93d72e4 100644 --- a/app/code/Magento/Review/Model/Resource/Review/Product/Collection.php +++ b/app/code/Magento/Review/Model/Resource/Review/Product/Collection.php @@ -83,7 +83,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection /** * Construct * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -107,7 +107,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Review/Model/Review.php b/app/code/Magento/Review/Model/Review.php index d2f81c76da1..2101d6f316a 100644 --- a/app/code/Magento/Review/Model/Review.php +++ b/app/code/Magento/Review/Model/Review.php @@ -95,7 +95,7 @@ class Review extends \Magento\Core\Model\AbstractModel protected $_storeManager; /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlModel; @@ -108,7 +108,7 @@ class Review extends \Magento\Core\Model\AbstractModel * @param \Magento\Review\Model\Review\SummaryFactory $summaryModFactory * @param \Magento\Review\Model\Review\Summary $reviewSummary * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\UrlInterface $urlModel + * @param \Magento\UrlInterface $urlModel * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param \Magento\Data\Collection\Db $resourceCollection * @param array $data @@ -122,7 +122,7 @@ class Review extends \Magento\Core\Model\AbstractModel \Magento\Review\Model\Review\SummaryFactory $summaryModFactory, \Magento\Review\Model\Review\Summary $reviewSummary, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\UrlInterface $urlModel, + \Magento\UrlInterface $urlModel, \Magento\Core\Model\Resource\AbstractResource $resource = null, \Magento\Data\Collection\Db $resourceCollection = null, array $data = array() diff --git a/app/code/Magento/Rss/Controller/Catalog.php b/app/code/Magento/Rss/Controller/Catalog.php index f2e9b0795d0..cd849b309d4 100644 --- a/app/code/Magento/Rss/Controller/Catalog.php +++ b/app/code/Magento/Rss/Controller/Catalog.php @@ -32,7 +32,7 @@ namespace Magento\Rss\Controller; class Catalog extends \Magento\Core\Controller\Front\Action { /** - * @var \Magento\Core\Model\Config\Scope + * @var \Magento\Config\Scope */ protected $_configScope; @@ -48,12 +48,12 @@ class Catalog extends \Magento\Core\Controller\Front\Action /** * @param \Magento\Core\Controller\Varien\Action\Context $context - * @param \Magento\Core\Model\Config\Scope $configScope + * @param \Magento\Config\Scope $configScope * @param \Magento\Core\Model\Store\Config $storeConfig */ public function __construct( \Magento\Core\Controller\Varien\Action\Context $context, - \Magento\Core\Model\Config\Scope $configScope, + \Magento\Config\Scope $configScope, \Magento\Core\Model\Store\Config $storeConfig ) { $this->_configScope = $configScope; diff --git a/app/code/Magento/Rss/Controller/Order.php b/app/code/Magento/Rss/Controller/Order.php index 10ab0d91281..d325e19d368 100644 --- a/app/code/Magento/Rss/Controller/Order.php +++ b/app/code/Magento/Rss/Controller/Order.php @@ -32,7 +32,7 @@ namespace Magento\Rss\Controller; class Order extends \Magento\Core\Controller\Front\Action { /** - * @var \Magento\Core\Model\Config\Scope + * @var \Magento\Config\Scope */ protected $_configScope; @@ -51,12 +51,12 @@ class Order extends \Magento\Core\Controller\Front\Action /** * @param \Magento\Core\Controller\Varien\Action\Context $context * @param \Magento\Core\Model\Registry $coreRegistry - * @param \Magento\Core\Model\Config\Scope $configScope + * @param \Magento\Config\Scope $configScope */ public function __construct( \Magento\Core\Controller\Varien\Action\Context $context, \Magento\Core\Model\Registry $coreRegistry, - \Magento\Core\Model\Config\Scope $configScope + \Magento\Config\Scope $configScope ) { $this->_coreRegistry = $coreRegistry; $this->_configScope = $configScope; diff --git a/app/code/Magento/Rule/Model/Action/AbstractAction.php b/app/code/Magento/Rule/Model/Action/AbstractAction.php index b987ef49030..b99a41229d1 100644 --- a/app/code/Magento/Rule/Model/Action/AbstractAction.php +++ b/app/code/Magento/Rule/Model/Action/AbstractAction.php @@ -38,18 +38,18 @@ abstract class AbstractAction extends \Magento\Object implements \Magento\Rule\M protected $_viewUrl; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; /** * @param \Magento\Core\Model\View\Url $viewUrl - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @param array $data */ public function __construct( \Magento\Core\Model\View\Url $viewUrl, - \Magento\Core\Model\Layout $layout, + \Magento\View\LayoutInterface $layout, array $data = array() ) { $this->_viewUrl = $viewUrl; diff --git a/app/code/Magento/Rule/Model/Action/Collection.php b/app/code/Magento/Rule/Model/Action/Collection.php index 953f2a39ddd..abd79c793bb 100644 --- a/app/code/Magento/Rule/Model/Action/Collection.php +++ b/app/code/Magento/Rule/Model/Action/Collection.php @@ -37,13 +37,13 @@ class Collection extends \Magento\Rule\Model\Action\AbstractAction /** * @param \Magento\Core\Model\View\Url $viewUrl * @param \Magento\Rule\Model\ActionFactory $actionFactory - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @param array $data */ public function __construct( \Magento\Core\Model\View\Url $viewUrl, \Magento\Rule\Model\ActionFactory $actionFactory, - \Magento\Core\Model\Layout $layout, + \Magento\View\LayoutInterface $layout, array $data = array() ) { $this->_actionFactory = $actionFactory; diff --git a/app/code/Magento/Rule/Model/Condition/AbstractCondition.php b/app/code/Magento/Rule/Model/Condition/AbstractCondition.php index 439bd5c0c70..be07f40687a 100644 --- a/app/code/Magento/Rule/Model/Condition/AbstractCondition.php +++ b/app/code/Magento/Rule/Model/Condition/AbstractCondition.php @@ -72,7 +72,7 @@ abstract class AbstractCondition protected $_locale; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; diff --git a/app/code/Magento/Rule/Model/Condition/Context.php b/app/code/Magento/Rule/Model/Condition/Context.php index 6d3b77a1c9b..4413e8d3ef5 100644 --- a/app/code/Magento/Rule/Model/Condition/Context.php +++ b/app/code/Magento/Rule/Model/Condition/Context.php @@ -41,7 +41,7 @@ class Context implements \Magento\ObjectManager\ContextInterface protected $_locale; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -58,14 +58,14 @@ class Context implements \Magento\ObjectManager\ContextInterface /** * @param \Magento\Core\Model\View\Url $viewUrl * @param \Magento\Core\Model\LocaleInterface $locale - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @param \Magento\Rule\Model\ConditionFactory $conditionFactory * @param \Magento\Core\Model\Logger $logger */ public function __construct( \Magento\Core\Model\View\Url $viewUrl, \Magento\Core\Model\LocaleInterface $locale, - \Magento\Core\Model\Layout $layout, + \Magento\View\LayoutInterface $layout, \Magento\Rule\Model\ConditionFactory $conditionFactory, \Magento\Core\Model\Logger $logger ) { @@ -93,7 +93,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Model\Layout + * @return \Magento\View\LayoutInterface */ public function getLayout() { @@ -101,7 +101,7 @@ class Context implements \Magento\ObjectManager\ContextInterface } /** - * @return \Magento\Core\Model\Layout + * @return \Magento\Rule\Model\ConditionFactory */ public function getConditionFactory() { diff --git a/app/code/Magento/Sales/Block/Items/AbstractItems.php b/app/code/Magento/Sales/Block/Items/AbstractItems.php index 2852cd1266d..b1d66354193 100644 --- a/app/code/Magento/Sales/Block/Items/AbstractItems.php +++ b/app/code/Magento/Sales/Block/Items/AbstractItems.php @@ -65,7 +65,7 @@ class AbstractItems extends \Magento\Core\Block\Template public function getItemRenderer($type) { $renderer = $this->getChildBlock($type) ?: $this->getChildBlock(self::DEFAULT_TYPE); - if (!$renderer instanceof \Magento\Core\Block) { + if (!$renderer instanceof \Magento\View\Element\BlockInterface) { throw new \RuntimeException('Renderer for type "' . $type . '" does not exist.'); } $renderer->setRenderedBlock($this); diff --git a/app/code/Magento/Sales/Controller/Download.php b/app/code/Magento/Sales/Controller/Download.php index 044c506707c..0e786bf34d8 100644 --- a/app/code/Magento/Sales/Controller/Download.php +++ b/app/code/Magento/Sales/Controller/Download.php @@ -48,12 +48,12 @@ class Download extends \Magento\Core\Controller\Front\Action throw new \Exception(); } - $filePath = $this->_objectManager->get('Magento\Core\Model\Dir') - ->getDir(\Magento\Core\Model\Dir::ROOT) . $info['order_path']; + $filePath = $this->_objectManager->get('Magento\App\Dir') + ->getDir(\Magento\App\Dir::ROOT) . $info['order_path']; if ((!is_file($filePath) || !is_readable($filePath)) && !$this->_processDatabaseFile($filePath)) { //try get file from quote - $filePath = $this->_objectManager->get('Magento\Core\Model\Dir') - ->getDir(\Magento\Core\Model\Dir::ROOT) . $info['quote_path']; + $filePath = $this->_objectManager->get('Magento\App\Dir') + ->getDir(\Magento\App\Dir::ROOT) . $info['quote_path']; if ((!is_file($filePath) || !is_readable($filePath)) && !$this->_processDatabaseFile($filePath)) { throw new \Exception(); } diff --git a/app/code/Magento/Sales/Helper/Guest.php b/app/code/Magento/Sales/Helper/Guest.php index da38cdab8fc..7a704edae4b 100644 --- a/app/code/Magento/Sales/Helper/Guest.php +++ b/app/code/Magento/Sales/Helper/Guest.php @@ -80,14 +80,14 @@ class Guest extends \Magento\Core\Helper\Data /** * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Http $coreHttp * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Locale $locale * @param \Magento\Core\Model\Date $dateModel - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\Encryption $encryptor * @param \Magento\Core\Model\Registry $coreRegistry * @param \Magento\Customer\Model\Session $customerSession @@ -99,14 +99,14 @@ class Guest extends \Magento\Core\Helper\Data */ public function __construct( \Magento\Core\Helper\Context $context, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Http $coreHttp, \Magento\Core\Model\Config $config, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Locale $locale, \Magento\Core\Model\Date $dateModel, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\Encryption $encryptor, \Magento\Core\Model\Registry $coreRegistry, \Magento\Customer\Model\Session $customerSession, diff --git a/app/code/Magento/Sales/Helper/Reorder.php b/app/code/Magento/Sales/Helper/Reorder.php index dc88730e09c..a8938a8a668 100644 --- a/app/code/Magento/Sales/Helper/Reorder.php +++ b/app/code/Magento/Sales/Helper/Reorder.php @@ -40,28 +40,28 @@ class Reorder extends \Magento\Core\Helper\Data /** * @param \Magento\Core\Helper\Context $context - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Http $coreHttp * @param \Magento\Core\Model\Config $config * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\StoreManager $storeManager * @param \Magento\Core\Model\Locale $locale * @param \Magento\Core\Model\Date $dateModel - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\Encryption $encryptor * @param \Magento\Customer\Model\Session $customerSession * @param bool $dbCompatibleMode */ public function __construct( \Magento\Core\Helper\Context $context, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Http $coreHttp, \Magento\Core\Model\Config $config, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\StoreManager $storeManager, \Magento\Core\Model\Locale $locale, \Magento\Core\Model\Date $dateModel, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\Encryption $encryptor, \Magento\Customer\Model\Session $customerSession, $dbCompatibleMode = true diff --git a/app/code/Magento/Sales/Model/Convert/Order.php b/app/code/Magento/Sales/Model/Convert/Order.php index 423af7c1d06..2f0187ea7dd 100644 --- a/app/code/Magento/Sales/Model/Convert/Order.php +++ b/app/code/Magento/Sales/Model/Convert/Order.php @@ -41,7 +41,7 @@ class Order extends \Magento\Object /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -91,7 +91,7 @@ class Order extends \Magento\Object protected $_creditmemoItemFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Sales\Model\QuoteFactory $quoteFactory * @param \Magento\Sales\Model\Quote\AddressFactory $quoteAddressFactory @@ -108,7 +108,7 @@ class Order extends \Magento\Object * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\Sales\Model\QuoteFactory $quoteFactory, \Magento\Sales\Model\Quote\AddressFactory $quoteAddressFactory, diff --git a/app/code/Magento/Sales/Model/Convert/Quote.php b/app/code/Magento/Sales/Model/Convert/Quote.php index 849b3d0b191..58f28d10775 100644 --- a/app/code/Magento/Sales/Model/Convert/Quote.php +++ b/app/code/Magento/Sales/Model/Convert/Quote.php @@ -41,7 +41,7 @@ class Quote extends \Magento\Object /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -66,7 +66,7 @@ class Quote extends \Magento\Object protected $_orderItemFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Sales\Model\OrderFactory $orderFactory * @param \Magento\Sales\Model\Order\AddressFactory $orderAddressFactory @@ -75,7 +75,7 @@ class Quote extends \Magento\Object * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\Sales\Model\OrderFactory $orderFactory, \Magento\Sales\Model\Order\AddressFactory $orderAddressFactory, diff --git a/app/code/Magento/Sales/Model/Observer.php b/app/code/Magento/Sales/Model/Observer.php index 5e7b1b453cd..ce1f6fa184b 100644 --- a/app/code/Magento/Sales/Model/Observer.php +++ b/app/code/Magento/Sales/Model/Observer.php @@ -69,7 +69,7 @@ class Observer /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -94,7 +94,7 @@ class Observer protected $_resourceFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Customer\Helper\Data $customerData * @param \Magento\Customer\Helper\Address $customerAddress @@ -105,7 +105,7 @@ class Observer * @param \Magento\Sales\Model\ResourceFactory $resourceFactory */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\Customer\Helper\Data $customerData, \Magento\Customer\Helper\Address $customerAddress, diff --git a/app/code/Magento/Sales/Model/Order.php b/app/code/Magento/Sales/Model/Order.php index 8c1649f554f..b16cbce4bf0 100644 --- a/app/code/Magento/Sales/Model/Order.php +++ b/app/code/Magento/Sales/Model/Order.php @@ -426,7 +426,7 @@ class Order extends \Magento\Sales\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -513,7 +513,7 @@ class Order extends \Magento\Sales\Model\AbstractModel protected $_carrierFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Sales\Helper\Data $salesData @@ -543,7 +543,7 @@ class Order extends \Magento\Sales\Model\AbstractModel * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\Payment\Helper\Data $paymentData, \Magento\Sales\Helper\Data $salesData, diff --git a/app/code/Magento/Sales/Model/Order/Address.php b/app/code/Magento/Sales/Model/Order/Address.php index c5b4457f3ee..2678eef123c 100644 --- a/app/code/Magento/Sales/Model/Order/Address.php +++ b/app/code/Magento/Sales/Model/Order/Address.php @@ -91,7 +91,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress protected $_orderFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Directory\Helper\Data $directoryData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry @@ -107,7 +107,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Directory\Helper\Data $directoryData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo.php b/app/code/Magento/Sales/Model/Order/Creditmemo.php index 6ffd77b0a7b..df67a3c6e52 100644 --- a/app/code/Magento/Sales/Model/Order/Creditmemo.php +++ b/app/code/Magento/Sales/Model/Order/Creditmemo.php @@ -182,7 +182,7 @@ class Creditmemo extends \Magento\Sales\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -239,7 +239,7 @@ class Creditmemo extends \Magento\Sales\Model\AbstractModel protected $_emailInfoFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Sales\Helper\Data $salesData * @param \Magento\Core\Model\Context $context @@ -262,7 +262,7 @@ class Creditmemo extends \Magento\Sales\Model\AbstractModel * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Payment\Helper\Data $paymentData, \Magento\Sales\Helper\Data $salesData, \Magento\Core\Model\Context $context, diff --git a/app/code/Magento/Sales/Model/Order/Invoice.php b/app/code/Magento/Sales/Model/Order/Invoice.php index 2ca0d0cc187..f2ec9791457 100644 --- a/app/code/Magento/Sales/Model/Order/Invoice.php +++ b/app/code/Magento/Sales/Model/Order/Invoice.php @@ -188,7 +188,7 @@ class Invoice extends \Magento\Sales\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -245,7 +245,7 @@ class Invoice extends \Magento\Sales\Model\AbstractModel protected $_emailInfoFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Sales\Helper\Data $salesData * @param \Magento\Core\Model\Context $context @@ -268,7 +268,7 @@ class Invoice extends \Magento\Sales\Model\AbstractModel * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Payment\Helper\Data $paymentData, \Magento\Sales\Helper\Data $salesData, \Magento\Core\Model\Context $context, diff --git a/app/code/Magento/Sales/Model/Order/Item.php b/app/code/Magento/Sales/Model/Order/Item.php index 115f71eabb0..e24de1cdf3e 100644 --- a/app/code/Magento/Sales/Model/Order/Item.php +++ b/app/code/Magento/Sales/Model/Order/Item.php @@ -221,7 +221,7 @@ class Item extends \Magento\Core\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -236,7 +236,7 @@ class Item extends \Magento\Core\Model\AbstractModel protected $_productFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Sales\Model\OrderFactory $orderFactory @@ -246,7 +246,7 @@ class Item extends \Magento\Core\Model\AbstractModel * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Sales\Model\OrderFactory $orderFactory, diff --git a/app/code/Magento/Sales/Model/Order/Payment.php b/app/code/Magento/Sales/Model/Order/Payment.php index 9f306716556..e18714a3471 100644 --- a/app/code/Magento/Sales/Model/Order/Payment.php +++ b/app/code/Magento/Sales/Model/Order/Payment.php @@ -187,7 +187,7 @@ class Payment extends \Magento\Payment\Model\Info /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -217,7 +217,7 @@ class Payment extends \Magento\Payment\Model\Info protected $_storeManager; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Context $context @@ -232,7 +232,7 @@ class Payment extends \Magento\Payment\Model\Info * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Context $context, diff --git a/app/code/Magento/Sales/Model/Order/Payment/Transaction.php b/app/code/Magento/Sales/Model/Order/Payment/Transaction.php index dc46a419733..98282ab5a12 100644 --- a/app/code/Magento/Sales/Model/Order/Payment/Transaction.php +++ b/app/code/Magento/Sales/Model/Order/Payment/Transaction.php @@ -148,7 +148,7 @@ class Transaction extends \Magento\Core\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -168,7 +168,7 @@ class Transaction extends \Magento\Core\Model\AbstractModel protected $_dateFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Sales\Model\Order\PaymentFactory $paymentFactory @@ -179,7 +179,7 @@ class Transaction extends \Magento\Core\Model\AbstractModel * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Sales\Model\Order\PaymentFactory $paymentFactory, diff --git a/app/code/Magento/Sales/Model/Order/Pdf/AbstractPdf.php b/app/code/Magento/Sales/Model/Order/Pdf/AbstractPdf.php index c0df016f7ec..7d458f828dd 100644 --- a/app/code/Magento/Sales/Model/Order/Pdf/AbstractPdf.php +++ b/app/code/Magento/Sales/Model/Order/Pdf/AbstractPdf.php @@ -103,7 +103,7 @@ abstract class AbstractPdf extends \Magento\Object protected $_translate; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_coreDir; @@ -133,7 +133,7 @@ abstract class AbstractPdf extends \Magento\Object * @param \Magento\Core\Helper\String $coreString * @param \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig * @param \Magento\Core\Model\Translate $translate - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Shipping\Model\Config $shippingConfig * @param \Magento\Sales\Model\Order\Pdf\Config $pdfConfig * @param \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory @@ -148,7 +148,7 @@ abstract class AbstractPdf extends \Magento\Object \Magento\Core\Helper\String $coreString, \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig, \Magento\Core\Model\Translate $translate, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Shipping\Model\Config $shippingConfig, \Magento\Sales\Model\Order\Pdf\Config $pdfConfig, \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory, @@ -243,7 +243,7 @@ abstract class AbstractPdf extends \Magento\Object $this->y = $this->y ? $this->y : 815; $image = $this->_coreStoreConfig->getConfig('sales/identity/logo', $store); if ($image) { - $image = $this->_coreDir->getDir(\Magento\Core\Model\Dir::MEDIA) . '/sales/store/logo/' . $image; + $image = $this->_coreDir->getDir(\Magento\App\Dir::MEDIA) . '/sales/store/logo/' . $image; if (is_file($image)) { $image = \Zend_Pdf_Image::imageWithPath($image); $top = 830; //top border of the page diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Creditmemo.php b/app/code/Magento/Sales/Model/Order/Pdf/Creditmemo.php index 89d2b367b61..75544a3f8ba 100644 --- a/app/code/Magento/Sales/Model/Order/Pdf/Creditmemo.php +++ b/app/code/Magento/Sales/Model/Order/Pdf/Creditmemo.php @@ -47,7 +47,7 @@ class Creditmemo extends \Magento\Sales\Model\Order\Pdf\AbstractPdf * @param \Magento\Core\Helper\String $coreString * @param \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig * @param \Magento\Core\Model\Translate $translate - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Shipping\Model\Config $shippingConfig * @param \Magento\Sales\Model\Order\Pdf\Config $pdfConfig * @param \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory @@ -64,7 +64,7 @@ class Creditmemo extends \Magento\Sales\Model\Order\Pdf\AbstractPdf \Magento\Core\Helper\String $coreString, \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig, \Magento\Core\Model\Translate $translate, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Shipping\Model\Config $shippingConfig, \Magento\Sales\Model\Order\Pdf\Config $pdfConfig, \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory, diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Invoice.php b/app/code/Magento/Sales/Model/Order/Pdf/Invoice.php index 81c0f73f471..da2b956eeb3 100644 --- a/app/code/Magento/Sales/Model/Order/Pdf/Invoice.php +++ b/app/code/Magento/Sales/Model/Order/Pdf/Invoice.php @@ -47,7 +47,7 @@ class Invoice extends \Magento\Sales\Model\Order\Pdf\AbstractPdf * @param \Magento\Core\Helper\String $coreString * @param \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig * @param \Magento\Core\Model\Translate $translate - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Shipping\Model\Config $shippingConfig * @param \Magento\Sales\Model\Order\Pdf\Config $pdfConfig * @param \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory @@ -64,7 +64,7 @@ class Invoice extends \Magento\Sales\Model\Order\Pdf\AbstractPdf \Magento\Core\Helper\String $coreString, \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig, \Magento\Core\Model\Translate $translate, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Shipping\Model\Config $shippingConfig, \Magento\Sales\Model\Order\Pdf\Config $pdfConfig, \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory, diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Items/AbstractItems.php b/app/code/Magento/Sales/Model/Order/Pdf/Items/AbstractItems.php index 2bdc37888a0..af20dc5e224 100644 --- a/app/code/Magento/Sales/Model/Order/Pdf/Items/AbstractItems.php +++ b/app/code/Magento/Sales/Model/Order/Pdf/Items/AbstractItems.php @@ -74,7 +74,7 @@ abstract class AbstractItems extends \Magento\Core\Model\AbstractModel protected $_taxData = null; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_coreDir; @@ -82,7 +82,7 @@ abstract class AbstractItems extends \Magento\Core\Model\AbstractModel * @param \Magento\Tax\Helper\Data $taxData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param \Magento\Data\Collection\Db $resourceCollection * @param array $data @@ -91,7 +91,7 @@ abstract class AbstractItems extends \Magento\Core\Model\AbstractModel \Magento\Tax\Helper\Data $taxData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Core\Model\Resource\AbstractResource $resource = null, \Magento\Data\Collection\Db $resourceCollection = null, array $data = array() @@ -339,7 +339,7 @@ abstract class AbstractItems extends \Magento\Core\Model\AbstractModel protected function _setFontRegular($size = 7) { $font = \Zend_Pdf_Font::fontWithPath( - $this->_coreDir->getDir(\Magento\Core\Model\Dir::ROOT) . '/lib/LinLibertineFont/LinLibertine_Re-4.4.1.ttf' + $this->_coreDir->getDir(\Magento\App\Dir::ROOT) . '/lib/LinLibertineFont/LinLibertine_Re-4.4.1.ttf' ); $this->getPage()->setFont($font, $size); return $font; @@ -354,7 +354,7 @@ abstract class AbstractItems extends \Magento\Core\Model\AbstractModel protected function _setFontBold($size = 7) { $font = \Zend_Pdf_Font::fontWithPath( - $this->_coreDir->getDir(\Magento\Core\Model\Dir::ROOT) . '/lib/LinLibertineFont/LinLibertine_Bd-2.8.1.ttf' + $this->_coreDir->getDir(\Magento\App\Dir::ROOT) . '/lib/LinLibertineFont/LinLibertine_Bd-2.8.1.ttf' ); $this->getPage()->setFont($font, $size); return $font; @@ -369,7 +369,7 @@ abstract class AbstractItems extends \Magento\Core\Model\AbstractModel protected function _setFontItalic($size = 7) { $font = \Zend_Pdf_Font::fontWithPath( - $this->_coreDir->getDir(\Magento\Core\Model\Dir::ROOT) . '/lib/LinLibertineFont/LinLibertine_It-2.8.2.ttf' + $this->_coreDir->getDir(\Magento\App\Dir::ROOT) . '/lib/LinLibertineFont/LinLibertine_It-2.8.2.ttf' ); $this->getPage()->setFont($font, $size); return $font; diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Items/Creditmemo/DefaultCreditmemo.php b/app/code/Magento/Sales/Model/Order/Pdf/Items/Creditmemo/DefaultCreditmemo.php index ab280c8449a..c5d1f7bd831 100644 --- a/app/code/Magento/Sales/Model/Order/Pdf/Items/Creditmemo/DefaultCreditmemo.php +++ b/app/code/Magento/Sales/Model/Order/Pdf/Items/Creditmemo/DefaultCreditmemo.php @@ -47,7 +47,7 @@ class DefaultCreditmemo extends \Magento\Sales\Model\Order\Pdf\Items\AbstractIte * @param \Magento\Tax\Helper\Data $taxData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param \Magento\Data\Collection\Db $resourceCollection * @param array $data @@ -57,7 +57,7 @@ class DefaultCreditmemo extends \Magento\Sales\Model\Order\Pdf\Items\AbstractIte \Magento\Tax\Helper\Data $taxData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Core\Model\Resource\AbstractResource $resource = null, \Magento\Data\Collection\Db $resourceCollection = null, array $data = array() diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Items/Invoice/DefaultInvoice.php b/app/code/Magento/Sales/Model/Order/Pdf/Items/Invoice/DefaultInvoice.php index 3675b52c47b..2c24cbce0f5 100644 --- a/app/code/Magento/Sales/Model/Order/Pdf/Items/Invoice/DefaultInvoice.php +++ b/app/code/Magento/Sales/Model/Order/Pdf/Items/Invoice/DefaultInvoice.php @@ -43,7 +43,7 @@ class DefaultInvoice extends \Magento\Sales\Model\Order\Pdf\Items\AbstractItems * @param \Magento\Tax\Helper\Data $taxData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param \Magento\Data\Collection\Db $resourceCollection * @param array $data @@ -53,7 +53,7 @@ class DefaultInvoice extends \Magento\Sales\Model\Order\Pdf\Items\AbstractItems \Magento\Tax\Helper\Data $taxData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Core\Model\Resource\AbstractResource $resource = null, \Magento\Data\Collection\Db $resourceCollection = null, array $data = array() diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Items/Shipment/DefaultShipment.php b/app/code/Magento/Sales/Model/Order/Pdf/Items/Shipment/DefaultShipment.php index b985f50a937..cdd0c19b5f0 100644 --- a/app/code/Magento/Sales/Model/Order/Pdf/Items/Shipment/DefaultShipment.php +++ b/app/code/Magento/Sales/Model/Order/Pdf/Items/Shipment/DefaultShipment.php @@ -43,7 +43,7 @@ class DefaultShipment extends \Magento\Sales\Model\Order\Pdf\Items\AbstractItems * @param \Magento\Tax\Helper\Data $taxData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param \Magento\Data\Collection\Db $resourceCollection * @param array $data @@ -53,7 +53,7 @@ class DefaultShipment extends \Magento\Sales\Model\Order\Pdf\Items\AbstractItems \Magento\Tax\Helper\Data $taxData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Core\Model\Resource\AbstractResource $resource = null, \Magento\Data\Collection\Db $resourceCollection = null, array $data = array() diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Shipment.php b/app/code/Magento/Sales/Model/Order/Pdf/Shipment.php index 7866cf30087..7c2ca422ac6 100644 --- a/app/code/Magento/Sales/Model/Order/Pdf/Shipment.php +++ b/app/code/Magento/Sales/Model/Order/Pdf/Shipment.php @@ -47,7 +47,7 @@ class Shipment extends \Magento\Sales\Model\Order\Pdf\AbstractPdf * @param \Magento\Core\Helper\String $coreString * @param \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig * @param \Magento\Core\Model\Translate $translate - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Shipping\Model\Config $shippingConfig * @param \Magento\Sales\Model\Order\Pdf\Config $pdfConfig * @param \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory @@ -64,7 +64,7 @@ class Shipment extends \Magento\Sales\Model\Order\Pdf\AbstractPdf \Magento\Core\Helper\String $coreString, \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig, \Magento\Core\Model\Translate $translate, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Shipping\Model\Config $shippingConfig, \Magento\Sales\Model\Order\Pdf\Config $pdfConfig, \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory, diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Shipment/Packaging.php b/app/code/Magento/Sales/Model/Order/Pdf/Shipment/Packaging.php index ebd0e8ad9a8..089804e800f 100644 --- a/app/code/Magento/Sales/Model/Order/Pdf/Shipment/Packaging.php +++ b/app/code/Magento/Sales/Model/Order/Pdf/Shipment/Packaging.php @@ -49,7 +49,7 @@ class Packaging extends \Magento\Sales\Model\Order\Pdf\AbstractPdf protected $_storeManager; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -59,7 +59,7 @@ class Packaging extends \Magento\Sales\Model\Order\Pdf\AbstractPdf * @param \Magento\Core\Helper\String $coreString * @param \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig * @param \Magento\Core\Model\Translate $translate - * @param \Magento\Core\Model\Dir $coreDir + * @param \Magento\App\Dir $coreDir * @param \Magento\Shipping\Model\Config $shippingConfig * @param \Magento\Sales\Model\Order\Pdf\Config $pdfConfig * @param \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory @@ -67,7 +67,7 @@ class Packaging extends \Magento\Sales\Model\Order\Pdf\AbstractPdf * @param \Magento\Usa\Helper\Data $usaData * @param \Magento\Core\Model\LocaleInterface $locale * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @param array $data * * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -78,7 +78,7 @@ class Packaging extends \Magento\Sales\Model\Order\Pdf\AbstractPdf \Magento\Core\Helper\String $coreString, \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig, \Magento\Core\Model\Translate $translate, - \Magento\Core\Model\Dir $coreDir, + \Magento\App\Dir $coreDir, \Magento\Shipping\Model\Config $shippingConfig, \Magento\Sales\Model\Order\Pdf\Config $pdfConfig, \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory, @@ -86,7 +86,7 @@ class Packaging extends \Magento\Sales\Model\Order\Pdf\AbstractPdf \Magento\Usa\Helper\Data $usaData, \Magento\Core\Model\LocaleInterface $locale, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\Layout $layout, + \Magento\View\LayoutInterface $layout, array $data = array() ) { $this->_usaData = $usaData; diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Total/Factory.php b/app/code/Magento/Sales/Model/Order/Pdf/Total/Factory.php index eb48a607c48..6915f9d3cff 100644 --- a/app/code/Magento/Sales/Model/Order/Pdf/Total/Factory.php +++ b/app/code/Magento/Sales/Model/Order/Pdf/Total/Factory.php @@ -59,7 +59,8 @@ class Factory $class = $class ?: $this->_defaultTotalModel; if (!is_a($class, 'Magento\Sales\Model\Order\Pdf\Total\DefaultTotal', true)) { throw new \Magento\Core\Exception( - __("The PDF total model {$class} must be or extend \Magento\Sales\Model\Order\Pdf\Total\Default.") + __("The PDF total model {$class} must be or extend " + . "\\Magento\\Sales\\Model\\Order\\Pdf\\Total\\DefaultTotal.") ); } return $this->_objectManager->create($class, $arguments); diff --git a/app/code/Magento/Sales/Model/Order/Total/Config/Base.php b/app/code/Magento/Sales/Model/Order/Total/Config/Base.php index 4ec581eed7b..a47177b1160 100644 --- a/app/code/Magento/Sales/Model/Order/Total/Config/Base.php +++ b/app/code/Magento/Sales/Model/Order/Total/Config/Base.php @@ -89,7 +89,7 @@ class Base extends \Magento\Sales\Model\Config\Ordered $model = $this->_orderTotalFactory->create($class); if (!$model instanceof \Magento\Sales\Model\Order\Total\AbstractTotal) { throw new \Magento\Core\Exception( - __('The total model should be extended from \Magento\Sales\Model\Order\Total\Abstract.') + __('The total model should be extended from \Magento\Sales\Model\Order\Total\AbstractTotal.') ); } diff --git a/app/code/Magento/Sales/Model/Payment/Method/Billing/AbstractAgreement.php b/app/code/Magento/Sales/Model/Payment/Method/Billing/AbstractAgreement.php index 37a7bea9466..0c3ebc93583 100644 --- a/app/code/Magento/Sales/Model/Payment/Method/Billing/AbstractAgreement.php +++ b/app/code/Magento/Sales/Model/Payment/Method/Billing/AbstractAgreement.php @@ -54,7 +54,7 @@ abstract class AbstractAgreement protected $_agreementFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory @@ -62,7 +62,7 @@ abstract class AbstractAgreement * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, diff --git a/app/code/Magento/Sales/Model/Quote.php b/app/code/Magento/Sales/Model/Quote.php index 581a8b853c2..13a50a9c432 100644 --- a/app/code/Magento/Sales/Model/Quote.php +++ b/app/code/Magento/Sales/Model/Quote.php @@ -217,7 +217,7 @@ class Quote extends \Magento\Core\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -294,7 +294,7 @@ class Quote extends \Magento\Core\Model\AbstractModel protected $_recurringProfileFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Sales\Helper\Data $salesData * @param \Magento\Catalog\Helper\Product $catalogProduct * @param \Magento\Core\Helper\Data $coreData @@ -321,7 +321,7 @@ class Quote extends \Magento\Core\Model\AbstractModel * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Sales\Helper\Data $salesData, \Magento\Catalog\Helper\Product $catalogProduct, \Magento\Core\Helper\Data $coreData, diff --git a/app/code/Magento/Sales/Model/Quote/Address.php b/app/code/Magento/Sales/Model/Quote/Address.php index ca08c703038..61fe7a91ef9 100644 --- a/app/code/Magento/Sales/Model/Quote/Address.php +++ b/app/code/Magento/Sales/Model/Quote/Address.php @@ -258,7 +258,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress /** * @param \Magento\Core\Helper\Data $coreData - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Directory\Helper\Data $directoryData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry @@ -284,7 +284,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress */ public function __construct( \Magento\Core\Helper\Data $coreData, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Directory\Helper\Data $directoryData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, diff --git a/app/code/Magento/Sales/Model/Quote/Address/Total/Collector.php b/app/code/Magento/Sales/Model/Quote/Address/Total/Collector.php index 991bf2706d0..f5664da02ab 100644 --- a/app/code/Magento/Sales/Model/Quote/Address/Total/Collector.php +++ b/app/code/Magento/Sales/Model/Quote/Address/Total/Collector.php @@ -144,7 +144,7 @@ class Collector extends \Magento\Sales\Model\Config\Ordered $model = $this->_totalFactory->create($class); if (!$model instanceof \Magento\Sales\Model\Quote\Address\Total\AbstractTotal) { throw new \Magento\Core\Exception( - __('The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\Abstract.') + __('The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\AbstractTotal.') ); } diff --git a/app/code/Magento/Sales/Model/Quote/Address/Total/Discount.php b/app/code/Magento/Sales/Model/Quote/Address/Total/Discount.php index 93e99bdb1db..5c17421c53e 100644 --- a/app/code/Magento/Sales/Model/Quote/Address/Total/Discount.php +++ b/app/code/Magento/Sales/Model/Quote/Address/Total/Discount.php @@ -31,7 +31,7 @@ class Discount extends \Magento\Sales\Model\Quote\Address\Total\AbstractTotal /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -41,11 +41,11 @@ class Discount extends \Magento\Sales\Model\Quote\Address\Total\AbstractTotal protected $_storeManager; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\StoreManagerInterface $storeManager */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\StoreManagerInterface $storeManager ) { $this->_eventManager = $eventManager; diff --git a/app/code/Magento/Sales/Model/Quote/Item.php b/app/code/Magento/Sales/Model/Quote/Item.php index 646d214148e..95199f73772 100644 --- a/app/code/Magento/Sales/Model/Quote/Item.php +++ b/app/code/Magento/Sales/Model/Quote/Item.php @@ -193,7 +193,7 @@ class Item extends \Magento\Sales\Model\Quote\Item\AbstractItem /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -208,7 +208,7 @@ class Item extends \Magento\Sales\Model\Quote\Item\AbstractItem protected $_itemOptionFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Catalog\Model\ProductFactory $productFactory @@ -222,7 +222,7 @@ class Item extends \Magento\Sales\Model\Quote\Item\AbstractItem * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Catalog\Model\ProductFactory $productFactory, diff --git a/app/code/Magento/Sales/Model/Quote/Payment.php b/app/code/Magento/Sales/Model/Quote/Payment.php index a5d77c7ee53..7c0b1634430 100644 --- a/app/code/Magento/Sales/Model/Quote/Payment.php +++ b/app/code/Magento/Sales/Model/Quote/Payment.php @@ -80,12 +80,12 @@ class Payment extends \Magento\Payment\Model\Info /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Core\Model\Context $context @@ -95,7 +95,7 @@ class Payment extends \Magento\Payment\Model\Info * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Context $context, diff --git a/app/code/Magento/Sales/Model/Resource/Billing/Agreement/Collection.php b/app/code/Magento/Sales/Model/Resource/Billing/Agreement/Collection.php index 23f7b0698ec..a35bdbd104d 100644 --- a/app/code/Magento/Sales/Model/Resource/Billing/Agreement/Collection.php +++ b/app/code/Magento/Sales/Model/Resource/Billing/Agreement/Collection.php @@ -51,7 +51,7 @@ class Collection protected $_customerResource; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -59,7 +59,7 @@ class Collection * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Sales/Model/Resource/Order/AbstractOrder.php b/app/code/Magento/Sales/Model/Resource/Order/AbstractOrder.php index 824d1239789..4dc27d23f9e 100644 --- a/app/code/Magento/Sales/Model/Resource/Order/AbstractOrder.php +++ b/app/code/Magento/Sales/Model/Resource/Order/AbstractOrder.php @@ -90,7 +90,7 @@ abstract class AbstractOrder extends \Magento\Sales\Model\Resource\AbstractResou /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -100,12 +100,12 @@ abstract class AbstractOrder extends \Magento\Sales\Model\Resource\AbstractResou protected $_eavEntityTypeFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Resource $resource * @param \Magento\Eav\Model\Entity\TypeFactory $eavEntityTypeFactory */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Resource $resource, \Magento\Eav\Model\Entity\TypeFactory $eavEntityTypeFactory ) { diff --git a/app/code/Magento/Sales/Model/Resource/Order/Address.php b/app/code/Magento/Sales/Model/Resource/Order/Address.php index 3498e0f72ec..2b83f8ddc4b 100644 --- a/app/code/Magento/Sales/Model/Resource/Order/Address.php +++ b/app/code/Magento/Sales/Model/Resource/Order/Address.php @@ -44,13 +44,13 @@ class Address extends \Magento\Sales\Model\Resource\Order\AbstractOrder protected $_salesResourceFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Resource $resource * @param \Magento\Eav\Model\Entity\TypeFactory $eavEntityTypeFactory * @param \Magento\Sales\Model\Resource\Factory $salesResourceFactory */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Resource $resource, \Magento\Eav\Model\Entity\TypeFactory $eavEntityTypeFactory, \Magento\Sales\Model\Resource\Factory $salesResourceFactory diff --git a/app/code/Magento/Sales/Model/Resource/Order/Collection.php b/app/code/Magento/Sales/Model/Resource/Order/Collection.php index 69cfdd0168c..e80a83337da 100644 --- a/app/code/Magento/Sales/Model/Resource/Order/Collection.php +++ b/app/code/Magento/Sales/Model/Resource/Order/Collection.php @@ -56,7 +56,7 @@ class Collection extends \Magento\Sales\Model\Resource\Collection\AbstractCollec protected $_coreResourceHelper; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -64,7 +64,7 @@ class Collection extends \Magento\Sales\Model\Resource\Collection\AbstractCollec * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Sales/Model/Resource/Order/Payment.php b/app/code/Magento/Sales/Model/Resource/Order/Payment.php index fdb62b42976..b8a4ec6c56f 100644 --- a/app/code/Magento/Sales/Model/Resource/Order/Payment.php +++ b/app/code/Magento/Sales/Model/Resource/Order/Payment.php @@ -53,13 +53,13 @@ class Payment extends \Magento\Sales\Model\Resource\Order\AbstractOrder protected $_paymentConverter; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Resource $resource * @param \Magento\Eav\Model\Entity\TypeFactory $eavEntityTypeFactory * @param \Magento\Sales\Model\Payment\Method\Converter $paymentConverter */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Resource $resource, \Magento\Eav\Model\Entity\TypeFactory $eavEntityTypeFactory, \Magento\Sales\Model\Payment\Method\Converter $paymentConverter diff --git a/app/code/Magento/Sales/Model/Resource/Order/Payment/Collection.php b/app/code/Magento/Sales/Model/Resource/Order/Payment/Collection.php index 74c3344c7a1..5af83d740b7 100644 --- a/app/code/Magento/Sales/Model/Resource/Order/Payment/Collection.php +++ b/app/code/Magento/Sales/Model/Resource/Order/Payment/Collection.php @@ -51,7 +51,7 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection\Abstract protected $_converter; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -59,7 +59,7 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection\Abstract * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Sales/Model/Resource/Quote/Item/Collection.php b/app/code/Magento/Sales/Model/Resource/Quote/Item/Collection.php index 995c5580726..fe6db927036 100644 --- a/app/code/Magento/Sales/Model/Resource/Quote/Item/Collection.php +++ b/app/code/Magento/Sales/Model/Resource/Quote/Item/Collection.php @@ -61,7 +61,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl protected $_quoteConfig; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -71,7 +71,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Sales/Model/Resource/Quote/Payment/Collection.php b/app/code/Magento/Sales/Model/Resource/Quote/Payment/Collection.php index f03a5046f65..a278e255c46 100644 --- a/app/code/Magento/Sales/Model/Resource/Quote/Payment/Collection.php +++ b/app/code/Magento/Sales/Model/Resource/Quote/Payment/Collection.php @@ -37,7 +37,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl protected $_converter; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -45,7 +45,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Sales/Model/Resource/Report/Bestsellers/Collection.php b/app/code/Magento/Sales/Model/Resource/Report/Bestsellers/Collection.php index eaf69c68b82..7a3bede3d88 100644 --- a/app/code/Magento/Sales/Model/Resource/Report/Bestsellers/Collection.php +++ b/app/code/Magento/Sales/Model/Resource/Report/Bestsellers/Collection.php @@ -52,14 +52,14 @@ class Collection protected $_selectedColumns = array(); /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory * @param \Magento\Sales\Model\Resource\Report $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Sales/Model/Resource/Report/Collection/AbstractCollection.php b/app/code/Magento/Sales/Model/Resource/Report/Collection/AbstractCollection.php index 9d80f980bd3..129d3cd399e 100644 --- a/app/code/Magento/Sales/Model/Resource/Report/Collection/AbstractCollection.php +++ b/app/code/Magento/Sales/Model/Resource/Report/Collection/AbstractCollection.php @@ -45,14 +45,14 @@ class AbstractCollection protected $_orderStatus = null; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory * @param \Magento\Sales\Model\Resource\Report $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Sales/Model/Resource/Report/Invoiced/Collection/Invoiced.php b/app/code/Magento/Sales/Model/Resource/Report/Invoiced/Collection/Invoiced.php index 31987c451ed..4e36236bfd4 100644 --- a/app/code/Magento/Sales/Model/Resource/Report/Invoiced/Collection/Invoiced.php +++ b/app/code/Magento/Sales/Model/Resource/Report/Invoiced/Collection/Invoiced.php @@ -38,14 +38,14 @@ class Invoiced extends \Magento\Sales\Model\Resource\Report\Invoiced\Collection\Order { /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory * @param \Magento\Sales\Model\Resource\Report $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Sales/Model/Resource/Report/Invoiced/Collection/Order.php b/app/code/Magento/Sales/Model/Resource/Report/Invoiced/Collection/Order.php index 0c8a5966014..2d36eaf0ed3 100644 --- a/app/code/Magento/Sales/Model/Resource/Report/Invoiced/Collection/Order.php +++ b/app/code/Magento/Sales/Model/Resource/Report/Invoiced/Collection/Order.php @@ -52,14 +52,14 @@ class Order protected $_selectedColumns = array(); /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory * @param \Magento\Sales\Model\Resource\Report $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Sales/Model/Resource/Report/Order/Collection.php b/app/code/Magento/Sales/Model/Resource/Report/Order/Collection.php index bd9e749075a..792d5fba8ed 100644 --- a/app/code/Magento/Sales/Model/Resource/Report/Order/Collection.php +++ b/app/code/Magento/Sales/Model/Resource/Report/Order/Collection.php @@ -58,14 +58,14 @@ class Collection extends \Magento\Sales\Model\Resource\Report\Collection\Abstrac protected $_selectedColumns = array(); /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory * @param \Magento\Sales\Model\Resource\Report $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Sales/Model/Resource/Report/Refunded/Collection/Order.php b/app/code/Magento/Sales/Model/Resource/Report/Refunded/Collection/Order.php index 7a56b52862d..0c830145576 100644 --- a/app/code/Magento/Sales/Model/Resource/Report/Refunded/Collection/Order.php +++ b/app/code/Magento/Sales/Model/Resource/Report/Refunded/Collection/Order.php @@ -52,14 +52,14 @@ class Order protected $_selectedColumns = array(); /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory * @param \Magento\Sales\Model\Resource\Report $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Sales/Model/Resource/Report/Refunded/Collection/Refunded.php b/app/code/Magento/Sales/Model/Resource/Report/Refunded/Collection/Refunded.php index 228c0dd1dec..04bdf59eefc 100644 --- a/app/code/Magento/Sales/Model/Resource/Report/Refunded/Collection/Refunded.php +++ b/app/code/Magento/Sales/Model/Resource/Report/Refunded/Collection/Refunded.php @@ -38,14 +38,14 @@ class Refunded extends \Magento\Sales\Model\Resource\Report\Refunded\Collection\Order { /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory * @param \Magento\Sales\Model\Resource\Report $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Sales/Model/Resource/Report/Shipping/Collection/Order.php b/app/code/Magento/Sales/Model/Resource/Report/Shipping/Collection/Order.php index 534c794bfe0..4b9ec8cae71 100644 --- a/app/code/Magento/Sales/Model/Resource/Report/Shipping/Collection/Order.php +++ b/app/code/Magento/Sales/Model/Resource/Report/Shipping/Collection/Order.php @@ -52,14 +52,14 @@ class Order protected $_selectedColumns = array(); /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory * @param \Magento\Sales\Model\Resource\Report $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Sales/Model/Resource/Report/Shipping/Collection/Shipment.php b/app/code/Magento/Sales/Model/Resource/Report/Shipping/Collection/Shipment.php index 8b446ebc71e..06b973e480a 100644 --- a/app/code/Magento/Sales/Model/Resource/Report/Shipping/Collection/Shipment.php +++ b/app/code/Magento/Sales/Model/Resource/Report/Shipping/Collection/Shipment.php @@ -38,14 +38,14 @@ class Shipment extends \Magento\Sales\Model\Resource\Report\Shipping\Collection\Order { /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory * @param \Magento\Sales\Model\Resource\Report $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Sales/Model/Resource/Sale/Collection.php b/app/code/Magento/Sales/Model/Resource/Sale/Collection.php index 3663ec9150f..a8a6dbc34ae 100644 --- a/app/code/Magento/Sales/Model/Resource/Sale/Collection.php +++ b/app/code/Magento/Sales/Model/Resource/Sale/Collection.php @@ -67,7 +67,7 @@ class Collection extends \Magento\Data\Collection\Db /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -89,7 +89,7 @@ class Collection extends \Magento\Data\Collection\Db /** * Set sales order entity and establish read connection * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -98,7 +98,7 @@ class Collection extends \Magento\Data\Collection\Db * @param \Magento\Core\Model\StoreManagerInterface $storeManager */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Sales/Model/Service/Quote.php b/app/code/Magento/Sales/Model/Service/Quote.php index ad3150838a1..eead70baac3 100644 --- a/app/code/Magento/Sales/Model/Service/Quote.php +++ b/app/code/Magento/Sales/Model/Service/Quote.php @@ -76,7 +76,7 @@ class Quote /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -93,14 +93,14 @@ class Quote /** * Class constructor * - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Sales\Model\Quote $quote * @param \Magento\Sales\Model\Convert\QuoteFactory $convertQuoteFactory * @param \Magento\Customer\Model\Session $customerSession * @param \Magento\Core\Model\Resource\TransactionFactory $transactionFactory */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Sales\Model\Quote $quote, \Magento\Sales\Model\Convert\QuoteFactory $convertQuoteFactory, \Magento\Customer\Model\Session $customerSession, diff --git a/app/code/Magento/Sales/etc/di.xml b/app/code/Magento/Sales/etc/di.xml index 524e97cfa0b..713cbb77489 100644 --- a/app/code/Magento/Sales/etc/di.xml +++ b/app/code/Magento/Sales/etc/di.xml @@ -25,91 +25,6 @@ --> <config> <type name="Magento\Sales\Model\Resource\Report" shared="false" /> - <type name="Magento\Sales\Model\Convert\Order"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Sales\Model\Convert\Quote"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Sales\Model\Observer"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Sales\Model\Order\Creditmemo"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Sales\Model\Order\Invoice"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Sales\Model\Order\Item"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Sales\Model\Order\Payment\Transaction"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Sales\Model\Order\Payment"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Sales\Model\Order"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Sales\Model\Quote\Address\Total\Discount"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Sales\Model\Quote\Config"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Sales\Model\Quote\Item"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Sales\Model\Quote\Payment"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Sales\Model\Quote"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Sales\Model\Resource\Order\AbstractOrder"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Sales\Model\Resource\Sale\Collection"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Sales\Model\Service\Quote"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> <type name="Magento\Sales\Model\Order\Pdf\Config\Reader"> <param name="fileName"> <value>pdf.xml</value> @@ -141,8 +56,8 @@ </value> </param> </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <sales_setup>Magento\Sales\Model\Resource\Setup</sales_setup> </value> diff --git a/app/code/Magento/Sales/i18n/de_DE.csv b/app/code/Magento/Sales/i18n/de_DE.csv index f806b65693b..f907cc1d624 100644 --- a/app/code/Magento/Sales/i18n/de_DE.csv +++ b/app/code/Magento/Sales/i18n/de_DE.csv @@ -472,7 +472,7 @@ "PDF Print-outs","PDF Ausdrucke" "PDF object is not specified.","PDF Objekt ist nicht spezifiziert." "PDF page object is not specified.","PDF Seitenobjekt ist nicht spezifiziert" -"PDF total model should extend \Magento\Sales\Model\Order\Pdf\Total\Default","PDF Gesamtmodell sollte \Magento\Sales\Model\Order\Pdf\Total\Default erweitern" +"PDF total model should extend \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal","PDF Gesamtmodell sollte \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal erweitern" "Package","Paket" "Package types are disregarded for USPS domestic shipments.","Paket-Typen werden für den USPS Inlandsversand außer Acht gelassen." "Packages","Verpackungen" @@ -723,7 +723,7 @@ "Tax Percent","Steuer Prozent" "Telephone","Telefon" "The Order State ""%s"" must not be set manually.","Der Auftragsstatus ""%s"" darf nicht manuell festgelegt werden." -"The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\Abstract.","Das adresse total model sollte von \Magento\Sales\Model\Quote\Address\Total\Abstract erweitert werden." +"The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\AbstractTotal.","Das adresse total model sollte von \Magento\Sales\Model\Quote\Address\Total\AbstractTotal erweitert werden." "The billing agreement ""%s"" has been canceled.","Die Rechnungsvereinbarung ""%s"" wurde annuliert." "The billing agreement ""%s"" has been created.","Die Rechnungsvereinbarung ""%s"" wurde erstellt." "The coupon code has been accepted.","Der Gutscheincode ist akzeptiert worden." @@ -794,7 +794,7 @@ "Total Shipping Charges","Gesamte Versandkosten" "Total Tax","Gesamtsteuern" "Total Weight","Gesamtgewicht" -"Total model should be extended from \Magento\Sales\Model\Order\Total\Abstract.","Das Gesamtmodell ist um \Magento\Sales\Model\Order\Total\Abstract zu erweitern." +"Total model should be extended from \Magento\Sales\Model\Order\Total\AbstractTotal.","Das Gesamtmodell ist um \Magento\Sales\Model\Order\Total\AbstractTotal zu erweitern." "Track Order","Bestellung nachverfolgen" "Track all shipment(s)","Alle Sendungen nachverfolgen" "Track all shipments","Allen Versand verfolgen" diff --git a/app/code/Magento/Sales/i18n/en_US.csv b/app/code/Magento/Sales/i18n/en_US.csv index f45d44effad..b8f1d6296a0 100644 --- a/app/code/Magento/Sales/i18n/en_US.csv +++ b/app/code/Magento/Sales/i18n/en_US.csv @@ -475,7 +475,7 @@ "PDF Print-outs","PDF Print-outs" "PDF object is not specified.","PDF object is not specified." "PDF page object is not specified.","PDF page object is not specified." -"PDF total model should extend \Magento\Sales\Model\Order\Pdf\Total\Default","PDF total model should extend \Magento\Sales\Model\Order\Pdf\Total\Default" +"PDF total model should extend \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal","PDF total model should extend \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal" "Package","Package" "Package types are disregarded for USPS domestic shipments.","Package types are disregarded for USPS domestic shipments." "Packages","Packages" @@ -726,7 +726,7 @@ "Tax Percent","Tax Percent" "Telephone","Telephone" "The Order State ""%s"" must not be set manually.","The Order State ""%s"" must not be set manually." -"The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\Abstract.","The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\Abstract." +"The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\AbstractTotal.","The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\AbstractTotal." "The billing agreement ""%s"" has been canceled.","The billing agreement ""%s"" has been canceled." "The billing agreement ""%s"" has been created.","The billing agreement ""%s"" has been created." "The coupon code has been accepted.","The coupon code has been accepted." @@ -797,7 +797,7 @@ "Total Shipping Charges","Total Shipping Charges" "Total Tax","Total Tax" "Total Weight","Total Weight" -"Total model should be extended from \Magento\Sales\Model\Order\Total\Abstract.","Total model should be extended from \Magento\Sales\Model\Order\Total\Abstract." +"Total model should be extended from \Magento\Sales\Model\Order\Total\AbstractTotal.","Total model should be extended from \Magento\Sales\Model\Order\Total\AbstractTotal." "Track Order","Track Order" "Track all shipment(s)","Track all shipment(s)" "Track all shipments","Track all shipments" diff --git a/app/code/Magento/Sales/i18n/es_ES.csv b/app/code/Magento/Sales/i18n/es_ES.csv index 44dec421b4a..bc1d43e119b 100644 --- a/app/code/Magento/Sales/i18n/es_ES.csv +++ b/app/code/Magento/Sales/i18n/es_ES.csv @@ -472,7 +472,7 @@ "PDF Print-outs","Impresos en PDF" "PDF object is not specified.","Objeto en PDF no especificado." "PDF page object is not specified.","Objeto de página en PDF no especificado." -"PDF total model should extend \Magento\Sales\Model\Order\Pdf\Total\Default","Módelo total en PDF deberÃa extenderse Gestionar_Ventas_Modelo_Pedido_PDF_Total_Defecto" +"PDF total model should extend \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal","Módelo total en PDF deberÃa extenderse \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal" "Package","Paquete" "Package types are disregarded for USPS domestic shipments.","Los tipos de paquetes no serán tenidos en cuenta por el servicio postal de USA para envÃos nacionales." "Packages","Paquetes" @@ -723,7 +723,7 @@ "Tax Percent","Porcentaje de impuestos" "Telephone","Teléfono" "The Order State ""%s"" must not be set manually.","El estado del pedido ""%s"" no se debe establecer manualmente." -"The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\Abstract.","El modelo de dirección total deberÃa extenderse desde \Magento\Sales\Model\Quote\Address\Total\Abstract." +"The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\AbstractTotal.","El modelo de dirección total deberÃa extenderse desde \Magento\Sales\Model\Quote\Address\Total\AbstractTotal." "The billing agreement ""%s"" has been canceled.","El acuerdo de facturación ""%s"" se ha cancelado." "The billing agreement ""%s"" has been created.","El acuerdo de facturación ""%s"" se ha creado." "The coupon code has been accepted.","El código del cupón se ha aceptado" @@ -795,7 +795,7 @@ No hay etiquetas de envÃo para las %s seleccionadas. [[[if %s is feminine]]]" "Total Shipping Charges","Total de gastos de envÃo" "Total Tax","Impuesto Total" "Total Weight","Peso total" -"Total model should be extended from \Magento\Sales\Model\Order\Total\Abstract.","El modelo total debe anpliarse desde \Magento\Sales\Model\Order\Total\Abstract" +"Total model should be extended from \Magento\Sales\Model\Order\Total\AbstractTotal.","El modelo total debe anpliarse desde \Magento\Sales\Model\Order\Total\AbstractTotal" "Track Order","Rastrear un Pedido" "Track all shipment(s)","Siga su envÃo(s)" "Track all shipments","Seguir todos los envÃos" diff --git a/app/code/Magento/Sales/i18n/fr_FR.csv b/app/code/Magento/Sales/i18n/fr_FR.csv index 8eb39729130..8d1e957d987 100644 --- a/app/code/Magento/Sales/i18n/fr_FR.csv +++ b/app/code/Magento/Sales/i18n/fr_FR.csv @@ -472,7 +472,7 @@ "PDF Print-outs","Impressions de PDF" "PDF object is not specified.","L'objet PDF n'est pas spécifié." "PDF page object is not specified.","La page de l'objet PDF n'est pas spécifiée." -"PDF total model should extend \Magento\Sales\Model\Order\Pdf\Total\Default","Modèle total de PDF devrait étendre \Magento\Sales\Model\Order\Pdf\Total\Default" +"PDF total model should extend \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal","Modèle total de PDF devrait étendre \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal" "Package","Colis" "Package types are disregarded for USPS domestic shipments.","Il n'est pas tenu compte du type de paquet pour les expéditions nationales par UPS." "Packages","Paquets" @@ -723,7 +723,7 @@ "Tax Percent","Pourcentage de taxe" "Telephone","Téléphone" "The Order State ""%s"" must not be set manually.","L’État de la commande ""%s"" ne doit pas être défini manuellement." -"The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\Abstract.","Le modèle total de l'adresse devrait être étendu à partir de \Magento\Sales\Model\Quote\Address\Total\Abstract." +"The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\AbstractTotal.","Le modèle total de l'adresse devrait être étendu à partir de \Magento\Sales\Model\Quote\Address\Total\AbstractTotal." "The billing agreement ""%s"" has been canceled.","L'accord de facturation ""%s"" a été annulé." "The billing agreement ""%s"" has been created.","L'accord de facturation ""%s"" a été créé." "The coupon code has been accepted.","Le code de coupon a été accepté" @@ -794,7 +794,7 @@ "Total Shipping Charges","Charges totales expédition" "Total Tax","Taxe totale" "Total Weight","Poids total" -"Total model should be extended from \Magento\Sales\Model\Order\Total\Abstract.","Le modèle complet devrait étendu à partir de Magento_Ventes_Modèle_Commande_Total_Résumé." +"Total model should be extended from \Magento\Sales\Model\Order\Total\AbstractTotal.","Le modèle complet devrait étendu à partir de \Magento\Sales\Model\Order\Total\AbstractTotal." "Track Order","Suivre la commande" "Track all shipment(s)","Suivre toutes les commandes" "Track all shipments","Suivre toutes les livraisons" diff --git a/app/code/Magento/Sales/i18n/nl_NL.csv b/app/code/Magento/Sales/i18n/nl_NL.csv index 95471712352..3a3af6ce018 100644 --- a/app/code/Magento/Sales/i18n/nl_NL.csv +++ b/app/code/Magento/Sales/i18n/nl_NL.csv @@ -472,7 +472,7 @@ "PDF Print-outs","PDF Print-outs" "PDF object is not specified.","PDF-object is niet gespecificeerd." "PDF page object is not specified.","PDF-pagina object wordt niet gespecificeerd." -"PDF total model should extend \Magento\Sales\Model\Order\Pdf\Total\Default","PDF totaal model moet het volgende uitbreiden: \Magento\Sales\Model\Order\Pdf\Total\Default" +"PDF total model should extend \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal","PDF totaal model moet het volgende uitbreiden: \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal" "Package","Pakket" "Package types are disregarded for USPS domestic shipments.","Pakketten worden buiten beschouwing gelaten voor binnenlandse zendingen van USPS." "Packages","Pakketen" @@ -723,7 +723,7 @@ "Tax Percent","Belastingspercentage" "Telephone","telefoon" "The Order State ""%s"" must not be set manually.","De bestellingsstaat ""%s"" moet niet handmatig ingesteld worden." -"The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\Abstract.","Het totale adresmodel moet uitgebreid worden van \Magento\Sales\Model\Quote\Address\Total\Abstract." +"The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\AbstractTotal.","Het totale adresmodel moet uitgebreid worden van \Magento\Sales\Model\Quote\Address\Total\AbstractTotal." "The billing agreement ""%s"" has been canceled.","De afrekeningsovereenkomst ""%s"" is geannuleerd." "The billing agreement ""%s"" has been created.","De afrekeningsovereenkomst ""%s"" is aangemaakt." "The coupon code has been accepted.","De kortingsboncode is geaccepteerd." @@ -794,7 +794,7 @@ "Total Shipping Charges","Totaal Verzendkosten" "Total Tax","Totale Belasting" "Total Weight","Totaal Gewicht" -"Total model should be extended from \Magento\Sales\Model\Order\Total\Abstract.","Totaal model moet worden uitgebreid van \Magento\Sales\Model\Order\Total\Abstract." +"Total model should be extended from \Magento\Sales\Model\Order\Total\AbstractTotal.","Totaal model moet worden uitgebreid van \Magento\Sales\Model\Order\Total\AbstractTotal." "Track Order","Track zending" "Track all shipment(s)","Volg alle zending(en)" "Track all shipments","Alle verzendingen volgen" diff --git a/app/code/Magento/Sales/i18n/pt_BR.csv b/app/code/Magento/Sales/i18n/pt_BR.csv index 2985ae65175..ce8f5786e1f 100644 --- a/app/code/Magento/Sales/i18n/pt_BR.csv +++ b/app/code/Magento/Sales/i18n/pt_BR.csv @@ -472,7 +472,7 @@ "PDF Print-outs","Impressões de PDF" "PDF object is not specified.","Objeto de PDF não especificado." "PDF page object is not specified.","Página do objeto em PDF não especificado." -"PDF total model should extend \Magento\Sales\Model\Order\Pdf\Total\Default","A extensão total do modelo de PDF deve ser \Magento\Sales\Model\Order\Pdf\Total\Default" +"PDF total model should extend \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal","A extensão total do modelo de PDF deve ser \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal" "Package","Embalagem" "Package types are disregarded for USPS domestic shipments.","Desconsidera-se o tipo de encomenda para frete doméstico do correio dos EUA." "Packages","Embalagens" @@ -723,7 +723,7 @@ "Tax Percent","Porcentagem de Imposto" "Telephone","Telefone" "The Order State ""%s"" must not be set manually.","O Estado do Pedido ""%s"" não pode ser alterado manualmente" -"The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\Abstract.","O modelo de endereço total deve ser alargado de \Magento\Sales\Model\Quote\Address\Total\Abstract." +"The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\AbstractTotal.","O modelo de endereço total deve ser alargado de \Magento\Sales\Model\Quote\Address\Total\AbstractTotal." "The billing agreement ""%s"" has been canceled.","O contrato de faturamento ""%s"" foi cancelado." "The billing agreement ""%s"" has been created.","O contrato de faturamento ""%s"" foi criado." "The coupon code has been accepted.","O código do cupão foi aceite." @@ -794,7 +794,7 @@ "Total Shipping Charges","Total dos Gastos de Envio" "Total Tax","Total dos Impostos" "Total Weight","Peso Total" -"Total model should be extended from \Magento\Sales\Model\Order\Total\Abstract.","O modelo de total deve ser ampliado a partir de \Magento\Sales\Model\Order\Total\Abstract." +"Total model should be extended from \Magento\Sales\Model\Order\Total\AbstractTotal.","O modelo de total deve ser ampliado a partir de \Magento\Sales\Model\Order\Total\AbstractTotal." "Track Order","Rastrear Ordem" "Track all shipment(s)","Rastrear todas as remessas" "Track all shipments","Rastrear todos os envios" diff --git a/app/code/Magento/Sales/i18n/zh_CN.csv b/app/code/Magento/Sales/i18n/zh_CN.csv index 54750f6ac92..c74f9e5d29c 100644 --- a/app/code/Magento/Sales/i18n/zh_CN.csv +++ b/app/code/Magento/Sales/i18n/zh_CN.csv @@ -472,7 +472,7 @@ "PDF Print-outs","PDF版打å°è¾“出" "PDF object is not specified.","PDF对象未指定。" "PDF page object is not specified.","PDF页é¢å¯¹è±¡æœªæŒ‡å®šã€‚" -"PDF total model should extend \Magento\Sales\Model\Order\Pdf\Total\Default","PDF总模å—必须扩展\Magento\Sales\Model\Order\Pdf\Total\Default" +"PDF total model should extend \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal","PDF总模å—必须扩展\Magento\Sales\Model\Order\Pdf\Total\DefaultTotal" "Package","包裹" "Package types are disregarded for USPS domestic shipments.","USPS国内å‘货将忽略包装类型。" "Packages","包裹" @@ -723,7 +723,7 @@ "Tax Percent","税率" "Telephone","电è¯" "The Order State ""%s"" must not be set manually.","订å•çŠ¶æ€ ""%s"" 必须手工设置。" -"The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\Abstract.","åœ°å€æ€»æ¨¡å—应扩展自\Magento\Sales\Model\Quote\Address\Total\Abstract。" +"The address total model should be extended from \Magento\Sales\Model\Quote\Address\Total\AbstractTotal.","åœ°å€æ€»æ¨¡å—应扩展自\Magento\Sales\Model\Quote\Address\Total\AbstractTotal。" "The billing agreement ""%s"" has been canceled.","该记账åè®® ""%s"" å·²è¢«å–æ¶ˆã€‚" "The billing agreement ""%s"" has been created.","该记账åè®® ""%s"" 已被创建。" "The coupon code has been accepted.","该代金券代ç 已被使用。" @@ -794,7 +794,7 @@ "Total Shipping Charges","总è¿è´¹" "Total Tax","总税款" "Total Weight","总高度" -"Total model should be extended from \Magento\Sales\Model\Order\Total\Abstract.","总模型应延长自 \Magento\Sales\Model\Order\Total\Abstract。" +"Total model should be extended from \Magento\Sales\Model\Order\Total\AbstractTotal.","总模型应延长自 \Magento\Sales\Model\Order\Total\AbstractTotal。" "Track Order","追踪订å•" "Track all shipment(s)","追踪所有è¿é€" "Track all shipments","追踪所有è¿å•" diff --git a/app/code/Magento/SalesRule/Model/Quote/Discount.php b/app/code/Magento/SalesRule/Model/Quote/Discount.php index 70e73090bad..70c72d1f204 100644 --- a/app/code/Magento/SalesRule/Model/Quote/Discount.php +++ b/app/code/Magento/SalesRule/Model/Quote/Discount.php @@ -39,7 +39,7 @@ class Discount extends \Magento\Sales\Model\Quote\Address\Total\AbstractTotal /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -49,12 +49,12 @@ class Discount extends \Magento\Sales\Model\Quote\Address\Total\AbstractTotal protected $_storeManager; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\SalesRule\Model\Validator $validator */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\SalesRule\Model\Validator $validator ) { diff --git a/app/code/Magento/SalesRule/Model/Resource/Report/Collection.php b/app/code/Magento/SalesRule/Model/Resource/Report/Collection.php index d7e7d12df04..ddc9cd413f3 100644 --- a/app/code/Magento/SalesRule/Model/Resource/Report/Collection.php +++ b/app/code/Magento/SalesRule/Model/Resource/Report/Collection.php @@ -66,7 +66,7 @@ class Collection extends \Magento\Sales\Model\Resource\Report\Collection\Abstrac /** * @param \Magento\SalesRule\Model\Resource\Report\RuleFactory $ruleFactory - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -74,7 +74,7 @@ class Collection extends \Magento\Sales\Model\Resource\Report\Collection\Abstrac */ public function __construct( \Magento\SalesRule\Model\Resource\Report\RuleFactory $ruleFactory, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/SalesRule/Model/Resource/Rule/Collection.php b/app/code/Magento/SalesRule/Model/Resource/Rule/Collection.php index 210795e59be..7abb61b1d40 100644 --- a/app/code/Magento/SalesRule/Model/Resource/Rule/Collection.php +++ b/app/code/Magento/SalesRule/Model/Resource/Rule/Collection.php @@ -60,7 +60,7 @@ class Collection extends \Magento\Rule\Model\Resource\Rule\Collection\AbstractCo protected $_date; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -68,7 +68,7 @@ class Collection extends \Magento\Rule\Model\Resource\Rule\Collection\AbstractCo * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/SalesRule/Model/Rule.php b/app/code/Magento/SalesRule/Model/Rule.php index 9910d3ffdd8..856b6198ee3 100644 --- a/app/code/Magento/SalesRule/Model/Rule.php +++ b/app/code/Magento/SalesRule/Model/Rule.php @@ -180,7 +180,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -215,7 +215,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel protected $_storeManager; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Data\Form\Factory $formFactory * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry @@ -231,7 +231,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Data\Form\Factory $formFactory, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, diff --git a/app/code/Magento/SalesRule/Model/Rule/Action/Collection.php b/app/code/Magento/SalesRule/Model/Rule/Action/Collection.php index eb321392176..0f3314c01b1 100644 --- a/app/code/Magento/SalesRule/Model/Rule/Action/Collection.php +++ b/app/code/Magento/SalesRule/Model/Rule/Action/Collection.php @@ -32,13 +32,13 @@ class Collection extends \Magento\Rule\Model\Action\Collection /** * @param \Magento\Core\Model\View\Url $viewUrl * @param \Magento\Rule\Model\ActionFactory $actionFactory - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @param array $data */ public function __construct( \Magento\Core\Model\View\Url $viewUrl, \Magento\Rule\Model\ActionFactory $actionFactory, - \Magento\Core\Model\Layout $layout, + \Magento\View\LayoutInterface $layout, array $data = array() ) { parent::__construct($viewUrl, $actionFactory, $layout, $data); diff --git a/app/code/Magento/SalesRule/Model/Rule/Condition/Combine.php b/app/code/Magento/SalesRule/Model/Rule/Condition/Combine.php index 18a046ad8f2..ad3d052bac0 100644 --- a/app/code/Magento/SalesRule/Model/Rule/Condition/Combine.php +++ b/app/code/Magento/SalesRule/Model/Rule/Condition/Combine.php @@ -32,7 +32,7 @@ class Combine extends \Magento\Rule\Model\Condition\Combine /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -42,13 +42,13 @@ class Combine extends \Magento\Rule\Model\Condition\Combine protected $_conditionAddress; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Rule\Model\Condition\Context $context * @param \Magento\SalesRule\Model\Rule\Condition\Address $conditionAddress * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Rule\Model\Condition\Context $context, \Magento\SalesRule\Model\Rule\Condition\Address $conditionAddress, array $data = array() diff --git a/app/code/Magento/SalesRule/Model/Validator.php b/app/code/Magento/SalesRule/Model/Validator.php index c6990303ddc..217433cadc9 100644 --- a/app/code/Magento/SalesRule/Model/Validator.php +++ b/app/code/Magento/SalesRule/Model/Validator.php @@ -87,7 +87,7 @@ class Validator extends \Magento\Core\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -113,7 +113,7 @@ class Validator extends \Magento\Core\Model\AbstractModel /** * @param \Magento\SalesRule\Model\Resource\Coupon\UsageFactory $usageFactory * @param \Magento\SalesRule\Model\Resource\Rule\CollectionFactory $collectionFactory - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Tax\Helper\Data $taxData * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry @@ -126,7 +126,7 @@ class Validator extends \Magento\Core\Model\AbstractModel public function __construct( \Magento\SalesRule\Model\Resource\Coupon\UsageFactory $usageFactory, \Magento\SalesRule\Model\Resource\Rule\CollectionFactory $collectionFactory, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Tax\Helper\Data $taxData, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, diff --git a/app/code/Magento/SalesRule/etc/di.xml b/app/code/Magento/SalesRule/etc/di.xml index 50f59b8a8d9..5b7b9e81705 100644 --- a/app/code/Magento/SalesRule/etc/di.xml +++ b/app/code/Magento/SalesRule/etc/di.xml @@ -28,33 +28,13 @@ <type name="Magento\Sales\Model\Quote\Config"> <plugin name="append_sales_rule_keys_to_quote" type="Magento\SalesRule\Model\Plugin\QuoteConfigProductAttributes"/> </type> - <type name="Magento\SalesRule\Model\Quote\Discount"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\SalesRule\Model\Rule\Condition\Combine"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\SalesRule\Model\Rule"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\SalesRule\Model\Validator"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> <type name="Magento\SalesRule\Model\Observer"> <param name="backendSession"> <instance type="Magento\Backend\Model\Session\Proxy" /> </param> </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <salesrule_setup>Magento\SalesRule\Model\Resource\Setup</salesrule_setup> </value> diff --git a/app/code/Magento/Sitemap/Model/Sitemap.php b/app/code/Magento/Sitemap/Model/Sitemap.php index a5f44deca1b..a039fe8e276 100644 --- a/app/code/Magento/Sitemap/Model/Sitemap.php +++ b/app/code/Magento/Sitemap/Model/Sitemap.php @@ -150,7 +150,7 @@ class Sitemap extends \Magento\Core\Model\AbstractModel protected $_dateModel; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirModel; @@ -160,7 +160,7 @@ class Sitemap extends \Magento\Core\Model\AbstractModel protected $_storeManager; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; @@ -174,9 +174,9 @@ class Sitemap extends \Magento\Core\Model\AbstractModel * @param \Magento\Sitemap\Model\Resource\Catalog\ProductFactory $productFactory * @param \Magento\Sitemap\Model\Resource\Cms\PageFactory $cmsFactory * @param \Magento\Core\Model\Date $modelDate - * @param \Magento\Core\Model\Dir $dirModel + * @param \Magento\App\Dir $dirModel * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param \Magento\Data\Collection\Db $resourceCollection * @param array $data @@ -191,9 +191,9 @@ class Sitemap extends \Magento\Core\Model\AbstractModel \Magento\Sitemap\Model\Resource\Catalog\ProductFactory $productFactory, \Magento\Sitemap\Model\Resource\Cms\PageFactory $cmsFactory, \Magento\Core\Model\Date $modelDate, - \Magento\Core\Model\Dir $dirModel, + \Magento\App\Dir $dirModel, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Controller\Request\Http $request, + \Magento\App\RequestInterface $request, \Magento\Core\Model\Resource\AbstractResource $resource = null, \Magento\Data\Collection\Db $resourceCollection = null, array $data = array() @@ -574,7 +574,7 @@ class Sitemap extends \Magento\Core\Model\AbstractModel */ protected function _getBaseDir() { - return $this->_dirModel->getDir(\Magento\Core\Model\Dir::ROOT); + return $this->_dirModel->getDir(\Magento\App\Dir::ROOT); } /** diff --git a/app/code/Magento/Tax/Model/Calculation/Rate.php b/app/code/Magento/Tax/Model/Calculation/Rate.php index 633398e1fc2..5f03df955fd 100644 --- a/app/code/Magento/Tax/Model/Calculation/Rate.php +++ b/app/code/Magento/Tax/Model/Calculation/Rate.php @@ -56,7 +56,7 @@ class Rate extends \Magento\Core\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -71,7 +71,7 @@ class Rate extends \Magento\Core\Model\AbstractModel protected $_titleFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Directory\Model\RegionFactory $regionFactory @@ -81,7 +81,7 @@ class Rate extends \Magento\Core\Model\AbstractModel * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Directory\Model\RegionFactory $regionFactory, diff --git a/app/code/Magento/Tax/Model/Calculation/Rule.php b/app/code/Magento/Tax/Model/Calculation/Rule.php index be5a75deca6..b47da0fc18d 100644 --- a/app/code/Magento/Tax/Model/Calculation/Rule.php +++ b/app/code/Magento/Tax/Model/Calculation/Rule.php @@ -72,7 +72,7 @@ class Rule extends \Magento\Core\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -82,7 +82,7 @@ class Rule extends \Magento\Core\Model\AbstractModel protected $_calculation; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Tax\Helper\Data $taxHelper @@ -93,7 +93,7 @@ class Rule extends \Magento\Core\Model\AbstractModel * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Tax\Helper\Data $taxHelper, diff --git a/app/code/Magento/Tax/Model/Resource/Calculation/Rate/Collection.php b/app/code/Magento/Tax/Model/Resource/Calculation/Rate/Collection.php index dc132fff1da..9bd5ec15ec5 100644 --- a/app/code/Magento/Tax/Model/Resource/Calculation/Rate/Collection.php +++ b/app/code/Magento/Tax/Model/Resource/Calculation/Rate/Collection.php @@ -38,7 +38,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl protected $_storeManager; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy @@ -46,7 +46,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param \Magento\Core\Model\Resource\Db\AbstractDb $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, diff --git a/app/code/Magento/Tax/Model/Resource/Report/Collection.php b/app/code/Magento/Tax/Model/Resource/Report/Collection.php index d693f8076f7..59befbb9f76 100644 --- a/app/code/Magento/Tax/Model/Resource/Report/Collection.php +++ b/app/code/Magento/Tax/Model/Resource/Report/Collection.php @@ -54,14 +54,14 @@ class Collection extends \Magento\Sales\Model\Resource\Report\Collection\Abstrac protected $_selectedColumns = array(); /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory * @param \Magento\Sales\Model\Resource\Report $resource */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Tax/etc/di.xml b/app/code/Magento/Tax/etc/di.xml index 6d801af8a74..1c1db1c00b2 100644 --- a/app/code/Magento/Tax/etc/di.xml +++ b/app/code/Magento/Tax/etc/di.xml @@ -29,18 +29,8 @@ <instance type="Magento\Tax\Model\ConfigProxy" /> </param> </type> - <type name="Magento\Tax\Model\Calculation\Rate"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Tax\Model\Calculation\Rule"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <tax_setup>Magento\Tax\Model\Resource\Setup</tax_setup> </value> diff --git a/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit.php b/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit.php index 1ab169911ee..05b45b24077 100644 --- a/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit.php +++ b/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit.php @@ -69,7 +69,7 @@ class Edit extends \Magento\Backend\Block\Widget\Form\Container $this->getLayout()->getBlock('page-title')->setPageTitle($this->getHeaderText()); } - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ $theme = $this->_getCurrentTheme(); if ($theme) { if ($theme->isEditable()) { @@ -114,7 +114,7 @@ class Edit extends \Magento\Backend\Block\Widget\Form\Container */ public function getHeaderText() { - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ $theme = $this->_getCurrentTheme(); if ($theme->getId()) { $header = __('Theme: %1', $theme->getThemeTitle()); 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 c7cee73b5bf..508abefa80f 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 @@ -40,7 +40,7 @@ class Image extends \Magento\Data\Form\Element\Image * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param \Magento\Core\Model\Theme\Image\Path $imagePath * @param array $attributes */ @@ -48,7 +48,7 @@ class Image extends \Magento\Data\Form\Element\Image \Magento\Core\Helper\Data $coreData, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\UrlInterface $urlBuilder, \Magento\Core\Model\Theme\Image\Path $imagePath, $attributes = array() ) { diff --git a/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Tab/General.php b/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Tab/General.php index d3d923ecb07..7cf6e9486f7 100644 --- a/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Tab/General.php +++ b/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Tab/General.php @@ -140,8 +140,8 @@ class General '"', '\'', $helper->jsonEncode($this->_getDefaultsInherited($themesCollections->addDefaultPattern())) )); - /** @var $parentTheme \Magento\Core\Model\Theme */ - $parentTheme = $this->_objectManager->create('Magento\Core\Model\Theme'); + /** @var $parentTheme \Magento\View\Design\ThemeInterface */ + $parentTheme = $this->_objectManager->create('Magento\View\Design\ThemeInterface'); if (!empty($formData['parent_id'])) { $parentTheme->load($formData['parent_id']); } @@ -296,7 +296,7 @@ class General { $data = array('' => $this->_getDefaults()); - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($themesCollections as $theme) { $theme->load($theme->getThemePath(), 'theme_path'); if (!$theme->getId()) { diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme.php index 7076603b7c5..bee1b30b336 100644 --- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme.php +++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme.php @@ -84,8 +84,8 @@ class Theme extends \Magento\Adminhtml\Controller\Action public function editAction() { $themeId = (int)$this->getRequest()->getParam('id'); - /** @var $theme \Magento\Core\Model\Theme */ - $theme = $this->_objectManager->create('Magento\Core\Model\Theme'); + /** @var $theme \Magento\View\Design\ThemeInterface */ + $theme = $this->_objectManager->create('Magento\View\Design\ThemeInterface'); try { $theme->setType(\Magento\Core\Model\Theme::TYPE_VIRTUAL); if ($themeId && (!$theme->load($themeId)->getId() || !$theme->isVisible())) { @@ -178,8 +178,8 @@ class Theme extends \Magento\Adminhtml\Controller\Action $themeId = $this->getRequest()->getParam('id'); try { if ($themeId) { - /** @var $theme \Magento\Core\Model\Theme */ - $theme = $this->_objectManager->create('Magento\Core\Model\Theme')->load($themeId); + /** @var $theme \Magento\View\Design\ThemeInterface */ + $theme = $this->_objectManager->create('Magento\View\Design\ThemeInterface')->load($themeId); if (!$theme->getId()) { throw new \InvalidArgumentException(sprintf('We cannot find a theme with id "%1".', $themeId)); } @@ -309,8 +309,8 @@ class Theme extends \Magento\Adminhtml\Controller\Action $helper = $this->_objectManager->get('Magento\Core\Helper\Theme'); $fileName = $helper->urlDecode($file); try { - /** @var $theme \Magento\Core\Model\Theme */ - $theme = $this->_objectManager->create('Magento\Core\Model\Theme')->load($themeId); + /** @var $theme \Magento\View\Design\ThemeInterface */ + $theme = $this->_objectManager->create('Magento\View\Design\ThemeInterface')->load($themeId); if (!$theme->getId()) { throw new \InvalidArgumentException(sprintf('We cannot find a theme with id "%1".', $themeId)); } diff --git a/app/code/Magento/Theme/Model/Config.php b/app/code/Magento/Theme/Model/Config.php index 41f009df2d4..45d9a961678 100644 --- a/app/code/Magento/Theme/Model/Config.php +++ b/app/code/Magento/Theme/Model/Config.php @@ -49,7 +49,7 @@ class Config /** * Application event manager * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -67,7 +67,7 @@ class Config * @param \Magento\Core\Model\Config\Value $configData * @param \Magento\Core\Model\Config\Storage\WriterInterface $configWriter * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Cache\FrontendInterface $configCache * @param \Magento\Cache\FrontendInterface $layoutCache */ @@ -75,7 +75,7 @@ class Config \Magento\Core\Model\Config\Value $configData, \Magento\Core\Model\Config\Storage\WriterInterface $configWriter, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Cache\FrontendInterface $configCache, \Magento\Cache\FrontendInterface $layoutCache ) { @@ -90,7 +90,7 @@ class Config /** * Assign theme to the stores * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @param array $stores * @param string $scope * @return $this diff --git a/app/code/Magento/Theme/Model/Config/Customization.php b/app/code/Magento/Theme/Model/Config/Customization.php index c488faf17de..e86ad5868cb 100644 --- a/app/code/Magento/Theme/Model/Config/Customization.php +++ b/app/code/Magento/Theme/Model/Config/Customization.php @@ -37,7 +37,7 @@ class Customization protected $_storeManager; /** - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_design; @@ -64,12 +64,12 @@ class Customization /** * @param \Magento\Core\Model\StoreManagerInterface $storeManager, - * @param \Magento\Core\Model\View\DesignInterface $design + * @param \Magento\View\DesignInterface $design * @param \Magento\Core\Model\Resource\Theme\CollectionFactory $collectionFactory */ public function __construct( \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\View\DesignInterface $design, + \Magento\View\DesignInterface $design, \Magento\Core\Model\Resource\Theme\CollectionFactory $collectionFactory ) { $this->_storeManager = $storeManager; @@ -128,7 +128,7 @@ class Customization /** * Check if current theme has assigned to any store * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @param null|\Magento\Core\Model\Store $store * @return bool */ @@ -154,7 +154,7 @@ class Customization /** * Is theme assigned to specific store * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @param \Magento\Core\Model\Store $store * @return bool */ @@ -197,7 +197,7 @@ class Customization $this->_assignedTheme = array(); $this->_unassignedTheme = array(); - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($themeCollection as $theme) { if (isset($assignedThemes[$theme->getId()])) { $theme->setAssignedStores($assignedThemes[$theme->getId()]); diff --git a/app/code/Magento/Theme/Model/Theme/SingleFile.php b/app/code/Magento/Theme/Model/Theme/SingleFile.php index e63926c8cec..7fba79bb644 100644 --- a/app/code/Magento/Theme/Model/Theme/SingleFile.php +++ b/app/code/Magento/Theme/Model/Theme/SingleFile.php @@ -47,11 +47,11 @@ class SingleFile /** * Creates or updates custom single file which belong to a selected theme * - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @param string $fileContent * @return \Magento\Core\Model\Theme\FileInterface */ - public function update(\Magento\Core\Model\Theme $themeModel, $fileContent) + public function update(\Magento\View\Design\ThemeInterface $themeModel, $fileContent) { $customFiles = $themeModel->getCustomization()->getFilesByType($this->_fileService->getType()); $customCss = reset($customFiles); diff --git a/app/code/Magento/Core/Model/Url/Validator.php b/app/code/Magento/Url/Validator.php similarity index 98% rename from app/code/Magento/Core/Model/Url/Validator.php rename to app/code/Magento/Url/Validator.php index aebca7215ef..53fc99aeb03 100644 --- a/app/code/Magento/Core/Model/Url/Validator.php +++ b/app/code/Magento/Url/Validator.php @@ -31,7 +31,7 @@ * @package Magento_Core * @author Magento Core Team <core@magentocommerce.com> */ -namespace Magento\Core\Model\Url; +namespace Magento\Url; class Validator extends \Zend_Validate_Abstract { diff --git a/app/code/Magento/User/Model/User.php b/app/code/Magento/User/Model/User.php index 04ce6a8df50..2d2f3b918b1 100644 --- a/app/code/Magento/User/Model/User.php +++ b/app/code/Magento/User/Model/User.php @@ -124,7 +124,7 @@ class User /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager = null; @@ -161,7 +161,7 @@ class User * * @param \Magento\Core\Model\Context $context * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\User\Helper\Data $userData * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Model\Sender $sender @@ -179,7 +179,7 @@ class User public function __construct( \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\User\Helper\Data $userData, \Magento\Core\Helper\Data $coreData, \Magento\Core\Model\Sender $sender, @@ -232,7 +232,7 @@ class User { parent::__wakeup(); $objectManager = \Magento\Core\Model\ObjectManager::getInstance(); - $this->_eventManager = $objectManager->get('Magento\Core\Model\Event\Manager'); + $this->_eventManager = $objectManager->get('Magento\Event\ManagerInterface'); $this->_sender = $objectManager->get('Magento\Core\Model\Sender'); $this->_coreData = $objectManager->get('Magento\Core\Helper\Data'); $this->_userData = $objectManager->get('Magento\User\Helper\Data'); diff --git a/app/code/Magento/User/etc/adminhtml/di.xml b/app/code/Magento/User/etc/adminhtml/di.xml index 0b52ec3eb00..3e4b2790284 100644 --- a/app/code/Magento/User/etc/adminhtml/di.xml +++ b/app/code/Magento/User/etc/adminhtml/di.xml @@ -24,6 +24,7 @@ */ --> <config> + <preference for="Magento\Backend\Model\Auth\Credential\StorageInterface" type="Magento\User\Model\User" /> <type name="Magento\Acl\Builder"> <param name="ruleLoader"> <instance type="Magento\User\Model\Acl\Loader\Rule" /> diff --git a/app/code/Magento/User/etc/di.xml b/app/code/Magento/User/etc/di.xml index 8c4fd483e26..624736d04c8 100644 --- a/app/code/Magento/User/etc/di.xml +++ b/app/code/Magento/User/etc/di.xml @@ -24,11 +24,6 @@ */ --> <config> - <type name="Magento\User\Model\User" shared="false"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> <type name="Magento\User\Model\Role" shared="false" /> <type name="Magento\User\Model\Resource\Rules"> <param name="rootResource"> @@ -43,18 +38,8 @@ <instance type="Magento\Core\Model\Acl\Cache\Proxy" /> </param> </type> - <type name="Magento\Core\Model\Config"> - <param name="areas"> - <value> - <adminhtml> - <auth_credential_storage>Magento\User\Model\User</auth_credential_storage> - </adminhtml> - </value> - </param> - </type> - <preference for="Magento\Backend\Model\Auth\Credential\StorageInterface" type="Magento\User\Model\User" /> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <user_setup>Magento\User\Model\Resource\Setup</user_setup> </value> diff --git a/app/code/Magento/Webapi/Controller/Request.php b/app/code/Magento/Webapi/Controller/Request.php index 86d50a8e7d9..0e951a658b3 100644 --- a/app/code/Magento/Webapi/Controller/Request.php +++ b/app/code/Magento/Webapi/Controller/Request.php @@ -25,20 +25,25 @@ */ namespace Magento\Webapi\Controller; -class Request extends \Zend_Controller_Request_Http +class Request extends \Zend_Controller_Request_Http implements \Magento\App\RequestInterface { /** * Modify pathInfo: strip down the front name and query parameters. * - * @param \Magento\Core\Model\App $app - * @param null|string|Zend_Uri $uri + * @param \Magento\App\AreaList $areaList + * @param \Magento\Config\ScopeInterface $configScope + * @param null|string|\Zend_Uri $uri */ - public function __construct(\Magento\Core\Model\App $app, $uri = null) - { + public function __construct( + \Magento\App\AreaList $areaList, + \Magento\Config\ScopeInterface $configScope, + $uri = null + ) { parent::__construct($uri); + $areaFrontName = $areaList->getFrontName($configScope->getCurrentScope()); $this->_pathInfo = $this->_requestUri; /** Remove base url and area from path */ - $this->_pathInfo = preg_replace("#.*?/{$app->getConfig()->getAreaFrontName()}/?#", '/', $this->_pathInfo); + $this->_pathInfo = preg_replace("#.*?/{$areaFrontName}/?#", '/', $this->_pathInfo); /** Remove GET parameters from path */ $this->_pathInfo = preg_replace('#\?.*#', '', $this->_pathInfo); } diff --git a/app/code/Magento/Webapi/Controller/Response.php b/app/code/Magento/Webapi/Controller/Response.php index 2216ac18424..602b8688d9f 100644 --- a/app/code/Magento/Webapi/Controller/Response.php +++ b/app/code/Magento/Webapi/Controller/Response.php @@ -25,7 +25,7 @@ */ namespace Magento\Webapi\Controller; -class Response extends \Zend_Controller_Response_Http +class Response extends \Zend_Controller_Response_Http implements \Magento\App\ResponseInterface { /** * Character set which must be used in response. diff --git a/app/code/Magento/Webapi/Controller/Rest.php b/app/code/Magento/Webapi/Controller/Rest.php index 7cdd4ccb85a..c90f2a46d9b 100644 --- a/app/code/Magento/Webapi/Controller/Rest.php +++ b/app/code/Magento/Webapi/Controller/Rest.php @@ -25,7 +25,7 @@ */ namespace Magento\Webapi\Controller; -class Rest implements \Magento\Core\Controller\FrontInterface +class Rest implements \Magento\App\FrontControllerInterface { /** @var \Magento\Webapi\Controller\Rest\Router */ protected $_router; @@ -39,7 +39,7 @@ class Rest implements \Magento\Core\Controller\FrontInterface /** @var \Magento\ObjectManager */ protected $_objectManager; - /** @var \Magento\Core\Model\App\State */ + /** @var \Magento\App\State */ protected $_appState; /** @var \Magento\Oauth\Service\OauthV1Interface */ @@ -55,7 +55,7 @@ class Rest implements \Magento\Core\Controller\FrontInterface * @param \Magento\Webapi\Controller\Rest\Response $response * @param \Magento\Webapi\Controller\Rest\Router $router * @param \Magento\ObjectManager $objectManager - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Oauth\Service\OauthV1Interface $oauthService * @param \Magento\Oauth\Helper\Data $oauthHelper */ @@ -64,7 +64,7 @@ class Rest implements \Magento\Core\Controller\FrontInterface \Magento\Webapi\Controller\Rest\Response $response, \Magento\Webapi\Controller\Rest\Router $router, \Magento\ObjectManager $objectManager, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Oauth\Service\OauthV1Interface $oauthService, \Magento\Oauth\Helper\Data $oauthHelper ) { @@ -88,12 +88,16 @@ class Rest implements \Magento\Core\Controller\FrontInterface } /** - * Handle REST request. + * Handle REST request * - * @return \Magento\Webapi\Controller\Rest + * @param \Magento\App\RequestInterface $request + * @return $this */ - public function dispatch() + public function dispatch(\Magento\App\RequestInterface $request) { + $pathParts = explode('/', trim($request->getPathInfo(), '/')); + array_shift($pathParts); + $request->setPathInfo('/' . implode('/', $pathParts)); try { if (!$this->_appState->isInstalled()) { throw new \Magento\Webapi\Exception(__('Magento is not yet installed')); diff --git a/app/code/Magento/Webapi/Controller/Rest/Request.php b/app/code/Magento/Webapi/Controller/Rest/Request.php index 43710adcbd8..111ac968cac 100644 --- a/app/code/Magento/Webapi/Controller/Rest/Request.php +++ b/app/code/Magento/Webapi/Controller/Rest/Request.php @@ -47,22 +47,21 @@ class Request extends \Magento\Webapi\Controller\Request /** @var \Magento\Webapi\Controller\Rest\Request\Deserializer\Factory */ protected $_deserializerFactory; - /** @var \Magento\Core\Model\App */ - protected $_application; - /** - * Initialize dependencies. + * Initialize dependencies * - * @param \Magento\Core\Model\App $application + * @param \Magento\App\AreaList $areaList + * @param \Magento\Config\ScopeInterface $configScope * @param \Magento\Webapi\Controller\Rest\Request\Deserializer\Factory $deserializerFactory - * @param string|null $uri + * @param null|string $uri */ public function __construct( - \Magento\Core\Model\App $application, + \Magento\App\AreaList $areaList, + \Magento\Config\ScopeInterface $configScope, \Magento\Webapi\Controller\Rest\Request\Deserializer\Factory $deserializerFactory, $uri = null ) { - parent::__construct($application, $uri); + parent::__construct($areaList, $configScope, $uri); $this->_deserializerFactory = $deserializerFactory; } diff --git a/app/code/Magento/Webapi/Controller/Soap.php b/app/code/Magento/Webapi/Controller/Soap.php index 63b1ce8de61..174c12e804f 100644 --- a/app/code/Magento/Webapi/Controller/Soap.php +++ b/app/code/Magento/Webapi/Controller/Soap.php @@ -25,7 +25,10 @@ */ namespace Magento\Webapi\Controller; -class Soap implements \Magento\Core\Controller\FrontInterface +/** + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ +class Soap implements \Magento\App\FrontControllerInterface { /**#@+ * Content types used for responses processed by SOAP web API. @@ -49,7 +52,7 @@ class Soap implements \Magento\Core\Controller\FrontInterface /** @var \Magento\Webapi\Controller\ErrorProcessor */ protected $_errorProcessor; - /** @var \Magento\Core\Model\App\State */ + /** @var \Magento\App\State */ protected $_appState; /** @var \Magento\Core\Model\App */ @@ -69,7 +72,7 @@ class Soap implements \Magento\Core\Controller\FrontInterface * @param \Magento\Webapi\Model\Soap\Wsdl\Generator $wsdlGenerator * @param \Magento\Webapi\Model\Soap\Server $soapServer * @param \Magento\Webapi\Controller\ErrorProcessor $errorProcessor - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @param \Magento\Core\Model\App $application * @param \Magento\Oauth\Service\OauthV1Interface $oauthService * @param \Magento\Oauth\Helper\Service $oauthHelper @@ -80,7 +83,7 @@ class Soap implements \Magento\Core\Controller\FrontInterface \Magento\Webapi\Model\Soap\Wsdl\Generator $wsdlGenerator, \Magento\Webapi\Model\Soap\Server $soapServer, \Magento\Webapi\Controller\ErrorProcessor $errorProcessor, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, \Magento\Core\Model\App $application, \Magento\Oauth\Service\OauthV1Interface $oauthService, \Magento\Oauth\Helper\Service $oauthHelper @@ -107,12 +110,14 @@ class Soap implements \Magento\Core\Controller\FrontInterface } /** - * Dispatch request to SOAP endpoint. - * - * @return \Magento\Webapi\Controller\Soap + * @param \Magento\App\RequestInterface $request + * @return $this */ - public function dispatch() + public function dispatch(\Magento\App\RequestInterface $request) { + $pathParts = explode('/', trim($request->getPathInfo(), '/')); + array_shift($pathParts); + $request->setPathInfo('/' . implode('/', $pathParts)); try { if (!$this->_appState->isInstalled()) { throw new \Magento\Webapi\Exception(__('Magento is not yet installed')); diff --git a/app/code/Magento/Webapi/Controller/Soap/Request.php b/app/code/Magento/Webapi/Controller/Soap/Request.php index 199b8215bc8..20e6e32b799 100644 --- a/app/code/Magento/Webapi/Controller/Soap/Request.php +++ b/app/code/Magento/Webapi/Controller/Soap/Request.php @@ -27,20 +27,6 @@ namespace Magento\Webapi\Controller\Soap; class Request extends \Magento\Webapi\Controller\Request { - /** @var \Magento\Core\Model\App */ - protected $_application; - - /** - * Initialize dependencies. - * - * @param \Magento\Core\Model\App $application - * @param string|null $uri - */ - public function __construct(\Magento\Core\Model\App $application, $uri = null) - { - parent::__construct($application, $uri); - } - /** * Identify versions of resources that should be used for API configuration generation. * TODO : This is getting called twice within a single request. Need to cache. diff --git a/app/code/Magento/Webapi/Model/Acl/Role/InRoleUserUpdater.php b/app/code/Magento/Webapi/Model/Acl/Role/InRoleUserUpdater.php index f424c4653da..76b6d57ce5b 100644 --- a/app/code/Magento/Webapi/Model/Acl/Role/InRoleUserUpdater.php +++ b/app/code/Magento/Webapi/Model/Acl/Role/InRoleUserUpdater.php @@ -40,11 +40,11 @@ class InRoleUserUpdater implements \Magento\Core\Model\Layout\Argument\UpdaterIn /** * Constructor. * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @param \Magento\Webapi\Model\Resource\Acl\User $userResource */ public function __construct( - \Magento\Core\Controller\Request\Http $request, + \Magento\App\RequestInterface $request, \Magento\Webapi\Model\Resource\Acl\User $userResource ) { $this->_roleId = (int)$request->getParam('role_id'); diff --git a/app/code/Magento/Webapi/Model/Acl/Role/UsersUpdater.php b/app/code/Magento/Webapi/Model/Acl/Role/UsersUpdater.php index 687706bfdf1..cefc4bfa970 100644 --- a/app/code/Magento/Webapi/Model/Acl/Role/UsersUpdater.php +++ b/app/code/Magento/Webapi/Model/Acl/Role/UsersUpdater.php @@ -46,18 +46,18 @@ class UsersUpdater implements \Magento\Core\Model\Layout\Argument\UpdaterInterfa protected $_roleId; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_inRoleUsersFilter; /** * Constructor. * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @param \Magento\Backend\Helper\Data $backendHelper */ public function __construct( - \Magento\Core\Controller\Request\Http $request, + \Magento\App\RequestInterface $request, \Magento\Backend\Helper\Data $backendHelper ) { $this->_roleId = (int)$request->getParam('role_id'); @@ -67,12 +67,12 @@ class UsersUpdater implements \Magento\Core\Model\Layout\Argument\UpdaterInterfa /** * Parse $_inRoleUsersFilter value from request * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @param \Magento\Backend\Helper\Data $backendHelper * @return int */ protected function _parseInRoleUsersFilter( - \Magento\Core\Controller\Request\Http $request, + \Magento\App\RequestInterface $request, \Magento\Backend\Helper\Data $backendHelper ) { $result = self::IN_ROLE_USERS_ANY; diff --git a/app/code/Magento/Webapi/Model/Acl/User/RoleUpdater.php b/app/code/Magento/Webapi/Model/Acl/User/RoleUpdater.php index 28ce952be5e..5e3b3e31009 100644 --- a/app/code/Magento/Webapi/Model/Acl/User/RoleUpdater.php +++ b/app/code/Magento/Webapi/Model/Acl/User/RoleUpdater.php @@ -40,11 +40,11 @@ class RoleUpdater implements \Magento\Core\Model\Layout\Argument\UpdaterInterfac /** * Constructor. * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @param \Magento\Webapi\Model\Acl\User\Factory $userFactory */ public function __construct( - \Magento\Core\Controller\Request\Http $request, + \Magento\App\RequestInterface $request, \Magento\Webapi\Model\Acl\User\Factory $userFactory ) { $this->_userId = (int)$request->getParam('user_id'); diff --git a/app/code/Magento/Webapi/Model/Soap/Config.php b/app/code/Magento/Webapi/Model/Soap/Config.php index fb72756022e..dc1053dbdcf 100644 --- a/app/code/Magento/Webapi/Model/Soap/Config.php +++ b/app/code/Magento/Webapi/Model/Soap/Config.php @@ -39,7 +39,7 @@ class Config /** @var \Magento\Filesystem */ protected $_filesystem; - /** @var \Magento\Core\Model\Dir */ + /** @var \Magento\App\Dir */ protected $_dir; /** @var \Magento\Webapi\Model\Config */ @@ -66,13 +66,13 @@ class Config /** * @param \Magento\Core\Model\ObjectManager $objectManager * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Dir $dir + * @param \Magento\App\Dir $dir * @param \Magento\Webapi\Model\Config $config */ public function __construct( \Magento\Core\Model\ObjectManager $objectManager, \Magento\Filesystem $filesystem, - \Magento\Core\Model\Dir $dir, + \Magento\App\Dir $dir, \Magento\Webapi\Model\Config $config ) { $this->_filesystem = $filesystem; @@ -209,7 +209,7 @@ class Config public function getServiceSchemaDOM($serviceClass) { // TODO: Check if Service specific XSD is already cached - $modulesDir = $this->_dir->getDir(\Magento\Core\Model\Dir::MODULES); + $modulesDir = $this->_dir->getDir(\Magento\App\Dir::MODULES); // TODO: Change pattern to match interface instead of class. Think about sub-services. if (!preg_match(\Magento\Webapi\Model\Config::SERVICE_CLASS_PATTERN, $serviceClass, $matches)) { diff --git a/app/code/Magento/Webapi/Model/Soap/Server.php b/app/code/Magento/Webapi/Model/Soap/Server.php index adfeb3159e7..79d149eaecd 100644 --- a/app/code/Magento/Webapi/Model/Soap/Server.php +++ b/app/code/Magento/Webapi/Model/Soap/Server.php @@ -39,8 +39,15 @@ class Server const REQUEST_PARAM_SERVICES = 'services'; const REQUEST_PARAM_WSDL = 'wsdl'; - /** @var \Magento\Core\Model\Config */ - protected $_applicationConfig; + /** + * @var \Magento\App\AreaLIst + */ + protected $_areaList; + + /** + * @var \Magento\Config\ScopeInterface + */ + protected $_configScope; /** @var \Magento\DomDocument\Factory */ protected $_domDocumentFactory; @@ -57,15 +64,17 @@ class Server /** * Initialize dependencies, initialize WSDL cache. * - * @param \Magento\Core\Model\Config $applicationConfig + * @param \Magento\App\AreaList $areaList + * @param \Magento\Config\ScopeInterface $configScope * @param \Magento\Webapi\Controller\Soap\Request $request * @param \Magento\DomDocument\Factory $domDocumentFactory - * @param \Magento\Core\Model\StoreManagerInterface - * @param \Magento\Webapi\Model\Soap\Server\Factory - * @throws \Magento\Webapi\Exception with invalid SOAP extension + * @param \Magento\Core\Model\StoreManagerInterface $storeManager + * @param \Magento\Webapi\Model\Soap\Server\Factory $soapServerFactory + * @throws \Magento\Webapi\Exception */ public function __construct( - \Magento\Core\Model\Config $applicationConfig, + \Magento\App\AreaList $areaList, + \Magento\Config\ScopeInterface $configScope, \Magento\Webapi\Controller\Soap\Request $request, \Magento\DomDocument\Factory $domDocumentFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, @@ -75,7 +84,8 @@ class Server throw new \Magento\Webapi\Exception('SOAP extension is not loaded.', 0, \Magento\Webapi\Exception::HTTP_INTERNAL_ERROR); } - $this->_applicationConfig = $applicationConfig; + $this->_areaList = $areaList; + $this->_configScope = $configScope; $this->_request = $request; $this->_domDocumentFactory = $domDocumentFactory; $this->_storeManager = $storeManager; @@ -144,7 +154,8 @@ class Server */ public function getEndpointUri() { - return $this->_storeManager->getStore()->getBaseUrl() . $this->_applicationConfig->getAreaFrontName(); + return $this->_storeManager->getStore()->getBaseUrl() + . $this->_areaList->getFrontName($this->_configScope->getCurrentScope()); } /** diff --git a/app/code/Magento/Webapi/etc/di.xml b/app/code/Magento/Webapi/etc/di.xml index 6272d448a15..f217e427c6b 100644 --- a/app/code/Magento/Webapi/etc/di.xml +++ b/app/code/Magento/Webapi/etc/di.xml @@ -135,18 +135,14 @@ </value> </param> </type> - <type name="Magento\Core\Model\Config"> + <type name="Magento\App\AreaList"> <param name="areas"> <value> <webapi_rest> <frontName>rest</frontName> - <front_controller>Magento\Webapi\Controller\Rest</front_controller> - <request_object>Magento\Webapi\Controller\Rest\Request</request_object> </webapi_rest> <webapi_soap> <frontName>soap</frontName> - <front_controller>Magento\Webapi\Controller\Soap</front_controller> - <request_object>Magento\Webapi\Controller\Soap\Request</request_object> </webapi_soap> </value> </param> diff --git a/app/code/Magento/CurrencySymbol/etc/di.xml b/app/code/Magento/Webapi/etc/webapi_rest/di.xml similarity index 82% rename from app/code/Magento/CurrencySymbol/etc/di.xml rename to app/code/Magento/Webapi/etc/webapi_rest/di.xml index 30e1df568a5..82ddb2984fc 100644 --- a/app/code/Magento/CurrencySymbol/etc/di.xml +++ b/app/code/Magento/Webapi/etc/webapi_rest/di.xml @@ -24,9 +24,5 @@ */ --> <config> - <type name="Magento\CurrencySymbol\Model\System\Currencysymbol"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> + <preference for="Magento\App\FrontControllerInterface" type="Magento\Webapi\Controller\Rest" /> </config> diff --git a/app/code/Magento/Webapi/etc/webapi_soap/di.xml b/app/code/Magento/Webapi/etc/webapi_soap/di.xml new file mode 100644 index 00000000000..1173aa145ee --- /dev/null +++ b/app/code/Magento/Webapi/etc/webapi_soap/di.xml @@ -0,0 +1,28 @@ +<?xml version="1.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) + */ +--> +<config> + <preference for="Magento\App\FrontControllerInterface" type="Magento\Webapi\Controller\Soap" /> +</config> diff --git a/app/code/Magento/Webhook/Model/Resource/Event/Collection.php b/app/code/Magento/Webhook/Model/Resource/Event/Collection.php index b521fde0509..6c96625c687 100644 --- a/app/code/Magento/Webhook/Model/Resource/Event/Collection.php +++ b/app/code/Magento/Webhook/Model/Resource/Event/Collection.php @@ -43,7 +43,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl protected $_timeoutIdling; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -51,7 +51,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param null $timeoutIdling */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Webhook/Model/Resource/Job/Collection.php b/app/code/Magento/Webhook/Model/Resource/Job/Collection.php index ae805172f7f..604bad8b35b 100644 --- a/app/code/Magento/Webhook/Model/Resource/Job/Collection.php +++ b/app/code/Magento/Webhook/Model/Resource/Job/Collection.php @@ -43,7 +43,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl protected $_timeoutIdling; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -51,7 +51,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl * @param null $timeoutIdling */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Webhook/Model/Resource/Subscription/Collection.php b/app/code/Magento/Webhook/Model/Resource/Subscription/Collection.php index e1dfc30c332..e8511b73377 100644 --- a/app/code/Magento/Webhook/Model/Resource/Subscription/Collection.php +++ b/app/code/Magento/Webhook/Model/Resource/Subscription/Collection.php @@ -38,7 +38,7 @@ class Collection /** * @param \Magento\Webhook\Model\Resource\Endpoint $endpointResource - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -46,7 +46,7 @@ class Collection */ public function __construct( \Magento\Webhook\Model\Resource\Endpoint $endpointResource, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Webhook/Model/Resource/Subscription/Grid/Collection.php b/app/code/Magento/Webhook/Model/Resource/Subscription/Grid/Collection.php index 78b0a91fd2d..4fae380813b 100644 --- a/app/code/Magento/Webhook/Model/Resource/Subscription/Grid/Collection.php +++ b/app/code/Magento/Webhook/Model/Resource/Subscription/Grid/Collection.php @@ -33,7 +33,7 @@ class Collection /** * @param \Magento\Webhook\Model\Subscription\Config $subscriptionConfig * @param \Magento\Webhook\Model\Resource\Endpoint $endpointResource - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -42,7 +42,7 @@ class Collection public function __construct( \Magento\Webhook\Model\Subscription\Config $subscriptionConfig, \Magento\Webhook\Model\Resource\Endpoint $endpointResource, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Weee/Model/Observer.php b/app/code/Magento/Weee/Model/Observer.php index 19dd75fa139..bc5b7a1543d 100644 --- a/app/code/Magento/Weee/Model/Observer.php +++ b/app/code/Magento/Weee/Model/Observer.php @@ -46,12 +46,12 @@ class Observer extends \Magento\Core\Model\AbstractModel protected $_weeeTax; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; /** - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @param \Magento\Weee\Model\Tax $weeeTax * @param \Magento\Weee\Helper\Data $weeeData * @param \Magento\Core\Model\Context $context @@ -62,7 +62,7 @@ class Observer extends \Magento\Core\Model\AbstractModel * @param array $data */ public function __construct( - \Magento\Core\Model\Layout $layout, + \Magento\View\LayoutInterface $layout, \Magento\Weee\Model\Tax $weeeTax, \Magento\Weee\Helper\Data $weeeData, \Magento\Core\Model\Context $context, diff --git a/app/code/Magento/Weee/etc/di.xml b/app/code/Magento/Weee/etc/di.xml index 2a731efda32..fb4b4836fa5 100644 --- a/app/code/Magento/Weee/etc/di.xml +++ b/app/code/Magento/Weee/etc/di.xml @@ -40,8 +40,8 @@ <instance type="Magento\Weee\Helper\Data\Proxy" /> </param> </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <weee_setup>Magento\Sales\Model\Resource\Setup</weee_setup> </value> diff --git a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/Container.php b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/Container.php index 0111d866002..b8a9d8f80bb 100644 --- a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/Container.php +++ b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/Container.php @@ -37,9 +37,9 @@ namespace Magento\Widget\Block\Adminhtml\Widget\Instance\Edit\Chooser; class Container extends \Magento\Core\Block\Html\Select { /** - * @var \Magento\Core\Model\Layout\MergeFactory + * @var \Magento\View\Layout\ProcessorFactory */ - protected $_layoutMergeFactory; + protected $_layoutProcessorFactory; /** * @var \Magento\Core\Model\Resource\Theme\CollectionFactory @@ -48,17 +48,18 @@ class Container extends \Magento\Core\Block\Html\Select /** * @param \Magento\Core\Block\Context $context - * @param \Magento\Core\Model\Layout\MergeFactory $layoutMergeFactory + * @param \Magento\View\Layout\ProcessorFactory $layoutProcessorFactory * @param \Magento\Core\Model\Resource\Theme\CollectionFactory $themesFactory * @param array $data */ + public function __construct( \Magento\Core\Block\Context $context, - \Magento\Core\Model\Layout\MergeFactory $layoutMergeFactory, + \Magento\View\Layout\ProcessorFactory $layoutProcessorFactory, \Magento\Core\Model\Resource\Theme\CollectionFactory $themesFactory, array $data = array() ) { - $this->_layoutMergeFactory = $layoutMergeFactory; + $this->_layoutProcessorFactory = $layoutProcessorFactory; $this->_themesFactory = $themesFactory; parent::__construct($context, $data); } @@ -85,12 +86,12 @@ class Container extends \Magento\Core\Block\Html\Select $layoutMergeParams = array( 'theme' => $this->_getThemeInstance($this->getTheme()), ); - /** @var $layoutMerge \Magento\Core\Model\Layout\Merge */ - $layoutMerge = $this->_layoutMergeFactory->create($layoutMergeParams); - $layoutMerge->addPageHandles(array($this->getLayoutHandle())); - $layoutMerge->load(); + /** @var $layoutProcessor \Magento\View\Layout\ProcessorInterface */ + $layoutProcessor = $this->_layoutProcessorFactory->create($layoutMergeParams); + $layoutProcessor->addPageHandles(array($this->getLayoutHandle())); + $layoutProcessor->load(); - $containers = $layoutMerge->getContainers(); + $containers = $layoutProcessor->getContainers(); if ($this->getAllowedContainers()) { foreach (array_keys($containers) as $containerName) { if (!in_array($containerName, $this->getAllowedContainers())) { diff --git a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/Layout.php b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/Layout.php index 5b54f159156..c0e1f9d9ae6 100644 --- a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/Layout.php +++ b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/Layout.php @@ -35,9 +35,9 @@ namespace Magento\Widget\Block\Adminhtml\Widget\Instance\Edit\Chooser; class Layout extends \Magento\Core\Block\Html\Select { /** - * @var \Magento\Core\Model\Layout\MergeFactory + * @var \Magento\View\Layout\ProcessorFactory */ - protected $_layoutMergeFactory; + protected $_layoutProcessorFactory; /** * @var \Magento\Core\Model\Resource\Theme\CollectionFactory @@ -46,17 +46,17 @@ class Layout extends \Magento\Core\Block\Html\Select /** * @param \Magento\Core\Block\Context $context - * @param \Magento\Core\Model\Layout\MergeFactory $layoutMergeFactory + * @param \Magento\View\Layout\ProcessorFactory $layoutProcessorFactory * @param \Magento\Core\Model\Resource\Theme\CollectionFactory $themesFactory * @param array $data */ public function __construct( \Magento\Core\Block\Context $context, - \Magento\Core\Model\Layout\MergeFactory $layoutMergeFactory, + \Magento\View\Layout\ProcessorFactory $layoutProcessorFactory, \Magento\Core\Model\Resource\Theme\CollectionFactory $themesFactory, array $data = array() ) { - $this->_layoutMergeFactory = $layoutMergeFactory; + $this->_layoutProcessorFactory = $layoutProcessorFactory; $this->_themesFactory = $themesFactory; parent::__construct($context, $data); } @@ -70,13 +70,13 @@ class Layout extends \Magento\Core\Block\Html\Select { if (!$this->getOptions()) { $this->addOption('', __('-- Please Select --')); - $layoutMergeParams = array( + $layoutUpdateParams = array( 'theme' => $this->_getThemeInstance($this->getTheme()), ); $pageTypes = array(); - $pageTypesAll = $this->_getLayoutMerge($layoutMergeParams)->getPageHandlesHierarchy(); + $pageTypesAll = $this->_getLayoutProcessor($layoutUpdateParams)->getPageHandlesHierarchy(); foreach ($pageTypesAll as $pageTypeName => $pageTypeInfo) { - $layoutMerge = $this->_getLayoutMerge($layoutMergeParams); + $layoutMerge = $this->_getLayoutProcessor($layoutUpdateParams); $layoutMerge->addPageHandles(array($pageTypeName)); $layoutMerge->load(); if (!$layoutMerge->getContainers()) { @@ -106,11 +106,11 @@ class Layout extends \Magento\Core\Block\Html\Select * Retrieve new layout merge model instance * * @param array $arguments - * @return \Magento\Core\Model\Layout\Merge + * @return \Magento\View\Layout\ProcessorInterface */ - protected function _getLayoutMerge(array $arguments) + protected function _getLayoutProcessor(array $arguments) { - return $this->_layoutMergeFactory->create($arguments); + return $this->_layoutProcessorFactory->create($arguments); } /** diff --git a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Main.php b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Main.php index c1a3c30bc68..7e3e3c5376d 100644 --- a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Main.php +++ b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Main.php @@ -164,14 +164,14 @@ class Main if ($widgetInstance->getId()) { $fieldset->addField('instance_id', 'hidden', array( - 'name' => 'isntance_id', + 'name' => 'instance_id', )); } $this->_addElementTypes($fieldset); - $fieldset->addField('instance_type', 'select', array( - 'name' => 'instance_type', + $fieldset->addField('instance_code', 'select', array( + 'name' => 'instance_code', 'label' => __('Type'), 'title' => __('Type'), 'class' => '', diff --git a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Settings.php b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Settings.php index dbd75cee518..32eb1e94cf8 100644 --- a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Settings.php +++ b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Settings.php @@ -147,8 +147,8 @@ class Settings $this->_addElementTypes($fieldset); - $fieldset->addField('type', 'select', array( - 'name' => 'type', + $fieldset->addField('code', 'select', array( + 'name' => 'code', 'label' => __('Type'), 'title' => __('Type'), 'required' => true, @@ -169,7 +169,7 @@ class Settings ->createBlock('Magento\Adminhtml\Block\Widget\Button') ->setData(array( 'label' => __('Continue'), - 'onclick' => "setSettings('" . $this->getContinueUrl() . "', 'type', 'theme_id')", + 'onclick' => "setSettings('" . $this->getContinueUrl() . "', 'code', 'theme_id')", 'class' => 'save' )); $fieldset->addField('continue_button', 'note', array( @@ -190,7 +190,7 @@ class Settings { return $this->getUrl('*/*/*', array( '_current' => true, - 'type' => '{{type}}', + 'code' => '{{code}}', 'theme_id' => '{{theme_id}}' )); } diff --git a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance.php b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance.php index 9b5631c8033..95d97203a25 100644 --- a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance.php +++ b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance.php @@ -94,12 +94,12 @@ class Instance extends \Magento\Adminhtml\Controller\Action /** @var $widgetInstance \Magento\Widget\Model\Widget\Instance */ $widgetInstance = $this->_widgetFactory->create(); + $code = $this->getRequest()->getParam('code', null); $instanceId = $this->getRequest()->getParam('instance_id', null); - $type = $this->getRequest()->getParam('type', null); - $themeId = $this->getRequest()->getParam('theme_id', null); - if ($instanceId) { - $widgetInstance->load($instanceId); + $widgetInstance + ->load($instanceId) + ->setCode($code); if (!$widgetInstance->getId()) { $this->_getSession()->addError( __('Please specify a correct widget.') @@ -107,7 +107,14 @@ class Instance extends \Magento\Adminhtml\Controller\Action return false; } } else { - $widgetInstance->setType($type)->setThemeId($themeId); + // Widget id was not provided on the query-string. Locate the widget instance + // type (namespace\classname) based upon the widget code (aka, widget id). + $themeId = $this->getRequest()->getParam('theme_id', null); + $type = $code != null ? $widgetInstance->getWidgetReference('code', $code, 'type') : null; + $widgetInstance + ->setType($type) + ->setCode($code) + ->setThemeId($themeId); } $this->_coreRegistry->register('current_widget_instance', $widgetInstance); return $widgetInstance; diff --git a/app/code/Magento/Widget/Model/Config/FileResolver.php b/app/code/Magento/Widget/Model/Config/FileResolver.php index 8fc1e827b6d..853672872b5 100644 --- a/app/code/Magento/Widget/Model/Config/FileResolver.php +++ b/app/code/Magento/Widget/Model/Config/FileResolver.php @@ -35,17 +35,17 @@ class FileResolver implements \Magento\Config\FileResolverInterface protected $_moduleReader; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_applicationDirs; /** * @param \Magento\Core\Model\Config\Modules\Reader $moduleReader - * @param \Magento\Core\Model\Dir $applicationDirs + * @param \Magento\App\Dir $applicationDirs */ public function __construct( \Magento\Core\Model\Config\Modules\Reader $moduleReader, - \Magento\Core\Model\Dir $applicationDirs + \Magento\App\Dir $applicationDirs ) { $this->_moduleReader = $moduleReader; $this->_applicationDirs = $applicationDirs; @@ -62,7 +62,7 @@ class FileResolver implements \Magento\Config\FileResolverInterface $fileList = $this->_moduleReader->getConfigurationFiles($filename); break; case 'design': - $fileList = glob($this->_applicationDirs->getDir(\Magento\Core\Model\Dir::THEMES) + $fileList = glob($this->_applicationDirs->getDir(\Magento\App\Dir::THEMES) . "/*/*/etc/$filename", GLOB_NOSORT | GLOB_BRACE); break; default: diff --git a/app/code/Magento/Widget/Model/Resource/Widget/Instance/Options/Types.php b/app/code/Magento/Widget/Model/Resource/Widget/Instance/Options/Types.php index 1b9fa4a5c20..f97d5b7ba51 100644 --- a/app/code/Magento/Widget/Model/Resource/Widget/Instance/Options/Types.php +++ b/app/code/Magento/Widget/Model/Resource/Widget/Instance/Options/Types.php @@ -51,7 +51,7 @@ class Types implements \Magento\Core\Model\Option\ArrayInterface public function toOptionArray() { $widgets = array(); - $widgetsOptionsArr = $this->_model->getWidgetsOptionArray(); + $widgetsOptionsArr = $this->_model->getWidgetsOptionArray('type'); foreach ($widgetsOptionsArr as $widget) { $widgets[$widget['value']] = $widget['label']; } diff --git a/app/code/Magento/Widget/Model/Template/Filter.php b/app/code/Magento/Widget/Model/Template/Filter.php index 436b6452109..657b599ecac 100644 --- a/app/code/Magento/Widget/Model/Template/Filter.php +++ b/app/code/Magento/Widget/Model/Template/Filter.php @@ -52,11 +52,10 @@ class Filter extends \Magento\Cms\Model\Template\Filter * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\VariableFactory $coreVariableFactory * @param \Magento\Core\Model\StoreManager $storeManager - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout + * @param \Magento\View\LayoutFactory $layoutFactory * @param \Magento\Widget\Model\Resource\Widget $widgetResource * @param \Magento\Widget\Model\Widget $widget - * @param \Magento\Core\Model\Layout $layout - * @param \Magento\Core\Model\LayoutFactory $layoutFactory */ public function __construct( \Magento\Core\Model\Logger $logger, @@ -65,8 +64,8 @@ class Filter extends \Magento\Cms\Model\Template\Filter \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\VariableFactory $coreVariableFactory, \Magento\Core\Model\StoreManager $storeManager, - \Magento\Core\Model\Layout $layout, - \Magento\Core\Model\LayoutFactory $layoutFactory, + \Magento\View\LayoutInterface $layout, + \Magento\View\LayoutFactory $layoutFactory, \Magento\Widget\Model\Resource\Widget $widgetResource, \Magento\Widget\Model\Widget $widget ) { diff --git a/app/code/Magento/Widget/Model/Widget/Instance.php b/app/code/Magento/Widget/Model/Widget/Instance.php index 8d5f513d766..0c961ffa191 100644 --- a/app/code/Magento/Widget/Model/Widget/Instance.php +++ b/app/code/Magento/Widget/Model/Widget/Instance.php @@ -247,6 +247,35 @@ class Instance extends \Magento\Core\Model\AbstractModel return $this->getType() && $this->getThemeId(); } + /** + * Return widget instance code. If not set, derive value from type (namespace\class). + * + * @return string + */ + public function getCode() + { + $code = $this->_getData('instance_code'); + if ($code == null) { + $code = $this->getWidgetReference('type', $this->getType(), 'code'); + $this->setData('instance_code', $code); + } + return $code; + } + + /** + * Sets the value this widget instance code. + * The widget code is the 'id' attribute in the widget node. + * 'code' is used in Magento\Widget\Model\Widget->getWidgetsArray when the array of widgets is created. + * + * @param string $code + * @return \Magento\Widget\Model\Widget\Instance + */ + public function setCode($code) + { + $this->setData('instance_code', $code); + return $this; + } + /** * Setter * Prepare widget type @@ -281,7 +310,7 @@ class Instance extends \Magento\Core\Model\AbstractModel { //TODO Shouldn't we get "area" from theme model which we can load using "theme_id"? if (!$this->_getData('area')) { - return \Magento\Core\Model\View\DesignInterface::DEFAULT_AREA; + return \Magento\View\DesignInterface::DEFAULT_AREA; } return $this->_getData('area'); } @@ -321,19 +350,40 @@ class Instance extends \Magento\Core\Model\AbstractModel * * @return array */ - public function getWidgetsOptionArray() + public function getWidgetsOptionArray($value = 'code') { $widgets = array(); $widgetsArr = $this->_widgetModel->getWidgetsArray(); foreach ($widgetsArr as $widget) { $widgets[] = array( - 'value' => $widget['type'], + 'value' => $widget[$value], 'label' => $widget['name'] ); } return $widgets; } + /** + * Get the widget reference (code or namespace\class name) for the passed in type or code. + * + * @param $matchParam + * @param $value + * @param $requestedParam + * @return null + */ + public function getWidgetReference($matchParam, $value, $requestedParam) + { + $reference = null; + $widgetsArr = $this->_widgetModel->getWidgetsArray(); + foreach ($widgetsArr as $widget) { + if ($widget[$matchParam] === $value) { + $reference = $widget[$requestedParam]; + break; + } + } + return $reference; + } + /** * Load widget XML config and merge with theme widget config * diff --git a/app/code/Magento/Widget/etc/di.xml b/app/code/Magento/Widget/etc/di.xml index 53a53ddd3cd..6dadc3fe368 100644 --- a/app/code/Magento/Widget/etc/di.xml +++ b/app/code/Magento/Widget/etc/di.xml @@ -51,8 +51,8 @@ <value>Magento\Widget\Model\Template\Filter</value> </param> </type> - <type name="Magento\Core\Model\Db\Updater"> - <param name="resourceList"> + <type name="Magento\App\Updater\SetupFactory"> + <param name="resourceTypes"> <value> <widget_setup>Magento\Core\Model\Resource\Setup\Generic</widget_setup> </value> diff --git a/app/code/Magento/Widget/view/adminhtml/instance/js.phtml b/app/code/Magento/Widget/view/adminhtml/instance/js.phtml index ad6c24ae16c..1cdf71e7ebb 100644 --- a/app/code/Magento/Widget/view/adminhtml/instance/js.phtml +++ b/app/code/Magento/Widget/view/adminhtml/instance/js.phtml @@ -26,15 +26,15 @@ ?> <script type="text/javascript"> //<![CDATA[ -function setSettings(urlTemplate, typeElement, themeElement) { +function setSettings(urlTemplate, codeElement, themeElement) { if (!jQuery('#edit_form').valid()) { return false; } - typeElement = $F(typeElement); + codeElement = $F(codeElement); themeElement = $F(themeElement); setLocation(new Template(urlTemplate, /(^|.|\r|\n)({{(\w+)}})/).evaluate({ - 'type': typeElement, + 'code': codeElement, 'theme_id': themeElement })); } diff --git a/app/code/Magento/Widget/view/adminhtml/layout/adminhtml_widget_instance_block.xml b/app/code/Magento/Widget/view/adminhtml/layout/adminhtml_widget_instance_block.xml index ca4cbf48d3b..a1e07b91ee3 100644 --- a/app/code/Magento/Widget/view/adminhtml/layout/adminhtml_widget_instance_block.xml +++ b/app/code/Magento/Widget/view/adminhtml/layout/adminhtml_widget_instance_block.xml @@ -38,6 +38,7 @@ <item name="path" xsi:type="string">*/*/edit</item> <item name="extraParamsTemplate" xsi:type="array"> <item name="instance_id" xsi:type="string">getId</item> + <item name="code" xsi:type="string">getCode</item> </item> </argument> </arguments> diff --git a/app/code/Magento/Wishlist/Controller/Index.php b/app/code/Magento/Wishlist/Controller/Index.php index 0a7f1caa95b..39e7e305322 100644 --- a/app/code/Magento/Wishlist/Controller/Index.php +++ b/app/code/Magento/Wishlist/Controller/Index.php @@ -776,7 +776,7 @@ class Index try { $info = unserialize($option->getValue()); - $filePath = $this->_objectManager->get('Magento\Core\Model\Dir')->getDir() . $info['quote_path']; + $filePath = $this->_objectManager->get('Magento\App\Dir')->getDir() . $info['quote_path']; $secretKey = $this->getRequest()->getParam('key'); if ($secretKey == $info['secret_key']) { diff --git a/app/code/Magento/Wishlist/Helper/Data.php b/app/code/Magento/Wishlist/Helper/Data.php index 15f0f10e748..176d3dc17d9 100644 --- a/app/code/Magento/Wishlist/Helper/Data.php +++ b/app/code/Magento/Wishlist/Helper/Data.php @@ -84,7 +84,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -118,7 +118,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper protected $_storeManager; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Helper\Context $context * @param \Magento\Core\Model\Registry $coreRegistry @@ -128,7 +128,7 @@ class Data extends \Magento\Core\Helper\AbstractHelper * @param \Magento\Core\Model\StoreManagerInterface $storeManager */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\Core\Helper\Context $context, \Magento\Core\Model\Registry $coreRegistry, diff --git a/app/code/Magento/Wishlist/Model/Resource/Item/Collection.php b/app/code/Magento/Wishlist/Model/Resource/Item/Collection.php index 55a726cac8a..36c0970e0c0 100644 --- a/app/code/Magento/Wishlist/Model/Resource/Item/Collection.php +++ b/app/code/Magento/Wishlist/Model/Resource/Item/Collection.php @@ -154,7 +154,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl /** * @param \Magento\CatalogInventory\Helper\Data $catalogInventoryData * @param \Magento\Adminhtml\Helper\Sales $adminhtmlSales - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -172,7 +172,7 @@ class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractColl public function __construct( \Magento\CatalogInventory\Helper\Data $catalogInventoryData, \Magento\Adminhtml\Helper\Sales $adminhtmlSales, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Wishlist/Model/Resource/Item/Collection/Grid.php b/app/code/Magento/Wishlist/Model/Resource/Item/Collection/Grid.php index e6814cfb6f8..810277748c7 100644 --- a/app/code/Magento/Wishlist/Model/Resource/Item/Collection/Grid.php +++ b/app/code/Magento/Wishlist/Model/Resource/Item/Collection/Grid.php @@ -39,7 +39,7 @@ class Grid extends \Magento\Wishlist\Model\Resource\Item\Collection /** * @param \Magento\CatalogInventory\Helper\Data $catalogInventoryData * @param \Magento\Adminhtml\Helper\Sales $adminhtmlSales - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Model\Logger $logger * @param \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Core\Model\EntityFactory $entityFactory @@ -58,7 +58,7 @@ class Grid extends \Magento\Wishlist\Model\Resource\Item\Collection public function __construct( \Magento\CatalogInventory\Helper\Data $catalogInventoryData, \Magento\Adminhtml\Helper\Sales $adminhtmlSales, - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Model\Logger $logger, \Magento\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Core\Model\EntityFactory $entityFactory, diff --git a/app/code/Magento/Wishlist/Model/Wishlist.php b/app/code/Magento/Wishlist/Model/Wishlist.php index f34f280c201..d038a145a20 100644 --- a/app/code/Magento/Wishlist/Model/Wishlist.php +++ b/app/code/Magento/Wishlist/Model/Wishlist.php @@ -96,7 +96,7 @@ class Wishlist extends \Magento\Core\Model\AbstractModel /** * Core event manager proxy * - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ protected $_eventManager; @@ -126,7 +126,7 @@ class Wishlist extends \Magento\Core\Model\AbstractModel protected $_productFactory; /** - * @param \Magento\Core\Model\Event\Manager $eventManager + * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Catalog\Helper\Product $catalogProduct * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Wishlist\Helper\Data $wishlistData @@ -142,7 +142,7 @@ class Wishlist extends \Magento\Core\Model\AbstractModel * @param array $data */ public function __construct( - \Magento\Core\Model\Event\Manager $eventManager, + \Magento\Event\ManagerInterface $eventManager, \Magento\Catalog\Helper\Product $catalogProduct, \Magento\Core\Helper\Data $coreData, \Magento\Wishlist\Helper\Data $wishlistData, diff --git a/app/code/Magento/Wishlist/etc/di.xml b/app/code/Magento/Wishlist/etc/di.xml index 3994db0f01f..819382ec7ba 100644 --- a/app/code/Magento/Wishlist/etc/di.xml +++ b/app/code/Magento/Wishlist/etc/di.xml @@ -30,16 +30,8 @@ </param> </type> <type name="Magento\Wishlist\Helper\Data"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> <param name="customerSession"> <instance type="Magento\Customer\Model\Session\Proxy" /> </param> </type> - <type name="Magento\Wishlist\Model\Wishlist"> - <param name="eventManager"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> </config> diff --git a/app/design/adminhtml/magento_backend/css/admin.css b/app/design/adminhtml/magento_backend/css/admin.css index c137e9cd792..3b3f5e97475 100644 --- a/app/design/adminhtml/magento_backend/css/admin.css +++ b/app/design/adminhtml/magento_backend/css/admin.css @@ -1340,14 +1340,14 @@ fieldset.field [class^='fields-group-'] .field .control { box-sizing: border-box; float: left; width: 20%; - padding: 6px 0 0 15px; - font-size: 10px; + padding: 7px 0 0 15px; + color: #999; + font-size: 12px; + letter-spacing: 0.05em; } .form-inline .field-service[value-scope]:before { content: attr(value-scope) !important; - font-size: 10px; - color: #6F8992; white-space: nowrap; display: block; margin-bottom: 5px; @@ -2407,7 +2407,8 @@ table tbody tr:nth-child(odd):hover th { z-index: 999; } -.loading-old { +.loading-old, +.loading-mask { position: fixed; left: 0; top: 0; @@ -3661,15 +3662,6 @@ table tbody tr:nth-child(odd):hover th { z-index: 2; } -.adminhtml-dashboard-index .side-col { - width: 38%; - padding: 1%; -} - -.adminhtml-dashboard-index .main-col { - width: 60%; -} - /* Sidebar and main column vertical separator */ .main-col:after, .side-col:after { @@ -4605,7 +4597,7 @@ table tbody tr:nth-child(odd):hover th { min-width: 121px; } -.grid .filter .range input { +.grid .filter .range .date input { margin-top: 0; vertical-align: middle; width: 80%; @@ -4636,9 +4628,9 @@ table tbody tr:nth-child(odd):hover th { .grid .filter .date:before { position: absolute; - left: 85%; + left: 80%; top: 1px; - margin-top: 0; + margin-left: 5px; text-shadow: none; width: 16px; height: 16px; @@ -4706,9 +4698,7 @@ table tbody tr:nth-child(odd):hover th { .massaction .entry-edit fieldset select { border-radius: 2px; - padding: 3px; margin: 0; - vertical-align: middle; } .massaction .entry-edit fieldset select.validation-failed { @@ -4860,6 +4850,7 @@ tr.dynamic-grid input.input-text { white-space: normal; } +/* will be deleted after checking entire back-end table .col-draggable { width: 1%; } @@ -4897,34 +4888,34 @@ table .col-frontend_label { width: 25%; } +.ui-dialog .selection-search table .col-select { + width: 25%; +} +*/ + table .col-draggable .draggable-handle { position: relative; top: 0; float: left; } -.grid table .col-id, -.grid table thead th.col-price, -.grid table thead th.col-qty, -.grid table thead th.col-number { +.grid table .col-id { text-align: left; } -.ui-dialog .selection-search table .col-select { - width: 25px; -} - /* Data table -------------------------------------- */ .data-table { - border-collapse: inherit; /* do not remove this! without this rule in FF when table has only 1 row bottom and side borders disappear*/ + border-collapse: separate; /* do not remove this! without this rule in FF when table has only 1 row bottom and side borders disappear*/ width: 100%; } .data-table thead, .data-table tfoot, -.data-table th { +.data-table th, +.accordion .config .data-table thead th, +.accordion .config .data-table tfoot td { background: #fff; color: #666; } @@ -4936,7 +4927,8 @@ table .col-draggable .draggable-handle { } .data-table td, -.data-table tbody tr td { +.data-table tbody tr td, +.accordion .config .data-table td { background: #fff; padding: 5px 7px; font-size: 12px; @@ -4962,7 +4954,8 @@ table .col-draggable .draggable-handle { } .data-table tbody tr:nth-child(odd) td, -.data-table tbody tr:nth-child(odd):hover td { +.data-table tbody tr:nth-child(odd):hover td, +.accordion .config .data-table tbody tr:nth-child(odd) td { background: #fbfaf6; } @@ -4971,7 +4964,8 @@ table .col-draggable .draggable-handle { } .data-table tfoot tr:last-child td, -.data-table tfoot tr:last-child th { +.data-table tfoot tr:last-child th, +.accordion .config .data-table tfoot tr:last-child td { border: 0; } @@ -5159,16 +5153,16 @@ table .col-draggable .draggable-handle { .col-color, .col-size, .col-product, -.col-comment { +.col-comment, +.col-actions, +.col-status { text-align: left; } /* center */ .col-include, -.col-price, .col-display, .col-image, -.col-price, .col-no-records, .col-select, .col-default, @@ -5179,7 +5173,6 @@ table .col-draggable .draggable-handle { /* right */ .col-qty, .col-weight, -.col-actions, .col-price, .col-price > input, .col-id, @@ -5330,6 +5323,11 @@ table .col-draggable .draggable-handle { top: 2px; } +.tree-store-scope .field .addafter { + display: inline-block; + padding-top: 6px; +} + .tree-store-scope .tooltip .help { margin-top: 11px; } @@ -5543,6 +5541,14 @@ table .col-draggable .draggable-handle { margin: 10px 0; } +#catalog-wysiwyg-editor .buttons-set { + margin-bottom: 9px; +} + +#catalog-wysiwyg-editor .buttons-set button { + margin-right: 4px; +} + /* System Messages -------------------------------------- */ diff --git a/app/design/adminhtml/magento_backend/css/debug.css b/app/design/adminhtml/magento_backend/css/debug.css index dae2e938436..02f37c864b6 100644 --- a/app/design/adminhtml/magento_backend/css/debug.css +++ b/app/design/adminhtml/magento_backend/css/debug.css @@ -384,18 +384,6 @@ ul.messages li.success-msg li:before { height: 100px; } -.dashboard-container { - border-radius: 0; -} - -.dashboard-container.col-2-left-layout:before { - left: 40%; -} - -.dashboard-container #diagram_tab { - margin: 20px 20px 0; -} - /* TODO: arrange configuration tables */ .accordion .collapseable.disabled { background: #f1f1f1; @@ -438,6 +426,16 @@ ul.messages li.success-msg li:before { text-align: right; } +.accordion .config .value .label { + padding: 6px 5px 0 15px; + vertical-align: top; + width: auto; +} + +.accordion .config .value .label:first-child { + padding-left: 0; +} + .accordion .config .label label { padding-top: 6px; } @@ -462,12 +460,15 @@ ul.messages li.success-msg li:before { .accordion .config select, .accordion .config textarea { width: 100%; - border-radius: 3px; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } +.accordion .config input.input-file { + margin-top: 4px; +} + .accordion .config select.select-date { width: 20%; } @@ -526,11 +527,11 @@ ul.messages li.success-msg li:before { margin:0; } - - .accordion .config .scope-label { color: #999; font-size: 12px; + letter-spacing: 0.05em; + padding: 15px 15px 0 0; } .accordion .config .note { diff --git a/app/design/adminhtml/magento_backend/css/pages.css b/app/design/adminhtml/magento_backend/css/pages.css index d20fb55a567..2d3f4fc45bb 100644 --- a/app/design/adminhtml/magento_backend/css/pages.css +++ b/app/design/adminhtml/magento_backend/css/pages.css @@ -302,6 +302,20 @@ margin: 0 10px; } +/* + Configuration -> Design +-------------------------------------- */ +#row_design_theme_ua_regexp .design_theme_ua_regexp { + float: left; + width: 100%; +} +#row_design_theme_ua_regexp .tooltip { + margin-top: 8px; +} +#row_design_theme_ua_regexp .note { + clear: both; +} + /* CMS -> Banners -------------------------------------- */ @@ -378,6 +392,10 @@ top: 6px; } +.cms-hierarchy-node .form-inline .label { + width: 30%; +} + /* CMS -> Widgets -------------------------------------- */ @@ -975,18 +993,10 @@ width: 10%; } -.adminhtml-report-product-lowstock .range { - white-space: nowrap; -} - .adminhtml-report-product-lowstock .range-line { display: inline-block; } -.adminhtml-report-product-lowstock .range-line:first-child { - margin-right: 5px; -} - .adminhtml-report-product-lowstock .col-product { width: 65%; } @@ -999,6 +1009,14 @@ Reports - PayPal Settlement Reports -------------------------------------- */ +.adminhtml-paypal-reports-index .grid tr.headings th > span { + white-space: normal; +} + +.adminhtml-paypal-reports-index .col-transaction_event_code { + max-width: 150px; +} + .adminhtml-paypal-reports-index .col-amount, .adminhtml-paypal-reports-index .col-fee-amount { text-align: right; @@ -1216,8 +1234,73 @@ border: 1px solid #ccc; } -.dashboard-container .dashboard-diagram { - margin: 20px; +.adminhtml-dashboard-index .col-2-left-layout, +.adminhtml-dashboard-index .col-1-layout { + min-width: 0; +} + +.adminhtml-dashboard-index .side-col { + width: 38%; + padding: 1%; +} + +.adminhtml-dashboard-index .col-2-left-layout .main-col { + min-width: 0; + width: 60%; +} + +.dashboard-container { + border-radius: 0; +} + +.dashboard-container.col-2-left-layout:before { + left: 40%; +} + +.dashboard-container .dashboard-inner { + padding: 20px; +} + +.dashboard-inner .tabs-horiz > li a { + padding-left: 14px; + padding-right: 14px; +} + +.dashboard-container #diagram_tab_content { + background: #fff; + border: 1px solid #eae6e0; + border-radius: 5px; + border-top-left-radius: 0; + margin: 0 0 20px; + padding: 18px; + position: relative; +} + +.dashboard-container .dashboard-diagram .store-switcher + div { /* loader under a diagram */ + background: url(../mui/images/ajax-loader-small.gif) no-repeat 50% 50%; + min-height: 75px; + text-align: center; +} + +.dashboard-container .dashboard-diagram .store-switcher + div img { + max-width: 100%; +} + +.dashboard-container .dashboard-diagram .store-switcher + div.dashboard-diagram-nodata { /* when there is no data to display the diagram */ + background-image: none; + min-height: 15px; +} + +.dashboard-container #grid_tab_content { + background: #fff url(../mui/images/ajax-loader-small.gif) no-repeat 50% 50%; + border: 1px solid #eae6e0; + border-radius: 5px; + border-top-left-radius: 0; + min-height: 50px; +} + +.dashboard-container #grid_tab_content .grid { + padding: 0; } .dashboard-container .store-switcher { @@ -1784,7 +1867,6 @@ width: 35px; } -[class^=" adminhtml-sales-order-"] .col-status, [class^=" adminhtml-sales-order-"] .col-price-original, [class^=" adminhtml-sales-order-"] .col-tax-amount, [class^=" adminhtml-sales-order-"] .col-tax-percent, @@ -2661,6 +2743,25 @@ table.items-to-invoice tbody tr:hover td { width: 100%; } +/* + Cache Management +-------------------------------------- */ +.additional-cache-management .label { + margin-top: 5px; +} + +/* + Currency Symbols +-------------------------------------- */ +.adminhtml-system-currencysymbol-index th.col-symbol .required:after { + content: '*'; + margin-left: 3px; +} + +.adminhtml-system-currencysymbol-index td.col-currency .label { + margin-top: 5px; +} + /* Clearfix -------------------------------------- */ diff --git a/app/design/adminhtml/magento_backend/mui/form.css b/app/design/adminhtml/magento_backend/mui/form.css index 98dfa188c8c..1bd9394ab5b 100644 --- a/app/design/adminhtml/magento_backend/mui/form.css +++ b/app/design/adminhtml/magento_backend/mui/form.css @@ -94,6 +94,7 @@ span.required { .field.required > .label:after { content: '*'; color: red; + margin-left: 3px; } .field.alternative { diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/backbutton.phtml b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/backbutton.phtml new file mode 100644 index 00000000000..cb76e318b8c --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/backbutton.phtml @@ -0,0 +1,26 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<button type="button" class="action back customization"><span><?php echo __('Go back to product details') ?></span></button> diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/customize.phtml b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/customize.phtml new file mode 100644 index 00000000000..4b08a51a035 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/customize.phtml @@ -0,0 +1,32 @@ +<?php +/** + * 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 design + * @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) + */ +?> + +<?php $_product = $this->getProduct() ?> +<?php if ($_product->isSaleable() && $this->hasOptions()):?> + <div class="actions bundle"> + <button id="bundle-slide" class="action primary customize" type="button"><span><?php echo __('Customize and Add to Cart'); ?></span></button> + </div> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/summary.phtml b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/summary.phtml new file mode 100644 index 00000000000..e2c3b5c3ad7 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/summary.phtml @@ -0,0 +1,91 @@ +<?php +/** + * 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 design + * @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) + */ +?> + +<?php + $_product = $this->getProduct(); +?> +<?php if ($_product->isSaleable() && $this->hasOptions()): ?> +<div id="bundleSummary" class="block bundle summary"> + <div class="title"> + <strong><?php echo __('Your Customization'); ?></strong> + </div> + <div class="content"> + <div class="bundle info"> + <?php echo $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image')->init($_product, 'bundled_product_customization_page')->toHtml() ?> + <div class="product details"> + <strong class="product name"><?php echo $this->escapeHtml($_product->getName()) ?></strong> + <?php if($_product->getIsSalable()): ?> + <p class="available stock" title="<?php echo __('Availability') ?>"><span><?php echo __('In stock') ?></span></p> + <?php else: ?> + <p class="unavailable stock" title="<?php echo __('Availability') ?>"><span><?php echo __('Out of stock') ?></span></p> + <?php endif; ?> + <?php echo $this->getChildHtml('', true);?> + </div> + </div> + <div class="bundle summary"> + <strong class="subtitle"><?php echo __('Summary'); ?></strong> + <div id="bundle-summary" data-container="product-summary"> + <ul data-mage-init='{productSummary: []}'></ul> + <script data-template="bundle-summary" type="text/x-jQuery-tmpl"> + <li> + <strong class="label">${_label_}:</strong> + <div data-container="options"></div> + </li> + </script> + <script data-template="bundle-option" type="text/x-jQuery-tmpl"> + <div><?php echo __('%1 x %2', '${_quantity_}', '${_label_}') ?></div> + </script> + </div> + </div> + </div> +</div> +<script> + (function ($) { + head.js("<?php echo $this->getViewFileUrl('js/sticky.js') ?>",function() { + $('#bundleSummary').sticky({ + container: '.product.add.form' + }); + }); + })(jQuery); +</script> +<script type="text/javascript"> + (function($) { + head.js("<?php echo $this->getViewFileUrl('Magento_Bundle::js/slide.js')?>", function() { + $('.product.add.form').slide({ + slideSpeed: 1500, + slideSelector: '#bundle-slide', + slideBackSelector: '.action.customization.back', + bundleProductSelector: '#bundleProduct', + bundleOptionsContainer: '.product.add.form', + <?php if ($this->isStartCustomization()): ?> + autostart: true + <?php endif;?> + } + ); + }); + })(jQuery); +</script> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/title.phtml b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/title.phtml new file mode 100644 index 00000000000..63eb6350d45 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/title.phtml @@ -0,0 +1,31 @@ +<?php +/** + * 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 design + * @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) + */ +?> + +<?php $_product = $this->getProduct() ?> +<div id="customizeTitle" class="page-title title-buttons"> + <h1><?php echo __('Customize %1', $_helper->productAttribute($_product, $_product->getName(), 'name')) ?></h1> + <a href="#" class="bundle-slide-back"><small>‹</small> Go back to product detail</a> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle.phtml b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle.phtml new file mode 100644 index 00000000000..6874d318387 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle.phtml @@ -0,0 +1,59 @@ +<?php +/** + * 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 design + * @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) + */ + +/* @var $this \Magento\Bundle\Block\Catalog\Product\View\Type\Bundle */ +?> +<?php $_product = $this->getProduct() ?> +<?php if($_product->isSaleable()): ?> +<script type="text/javascript"> + (function ($) { + head.js("<?php echo $this->getViewFileUrl('Magento_Bundle::/bundle.js') ?>", function() { + $('#product_addtocart_form').bundleOption({ + bundleConfig: <?php echo $this->getJsonConfig() ?>, + bundleOptionQtyPrefix: "#bundle-option-", + bundleOptionQtySuffix: "-qty-input", + priceSelectors: { + "product-price": "#product-price-<?php echo $_product->getId()?>", + "bundle-price": "#bundle-price-<?php echo $_product->getId()?>", + "price-including-tax": "#price-including-tax-<?php echo $_product->getId()?>", + "price-excluding-tax": "#price-excluding-tax-<?php echo $_product->getId()?>" + } + }); + }); + })(jQuery); +</script> +<?php endif; ?> +<?php if ($this->displayProductStockStatus()): ?> + <?php if ($_product->isAvailable()): ?> + <p class="stock available" title="<?php echo __('Availability:') ?>"> + <span><?php echo __('In stock') ?></span> + </p> + <?php else: ?> + <p class="stock unavailable" title="<?php echo __('Availability:') ?>"> + <span><?php echo __('Out of stock') ?></span> + </p> + <?php endif; ?> +<?php endif; ?> +<?php echo $this->getChildHtml('bundle_prices') ?> diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/option/checkbox.phtml b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/option/checkbox.phtml new file mode 100644 index 00000000000..56646524696 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/option/checkbox.phtml @@ -0,0 +1,53 @@ +<?php +/** + * 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 design + * @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) + */ + +?> + +<?php /* @var $this \Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Option_Checkbox */ ?> +<?php $_option = $this->getOption() ?> +<?php $_selections = $_option->getSelections() ?> +<div class="field option <?php echo ($_option->getRequired()) ? ' required': ''; ?>"> + <label class="label"> + <span><?php echo $this->escapeHtml($_option->getTitle()) ?></span> + </label> + <div class="control"> + <div class="nested options-list"> + <?php if (count($_selections) == 1 && $_option->getRequired()): ?> + <?php echo $this->getSelectionQtyTitlePrice($_selections[0]) ?> + <input type="hidden" name="bundle_option[<?php echo $_option->getId() ?>]" value="<?php echo $_selections[0]->getSelectionId() ?>"/> + <?php else:?> + <?php foreach($_selections as $_selection): ?> + <div class="field choice"> + <input class="change-container-classname checkbox bundle-option-<?php echo $_option->getId() ?> product-bundle-option" id="bundle-option-<?php echo $_option->getId() ?>-<?php echo $_selection->getSelectionId() ?>" type="checkbox" <?php if ($_option->getRequired()) echo 'data-validate="{\'validate-one-required-by-name\':true}"'?> name="bundle_option[<?php echo $_option->getId() ?>][]"<?php if ($this->isSelected($_selection)) echo ' checked="checked"' ?><?php if (!$_selection->isSaleable()) echo ' disabled="disabled"' ?> value="<?php echo $_selection->getSelectionId() ?>"/> + <label class="label" for="bundle-option-<?php echo $_option->getId() ?>-<?php echo $_selection->getSelectionId() ?>"> + <span><?php echo $this->getSelectionQtyTitlePrice($_selection) ?></span> + </label> + </div> + <?php endforeach; ?> + <div id="bundle-option-<?php echo $_option->getId() ?>-container"></div> + <?php endif; ?> + </div> + </div> +</div> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/option/multi.phtml b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/option/multi.phtml new file mode 100644 index 00000000000..50e74d9111e --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/option/multi.phtml @@ -0,0 +1,50 @@ +<?php +/** + * 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 design + * @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) + */ + +?> + +<?php /* @var $this \Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Option_Multi */ ?> +<?php $_option = $this->getOption() ?> +<?php $_selections = $_option->getSelections() ?> +<div class="field option <?php echo ($_option->getRequired()) ? ' required': ''; ?>"> + <label class="label"> + <span><?php echo $this->escapeHtml($_option->getTitle()) ?></span> + </label> + <div class="control"> + <?php if (count($_selections) == 1 && $_option->getRequired()): ?> + <?php echo $this->getSelectionQtyTitlePrice($_selections[0]) ?> + <input type="hidden" name="bundle_option[<?php echo $_option->getId() ?>]" value="<?php echo $_selections[0]->getSelectionId() ?>"/> + <?php else: ?> + <select multiple="multiple" size="5" id="bundle-option-<?php echo $_option->getId() ?>" name="bundle_option[<?php echo $_option->getId() ?>][]" class="bundle-option-<?php echo $_option->getId() ?> multiselect change-container-classname product-bundle-option" <?php if ($_option->getRequired()) echo 'data-validate={required:true}' ?>> + <?php if(!$_option->getRequired()): ?> + <option value=""><?php echo __('None') ?></option> + <?php endif; ?> + <?php foreach ($_selections as $_selection): ?> + <option value="<?php echo $_selection->getSelectionId() ?>"<?php if ($this->isSelected($_selection)) echo ' selected="selected"' ?><?php if (!$_selection->isSaleable()) echo ' disabled="disabled"' ?>><?php echo $this->getSelectionQtyTitlePrice($_selection, false) ?></option> + <?php endforeach; ?> + </select> + <?php endif; ?> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/option/radio.phtml b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/option/radio.phtml new file mode 100644 index 00000000000..5c9b0991dba --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/option/radio.phtml @@ -0,0 +1,70 @@ +<?php +/** + * 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 design + * @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) + */ + +?> + +<?php /* @var $this \Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Option_Radio */ ?> +<?php $_option = $this->getOption(); ?> +<?php $_selections = $_option->getSelections(); ?> +<?php $_default = $_option->getDefaultSelection(); ?> +<?php list($_defaultQty, $_canChangeQty) = $this->getDefaultValues(); ?> + +<div class="field option <?php echo ($_option->getRequired()) ? ' required': ''; ?>"> + <label class="label"> + <span><?php echo $this->escapeHtml($_option->getTitle()) ?></span> + </label> + <div class="control"> + <div class="nested options-list"> + <?php if ($this->showSingle()): ?> + <?php echo $this->getSelectionTitlePrice($_selections[0]) ?> + <input type="hidden" name="bundle_option[<?php echo $_option->getId() ?>]" value="<?php echo $_selections[0]->getSelectionId() ?>" /> + <?php else:?> + <?php if (!$_option->getRequired()): ?> + <div class="field choice"> + <input type="radio" class="radio product-bundle-option" id="bundle-option-<?php echo $_option->getId() ?>" name="bundle_option[<?php echo $_option->getId() ?>]"<?php echo ($_default && $_default->isSalable())?'':' checked="checked" ' ?> value=""/> + <label class="label" for="bundle-option-<?php echo $_option->getId() ?>"><span><?php echo __('None') ?></span></label> + </div> + <?php endif; ?> + <?php foreach ($_selections as $_selection): ?> + <div class="field choice"> + <input type="radio" class="radio change-container-classname product-bundle-option" id="bundle-option-<?php echo $_option->getId() ?>-<?php echo $_selection->getSelectionId() ?>" <?php if ($_option->getRequired()) echo 'data-validate="{\'validate-one-required-by-name\':true}"'?> name="bundle_option[<?php echo $_option->getId() ?>]"<?php if ($this->isSelected($_selection)) echo ' checked="checked"' ?><?php if (!$_selection->isSaleable()) echo ' disabled="disabled"' ?> value="<?php echo $_selection->getSelectionId() ?>"/> + <label class="label" for="bundle-option-<?php echo $_option->getId() ?>-<?php echo $_selection->getSelectionId() ?>"> + <span><?php echo $this->getSelectionTitlePrice($_selection) ?></span> + </label> + </div> + <?php endforeach; ?> + <div id="bundle-option-<?php echo $_option->getId() ?>-container"></div> + <?php endif; ?> + <div class="field qty qty-holder"> + <label class="label" for="bundle-option-<?php echo $_option->getId() ?>-qty-input"> + <span><?php echo __('Qty') ?></span> + </label> + <div class="control"> + <input <?php if (!$_canChangeQty) echo ' disabled="disabled"' ?> id="bundle-option-<?php echo $_option->getId() ?>-qty-input" class="input-text qty<?php if (!$_canChangeQty) echo ' qty-disabled' ?>" type="text" name="bundle_option_qty[<?php echo $_option->getId() ?>]" value="<?php echo $_defaultQty ?>"/> + </div> + </div> + </div> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/option/select.phtml b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/option/select.phtml new file mode 100644 index 00000000000..30109f60406 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/option/select.phtml @@ -0,0 +1,61 @@ +<?php +/** + * 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 design + * @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) + */ + +?> + +<?php /* @var $this \Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Option_Select */ ?> +<?php $_option = $this->getOption(); ?> +<?php $_selections = $_option->getSelections(); ?> +<?php $_default = $_option->getDefaultSelection(); ?> +<?php list($_defaultQty, $_canChangeQty) = $this->getDefaultValues(); ?> + +<div class="field option <?php echo ($_option->getRequired()) ? ' required': ''; ?>"> + <label class="label"> + <span><?php echo $this->escapeHtml($_option->getTitle()) ?></span> + </label> + <div class="control"> + <?php if ($this->showSingle()): ?> + <?php echo $this->getSelectionTitlePrice($_selections[0]) ?> + <input type="hidden" name="bundle_option[<?php echo $_option->getId() ?>]" value="<?php echo $_selections[0]->getSelectionId() ?>"/> + <?php else:?> + <select id="bundle-option-<?php echo $_option->getId() ?>" name="bundle_option[<?php echo $_option->getId() ?>]" class="bundle-option-<?php echo $_option->getId() ?> bundle-option-select product-bundle-option change-container-classname" <?php if ($_option->getRequired()) echo 'data-validate = {required:true}' ?>> + <option value=""><?php echo __('Choose a selection...') ?></option> + <?php foreach ($_selections as $_selection): ?> + <option value="<?php echo $_selection->getSelectionId() ?>"<?php if ($this->isSelected($_selection)) echo ' selected="selected"' ?><?php if (!$_selection->isSaleable()) echo ' disabled="disabled"' ?>><?php echo $this->getSelectionTitlePrice($_selection, false) ?></option> + <?php endforeach; ?> + </select> + <?php endif; ?> + <div class="nested"> + <div class="field qty qty-holder"> + <label class="label" for="bundle-option-<?php echo $_option->getId() ?>-qty-input"> + <span><?php echo __('Qty') ?></span> + </label> + <div class="control"> + <input <?php if (!$_canChangeQty) echo ' disabled="disabled"' ?> id="bundle-option-<?php echo $_option->getId() ?>-qty-input" class="input-text qty<?php if (!$_canChangeQty) echo ' qty-disabled' ?>" type="text" name="bundle_option_qty[<?php echo $_option->getId() ?>]" value="<?php echo $_defaultQty ?>"/> + </div> + </div> + </div> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/options.phtml b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/options.phtml new file mode 100644 index 00000000000..f11c5e3a2f0 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/catalog/product/view/type/bundle/options.phtml @@ -0,0 +1,55 @@ +<?php +/** + * 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 design + * @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) + */ +?> + +<?php +$_product = $this->getProduct(); +$_helper = $this->helper('Magento\Catalog\Helper\Output'); +?> +<?php $_options = $this->helper('Magento\Core\Helper\Data')->decorateArray($this->getOptions()); ?> +<?php if ($_product->isSaleable()):?> + <?php if (count($_options)): ?> + <script type="text/javascript"> + (function ($) { + head.js("<?php echo $this->getViewFileUrl('Magento_Bundle::bundle.js') ?>", function () { + $('#product_addtocart_form').bundleOption({'optionConfig':<?php echo $this->getJsonConfig()?>}).trigger('changeSelection'); + }); + })(jQuery); + </script> + <fieldset class="fieldset bundle options"> + <legend id="customizeTitle" class="legend"> + <span><?php echo __('Customize %1', $_helper->productAttribute($_product, $_product->getName(), 'name')) ?></span> + </legend><br /> + <?php foreach ($_options as $_option): ?> + <?php if (!$_option->getSelections()): ?> + <?php continue; ?> + <?php endif; ?> + <?php echo $this->getOptionHtml($_option) ?> + <?php endforeach; ?> + </fieldset> + <?php else: ?> + <p><?php echo __('No options of this product are available.') ?></p> + <?php endif; ?> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/js/slide.js b/app/design/frontend/magento_plushe/Magento_Bundle/js/slide.js new file mode 100644 index 00000000000..69e8678d339 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/js/slide.js @@ -0,0 +1,99 @@ +/** + * 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 frontend bundle product slide + * @package mage + * @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) + */ +/*jshint browser:true jquery:true expr:true*/ +(function($) { + $.widget('mage.slide', { + options: { + slideSpeed: 1500, + slideSelector: '#bundle-slide', + slideBackSelector: '.bundle-slide-back', + bundleProductSelector: '#bundleProduct', + bundleOptionsContainer: '#options-container', + productViewContainer: '#productView', + slidedown: true + + }, + + _create: function() { + if(this.options.slidedown === true) { + $(this.options.slideSelector).on('click', $.proxy(this._show, this)); + $(this.options.slideBackSelector).on('click', $.proxy(this._hide, this)); + this.options.autostart && this._show(); + } else { + $(this.options.slideSelector).on('click', $.proxy(this._slide, this)); + $(this.options.slideBackSelector).on('click', $.proxy(this._slideBack, this)); + this.options.autostart && this._slide(); + } + }, + + /** + * slide bundleOptionsContainer over to the main view area + * @private + */ + _slide: function() { + $(this.options.bundleProductSelector).css('top', '0px'); + $(this.options.bundleOptionsContainer).show(); + this.element.css('height',$(this.options.productViewContainer).height() + 'px'); + $(this.options.bundleProductSelector).css('left', '0px').animate( + {'left': '-' + this.element.width() + 'px'}, + this.options.slideSpeed, + $.proxy(function() { + this.element.css('height','auto'); + $(this.options.productViewContainer).hide(); + }, this) + ); + }, + + /** + * slideback productViewContainer to main view area + * @private + */ + _slideBack: function() { + $(this.options.bundleProductSelector).css('top', '0px'); + $(this.options.productViewContainer).show(); + this.element.css('height', $(this.options.bundleOptionsContainer).height() + 'px'); + $(this.options.bundleProductSelector).animate( + {'left': '0px'}, + this.options.slideSpeed, + $.proxy(function() { + $(this.options.bundleOptionsContainer).hide(); + this.element.css('height','auto'); + }, this) + ); + }, + _show: function () { + $(this.options.bundleOptionsContainer).slideDown(800); + $('html, body').animate({ + scrollTop: $(this.options.bundleOptionsContainer).offset().top + }, 600); + }, + _hide: function () { + $('html, body').animate({ + scrollTop: 0 + }, 600); + $(this.options.bundleOptionsContainer).slideUp(function(){800}); + } + }); +}(jQuery)); \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/layout/override/catalog_product_view_type_bundle.xml b/app/design/frontend/magento_plushe/Magento_Bundle/layout/override/catalog_product_view_type_bundle.xml new file mode 100644 index 00000000000..fef09fb09da --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/layout/override/catalog_product_view_type_bundle.xml @@ -0,0 +1,113 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Catalog Product View (Bundle)" type="page" parent="catalog_product_view"> + <referenceBlock name="head"> + <block class="Magento\Page\Block\Html\Head\Script" name="magento-bundle-bundle-js"> + <arguments> + <argument name="file" xsi:type="string">Magento_Bundle::bundle.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="magento-bundle-js-product-summary-js"> + <arguments> + <argument name="file" xsi:type="string">Magento_Bundle::js/product-summary.js</argument> + </arguments> + </block> + </referenceBlock> + <referenceBlock name="root"> + <action method="addBodyClass"> + <argument name="value" xsi:type="string">type-bundle</argument> + </action> + </referenceBlock> + <referenceBlock name="product.info"> + <block class="Magento\Bundle\Block\Catalog\Product\View" name="bundle.summary" as="form_top" template="catalog/product/view/summary.phtml"> + <block class="Magento\Bundle\Block\Catalog\Product\Price" name="bundle.prices" as="bundle_prices" template="catalog/product/view/price.phtml"> + <action method="setMAPTemplate"> + <argument name="tmpl" xsi:type="string">Magento_Catalog::product/price_msrp_item.phtml</argument> + </action> + </block> + <block class="Magento\Catalog\Block\Product\View" name="product.info.addtocart.bundle" as="addtocart" template="product/view/addtocart.phtml"/> + <block class="Magento\Catalog\Block\Product\View" name="product.info.addto.bundle" as="addto" template="product/view/addto.phtml"/> + </block> + </referenceBlock> + <referenceBlock name="product.info.options.wrapper"> + <block class="Magento\Catalog\Block\Product\View" name="bundle.product.view.options.notice" template="Magento_Bundle::catalog/product/view/options/notice.phtml"/> + <block class="Magento\Bundle\Block\Catalog\Product\View\Type\Bundle" name="product.info.bundle.options" as="type_bundle_options" template="catalog/product/view/type/bundle/options.phtml" before="-"> + <action method="addRenderer"> + <argument name="type" xsi:type="string">select</argument> + <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Option\Select</argument> + </action> + <action method="addRenderer"> + <argument name="type" xsi:type="string">multi</argument> + <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Option\Multi</argument> + </action> + <action method="addRenderer"> + <argument name="type" xsi:type="string">radio</argument> + <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Option\Radio</argument> + </action> + <action method="addRenderer"> + <argument name="type" xsi:type="string">checkbox</argument> + <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Option\Checkbox</argument> + </action> + </block> + </referenceBlock> + <referenceBlock name="product.info.options.wrapper.bottom"> + <remove name="product.tierprices"/> + <block class="Magento\Bundle\Block\Catalog\Product\View" name="bundle.tierprices" as="tierprices" before="-" template="Magento_Bundle::catalog/product/view/tierprices.phtml"/> + <block class="Magento\CatalogInventory\Block\Qtyincrements" name="product.info.qtyincrements" before="-" template="qtyincrements.phtml"/> + <block class="Magento\Bundle\Block\Catalog\Product\View" name="bundle.back.button" as="backButton" after="-" template="catalog/product/view/backbutton.phtml"/> + <action method="unsetChild"> + <argument name="block" xsi:type="string">product.info.addtocart</argument> + </action> + <action method="setHideRequiredNotice"> + <argument name="flag" xsi:type="string">1</argument> + </action> + <action method="unsetChild"> + <argument name="block" xsi:type="string">product.info.addto</argument> + </action> + </referenceBlock> + <referenceContainer name="content"> + <container name="bundle.options.container" label="invisible" htmlTag="div" htmlClass="bundle options container" after="product.info.media"/> + <move element="product.info" destination="bundle.options.container" before="-"/> + </referenceContainer> + <referenceContainer name="product.info.type"> + <block class="Magento\Bundle\Block\Catalog\Product\View\Type\Bundle" name="product.info.bundle" as="product_type_data" template="catalog/product/view/type/bundle.phtml"> + <action method="addPriceBlockType"> + <argument name="type" xsi:type="string">bundle</argument> + <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> + <argument name="template" xsi:type="string">catalog/product/view/price.phtml</argument> + </action> + </block> + <container name="product.info.bundle.extra" after="product.info.bundle" as="product_type_data_extra" label="Product Extra Info"/> + <block class="Magento\Bundle\Block\Catalog\Product\View" name="customize.button" as="customize_button" template="catalog/product/view/customize.phtml"/> + </referenceContainer> + <referenceBlock name="product.clone_prices"> + <action method="addPriceBlockType"> + <argument name="type" xsi:type="string">bundle</argument> + <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> + <argument name="template" xsi:type="string">catalog/product/view/price.phtml</argument> + </action> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/layout/override/checkout_cart_index.xml b/app/design/frontend/magento_plushe/Magento_Bundle/layout/override/checkout_cart_index.xml new file mode 100644 index 00000000000..f56f9a2b65b --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/layout/override/checkout_cart_index.xml @@ -0,0 +1,37 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="checkout.cart.form"> + <block class="Magento\Bundle\Block\Checkout\Cart\Item\Renderer" as="bundle" template="Magento_Checkout::cart/item/default.phtml"/> + </referenceBlock> + <referenceBlock name="checkout.cart.crosssell"> + <action method="addPriceBlockType"> + <argument name="type" xsi:type="string">bundle</argument> + <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> + <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> + </action> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/layout/override/default.xml b/app/design/frontend/magento_plushe/Magento_Bundle/layout/override/default.xml new file mode 100644 index 00000000000..30de3dbeb47 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/layout/override/default.xml @@ -0,0 +1,44 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="wishlist_sidebar"> + <action method="addPriceBlockType"> + <argument name="type" xsi:type="string">bundle</argument> + <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> + <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> + </action> + </referenceBlock> + <referenceBlock name="catalog_product_price_template"> + <action method="addPriceBlockType"> + <argument name="type" xsi:type="string">bundle</argument> + <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> + <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> + </action> + </referenceBlock> + <referenceBlock name="minicart"> + <block class="Magento\Bundle\Block\Checkout\Cart\Item\Renderer" as="bundle" template="Magento_Checkout::cart/sidebar/default.phtml"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/layout/review_product_list.xml b/app/design/frontend/magento_plushe/Magento_Bundle/layout/review_product_list.xml new file mode 100644 index 00000000000..db29516ed06 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/layout/review_product_list.xml @@ -0,0 +1,28 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <remove name="customize.button"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/sales/order/creditmemo/items/renderer.phtml b/app/design/frontend/magento_plushe/Magento_Bundle/sales/order/creditmemo/items/renderer.phtml new file mode 100644 index 00000000000..23199f3a6a5 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/sales/order/creditmemo/items/renderer.phtml @@ -0,0 +1,314 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php $parentItem = $this->getItem() ?> + +<?php $items = $this->getChilds($parentItem) ?> +<?php $_order = $this->getItem()->getOrderItem()->getOrder() ?> +<?php $_count = count ($items) ?> +<?php $_index = 0 ?> + +<?php $_prevOptionId = '' ?> + +<?php foreach ($items as $_item): ?> + +<?php if($this->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?> + <?php $_showlastRow = true ?> +<?php else: ?> + <?php $_showlastRow = false ?> +<?php endif; ?> + +<?php if ($_item->getOrderItem()->getParentItem()): ?> + <?php $attributes = $this->getSelectionAttributes($_item) ?> + <?php if ($_prevOptionId != $attributes['option_id']): ?> + <tr> + <td class="col label" colspan="7"><div class="option label"><?php echo $attributes['option_label'] ?></div></td> + </tr> + <?php $_prevOptionId = $attributes['option_id'] ?> + <?php endif; ?> +<?php endif; ?> +<tr<?php echo (++$_index==$_count && !$_showlastRow)?' class="border"':'' ?> id="order-item-row-<?php echo $_item->getId() ?>"> + <?php if (!$_item->getOrderItem()->getParentItem()): ?> + <td class="col name"> + <strong class="product name"><?php echo $this->escapeHtml($_item->getName()) ?></strong> + </td> + <?php else: ?> + <td><div class="option-value"><?php echo $this->getValueHtml($_item) ?></div></td> + <?php endif; ?> + <td class="col sku"><?php echo $this->escapeHtml($_item->getSku()) ?></td> + <td class="col price"> + <?php if ($this->canShowPriceInfo($_item)): ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()) ?> + <?php endif; ?> + + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxDisposition()) ?> + <?php endif; ?> + + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="unit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total Incl. Tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <?php endif; ?> + <?php else: ?> + + <?php endif; ?> + </td> + <td class="col qty"> + <?php if ($this->canShowPriceInfo($_item)): ?> + <?php echo $_item->getQty()*1 ?> + <?php else: ?> + + <?php endif; ?> + </td> + <td class="col subtotal"> + <?php if ($this->canShowPriceInfo($_item)): ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()) ?> + <?php endif; ?> + + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php echo $this->getOrder()->formatPrice($this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($_item)); ?> + <?php endif; ?> + </span> + <?php else: ?> + + <?php endif; ?> + <?php else: ?> + + <?php endif; ?> + </td> + <td class="col discount"> + <?php if ($this->canShowPriceInfo($_item)): ?> + <?php echo $this->getOrder()->formatPrice(-$_item->getDiscountAmount()) ?> + <?php else: ?> + + <?php endif; ?> + </td> + <td class="col rowtotal"> + <?php if ($this->canShowPriceInfo($_item)): ?> + <?php echo $this->getOrder()->formatPrice($_item->getRowTotal()-$_item->getDiscountAmount()+$_item->getTaxAmount()+$_item->getWeeeTaxAppliedRowAmount()) ?> + <?php else: ?> + + <?php endif; ?> + </td> +</tr> +<?php endforeach; ?> + +<?php if ($_showlastRow): ?> +<tr> + <td class="col options" colspan="7"> + <?php if($_options = $this->getItemOptions()): ?> + <dl class="item options"> + <?php foreach ($_options as $_option) : ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <?php if (!$this->getPrintStatus()): ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>> + <?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <div class="truncated_full_value"> + <dl class="item options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + </div> + <?php endif; ?> + </dd> + <?php else: ?> + <dd><?php echo $this->escapeHtml( (isset($_option['print_value']) ? $_option['print_value'] : $_option['value']) ) ?></dd> + <?php endif; ?> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <?php echo $this->escapeHtml($_item->getDescription()) ?> + <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?> + <a href="#" id="order-item-gift-message-link-<?php echo $parentItem->getId() ?>" class="gift-message-link" aria-controls="order-item-gift-message-<?php echo $parentItem->getId()?>" data-item-id="<?php echo $parentItem->getId() ?>"><?php echo __('Gift Message') ?></a> + <?php endif; ?> + </td> +</tr> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/sales/order/invoice/items/renderer.phtml b/app/design/frontend/magento_plushe/Magento_Bundle/sales/order/invoice/items/renderer.phtml new file mode 100644 index 00000000000..49fe7219b4a --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/sales/order/invoice/items/renderer.phtml @@ -0,0 +1,330 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php $parentItem = $this->getItem() ?> +<?php $_order = $this->getItem()->getOrderItem()->getOrder() ?> + +<?php $items = $this->getChilds($parentItem) ?> +<?php $_count = count ($items) ?> +<?php $_index = 0 ?> + +<?php $_prevOptionId = '' ?> + +<?php foreach ($items as $_item): ?> + +<?php if($this->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?> + <?php $_showlastRow = true ?> +<?php else: ?> + <?php $_showlastRow = false ?> +<?php endif; ?> + +<?php if ($_item->getOrderItem()->getParentItem()): ?> + <?php $attributes = $this->getSelectionAttributes($_item) ?> + <?php if ($_prevOptionId != $attributes['option_id']): ?> + <tr> + <td class="col label" colspan="5"><div class="option label"><?php echo $attributes['option_label'] ?></div></td> + </tr> + <?php $_prevOptionId = $attributes['option_id'] ?> + <?php endif; ?> +<?php endif; ?> +<tr<?php echo (++$_index==$_count && !$_showlastRow)?' class="border"':'' ?> id="order-item-row-<?php echo $_item->getId() ?>"> + <?php if (!$_item->getOrderItem()->getParentItem()): ?> + <td class="col name"> + <strong class="product name"><?php echo $this->escapeHtml($_item->getName()) ?></strong> + </td> + <?php else: ?> + <td class="col value"><div class="option value"><?php echo $this->getValueHtml($_item) ?></div></td> + <?php endif; ?> + <td class="col sku"><?php echo $this->escapeHtml($_item->getSku()) ?></td> + <td class="col price"> + <?php if ($this->canShowPriceInfo($_item)): ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()) ?> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + <span class="cart-tax-info" id="eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxDisposition()) ?> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + <span class="cart-tax-info" id="unit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <?php endif; ?> + <?php else: ?> + + <?php endif; ?> + </td> + <td class="col qty"> + <?php if ($this->canShowPriceInfo($_item)): ?> + <?php echo $_item->getQty()*1 ?> + <?php else: ?> + + <?php endif; ?> + </td> + <td class="col subtotal"> + <?php if ($this->canShowPriceInfo($_item)): ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()) ?> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + <span class="cart-tax-info" id="esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedRowAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxRowDisposition()) ?> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + <span class="cart-tax-info" id="subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedRowAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + + </span> + <?php endif; ?> + <?php else: ?> + + <?php endif; ?> + </td> +</tr> +<?php endforeach; ?> + +<?php if ($_showlastRow): ?> +<tr> + <td class="col options" colspan="5"> + <?php if($_options = $this->getItemOptions()): ?> + <dl class="item options"> + <?php foreach ($_options as $_option) : ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <?php if (!$this->getPrintStatus()): ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>> + <?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <div class="truncated_full_value"> + <dl class="item options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + </div> + <?php endif; ?> + </dd> + <?php else: ?> + <dd><?php echo $this->escapeHtml( (isset($_option['print_value']) ? $_option['print_value'] : $_option['value']) ) ?></dd> + <?php endif; ?> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <?php echo $this->escapeHtml($_item->getDescription()) ?> + <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?> + <a href="#" id="order-item-gift-message-link-<?php echo $parentItem->getId() ?>" class="gift-message-link" aria-controls="order-item-gift-message-<?php echo $parentItem->getId()?>" data-item-id="<?php echo $parentItem->getId() ?>"><?php echo __('Gift Message') ?></a> + <?php endif; ?> + </td> +</tr> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/sales/order/items/renderer.phtml b/app/design/frontend/magento_plushe/Magento_Bundle/sales/order/items/renderer.phtml new file mode 100644 index 00000000000..3692830fff3 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/sales/order/items/renderer.phtml @@ -0,0 +1,354 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php $parentItem = $this->getItem() ?> +<?php $items = array_merge(array($parentItem), $parentItem->getChildrenItems()); ?> +<?php $_count = count ($items) ?> +<?php $_index = 0 ?> + +<?php $_prevOptionId = '' ?> + +<?php foreach ($items as $_item): ?> + +<?php if($this->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?> + <?php $_showlastRow = true ?> +<?php else: ?> + <?php $_showlastRow = false ?> +<?php endif; ?> + +<?php if ($_item->getParentItem()): ?> + <?php $attributes = $this->getSelectionAttributes($_item) ?> + <?php if ($_prevOptionId != $attributes['option_id']): ?> + <tr<?php if ($_item->getLastRow()) echo 'class="last"'; ?>> + <td class="col label" colspan="5"><div class="option label"><?php echo $attributes['option_label'] ?></div></td> + </tr> + <?php $_prevOptionId = $attributes['option_id'] ?> + <?php endif; ?> +<?php endif; ?> +<tr<?php echo (++$_index==$_count && !$_showlastRow)?' class="border"':'' ?> id="order-item-row-<?php echo $_item->getId() ?>"> + <?php if (!$_item->getParentItem()): ?> + <td class="col name"> + <strong class="product name"><?php echo $this->escapeHtml($_item->getName()) ?></strong> + </td> + <?php else: ?> + <td class="col value"><div class="option value"><?php echo $this->getValueHtml($_item)?></div></td> + <?php endif; ?> + <td class="col sku"><?php echo $this->escapeHtml($this->helper('Magento\Core\Helper\String')->splitInjection($_item->getSku())) ?></td> + <td class="col price"> + <?php if (!$_item->getParentItem()): ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()) ?> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + <span class="cart-tax-info" id="eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxDisposition()) ?> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + <span class="cart-tax-info" id="unit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <?php endif; ?> + <?php else: ?> + + <?php endif; ?> + </td> + <td class="col qty"> + <?php if (($_item->getParentItem() && $this->isChildCalculated()) || + (!$_item->getParentItem() && !$this->isChildCalculated())): ?> + <span class="nobr"> + <?php if ($_item->getQtyOrdered() > 0): ?> + <?php echo __('Ordered'); ?>: <strong><?php echo $_item->getQtyOrdered()*1 ?></strong><br /> + <?php endif; ?> + <?php if ($_item->getQtyShipped() > 0 && !$this->isShipmentSeparately()): ?> + <?php echo __('Shipped'); ?>: <strong><?php echo $_item->getQtyShipped()*1 ?></strong><br /> + <?php endif; ?> + <?php if ($_item->getQtyCanceled() > 0): ?> + <?php echo __('Canceled'); ?>: <strong><?php echo $_item->getQtyCanceled()*1 ?></strong><br /> + <?php endif; ?> + <?php if ($_item->getQtyRefunded() > 0): ?> + <?php echo __('Refunded'); ?>: <strong><?php echo $_item->getQtyRefunded()*1 ?></strong> + <?php endif; ?> + </span> + <?php elseif ($_item->getQtyShipped() > 0 && $_item->getParentItem() && $this->isShipmentSeparately()): ?> + <span class="nobr"><?php echo __('Shipped'); ?>: <strong><?php echo $_item->getQtyShipped()*1 ?></strong></span> + <?php else: ?> + + <?php endif; ?> + </td> + <td class="col subtotal"> + <?php if (!$_item->getParentItem()): ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()) ?> + <?php endif; ?> + + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedRowAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxRowDisposition()) ?> + <?php endif; ?> + + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total Incl. Tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedRowAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + + </span> + <?php endif; ?> + <?php else: ?> + + <?php endif; ?> + </td> + <!-- + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <th class="a-right"><?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()) ?></th> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <th class="a-right"><?php echo $this->getOrder()->formatPrice($this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($this->getItem())); ?></th> + <?php endif; ?> + --> +</tr> +<?php endforeach; ?> +<?php if ($_showlastRow): ?> +<tr> + <td class="col options" colspan="5"> + <?php if($_options = $this->getItemOptions()): ?> + <dl class="item options"> + <?php foreach ($_options as $_option) : ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <?php if (!$this->getPrintStatus()): ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>> + <?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <div class="truncated_full_value"> + <dl class="item options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + </div> + <?php endif; ?> + </dd> + <?php else: ?> + <dd><?php echo $this->escapeHtml( (isset($_option['print_value']) ? $_option['print_value'] : $_option['value']) ) ?></dd> + <?php endif; ?> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <?php echo $this->escapeHtml($_item->getDescription()) ?> + <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?> + <a href="#" id="order-item-gift-message-link-<?php echo $parentItem->getId() ?>" class="gift-message-link" aria-controls="order-item-gift-message-<?php echo $parentItem->getId()?>" data-item-id="<?php echo $parentItem->getId()?>"><?php echo __('Gift Message') ?></a> + <?php endif; ?> + </td> +</tr> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Bundle/sales/order/shipment/items/renderer.phtml b/app/design/frontend/magento_plushe/Magento_Bundle/sales/order/shipment/items/renderer.phtml new file mode 100644 index 00000000000..b7867220326 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Bundle/sales/order/shipment/items/renderer.phtml @@ -0,0 +1,109 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php $parentItem = $this->getItem() ?> +<?php $items = array_merge(array($parentItem->getOrderItem()), $parentItem->getOrderItem()->getChildrenItems()) ?> +<?php $shipItems = $this->getChilds($parentItem) ?> +<?php $_count = count ($items) ?> +<?php $_index = 0 ?> + +<?php $_prevOptionId = '' ?> + +<?php foreach ($items as $_item): ?> + +<?php if($this->getItemOptions() || $parentItem->getDescription() || $this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?> + <?php $_showlastRow = true ?> +<?php else: ?> + <?php $_showlastRow = false ?> +<?php endif; ?> + +<?php if ($_item->getParentItem()): ?> + <?php $attributes = $this->getSelectionAttributes($_item) ?> + <?php if ($_prevOptionId != $attributes['option_id']): ?> + <tr> + <td colspan="3" class="col label"><div class="option label"><?php echo $attributes['option_label'] ?></div></td> + </tr> + <?php $_prevOptionId = $attributes['option_id'] ?> + <?php endif; ?> +<?php endif; ?> +<tr<?php echo (++$_index==$_count && !$_showlastRow)?' class="border"':'' ?> id="order-item-row-<?php echo $_item->getId() ?>"> + <?php if (!$_item->getParentItem()): ?> + <td class="col name"> + <strong class="product name"><?php echo $this->escapeHtml($_item->getName()) ?></strong> + </td> + <?php else: ?> + <td class="col value"><div class="option value"><?php echo $this->getValueHtml($_item) ?></div></td> + <?php endif; ?> + <td class="col sku"><?php echo $this->escapeHtml($_item->getSku()) ?></td> + <td class="col price"> + <?php if (($this->isShipmentSeparately() && $_item->getParentItem()) || (!$this->isShipmentSeparately() && !$_item->getParentItem())): ?> + <?php if (isset($shipItems[$_item->getId()])): ?> + <?php echo $shipItems[$_item->getId()]->getQty()*1 ?> + <?php elseif ($_item->getIsVirtual()): ?> + <?php echo __('N/A') ?> + <?php else: ?> + 0 + <?php endif; ?> + <?php else: ?> + + <?php endif; ?> + </td> +</tr> +<?php endforeach; ?> + +<?php if ($_showlastRow): ?> +<tr> + <td class="col options" colspan="3"> + <?php if($_options = $this->getItemOptions()): ?> + <dl class="item options"> + <?php foreach ($_options as $_option) : ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <?php if (!$this->getPrintStatus()): ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>> + <?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <div class="truncated_full_value"> + <dl class="item options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + </div> + <?php endif; ?> + </dd> + <?php else: ?> + <dd><?php echo $this->escapeHtml( (isset($_option['print_value']) ? $_option['print_value'] : $_option['value']) ) ?></dd> + <?php endif; ?> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <?php echo $this->escapeHtml($_item->getDescription()) ?> + <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $parentItem) && $parentItem->getGiftMessageId()): ?> + <a href="#" id="order-item-gift-message-link-<?php echo $parentItem->getId() ?>" class="gift-message-link" aria-controls="order-item-gift-message-<?php echo $parentItem->getId()?>" data-item-id="<?php echo $parentItem->getId() ?>"><?php echo __('Gift Message') ?></a> + <?php endif; ?> + </td> +</tr> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Captcha/captcha.js b/app/design/frontend/magento_plushe/Magento_Captcha/captcha.js new file mode 100644 index 00000000000..dd6ef9edd81 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Captcha/captcha.js @@ -0,0 +1,70 @@ +/** + * 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 mage + * @package captcha + * @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) + */ +/*jshint browser:true jquery:true*/ +(function($, undefined) { + "use strict"; + $.widget('mage.captcha', { + options: { + refreshClass: 'refreshing', + reloadSelector: '.captcha-reload', + imageSelector: '.captcha-img' + }, + + /** + * Method binds click event to reload image + * @private + */ + _create: function() { + this.element.on('click', this.options.reloadSelector, $.proxy(this.refresh, this)); + }, + + /** + * Method triggeres an AJAX request to refresh the CAPTCHA image + * @param e - Event + */ + refresh: function(e) { + var reloadImage = $(e.currentTarget); + reloadImage.addClass(this.options.refreshClass); + $.ajax({ + url: this.options.url, + type: 'post', + dataType: 'json', + context: this, + data: { + 'formId': this.options.type + }, + success: function (response) { + if (response.imgSrc) { + this.element.find(this.options.imageSelector).attr('src', response.imgSrc); + } + }, + complete: function() { + reloadImage.removeClass(this.options.refreshClass); + } + }); + } + }); +})(jQuery); + diff --git a/app/design/frontend/magento_plushe/Magento_Captcha/default.phtml b/app/design/frontend/magento_plushe/Magento_Captcha/default.phtml new file mode 100644 index 00000000000..7c9d351bfaf --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Captcha/default.phtml @@ -0,0 +1,59 @@ +<?php +/** + * 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 Mage + * @package Magento_Captcha + * @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) + */ +?> +<?php /* @var $this \Magento\Core\Block\Captcha\DefaultCaptcha */ ?> + +<?php /* @var $captcha \Magento\Core\Model\Captcha\DefaultCaptcha */ ?> +<?php $captcha = $this->getCaptchaModel() ?> +<div class="field captcha required" role="<?php echo $this->getFormId()?>"> + <label for="captcha_<?php echo $this->getFormId() ?>" class="label"><span><?php echo __('Please type the letters below')?></span></label> + <div class="control captcha"> + <input name="<?php echo \Magento\Captcha\Helper\Data::INPUT_NAME_FIELD_VALUE ?>[<?php echo $this->getFormId()?>]" type="text" class="input-text required-entry" data-validate="{required:true}" id="captcha_<?php echo $this->getFormId() ?>" /> + <div class="nested"> + <div class="field captcha no-label" role="<?php echo $this->getFormId()?>" id="captcha-container-<?php echo $this->getFormId()?>"> + <div class="control captcha-image"> + <button type="button" class="action reload captcha-reload" title="<?php echo __('Reload captcha') ?>"><span><?php echo __('Reload captcha') ?></span></button> + <img alt="<?php echo __('Please type the letters below')?>" class="captcha-img" height="<?php echo $this->getImgHeight() ?>" src="<?php echo $captcha->getImgSrc() ?>"/> + <?php if (!$captcha->isCaseSensitive()) :?> + <div class="captcha-note note"> + <?php echo __('<strong>Attention</strong>: Captcha is case sensitive.') ?> + </div> + <?php endif; ?> + </div> + <script type="text/javascript">//<![CDATA[ + (function ($) { + head.js("<?php echo $this->getViewFileUrl('Magento_Captcha::captcha.js') ?>",function() { + $('#captcha-container-<?php echo $this->getFormId()?>').captcha({ + url: '<?php echo $this->getRefreshUrl()?>', + type: '<?php echo $this->getFormId() ?>' + }); + }); + })(jQuery); + //]]></script> + </div> + </div> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Captcha/layout/override/checkout_onepage_index.xml b/app/design/frontend/magento_plushe/Magento_Captcha/layout/override/checkout_onepage_index.xml new file mode 100644 index 00000000000..86dfd2318b8 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Captcha/layout/override/checkout_onepage_index.xml @@ -0,0 +1,60 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceContainer name="form.login.additional.info"> + <block class="Magento\Captcha\Block\Captcha" name="captcha" after="-"> + <action method="setFormId"> + <argument name="formId" xsi:type="string">user_login</argument> + </action> + <action method="setImgWidth"> + <argument name="width" xsi:type="string">230</argument> + </action> + <action method="setImgHeight"> + <argument name="width" xsi:type="string">50</argument> + </action> + </block> + </referenceContainer> + <referenceContainer name="form.billing.additional.info"> + <block class="Magento\Captcha\Block\Captcha" name="captcha.guest.checkout"> + <referenceBlock name="head"> + <block class="Magento\Page\Block\Html\Head\Script" name="magento-captcha-onepage-js"> + <arguments> + <argument name="file" xsi:type="string">Magento_Captcha::onepage.js</argument> + </arguments> + </block> + </referenceBlock> + <action method="setFormId"> + <argument name="formId" xsi:type="string">guest_checkout</argument> + </action> + <action method="setImgWidth"> + <argument name="width" xsi:type="string">230</argument> + </action> + <action method="setImgHeight"> + <argument name="width" xsi:type="string">50</argument> + </action> + </block> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Captcha/layout/override/customer_account_create.xml b/app/design/frontend/magento_plushe/Magento_Captcha/layout/override/customer_account_create.xml new file mode 100644 index 00000000000..8a497d5df2d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Captcha/layout/override/customer_account_create.xml @@ -0,0 +1,40 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceContainer name="form.additional.info"> + <block class="Magento\Captcha\Block\Captcha" name="captcha" after="-"> + <action method="setFormId"> + <argument name="formId" xsi:type="string">user_create</argument> + </action> + <action method="setImgWidth"> + <argument name="width" xsi:type="string">230</argument> + </action> + <action method="setImgHeight"> + <argument name="width" xsi:type="string">50</argument> + </action> + </block> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Captcha/layout/override/customer_account_forgotpassword.xml b/app/design/frontend/magento_plushe/Magento_Captcha/layout/override/customer_account_forgotpassword.xml new file mode 100644 index 00000000000..c61719c3ff9 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Captcha/layout/override/customer_account_forgotpassword.xml @@ -0,0 +1,40 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceContainer name="form.additional.info"> + <block class="Magento\Captcha\Block\Captcha" name="captcha" after="-"> + <action method="setFormId"> + <argument name="formId" xsi:type="string">user_forgotpassword</argument> + </action> + <action method="setImgWidth"> + <argument name="width" xsi:type="string">230</argument> + </action> + <action method="setImgHeight"> + <argument name="width" xsi:type="string">50</argument> + </action> + </block> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Captcha/layout/override/customer_account_login.xml b/app/design/frontend/magento_plushe/Magento_Captcha/layout/override/customer_account_login.xml new file mode 100644 index 00000000000..95dff1a4b3f --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Captcha/layout/override/customer_account_login.xml @@ -0,0 +1,40 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceContainer name="form.additional.info"> + <block class="Magento\Captcha\Block\Captcha" name="captcha" after="-"> + <action method="setFormId"> + <argument name="formId" xsi:type="string">user_login</argument> + </action> + <action method="setImgWidth"> + <argument name="width" xsi:type="string">230</argument> + </action> + <action method="setImgHeight"> + <argument name="width" xsi:type="string">50</argument> + </action> + </block> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Captcha/onepage.js b/app/design/frontend/magento_plushe/Magento_Captcha/onepage.js new file mode 100644 index 00000000000..42e01875c09 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Captcha/onepage.js @@ -0,0 +1,40 @@ +/** + * 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 mage + * @package captcha + * @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) + */ +/*jshint browser:true jquery:true*/ +(function($, window, document, undefined) { + "use strict"; + + $(document).on("login:setMethod", function() { + $("[role='guest_checkout'], [role='register_during_checkout']").hide(); + var type = ($("#login\\:guest").is(':checked')) ? 'guest_checkout' : 'register_during_checkout'; + $("[role='" + type + "']").show(); + }); + + $(document).on('billing-request:completed', function() { + if (typeof window.checkout !== 'undefined') { + $(".captcha-reload:visible").trigger("click"); + } + }); +})(jQuery, window, document); \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/category/title.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/category/title.phtml new file mode 100644 index 00000000000..ac3fc02f0b8 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/category/title.phtml @@ -0,0 +1,42 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Category title template + * + * @see \Magento\Catalog\Block\Category\View + */ +?> +<?php + $_helper = $this->helper('Magento\Catalog\Helper\Output'); + $_category = $this->getCurrentCategory(); +?> +<hgroup class="page category title yyy"> + <h1 class="title"><?php echo $_helper->categoryAttribute($_category, $this->getCurrentCategory()->getName(), 'name') ?></h1> + <?php if($this->IsRssCatalogEnable()): ?> + <a href="<?php echo $this->getRssLink() ?>" title="<?php echo __('Subscribe to RSS Feed') ?>" class="action rss"><?php echo __('Subscribe to RSS Feed') ?></a> + <?php endif; ?> +</hgroup> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/category/view.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/category/view.phtml new file mode 100644 index 00000000000..4d40df3d1f6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/category/view.phtml @@ -0,0 +1,63 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Category view template + * + * @see \Magento\Catalog\Block\Category\View + */ +?> +<?php + $_helper = $this->helper('Magento\Catalog\Helper\Output'); + $_category = $this->getCurrentCategory(); + $_imgHtml = ''; + if ($_imgUrl = $_category->getImageUrl()) { + $_imgHtml = '<p class="category-image"><img src="'.$_imgUrl.'" alt="'.$this->escapeHtml($_category->getName()).'" title="'.$this->escapeHtml($_category->getName()).'" /></p>'; + $_imgHtml = $_helper->categoryAttribute($_category, $_imgHtml, 'image'); + } +?> +<div class="category-view"> + <?php if($_imgUrl): ?> + <?php echo $_imgHtml ?> + <?php endif; ?> + + <?php if($_description=$this->getCurrentCategory()->getDescription()): ?> + <div class="category description std"> + <?php echo $_helper->categoryAttribute($_category, $_description, 'description') ?> + </div> + <?php endif; ?> + + <?php if($this->isContentMode()): ?> + <?php echo $this->getCmsBlockHtml() ?> + + <?php elseif($this->isMixedMode()): ?> + <?php echo $this->getCmsBlockHtml() ?> + <?php echo $this->getProductListHtml() ?> + + <?php else: ?> + <?php echo $this->getProductListHtml() ?> + <?php endif; ?> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/category/widget/link/link_block.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/category/widget/link/link_block.phtml new file mode 100644 index 00000000000..f57a72063c9 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/category/widget/link/link_block.phtml @@ -0,0 +1,26 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="widget category link"><a <?php echo $this->getLinkAttributes() ?>><span><?php echo $this->escapeHtml($this->getAnchorText()) ?></span></a></div> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/category/widget/link/link_inline.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/category/widget/link/link_inline.phtml new file mode 100644 index 00000000000..4d36857a851 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/category/widget/link/link_inline.phtml @@ -0,0 +1,26 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<span class="widget category link"><a <?php echo $this->getLinkAttributes() ?>><span><?php echo $this->escapeHtml($this->getAnchorText()) ?></span></a></span> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/js/list.js b/app/design/frontend/magento_plushe/Magento_Catalog/js/list.js new file mode 100644 index 00000000000..1ed2bc05207 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/js/list.js @@ -0,0 +1,74 @@ +/** + * 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 mage compare list + * @package mage + * @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) + */ +/*jshint browser:true jquery:true*/ +(function ($, window) { + $.widget('mage.compareList', { + _create: function() { + + var elem = this.element, + products = $('thead td', elem); + + if (products.length > this.options.productsInRow) { + var headings = $('<table/>') + .addClass('comparison headings data table') + .insertBefore(elem.closest('.container')); + elem.addClass('scroll'); + + $('th', elem).each(function(){ + var th = $(this), + thCopy = th.clone(); + + th.animate({ + top: '+=0' + }, 50, function(){ + var height; + if ($.browser.mozilla && $.browser.version <= '11.0') { + height = th.outerHeight(); + } + else { + height = th.height(); + } + thCopy.css('height', height) + .appendTo(headings) + .wrap('<tr />'); + }); + }); + } + + $(this.options.windowPrintSelector).on('click', function(e) { + e.preventDefault(); + window.print(); + }); + + $.each(this.options.selectors, function(i, selector) { + $(selector).on('click', function(e) { + e.preventDefault(); + window.location.href = $(this).data('url'); + }); + }); + + } + }); +})(jQuery, window); \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layer/filter.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/layer/filter.phtml new file mode 100644 index 00000000000..4a504db5622 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layer/filter.phtml @@ -0,0 +1,46 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Template for filter items block + * + * @see \Magento\Catalog\Block\Layer\Filter + */ +?> + +<ol class="items"> +<?php foreach ($this->getItems() as $_item): ?> + <li class="item"> + <?php if ($_item->getCount() > 0): ?> + <a href="<?php echo $this->escapeUrl($_item->getUrl()) ?>"><?php echo $_item->getLabel() ?></a> + <?php else: echo $_item->getLabel() ?> + <?php endif; ?> + <?php if ($this->shouldDisplayProductCount()): ?> + <span class="count"><?php echo $_item->getCount() ?></span> + <?php endif; ?> + </li> +<?php endforeach ?> +</ol> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layer/state.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/layer/state.phtml new file mode 100644 index 00000000000..5a896c8ce71 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layer/state.phtml @@ -0,0 +1,61 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Category layered navigation state + * + * @see \Magento\Catalog\Block\Layer\State + */ +?> +<?php $_filters = $this->getActiveFilters() ?> +<?php if(!empty($_filters)): ?> +<div class="filtered"> + <strong class="subtitle"><?php echo __('Currently Shopping by:') ?></strong> + <ol class="items"> + <?php foreach ($_filters as $_filter): ?> + <li class="item"> + <span class="label"><?php echo __($_filter->getName()) ?>:</span> + <span class="value"><?php echo $this->stripTags($_filter->getLabel()) ?></span> + <?php + $clearLinkUrl = $_filter->getClearLinkUrl(); + if ($clearLinkUrl): + ?> + <a class="action previous" href="<?php echo $_filter->getRemoveUrl() ?>" title="<?php echo __('Previous') ?>"> + <span><?php echo __('Previous') ?></span> + </a> + <a class="action remove" title="<?php echo $this->escapeHtml($_filter->getFilter()->getClearLinkText()) ?>" href="<?php echo $clearLinkUrl ?>"> + <span><?php echo $this->escapeHtml($_filter->getFilter()->getClearLinkText()) ?></span> + </a> + <?php else: ?> + <a class="action remove" href="<?php echo $_filter->getRemoveUrl() ?>" title="<?php echo __('Remove This Item') ?>"> + <span><?php echo __('Remove This Item') ?></span> + </a> + <?php endif; ?> + </li> + <?php endforeach; ?> + </ol> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layer/view.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/layer/view.phtml new file mode 100644 index 00000000000..6216489ee8b --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layer/view.phtml @@ -0,0 +1,57 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Category layered navigation + * + * @deprecated since 1.12.0.0 + */ +?> +<?php if($this->canShowBlock()): ?> +<div class="block filter"> + <div class="title"> + <strong><?php echo __('Shop By') ?></strong> + </div> + <div class="content"> + <?php echo $this->getStateHtml() ?> + <?php if ($this->getLayer()->getState()->getFilters()): ?> + <div class="actions"> + <a href="<?php echo $this->getClearUrl() ?>" class="action reset"><?php echo __('Clear All') ?></a> + </div> + <?php endif; ?> + <strong class="subtitle"><?php echo __('Shopping Options') ?></strong> + <dl class="options" id="narrow-by-list"> + <?php $_filters = $this->getFilters() ?> + <?php foreach ($_filters as $_filter): ?> + <?php if($_filter->getItemsCount()): ?> + <dt><?php echo __($_filter->getName()) ?></dt> + <dd><?php echo $_filter->getHtml() ?></dd> + <?php endif; ?> + <?php endforeach; ?> + </dl> + </div> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layout/catalog_category_view.xml b/app/design/frontend/magento_plushe/Magento_Catalog/layout/catalog_category_view.xml new file mode 100644 index 00000000000..204dba582da --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layout/catalog_category_view.xml @@ -0,0 +1,35 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="product_list"> + <arguments> + <!-- If position of argument is depend on image size changable in VDE: + positions:list-secondary,grid-secondary,list-actions,grid-actions,list-primary,grid-primary< + --> + <argument name="positioned" xsi:type="string">positions:list-secondary</argument> + </arguments> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layout/catalog_product_compare_index.xml b/app/design/frontend/magento_plushe/Magento_Catalog/layout/catalog_product_compare_index.xml new file mode 100644 index 00000000000..b40295454ee --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layout/catalog_product_compare_index.xml @@ -0,0 +1,33 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <update handle="page_one_column"/> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="page_title" xsi:type="string">Compare Products</argument> + </action> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layout/catalog_product_view.xml b/app/design/frontend/magento_plushe/Magento_Catalog/layout/catalog_product_view.xml new file mode 100644 index 00000000000..16e0c3b2030 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layout/catalog_product_view.xml @@ -0,0 +1,40 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="product.info.overview"> + <arguments> + <argument name="at_label" xsi:type="string">none</argument> + <argument name="title" translate="true" xsi:type="string">Overview</argument> + </arguments> + <action method="addToParentGroup"> + <argument name="group" xsi:type="string">detailed_info</argument> + </action> + </referenceBlock> + <move element="product.info" destination="product.info.main" after="product.tierprices"/> + <move element="page.main.title" destination="product.info.main" before="-"/> + <!-- <remove name="product.info.sku"/> --> + <move element="product.info.overview" destination="product.info.details" before="-" as="product_overview"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layout/catalog_product_view_type_grouped.xml b/app/design/frontend/magento_plushe/Magento_Catalog/layout/catalog_product_view_type_grouped.xml new file mode 100644 index 00000000000..6ee5a363ead --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layout/catalog_product_view_type_grouped.xml @@ -0,0 +1,27 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> +</layout> diff --git a/app/code/Magento/PageCache/etc/di.xml b/app/design/frontend/magento_plushe/Magento_Catalog/layout/default.xml similarity index 67% rename from app/code/Magento/PageCache/etc/di.xml rename to app/design/frontend/magento_plushe/Magento_Catalog/layout/default.xml index 8de7f62d82f..6268243ca28 100644 --- a/app/code/Magento/PageCache/etc/di.xml +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layout/default.xml @@ -23,19 +23,9 @@ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ --> -<config> - <type name="Magento\PageCache\Helper\Data"> - <param name="cacheControls"> - <value> - <zendPageCache> - <class> - \Magento\PageCache\Model\Control\Zend - </class> - <label> - Zend Full Page Cache - </label> - </zendPageCache> - </value> - </param> - </type> -</config> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <!-- <block class="Magento\Catalog\Block\Product\Compare\Sidebar" name="catalog.compare.link" template="Magento_Catalog::product/compare/link.phtml"/> --> + <referenceBlock name="header.links"> + <block class="Magento\Core\Block\Template" name="catalog.compare.link" before="-" template="Magento_Catalog::product/compare/link.phtml"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_category_view.xml b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_category_view.xml new file mode 100644 index 00000000000..34ec89d16c3 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_category_view.xml @@ -0,0 +1,92 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Catalog Category" type="page" parent="default"> + <referenceBlock name="root"> + <action method="setTemplate"> + <argument name="template" xsi:type="string">2columns-left.phtml</argument> + </action> + </referenceBlock> + <referenceContainer name="content"> + <block class="Magento\Catalog\Block\Category\View" name="category.products" template="category/view.phtml"> + <block class="Magento\Catalog\Block\Product\ListProduct" name="product_list" template="product/list.phtml"> + <block class="Magento\Catalog\Block\Product\ProductList\Toolbar" name="product_list_toolbar" template="product/list/toolbar.phtml"> + <block class="Magento\Page\Block\Html\Pager" name="product_list_toolbar_pager"/> + <!-- The following code shows how to set your own pager increments --> + <!-- + <action method="setDefaultListPerPage"> + <argument name="limit" xsi:type="string">4</argument> + </action> + <action method="setDefaultGridPerPage"> + <argument name="limit" xsi:type="string">3</argument> + </action> + <action method="addPagerLimit"> + <argument name="mode" xsi:type="string">list</argument> + <argument name="limit" xsi:type="string">2</argument> + </action> + <action method="addPagerLimit"> + <argument name="mode" xsi:type="string">list</argument> + <argument name="limit" xsi:type="string">4</argument> + </action> + <action method="addPagerLimit"> + <argument name="mode" xsi:type="string">list</argument> + <argument name="limit" xsi:type="string">6</argument> + </action> + <action method="addPagerLimit"> + <argument name="mode" xsi:type="string">list</argument> + <argument name="limit" xsi:type="string">8</argument> + </action> + <action method="addPagerLimit" translate="label"> + <argument name="mode" xsi:type="string">list</argument> + <argument name="limit" xsi:type="string">all</argument> + <argument name="label" xsi:type="string">All</argument> + </action> + <action method="addPagerLimit"> + <argument name="mode" xsi:type="string">grid</argument> + <argument name="limit" xsi:type="string">3</argument> + </action> + <action method="addPagerLimit"> + <argument name="mode" xsi:type="string">grid</argument> + <argument name="limit" xsi:type="string">6</argument> + </action> + <action method="addPagerLimit"> + <argument name="mode" xsi:type="string">grid</argument> + <argument name="limit" xsi:type="string">9</argument> + </action> + <action method="addPagerLimit" translate="label"> + <argument name="mode" xsi:type="string">grid</argument> + <argument name="limit" xsi:type="string">all</argument> + <argument name="label" xsi:type="string">All</argument> + </action> + --> + </block> + <action method="setToolbarBlockName"> + <argument name="name" xsi:type="string">product_list_toolbar</argument> + </action> + </block> + </block> + </referenceContainer> + <update handle="MAP_popup"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_category_view_type_default.xml b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_category_view_type_default.xml new file mode 100644 index 00000000000..fd6d078f24f --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_category_view_type_default.xml @@ -0,0 +1,30 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Non Anchor Catalog Category" type="page" parent="catalog_category_view"> + <referenceContainer name="left"> + <block class="Magento\Catalog\Block\Navigation" name="catalog.leftnav" before="-" template="navigation/left.phtml"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_category_view_type_layered.xml b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_category_view_type_layered.xml new file mode 100644 index 00000000000..288770e392f --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_category_view_type_layered.xml @@ -0,0 +1,30 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Anchor Catalog Category" type="page" parent="catalog_category_view"> + <referenceContainer name="left"> + <block class="Magento\Catalog\Block\Layer\View" name="catalog.leftnav" before="-" template="layer/view.phtml"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_compare_index.xml b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_compare_index.xml new file mode 100644 index 00000000000..3a704346d3d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_compare_index.xml @@ -0,0 +1,31 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Catalog Product Compare List" type="page" parent="default"> + <referenceContainer name="content"> + <block class="Magento\Catalog\Block\Product\Compare\ListCompare" name="catalog.compare.list" template="product/compare/list.phtml"/> + </referenceContainer> + <update handle="MAP_popup"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view.xml b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view.xml new file mode 100644 index 00000000000..508164ddc25 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view.xml @@ -0,0 +1,145 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Catalog Product View (Any)" type="page" parent="default"> + <referenceBlock name="root"> + <action method="setTemplate"> + <argument name="template" xsi:type="string">1column.phtml</argument> + </action> + </referenceBlock> + <referenceBlock name="page.main.title"> + <arguments> + <argument name="css_class" xsi:type="string">product</argument> + </arguments> + </referenceBlock> + <referenceBlock name="head"> + <block class="Magento\Page\Block\Html\Head\Script" name="mage-zoom-js"> + <arguments> + <argument name="file" xsi:type="string">mage/zoom.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Css" name="mage-gallery-css"> + <arguments> + <argument name="file" xsi:type="string">mage/gallery.css</argument> + </arguments> + </block> + </referenceBlock> + <update handle="page_calendar"/> + <block class="Magento\Catalog\Block\Product\View" name="product.info" template="product/view/form.phtml"> + <container name="product.info.form.content" label="invisible" as="product_info_form_content"> + <block class="Magento\Catalog\Block\Product\View" name="product.info.addtocart" as="addtocart" template="product/view/addtocart.phtml"/> + </container> + <block class="Magento\Core\Block\Template" name="product.info.form.options" as="options_container"> + <block class="Magento\Catalog\Block\Product\View" name="product.info.options.wrapper" as="product_options_wrapper" template="product/view/options/wrapper.phtml"> + <block class="Magento\Catalog\Block\Product\View\Options" name="product.info.options" as="product_options" template="product/view/options.phtml"> + <block class="Magento\Catalog\Block\Product\View\Options\Type\DefaultType" as="default" template="product/view/options/type/default.phtml"/> + <block class="Magento\Catalog\Block\Product\View\Options\Type\Text" as="text" template="product/view/options/type/text.phtml"/> + <block class="Magento\Catalog\Block\Product\View\Options\Type\File" as="file" template="product/view/options/type/file.phtml"/> + <block class="Magento\Catalog\Block\Product\View\Options\Type\Select" as="select" template="product/view/options/type/select.phtml"/> + <block class="Magento\Catalog\Block\Product\View\Options\Type\Date" as="date" template="product/view/options/type/date.phtml"/> + </block> + <block class="Magento\Core\Block\Html\Calendar" name="html_calendar" as="html_calendar" template="Magento_Page::js/calendar.phtml"/> + </block> + <block class="Magento\Catalog\Block\Product\View" name="product.info.options.wrapper.bottom" as="product_options_wrapper_bottom" template="product/view/options/wrapper/bottom.phtml"> + <block class="Magento\Catalog\Block\Product\View" name="product.info.addtocart.additional" as="product.info.addtocart" template="product/view/addtocart.phtml"/> + <block class="Magento\Catalog\Block\Product\View" name="product.clone_prices" as="prices" template="product/view/price_clone.phtml"/> + </block> + </block> + </block> + <referenceContainer name="content"> + <container name="product.info.main" label="invisible" htmlTag="div" htmlClass="product info main" before="-"> + <block class="Magento\Catalog\Block\Product\View" name="product.price" template="product/view/price.phtml"/> + <block class="Magento\Catalog\Block\Product\View\Description" name="product.info.sku" template="product/view/attribute.phtml"> + <arguments> + <argument name="at_call" xsi:type="string">getSku</argument> + <argument name="at_code" xsi:type="string">sku</argument> + <argument name="css_class" xsi:type="string">sku</argument> + <argument name="at_label" xsi:type="string">default</argument> + </arguments> + </block> + <block class="Magento\Catalog\Block\Product\View" name="product.info.rating" template="product/view/rating.phtml"/> + <block class="Magento\Catalog\Block\Product\View\Description" name="product.info.overview" template="product/view/attribute.phtml"> + <arguments> + <argument name="at_call" xsi:type="string">getShortDescription</argument> + <argument name="at_code" xsi:type="string">short_description</argument> + <argument name="css_class" xsi:type="string">overview</argument> + <argument name="at_label" translate="true" xsi:type="string">Overview</argument> + <argument name="title" translate="true" xsi:type="string">Details</argument> + </arguments> + </block> + <container name="alert.urls" as="alert_urls" label="Alert Urls"/> + <container name="product.info.type" label="invisible"/> + <block class="Magento\Catalog\Block\Product\View" name="product.tierprices" as="tierprices" template="product/view/tierprices.phtml"/> + <container name="product.info.extrahint" as="extrahint" label="Product View Extra Hint"/> + <block class="Magento\Catalog\Block\Product\View" name="product.info.addto" as="addto" template="product/view/addto.phtml"/> + <container name="product.info.social" label="Product social links container" htmlTag="div" htmlClass="social links product"> + <block class="Magento\Catalog\Block\Product\View" name="product.info.mailto" template="product/view/mailto.phtml"/> + </container> + </container> + <container name="product.info.media" label="invisible" htmlTag="div" htmlClass="product media" after="product.info.main"> + <block class="Magento\Catalog\Block\Product\View\Gallery" name="product.info.media.image" template="product/view/base-image.phtml"> + <block class="Magento\Catalog\Block\Product\Image" name="product.image.main"/> + <block class="Magento\Catalog\Block\Product\Image" name="product.image.thumbs"/> + </block> + </container> + <block class="Magento\Catalog\Block\Product\View\Description" name="product.info.details" template="product/view/details.phtml"> + <block class="Magento\Catalog\Block\Product\View\Description" name="product.info.description" template="product/view/attribute.phtml"> + <arguments> + <argument name="at_call" xsi:type="string">getDescription</argument> + <argument name="at_code" xsi:type="string">description</argument> + <argument name="css_class" xsi:type="string">description</argument> + <argument name="at_label" xsi:type="string">none</argument> + <argument name="title" translate="true" xsi:type="string">Details</argument> + </arguments> + <action method="addToParentGroup"> + <argument name="group" xsi:type="string">detailed_info</argument> + </action> + </block> + <block class="Magento\Catalog\Block\Product\View\Attributes" name="product.attributes" as="additional" template="product/view/attributes.phtml"> + <arguments> + <argument translate="true" name="title" xsi:type="string">Additional Information</argument> + </arguments> + <action method="addToParentGroup"> + <argument name="group" xsi:type="string">detailed_info</argument> + </action> + </block> + </block> + </referenceContainer> + <referenceContainer name="content.aside"> + <block class="Magento\Catalog\Block\Product\ProductList\Related" name="catalog.product.related" template="Magento_Catalog::product/list/items.phtml"> + <arguments> + <argument name="type" xsi:type="string">related</argument> + </arguments> + </block> + <block class="Magento\Catalog\Block\Product\ProductList\Upsell" name="product.info.upsell" template="Magento_Catalog::product/list/items.phtml"> + <arguments> + <argument name="type" xsi:type="string">upsell</argument> + </arguments> + </block> + <block class="Magento\Catalog\Block\Product\View\Additional" name="product.info.additional" as="product_additional_data"/> + </referenceContainer> + <update handle="MAP_popup"/> + <update handle="MAP_price_msrp_item"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view_type_configurable.xml b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view_type_configurable.xml new file mode 100644 index 00000000000..c17f71b4eb1 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view_type_configurable.xml @@ -0,0 +1,39 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Catalog Product View (Configurable)" type="page" parent="catalog_product_view"> + <referenceBlock name="root"> + <action method="addBodyClass"> + <argument name="value" xsi:type="string">type-configurable</argument> + </action> + </referenceBlock> + <referenceContainer name="product.info.type"> + <block class="Magento\Catalog\Block\Product\View\Type\Configurable" name="product.info.configurable" as="product_type_data" template="product/view/type/default.phtml"/> + <container name="product.info.configurable.extra" after="product.info.configurable" as="product_type_data_extra" label="Product Extra Info"/> + </referenceContainer> + <referenceBlock name="product.info.options.wrapper"> + <block class="Magento\Catalog\Block\Product\View\Type\Configurable" name="product.info.options.configurable" as="options_configurable" before="-" template="product/view/type/options/configurable.phtml"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view_type_grouped.xml b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view_type_grouped.xml new file mode 100644 index 00000000000..c72de82bdac --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view_type_grouped.xml @@ -0,0 +1,31 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Catalog Product View (Grouped)" type="page" parent="catalog_product_view"> + <referenceContainer name="product.info.form.content"> + <block class="Magento\Catalog\Block\Product\View\Type\Grouped" name="product.info.grouped" before="product.info.addtocart" template="product/view/type/grouped.phtml"/> + <container name="product.info.grouped.extra" after="product.info.grouped" before="product.info.grouped" as="product_type_data_extra" label="Product Extra Info"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view_type_simple.xml b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view_type_simple.xml new file mode 100644 index 00000000000..7ed2cfd9131 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view_type_simple.xml @@ -0,0 +1,31 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Catalog Product View (Simple)" type="page" parent="catalog_product_view"> + <referenceContainer name="product.info.type"> + <block class="Magento\Catalog\Block\Product\View\Type\Simple" name="product.info.simple" as="product_type_data" template="product/view/type/default.phtml"/> + <container name="product.info.simple.extra" after="product.info.simple" as="product_type_data_extra" label="Product Extra Info"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view_type_virtual.xml b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view_type_virtual.xml new file mode 100644 index 00000000000..29c391803b6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/catalog_product_view_type_virtual.xml @@ -0,0 +1,31 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Catalog Product View (Virtual)" type="page" parent="catalog_product_view"> + <referenceContainer name="product.info.type"> + <block class="Magento\Catalog\Block\Product\View\Type\Virtual" name="product.info.virtual" as="product_type_data" template="product/view/type/default.phtml"/> + <container name="product.info.virtual.extra" after="product.info.virtual" as="product_type_data_extra" label="Product Extra Info"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/default.xml b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/default.xml new file mode 100644 index 00000000000..c22c8528c0d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/layout/override/default.xml @@ -0,0 +1,48 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceContainer name="right"> + <block class="Magento\Catalog\Block\Product\Compare\Sidebar" name="catalog.compare.sidebar" template="product/compare/sidebar.phtml"/> + </referenceContainer> + <block class="Magento\Catalog\Block\Product\Price\Template" name="catalog_product_price_template"/> + <referenceBlock name="catalog_product_price_template"> + <action method="addPriceBlockType"> + <argument name="type" xsi:type="string">msrp</argument> + <argument name="block" xsi:type="string">Magento\Catalog\Block\Product\Price</argument> + <argument name="template" xsi:type="string">product/price_msrp.phtml</argument> + </action> + <action method="addPriceBlockType"> + <argument name="type" xsi:type="string">msrp_item</argument> + <argument name="block" xsi:type="string">Magento\Catalog\Block\Product\Price</argument> + <argument name="template" xsi:type="string">product/price_msrp_item.phtml</argument> + </action> + <action method="addPriceBlockType"> + <argument name="type" xsi:type="string">msrp_noform</argument> + <argument name="block" xsi:type="string">Magento\Catalog\Block\Product\Price</argument> + <argument name="template" xsi:type="string">product/price_msrp_noform.phtml</argument> + </action> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/navigation/left.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/navigation/left.phtml new file mode 100644 index 00000000000..200d38687e6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/navigation/left.phtml @@ -0,0 +1,59 @@ +<?php +/** + * 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 design + * @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) + */ + +/** + * Category left navigation + * + * @see \Magento\Catalog\Block\Navigation + */ +?> +<?php if (!$this->getCategory()) return ?> +<?php $_categories = $this->getCurrentChildCategories() ?> +<?php $_count = is_array($_categories)?count($_categories):$_categories->count(); ?> +<?php if($_count): ?> +<div class="block filter"> + <div class="title"> + <strong><?php echo __('Shop By') ?></strong> + </div> + <div class="content"> + <strong class="subtitle"><?php echo __('Shopping Options') ?></strong> + <dl class="options" id="narrow-by-list2"> + <dt><?php echo __('Category') ?></dt> + <dd> + <ol class="items"> + <?php foreach ($_categories as $_category): ?> + <?php if($_category->getIsActive()): ?> + <li class="item"> + <a href="<?php echo $this->getCategoryUrl($_category) ?>"<?php if ($this->isCategoryActive($_category)): ?> class="current"<?php endif; ?>><?php echo $this->escapeHtml($_category->getName()) ?></a> + <span class="count"><?php echo $_category->getProductCount() ?></span> + </li> + <?php endif; ?> + <?php endforeach ?> + </ol> + </dd> + </dl> + </div> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/compare/link.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/compare/link.phtml new file mode 100644 index 00000000000..288e5ce1f9a --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/compare/link.phtml @@ -0,0 +1,39 @@ +<?php +/** + * 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 design + * @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) + */ +/* @var $this \Magento\Catalog\Block\Product\Compare\Sidebar */ +?> +<?php +$_helper = $this->helper('Magento\Catalog\Helper\Product\Compare'); +$_items = $_helper->getItemCount() > 0 ? $_helper->getItemCollection() : null; +?> +<?php if($_helper->getItemCount() > 0): ?> + <li class="item link compare"> + <a class="action compare" href="<?php echo $_helper->getListUrl() ?>" title="<?php echo __('Compare Products') ?>"> + <span> + <?php echo __('Compare Products') ?><span class="qty"><?php echo __('%1', $_helper->getItemCount()) ?></span> + </span> + </a> + </li> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/compare/list.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/compare/list.phtml new file mode 100644 index 00000000000..f959e3087b4 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/compare/list.phtml @@ -0,0 +1,150 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_total=$this->getItems()->getSize() ?> +<?php if($_total): ?> +<a href="#" class="action print" title="<?php echo __('Print This Page') ?>"> + <span><?php echo __('Print This Page') ?></span> +</a> +<?php $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); ?> +<div class="comparison wrapper"> +<div class="comparison container"> + <table class="data-table data table comparison" id="product-comparison"> + <thead> + <tr> + <?php $_i=0 ?> + <?php foreach($this->getItems() as $_item): ?> + <?php if($_i++==0): ?> + <th class="cell label remove"> </th> + <?php endif; ?> + <td class="cell remove product"> + <a href="<?php echo $this->helper('Magento\Catalog\Helper\Product\Compare')->getRemoveUrl($_item) ?>" class="action delete" title="<?php echo __('Remove Product') ?>"> + <span><?php echo __('Remove Product') ?></span> + </a> + </td> + <?php endforeach; ?> + </tr> + </thead> + <tbody> + <tr> + <?php $_i = 0; ?> + <?php $_helper = $this->helper('Magento\Catalog\Helper\Output'); ?> + <?php foreach($this->getItems() as $_item): ?> + <?php if($_i++==0): ?> + <th class="cell label product"> </th> + <?php endif; ?> + <td class="cell product info"> + <a class="product photo" href="<?php echo $this->getProductUrl($_item) ?>" title="<?php echo $this->stripTags($_item->getName(), null, true) ?>"> + <!-- product_comparison_list --> + <?php echo $imageBlock->init($_item, 'product_comparison_list')->toHtml() ?> + </a> + <strong class="product name"> + <a href="<?php echo $this->getProductUrl($_item) ?>" title="<?php echo $this->stripTags($_item->getName(), null, true) ?>"> + <?php echo $_helper->productAttribute($_item, $_item->getName(), 'name') ?> + </a> + </strong> + <?php echo $this->getReviewsSummaryHtml($_item, 'short') ?> + <?php echo $this->getPriceHtml($_item, true, '-compare-list-top') ?> + <div class="product actions"> + <div class="primary"> + <?php if($_item->isSaleable()): ?> + <button type="button" class="action tocart" data-url="<?php echo $this->helper('Magento\Catalog\Helper\Product\Compare')->getAddToCartUrl($_item) ?>"> + <span><?php echo __('Add to Cart') ?></span> + </button> + <?php else: ?> + <?php if ($_item->getIsSalable()): ?> + <p class="stock available"><span><?php echo __('In stock') ?></span></p> + <?php else: ?> + <p class="stock unavailable"><span><?php echo __('Out of stock') ?></span></p> + <?php endif; ?> + <?php endif; ?> + </div> + <?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllow()) : ?> + <div class="secondary addto links"> + <a href="<?php echo $this->helper('Magento\Catalog\Helper\Product\Compare')->getAddToWishlistUrl($_item) ?>" class="action towishlist" data-action="add-to-wishlist"> + <span><?php echo __('Add to Wishlist') ?></span> + </a> + </div> + <?php endif; ?> + </div> + </td> + <?php endforeach; ?> + </tr> + </tbody> + <tbody> + <?php foreach ($this->getAttributes() as $_attribute): ?> + <tr> + <?php $_i = 0 ?> + <?php foreach($this->getItems() as $_item): ?> + <?php if($_i++==0): ?> + <th class="cell label"> + <span class="attribute label"> + <?php echo $_attribute->getStoreLabel() ? $_attribute->getStoreLabel() : __($_attribute->getFrontendLabel()) ?> + </span> + </th> + <?php endif; ?> + <td class="cell product attribute"> + <div class="attibute value"> + <?php switch ($_attribute->getAttributeCode()) { + case "price": ?> + <?php echo $this->getPriceHtml($_item, true, '-compare-list-' . $_attribute->getCode()) ?> + <?php break; + case "small_image": ?> + <img src="<?php echo $this->getSmallImageUrl($_item); ?>" width="<?php echo $this->getSmallImageSize()?>" height="<?php echo $this->getSmallImageSize()?>" alt="<?php echo $this->stripTags($_item->getName(), null, true) ?>" /> + <?php break; + default: ?> + <?php echo $_helper->productAttribute($_item, $this->getProductAttributeValue($_item, $_attribute), $_attribute->getAttributeCode()) ?> + <?php break; + } ?> + </div> + </td> + <?php endforeach; ?> + </tr> + <?php endforeach; ?> + </tbody> + </table> +</div> +</div> +<?php else: ?> + <p class="empty"><?php echo __('You have no items to compare.') ?></p> +<?php endif; ?> + +<script type="text/javascript"> + (function($, window) { + <?php if ($_total): ?> + head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/list.js')?>", function() { + $('#product-comparison').compareList({ + windowPrintSelector: '.action.print', + productsInRow: 5, + selectors: { + productAddToCartSelector: 'button.action.tocart' + } + }); + }); + <?php endif; ?> + })(jQuery, window); +</script> + + diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/compare/sidebar.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/compare/sidebar.phtml new file mode 100644 index 00000000000..1b873ba6d41 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/compare/sidebar.phtml @@ -0,0 +1,79 @@ +<?php +/** + * 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 design + * @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) + */ +/* @var $this \Magento\Catalog\Block\Product\Compare\Sidebar */ +?> +<?php +$_helper = $this->helper('Magento\Catalog\Helper\Product\Compare'); +$_items = $_helper->getItemCount() > 0 ? $_helper->getItemCollection() : null; +?> +<div class="block compare"> + <div class="title"> + <strong> + <span class="text"><?php echo __('Compare Products') ?></span> + <?php if($_helper->getItemCount() > 0): ?> + <span class="qty"><?php echo __('%1', $_helper->getItemCount()) ?></span> + <?php endif; ?> + </strong> + </div> + <div class="content"> + <?php if($_helper->getItemCount() > 0): ?> + <ol id="compare-items" class="items compare"> + <?php foreach($_items as $_index => $_item): ?> + <li class="item"> + <input type="hidden" class="compare-item-id" value="<?php echo $_item->getId() ?>" /> + <strong class="product name"> + <a href="<?php echo $this->getProductUrl($_item) ?>"><?php echo $this->helper('Magento\Catalog\Helper\Output')->productAttribute($_item, $_item->getName(), 'name') ?></a> + </strong> + <a href="<?php echo $_helper->getRemoveUrl($_item) ?>" title="<?php echo __('Remove This Item') ?>" class="action delete"><span><?php echo __('Remove This Item') ?></span></a> + </li> + <?php endforeach; ?> + </ol> + <div class="actions"> + <div class="primary"> + <a href="<?php echo $_helper->getListUrl() ?>" class="action compare"><span><?php echo __('Compare') ?></span></a> + </div> + <div class="secondary"> + <a id='compare-clear-all' href="<?php echo $_helper->getClearListUrl() ?>" class="action clear"><span><?php echo __('Clear All') ?></span></a> + </div> + </div> + <script type="text/javascript"> + (function($) { + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.popupwindow.js') ?>", + "<?php echo $this->getViewFileUrl('mage/popup-window.js') ?>", + "<?php echo $this->getViewFileUrl('Magento_Catalog::js/compare.js') ?>", function() { + $('#compare-items').compareItems({ + removeConfirmMessage: '<?php echo __('Are you sure you would like to remove this item from the compare products?') ?>', + removeSelector: '#compare-items a.action.delete', + clearAllConfirmMessage: '<?php echo __('Are you sure you would like to remove all products from your comparison?') ?>', + clearAllSelector: '#compare-clear-all' + }); + }); + })(jQuery); + </script> + <?php else: ?> + <p class="empty"><?php echo __('You have no items to compare.') ?></p> + <?php endif; ?> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/image.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/image.phtml new file mode 100644 index 00000000000..363f3e4b4bb --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/image.phtml @@ -0,0 +1,31 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php /** @var $this \Magento\Catalog\Block\Product\Image */ ?> + +<img class="photo image" style="width:<?php echo $this->getProductImageView()->getWidth()?>px; + height:<?php echo $this->getProductImageView()->getHeight()?>px;" + src="<?php echo $this->getProductImageView()->getUrl() ?>" + alt="<?php echo $this->stripTags($this->getProductImageView()->getLabel(), null, true) ?>"/> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/image_with_borders.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/image_with_borders.phtml new file mode 100644 index 00000000000..1aa7f4e151f --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/image_with_borders.phtml @@ -0,0 +1,32 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php /** @var $this \Magento\Catalog\Block\Product\Image */ ?> + +<span class="img photo container" style="width:<?php echo $this->getProductImageView()->getWidth()?>px; + height:<?php echo $this->getProductImageView()->getHeight()?>px; display: block; position: relative; + overflow: hidden"><img class="photo image" style="display: block; position: absolute; top: 0; bottom: 0; left: 0; right: 0; + margin: auto;" src="<?php echo $this->getProductImageView()->getUrl() ?>" + alt="<?php echo $this->stripTags($this->getProductImageView()->getLabel(), null, true) ?>"/></span> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/list.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/list.phtml new file mode 100644 index 00000000000..c5cec832a6e --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/list.phtml @@ -0,0 +1,126 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Product list template + * + * @see \Magento\Catalog\Block\Product\ListProduct + */ +?> +<?php +$_productCollection = $this->getLoadedProductCollection(); +$_helper = $this->helper('Magento\Catalog\Helper\Output'); +$imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); +?> +<?php if (!$_productCollection->count()): ?> +<p class="message note"><?php echo __('There are no products matching the selection.') ?></p> +<?php else: ?> +<?php echo $this->getToolbarHtml() ?> +<?php echo $this->getAdditionalHtml() ?> +<?php if ($this->getMode() == 'grid') { + $viewMode ='grid'; + $image = 'category_page_grid'; + $showDescription = false; + $rating = 'short'; +} else { + $viewMode ='list'; + $image = 'category_page_list'; + $showDescription = true; + $rating = 'full'; +} +/** +* Position for actions regarding image size changing in vde if needed +*/ +$pos = $this->getPositioned(); +$position = ''; +if ($pos != null) { + $position = ' style="left:' . $this->getVar("{$image}:width") . 'px;' + .'top:' . $this->getVar("{$image}:height") . 'px;"'; +} +?> +<div class="products wrapper <?php echo $viewMode; ?>"> + <?php $iterator = 1; ?> + <ol class="products list items"> + <?php foreach ($_productCollection as $_product): ?> + <?php echo ($iterator++==1) ? '<li class="item product">' : '</li><li class="item product">' ?> + <div class="product"> + <?php // Product Image ?> + <a href="<?php echo $_product->getProductUrl() ?>" class="product photo"> + <?php echo $imageBlock->init($_product, $image)->toHtml() ?> + </a> + <div class="product details"> + <?php $_productNameStripped = $this->stripTags($_product->getName(), null, true); ?> + <strong class="product name"> + <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $_productNameStripped; ?>"> + <?php echo $_helper->productAttribute($_product, $_product->getName(), 'name'); ?> + </a> + </strong> + <?php echo $this->getPriceHtml($_product, true) ?> + <?php if ($_product->getRatingSummary()): ?> + <?php echo $this->getReviewsSummaryHtml($_product,$rating) ?> + <?php endif; ?> + <?php if ($showDescription):?> + <div class="product description"> + <?php echo $_helper->productAttribute($_product, $_product->getShortDescription(), 'short_description') ?> + <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $_productNameStripped ?>" + class="action more"><?php echo __('Learn More') ?></a> + </div> + <?php endif; ?> + <div class="product actions"<?php echo strpos($pos, $viewMode . '-actions') ? $position : ''; ?>> + <div class="primary"<?php echo strpos($pos, $viewMode . '-primary') ? $position: ''; ?>> + <?php if ($_product->isSaleable()): ?> + <button type="button" title="<?php echo __('Add to Cart') ?>" class="action tocart" + data-mage-init="{redirectUrl: {url: '<?php echo $this->getAddToCartUrl($_product) ?>'}}"> + <span><?php echo __('Add to Cart') ?></span> + </button> + <?php else: ?> + <?php if ($_product->getIsSalable()): ?> + <p class="stock available"><span><?php echo __('In stock') ?></span></p> + <?php else: ?> + <p class="stock unavailable"><span><?php echo __('Out of stock') ?></span></p> + <?php endif; ?> + <?php endif; ?> + </div> + <div class="secondary"<?php echo strpos($pos, $viewMode . '-secondary') ? $position : ''; ?>> + <a href="<?php echo $this->helper('Magento\Wishlist\Helper\Data')->getAddUrl($_product) ?>" + class="action towishlist" data-action="add-to-wishlist"> + <span><?php echo __('Add to Wishlist') ?></span> + </a> + <a href="<?php echo $this->getAddToCompareUrl($_product) ?>" class="action tocompare"> + <span><?php echo __('Add to Compare') ?></span> + </a> + </div> + </div> + </div> + </div> + <?php echo ($iterator==count($_productCollection)+1) ? '</li>' : '' ?> + <?php endforeach; ?> + </ol> +</div> +<div class="toolbar bottom"> + <?php echo $this->getToolbarHtml() ?> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/list/items.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/list/items.phtml new file mode 100644 index 00000000000..5ff16b20042 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/list/items.phtml @@ -0,0 +1,272 @@ +<?php +/** + * 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 design + * @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) + */ +/* @var $this \Magento\Catalog\Block\Product\AbstractProduct */ +?> + +<?php +switch($type=$this->getType()) { + + case 'related-rule': + if ($exist = $this->hasItems()) { + $type = 'related'; + $class = $type; + + $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); + $image ='related_products_list'; + $title = __('Related Products'); + $items = $this->getItemCollection(); + + $showWishlist = true; + $showCompare = true; + $showCart = false; + $rating = false; + $description = false; + } + break; + + case 'related': + if ($exist = $this->getItems()->getSize()) { + $type = 'related'; + $class = $type; + + $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); + $image ='related_products_list'; + $title = __('Related Products'); + $items = $this->getItems(); + + $showWishlist = true; + $showCompare = true; + $showCart = false; + $rating = false; + $description = false; + } + break; + + case 'upsell-rule': + if ($exist = $this->hasItems()) { + $type = 'upsell'; + $class = $type; + + $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); + $image ='upsell_products_list'; + $title = __('You may also be interested in the following product(s)'); + $items = $this->getItemCollection(); + + $showWishlist = false; + $showCompare = false; + $showCart = false; + $rating = false; + $description = false; + } + break; + + case 'upsell': + if ($exist = count($this->getItemCollection()->getItems())) { + $type = 'upsell'; + $class = $type; + + $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); + $image ='upsell_products_list'; + $title = __('You may also be interested in the following product(s)'); + $items = $this->getItemCollection()->getItems(); + + $showWishlist = false; + $showCompare = false; + $showCart = false; + $rating = false; + $description = false; + } + break; + + case 'crosssell-rule': + if ($exist = $this->hasItems()) { + $type = 'crosssell'; + $class = $type; + + $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); + $image ='cart_cross_sell_products'; + $title = __('More Choices:'); + $items = $this->getItemCollection(); + + $showWishlist = true; + $showCompare = true; + $showCart = true; + $rating = 'short'; + $description = false; + } + break; + + case 'crosssell': + if ($exist = $this->getItemCount()) { + $type = 'crosssell'; + $class = $type; + + $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); + $image ='cart_cross_sell_products'; + $title = __('More Choices:'); + $items = $this->getItems(); + + $showWishlist = true; + $showCompare = true; + $showCart = true; + $rating = 'short'; + $description = false; + } + break; + + case 'widget-viewed': + if ($exist = $this->getRecentlyViewedProducts()) { + + $mode = $this->getViewMode(); + + $type = $type . '-' . $mode; + + $class = 'widget viewed' . ' ' . $mode; + + $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); + $image = $this->getImageType(); + $title = __('Recently Viewed'); + $items = $exist; + + $showWishlist = true; + $showCompare = true; + $showCart = true; + $rating = 'short'; + $description = ($mode == 'list') ? true : false; + } + break; + + case 'other': + break; +} +?> + +<?php if ($exist):?> + +<div class="block <?php echo $class; ?>"> + + <div class="title"> + <strong><?php echo $title; ?></strong> + </div> + + <div class="content"> + + <?php if($type == 'related'): ?> + <div class="actions"> + <?php echo __('Check items to add to the cart or') ?> + <button type="button" class="action select" role="select-all"><span><?php echo __('select all') ?></span></button> + </div> + <?php endif; ?> + + + <ol class="products list items <?php echo $type; ?>"> + <?php $iterator = 1; ?> + <?php foreach($items as $_item): ?> + <?php echo ($iterator++==1) ? '<li class="item product">' : '</li><li class="item product">' ?> + + <div class="product"> + + <?php echo '<!-- ' . $image . '-->' ?> + <a href="<?php echo $this->getProductUrl($_item) ?>" class="product photo"> + <?php echo $imageBlock->init($_item, $image)->toHtml() ?> + </a> + + <div class="product details"> + + <strong class="product name"><a title="<?php echo $this->escapeHtml($_item->getName()) ?>" href="<?php echo $this->getProductUrl($_item) ?>"> + <?php echo $this->escapeHtml($_item->getName()) ?></a> + </strong> + + <?php echo $this->getPriceHtml($_item, true, '-' . $type) ?> + + <?php if ($_item->getRatingSummary() && $rating): ?> + <?php echo $this->getReviewsSummaryHtml($_item,$rating) ?> + <?php endif; ?> + + <?php if(!$_item->isComposite() && $_item->isSaleable() && $type == 'related'): ?> + <?php if (!$_item->getRequiredOptions()): ?> + <div class="field choice related"> + <input type="checkbox" class="checkbox related" id="related-checkbox<?php echo $_item->getId() ?>" name="related_products[]" value="<?php echo $_item->getId() ?>" /> + <label class="label" for="related-checkbox<?php echo $_item->getId() ?>"><span><?php echo __('Add to Cart') ?></span></label> + </div> + <?php endif; ?> + <?php endif; ?> + + <?php if($showWishlist || $showCompare || $showCart): ?> + <div class="product actions"> + + <?php if($showCart): ?> + <div class="primary"> + <?php if($_item->isSaleable()): ?> + <button class="action tocart" data-mage-redirect="{event: 'click', url: '<?php echo $this->getAddToCartUrl($_item) ?>'}" type="button" title="<?php echo __('Add to Cart') ?>"> + <span><?php echo __('Add to Cart') ?></span> + </button> + <?php else: ?> + <?php if ($_item->getIsSalable()): ?> + <p class="stock available"><span><?php echo __('In stock') ?></span></p> + <?php else: ?> + <p class="stock unavailable"><span><?php echo __('Out of stock') ?></span></p> + <?php endif; ?> + <?php endif; ?> + </div> + <?php endif; ?> + + <?php if($showWishlist || $showCompare): ?> + <div class="secondary addto links"> + <?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllow() && $showWishlist): ?> + <a href="<?php echo $this->getAddToWishlistUrl($_item) ?>" class="action towishlist" data-action="add-to-wishlist" title="<?php echo __('Add to Wishlist') ?>"> + <span><?php echo __('Add to Wishlist') ?></span> + </a> + <?php endif; ?> + <?php if($this->getAddToCompareUrl($_item) && $showCompare): ?> + <a href="<?php echo $this->getAddToCompareUrl($_item) ?>" class="action tocompare" title="<?php echo __('Add to Compare') ?>"> + <span><?php echo __('Add to Compare') ?></span> + </a> + <?php endif; ?> + </div> + <?php endif; ?> + </div> + <?php endif; ?> + + </div> + </div> + <?php echo ($iterator==count($items)+1) ? '</li>' : '' ?> + <?php endforeach ?> + </ol> + </div> + <?php if($type == 'related'): ?> + <script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/related-products.js'); ?>", function() { + jQuery(".block.related [role='select-all']").relatedProducts({ + relatedCheckbox: '.related.checkbox' + }); + }); + </script> + <?php endif; ?> + <script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/mage-attributes-processing.js') ?>"); + </script> +</div> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/list/toolbar.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/list/toolbar.phtml new file mode 100644 index 00000000000..4dbf3286a34 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/list/toolbar.phtml @@ -0,0 +1,111 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Product list toolbar + * + * @see Magento\Catalog\Block\Product\ProductList\Toolbar + */ +?> +<?php if ($this->getCollection()->getSize()): ?> +<div class="toolbar"> + <?php if ($this->isExpanded()): ?> + <div class="settings"> + + <?php if ($this->isEnabledViewSwitcher()): ?> + <div class="modes"> + <?php $_modes = $this->getModes(); ?> + <?php if ($_modes && count($_modes) > 1): ?> + <strong class="label"><?php echo __('View as') ?></strong> + <?php foreach ($this->getModes() as $_code => $_label): ?> + <?php if ($this->isModeActive($_code)): ?> + <strong class="mode active <?php echo strtolower($_code); ?>" title="<?php echo $_label ?>"> + <span><?php echo $_label ?></span> + </strong> + <?php else: ?> + <a class="mode <?php echo strtolower($_code); ?>" title="<?php echo $_label ?>" + href="<?php echo $this->getModeUrl($_code) ?>"> + <span><?php echo $_label ?></span> + </a> + <?php endif; ?> + <?php endforeach; ?> + <?php endif; ?> + </div> + <?php endif; ?> + + <div class="sorter"> + <label class="label" for="sorter"><?php echo __('Sort By') ?></label> + <select id="sorter" data-mage-init="{redirectUrl: {event:'change'}}"> + <?php foreach ($this->getAvailableOrders() as $_key => $_order): ?> + <option + value="<?php echo $this->getOrderUrl($_key, 'asc') ?>"<?php if ($this->isOrderCurrent($_key)): ?> + selected="selected"<?php endif; ?>> + <?php echo __($_order) ?> + </option> + <?php endforeach; ?> + </select> + <?php if ($this->getCurrentDirection() == 'desc'): ?> + <a title="<?php echo __('Set Ascending Direction') ?>" href="<?php echo $this->getOrderUrl(null, 'asc') ?>" class="action sort desc"> + <span><?php echo __('Set Ascending Direction') ?></span> + </a> + <?php else: ?> + <a title="<?php echo __('Set Descending Direction') ?>" href="<?php echo $this->getOrderUrl(null, 'desc') ?>" class="action sort asc"> + <span><?php echo __('Set Descending Direction') ?></span> + </a> + <?php endif; ?> + </div> + + </div> + <?php endif; ?> + + <div class="pager"> + <p class="amount"> + <?php if ($this->getLastPageNum() > 1): ?> + <?php echo __('Items %1-%2 of %3', $this->getFirstNum(), $this->getLastNum(), $this->getTotalNum()) ?> + <?php elseif ($this->getLastPageNum() == 1): ?> + <?php echo __('%1 Item', $this->getTotalNum()) ?> + <?php else: ?> + <?php echo __('%1 Item(s)', $this->getTotalNum()) ?> + <?php endif; ?> + </p> + + <div class="limiter"> + <strong class="label"><?php echo __('Show') ?></strong> + <select id="limiter" data-mage-init="{redirectUrl: {event:'change'}}"> + <?php foreach ($this->getAvailableLimit() as $_key => $_limit): ?> + <option value="<?php echo $this->getLimitUrl($_key) ?>"<?php if ($this->isLimitCurrent($_key)): ?> + selected="selected"<?php endif ?>> + <?php echo $_limit ?> + </option> + <?php endforeach; ?> + </select> + <span class="text"><?php echo __('per page') ?></span> + </div> + + <?php echo $this->getPagerHtml() ?> + </div> +</div> +<?php endif ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/listing.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/listing.phtml new file mode 100644 index 00000000000..4b85d9fb219 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/listing.phtml @@ -0,0 +1,123 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Product list template + * + * @see \Magento\Catalog\Block\Product\ListProduct + */ +?> +<?php +$start = microtime(true); +$_productCollection = $this->getLoadedProductCollection(); +$_helper = $this->helper('Magento\Catalog\Helper\Output'); +$imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); +?> +<?php if (!$_productCollection->count()): ?> +<p class="message note"><?php echo __('There are no products matching the selection.') ?></p> +<?php else: ?> +<?php echo $this->getToolbarHtml() ?> +<?php echo $this->getAdditionalHtml() ?> +<?php if ($this->getMode() == 'grid') { + $viewMode ='grid'; + $image = 'category_page_grid'; + $showDescription = false; + $rating = 'short'; +} else { + $viewMode ='list'; + $image = 'category_page_list'; + $showDescription = true; + $rating = 'full'; +} + +?> +<div class="products wrapper <?php echo $viewMode; ?>"> + <?php $iterator = 1; ?> + <ol class="products list items"> + <?php foreach ($_productCollection as $_product): ?> + <?php echo ($iterator++==1) ? '<li class="item product">' : '</li><li class="item product">' ?> + <div class="product"> + <?php // Product Image ?> + <a href="<?php echo $_product->getProductUrl() ?>" class="product photo"> + <?php echo $imageBlock->init($_product, $image)->toHtml() ?> + </a> + <div class="product details"> + <?php + + $info = array(); + $info['name'] = '<strong class="product name">' + . ' <a href="' . $_product->getProductUrl() . '" title="' + . $this->stripTags($_product->getName(), null, true) . '">' + . $_helper->productAttribute($_product, $_product->getName(), 'name') + . '</a></strong>'; + $info['price'] = $this->getPriceHtml($_product, true); + $info['rating'] = $_product->getRatingSummary() ? $this->getReviewsSummaryHtml($_product,$rating) : ''; + + if ($_product->isSaleable()) { + $info['button'] = '<button type="button" title="' . __('Add to Cart') . '" class="action tocart"' + . ' data-mage-redirect="{event: \'click\', url: \'' . $this->getAddToCartUrl($_product) . '\'}">' + . '<span>' . __('Add to Cart') . '</span></button>'; + } else { + $info['button'] = $_product->getIsSalable() ? '<p class="stock available"><span>' . __('In stock') . '</span></p>' : + '<p class="stock unavailable"><span>' . __('Out of stock') . '</span></p>'; + } + + $info['links'] = '<div class="product links">' + . '<a href="' . $this->helper('Magento\Wishlist\Helper\Data')->getAddUrl($_product) . '" class="action towishlist" data-action="add-to-wishlist">' + . '<span>' . __('Add to Wishlist') . '</span></a>' + . '<a href="' . $this->getAddToCompareUrl($_product) . '" class="action tocompare">' + . '<span>' . __('Add to Compare') . '</span></a></div>'; + $info['actions'] = '<div class="product action">' . $info['button'] . $info['links'] . '</div>'; + + if ($showDescription) { + $info['description'] = '<div class="product description">' + . $_helper->productAttribute($_product, $_product->getShortDescription(), 'short_description') + . ' <a href="' . $_product->getProductUrl() . '" class="action more">' + . __('Learn More') . '</a></div>'; + } else { + $info['description'] = ''; + } + + $details = $this->getInfoOrder() ? : array('name','price','rating','description','actions'); + foreach ($details as $detail) { + echo $info[$detail]; + } + ?> + + </div> + </div> + <?php echo ($iterator==count($_productCollection)+1) ? '</li>' : '' ?> + <?php endforeach; ?> + </ol> + <script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/mage-attributes-processing.js') ?>"); + </script> +</div> +<div class="toolbar-bottom"> + <?php echo $this->getToolbarHtml() ?> +</div> +<?php endif; ?> +<?php echo $time_taken = microtime(true) - $start; ?> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/addto.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/addto.phtml new file mode 100644 index 00000000000..076fc1132f6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/addto.phtml @@ -0,0 +1,48 @@ +<?php +/** + * 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 design + * @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) + */ +?> + +<?php $_product = $this->getProduct(); ?> +<?php $_wishlistSubmitUrl = $this->helper('Magento\Wishlist\Helper\Data')->getAddUrl($_product); ?> + +<div class="product addto links" data-role="add-to-links"> +<?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllow()) : ?> + <a href="<?php echo $_wishlistSubmitUrl ?>" class="action towishlist" data-action="add-to-wishlist"><span><?php echo __('Add to Wishlist') ?></span></a> +<?php endif; ?> +<?php + $_compareUrl = $this->helper('Magento\Catalog\Helper\Product\Compare')->getAddUrl($_product); +?> +<?php if($_compareUrl) : ?> + <a href="<?php echo $_compareUrl ?>" class="action tocompare"><span><?php echo __('Add to Compare') ?></span></a> +<?php endif; ?> +</div> +<script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('Magento_Wishlist::js/add-to-wishlist.js') ?>", function () { + jQuery('[data-role="add-to-links"]').addToWishlist( + <?php echo $this->helper('Magento\Core\Helper\Data')->jsonEncode(array('productType' => $_product->getTypeId()))?> + ); + }); +</script> + diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/addtocart.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/addtocart.phtml new file mode 100644 index 00000000000..726d90b9c1f --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/addtocart.phtml @@ -0,0 +1,93 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_product = $this->getProduct(); ?> +<?php $buttonTitle = __('Add to Cart'); ?> +<?php if ($_product->isSaleable()): ?> +<div class="box tocart"> + <?php if (!$_product->isGrouped()): ?> + <div class="field qty"> + <label class="label" for="qty"><span><?php echo __('Qty') ?></span></label> + <div class="control"> + <input type="text" name="qty" id="qty" maxlength="12" value="<?php echo $this->getProductDefaultQty() * 1 ?>" + title="<?php echo __('Qty') ?>" class="input-text qty" data-validate="{required:true,digits:true}"/> + </div> + </div> + <?php endif; ?> + <div class="actions"> + <button type="submit" title="<?php echo $buttonTitle ?>" class="action primary tocart" id="product-addtocart-button"> + <span><?php echo $buttonTitle ?></span> + </button> + <?php echo $this->getChildHtml('', true) ?> + </div> +</div> +<?php endif; ?> + +<script type="text/javascript"> + (function ($) { + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", function () { + $('#product_addtocart_form').validation({ + errorPlacement: function (error, element) { + if (element.attr('data-validate') && element.attr('data-validate').indexOf('validate-one-checkbox-required-by-name') > 0) { + error.appendTo('#links-advice-container'); + } else if (element.attr('data-validate')&& element.attr('data-validate').indexOf('validate-grouped-qty') > 0) { + $('#super-product-table').siblings(this.errorElement + '.' + this.errorClass).remove(); + $('#super-product-table').after(error); + } else if (element.is(':radio, :checkbox')) { + element.closest('.nested').after(error); + } else { + element.after(error); + } + }, + highlight: function (element, errorClass) { + if ($(element).attr('data-validate') && $(element).attr('data-validate').indexOf('validate-required-datetime') > 0) { + $(element).parent().find('.datetime-picker').each(function() { + $(this).removeClass(errorClass); + if ($(this).val().length === 0) { + $(this).addClass(errorClass); + } + }); + } else if ($(element).is(':radio, :checkbox')) { + $(element).closest('.nested').addClass(errorClass+'-group'); + } else { + $(element).addClass(errorClass); + } + }, + unhighlight: function (element, errorClass) { + if ($(element).attr('data-validate') && $(element).attr('data-validate').indexOf('validate-required-datetime') > 0) { + $(element).parent().find('.datetime-picker').removeClass(errorClass); + } else if ($(element).is(':radio, :checkbox')) { + $(element).closest('.nested').removeClass(errorClass+'-group'); + } else { + $(element).removeClass(errorClass); + } + } + }); + }); + })(jQuery); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/attribute.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/attribute.phtml new file mode 100644 index 00000000000..ffe146694c7 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/attribute.phtml @@ -0,0 +1,59 @@ +<?php +/** + * 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 design + * @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) + */ + +/** + * Product view template + * + * @see \Magento\Catalog\Block\Product\View + * @see \Magento\Review\Block\Product\View + */ +?> +<?php +$_helper = $this->helper('Magento\Catalog\Helper\Output'); +$_product = $this->getProduct(); +$_call = $this->getAtCall(); +$_code = $this->getAtCode(); +$_className = $this->getCssClass(); +$_attributeLabel = $this->getAtLabel(); +$_attributeType = $this->getAtType(); + +if ( $_attributeLabel && $_attributeLabel == 'default' ) { + $_attributeLabel = $_product->getResource()->getAttribute($_code)->getFrontendLabel(); +} +if ( $_attributeType && $_attributeType == 'text' ) { + $_attributeValue = ($_helper->productAttribute($_product, $_product->$_call(), $_code)) ? $_product->getAttributeText($_code) : ''; +} else { + $_attributeValue = $_helper->productAttribute($_product, $_product->$_call(), $_code); +} + +?> + +<?php if ($_attributeValue): ?> +<div class="product attibute <?php echo $_className?>"> + <?php if ($_attributeLabel != 'none'): ?><strong class="type"><?php echo $_attributeLabel?></strong><?php endif; ?> + <div class="value"><?php echo $_attributeValue; ?></div> +</div> +<?php endif; ?> + diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/attributes.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/attributes.phtml new file mode 100644 index 00000000000..f4a0c38483c --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/attributes.phtml @@ -0,0 +1,47 @@ +<?php +/** + * 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 design + * @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) + */ + +/** + * Product additional attributes template + * + * @see \Magento\Catalog\Block\Product\View\Attributes + */ +?> +<?php + $_helper = $this->helper('Magento\Catalog\Helper\Output'); + $_product = $this->getProduct() +?> +<?php if($_additional = $this->getAdditionalData()): ?> +<table class="data table product attributes" id="product-attribute-specs-table"> + <tbody> + <?php foreach ($_additional as $_data): ?> + <tr> + <th class="col label"><?php echo $this->escapeHtml(__($_data['label'])) ?></th> + <td class="col data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td> + </tr> + <?php endforeach; ?> + </tbody> +</table> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/base-image.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/base-image.phtml new file mode 100644 index 00000000000..9e8ee027a8a --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/base-image.phtml @@ -0,0 +1,153 @@ +<?php +/** + * 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 design + * @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) + */ + +/** + * Product media data template + * + * @see \Magento\Catalog\Block\Product\View\Media + */ +?> +<?php + $_product = $this->getProduct(); + $_helper = $this->helper('Magento\Catalog\Helper\Output'); + + //list($_imgWidth, $_imgHeight) = $this->helper('Magento\Catalog\Helper\Image')->init($_product, 'image')->getOriginalSizeArray(); + + $image = 'product_page_main_image'; + + $_resizedWidth = $this->getVar("{$image}:width"); + $_resizedHeight = $this->getVar("{$image}:height") ?: $_resizedWidth ; + + $_hasImage = ($_product->getImage() && $_product->getImage() != "no_selection") ? true : false; + + //$_isOldDisplayMode = $this->getOldDisplayMode() || 0; + $_isOldDisplayMode = 0; + $whiteBorders = $this->getVar("product_image_white_borders"); +?> +<?php //if($whiteBorders == 0): ?> + <style scoped> + .magento-zoom > .img > img { + position:absolute; + top:0; bottom:0; left:0; right:0; margin:auto; max-height: 100%; max-width: 100%; + } + </style> +<?php //endif; ?> +<div class="product photo main"> + <a class="product photo magento-zoom<?php echo (!$_hasImage) ? ' isPlaceholder' : ''; ?>" + id="base-image" data-role="base-image-zoom" + href="<?php echo $this->helper('Magento\Catalog\Helper\Image')->init($_product, 'image'); ?>" > + <?php echo $this->getChildBlock('product.image.main')->init($_product, $image)->toHtml() ?> + </a> +<?php ?> + <script type="text/javascript"> + jQuery('[data-role=base-image-zoom]').attr('rel', '<?php echo $this->helper('Magento\Catalog\Helper\Image')->init($_product, 'image'); ?>'); + </script> + + <p class="notice"></p> + + <script type="text/javascript"> + jQuery(function(){ + <?php if ($_isOldDisplayMode): ?> + jQuery('.magento-zoom').magentoZoom({ + useGallery: false, + swapNotices: false, + isOldMode: <?php print $_isOldDisplayMode; ?>, + messages: { + noticeDefault: '<?php echo $this->jsQuoteEscape(__("Click on image to zoom")) ?>', + loadingMessage: '<?php echo $this->jsQuoteEscape(__("Loading...")) ?>' + } + }); + <?php else: ?> + jQuery('.magento-zoom').magentoZoom({ + useLens: true, + enlarged: { + adjustment: 20, + width: 500, + height: <?php echo $_resizedHeight ?> + }, + useGallery: true, + swapNotices: true, + isOldMode: <?php print $_isOldDisplayMode; ?>, + messages: { + noticeDefault: '<?php echo $this->jsQuoteEscape(__("Click on image to zoom")) ?>', + noticeLightBox: '<?php echo $this->jsQuoteEscape(__("Click on image to view it full sized")) ?>', loadingMessage: '<?php echo $this->jsQuoteEscape(__("Loading...")) ?>' + } + }); + <?php endif; ?> + }); + </script> +<?php ?> +</div> + +<?php if (count($this->getGalleryImages()) > 0): ?> + +<?php + $thumbWidth = $this->getVar("product_page_more_views:width"); + $thumbHeight = $this->getVar("product_page_more_views:height") ? : $thumbWidth; +?> +<div class="product photo thumbs"> + <strong class="title"><?php echo __('More Views') ?></strong> + <ul class="items thumbs"> + <?php foreach ($this->getGalleryImages() as $_image): ?> + <?php if ($_isOldDisplayMode) { + $attributes = ' href="#" data-mage-popwin="{windowURL:' + . $this->getGalleryUrl($_image) + . ',windowName:\'gallery\',width:300,height:300,status:1,scrollbars:1,resizable:1}"'; + } else { + $attributes = ' href="' + . $this->helper('Magento\Catalog\Helper\Image')->init($_product, 'image', $_image->getFile()) + . '" rel="'; + if ($whiteBorders) { + $attributes .= $this->helper('Magento\Catalog\Helper\Image')->init($_product, 'image', $_image->getFile())->resize($_resizedWidth,$_resizedHeight) . '"'; + } else { + $attributes .= $this->helper('Magento\Catalog\Helper\Image')->init($_product, 'image', $_image->getFile())->constrainOnly(TRUE)->keepAspectRatio(TRUE)->keepFrame(FALSE)->resize($_resizedWidth,$_resizedHeight) . '"'; + } + };?> + <li class="item thumb"> + <a<?php echo $attributes; ?> class="magento-zoom" title="<?php echo $this->escapeHtml($_image->getLabel()) ?>"> + <?php if ($whiteBorders): ?> + <span class="img" style="position:relative; z-index:1; display:block; width:<?php echo $thumbHeight;?>px; height:<?php echo $thumbHeight;?>px;"> + <img src="<?php echo $this->helper('Magento\Catalog\Helper\Image')->init($_product, 'thumbnail', $_image->getFile())->resize($thumbWidth,$thumbHeight); ?>" alt="<?php echo $this->escapeHtml($_image->getLabel()) ?>" /> + </span> + <?php else: ?> + <span class="img" style="position:relative; z-index:1; display:block; width:<?php echo $thumbHeight;?>px; height:<?php echo $thumbHeight;?>px;"> + <img src="<?php echo $this->helper('Magento\Catalog\Helper\Image')->init($_product, 'thumbnail', $_image->getFile())->constrainOnly(TRUE)->keepAspectRatio(TRUE)->keepFrame(FALSE)->resize($thumbWidth,$thumbHeight); ?>" alt="<?php echo $this->escapeHtml($_image->getLabel()) ?>" /> + </span> + <?php endif; ?> + </a> + </li> + <?php endforeach; ?> + </ul> +</div> + <?php if ($_isOldDisplayMode): ?> + <script type="text/javascript"> + (function($) { + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.popupwindow.js')?>", + "<?php echo $this->getViewFileUrl('mage/popup-window.js')?>" + ); + })(jQuery); + </script> + <?php endif; ?> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/description.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/description.phtml new file mode 100644 index 00000000000..cd98c96ea75 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/description.phtml @@ -0,0 +1,32 @@ +<?php +/** + * 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 design + * @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) + */ + +/** + * Product description template + * + * @see \Magento\Catalog\Block\Product\View\Description + */ +?> +<?php echo $this->helper('Magento\Catalog\Helper\Output')->productAttribute($this->getProduct(), $this->getProduct()->getDescription(), 'description') ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/details.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/details.phtml new file mode 100644 index 00000000000..52e095b6f80 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/details.phtml @@ -0,0 +1,42 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if ($detailedInfoGroup = $this->getGroupChildNames('detailed_info', 'getChildHtml')):?> + <div class="product info detailed"> + <?php $layout = $this->getLayout(); ?> + <dl class="product data items" data-sections="tabs"> + <?php foreach ($detailedInfoGroup as $name):?> + <?php + $html = $layout->renderElement($name); + if (!trim($html)) continue; + $alias = $layout->getElementAlias($name); + $label = $this->escapeHtml($this->getChildData($alias, 'title')); + ?> + <dt class="data item title" data-section="title"><a class="data switch" data-toggle="switch" href="#<?php echo $alias; ?>"><?php echo $label; ?></a></dt> + <dd class="data item content" id="<?php echo $alias; ?>" data-section="content"><?php echo $html; ?></dd> + <?php endforeach;?> + </dl> + </div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/form.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/form.phtml new file mode 100644 index 00000000000..ee446447da1 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/form.phtml @@ -0,0 +1,62 @@ +<?php +/** + * 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 design + * @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) + */ + +/** + * Product view template + * + * @see \Magento\Catalog\Block\Product\View + * @see \Magento\Review\Block\Product\View + */ +?> +<?php $_helper = $this->helper('Magento\Catalog\Helper\Output'); ?> +<?php $_product = $this->getProduct(); ?> + +<script type="text/javascript"> + (function ($) { + head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/price-option.js') ?>", function () { + $('#product_addtocart_form').priceOption({"priceConfig":<?php echo $this->getJsonConfig() ?>}); + }); + })(jQuery); +</script> +<div class="product add form"> + <form action="<?php echo $this->getSubmitUrl($_product) ?>" method="post" id="product_addtocart_form"<?php if($_product->getOptions()): ?> enctype="multipart/form-data"<?php endif; ?>> + + <input type="hidden" name="product" value="<?php echo $_product->getId() ?>" /> + <input type="hidden" name="related_product" id="related-products-field" value="" /> + <?php echo $this->getChildHtml('form_top'); ?> + <?php if (!$this->hasOptions()):?> + <?php echo $this->getChildHtml('product_info_form_content'); ?> + <?php else:?> + <?php if ($_product->isSaleable() && $this->getOptionsContainer() == 'container1'):?> + <?php echo $this->getChildChildHtml('options_container') ?> + <?php endif;?> + <?php endif; ?> + + <?php if ($_product->isSaleable() && $this->hasOptions() && $this->getOptionsContainer() == 'container2'):?> + <?php echo $this->getChildChildHtml('options_container') ?> + <?php endif;?> + <?php echo $this->getChildHtml('form_bottom'); ?> + </form> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/gallery.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/gallery.phtml new file mode 100644 index 00000000000..815bfc49d92 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/gallery.phtml @@ -0,0 +1,77 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php if (count($this->getGalleryImages()) > 0): ?> + +<?php + $thumbWidth = $this->getVar("product_page_more_views:width"); + $thumbHeight = $this->getVar("product_page_more_views:height") ? : $thumbWidth; +?> +<div class="product photo thumbs"> + <strong class="title"><?php echo __('More Views') ?></strong> + <ul class="items thumbs"> + <?php foreach ($this->getGalleryImages() as $_image): ?> + <?php if ($_isOldDisplayMode) { + $attributes = ' href="#" data-mage-popwin="{windowURL:' + . $this->getGalleryUrl($_image) + . ',windowName:\'gallery\',width:300,height:300,status:1,scrollbars:1,resizable:1}"'; + } else { + $attributes = ' href="' + . $this->helper('Magento\Catalog\Helper\Image')->init($_product, 'image', $_image->getFile()) + . '" rel="'; + if ($whiteBorders) { + $attributes .= $this->helper('Magento\Catalog\Helper\Image')->init($_product, 'image', $_image->getFile())->resize($_resizedWidth,$_resizedHeight) . '"'; + } else { + $attributes .= $this->helper('Magento\Catalog\Helper\Image')->init($_product, 'image', $_image->getFile())->constrainOnly(TRUE)->keepAspectRatio(TRUE)->keepFrame(FALSE)->resize($_resizedWidth,$_resizedHeight) . '"'; + } + };?> + <li class="item thumb"> + <a<?php echo $attributes; ?> class="magento-zoom" title="<?php echo $this->escapeHtml($_image->getLabel()) ?>"> + <?php if ($whiteBorders): ?> + <span class="img" style="position:relative; z-index:1; display:block; width:<?php echo $thumbHeight;?>px; height:<?php echo $thumbHeight;?>px;"> + <img src="<?php echo $this->helper('Magento\Catalog\Helper\Image')->init($_product, 'thumbnail', $_image->getFile())->resize($thumbWidth,$thumbHeight); ?>" alt="<?php echo $this->escapeHtml($_image->getLabel()) ?>" /> + </span> + <?php else: ?> + <span class="img" style="position:relative; z-index:1; display:block; width:<?php echo $thumbHeight;?>px; height:<?php echo $thumbHeight;?>px;"> + <img src="<?php echo $this->helper('Magento\Catalog\Helper\Image')->init($_product, 'thumbnail', $_image->getFile())->constrainOnly(TRUE)->keepAspectRatio(TRUE)->keepFrame(FALSE)->resize($thumbWidth,$thumbHeight); ?>" alt="<?php echo $this->escapeHtml($_image->getLabel()) ?>" /> + </span> + <?php endif; ?> + </a> + </li> + <?php endforeach; ?> + </ul> +</div> + <?php if ($_isOldDisplayMode): ?> + <script type="text/javascript"> + (function($) { + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.popupwindow.js')?>", + "<?php echo $this->getViewFileUrl('mage/popup-window.js')?>" + ); + })(jQuery); + </script> + <?php endif; ?> +<?php endif; ?> + diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/mailto.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/mailto.phtml new file mode 100644 index 00000000000..0c7658ab609 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/mailto.phtml @@ -0,0 +1,31 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_product = $this->getProduct() ?> +<?php if ($this->canEmailToFriend()): ?> + <a title="<?php echo __('Email to a Friend') ?>" class="action mailto" href="<?php echo $this->helper('Magento\Catalog\Helper\Product')->getEmailToFriendUrl($_product) ?>"> + <span><?php echo __('Email to a Friend') ?></span> + </a> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options.phtml new file mode 100644 index 00000000000..b79c02ce4ac --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options.phtml @@ -0,0 +1,43 @@ +<?php +/** + * 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 design + * @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) + */ +/* @var $this \Magento\Catalog\Block\Product\View\Options */ +?> + +<?php $_options = $this->helper('Magento\Core\Helper\Data')->decorateArray($this->getOptions()) ?> +<?php if (count($_options)):?> + <script type="text/javascript"> + (function ($) { + head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/price-option.js') ?>", function () { + $('#product_addtocart_form').priceOption({ + 'optionConfig':<?php echo $this->getJsonConfig()?>, + 'controlContainer': '.field' + }).trigger('reloadPrice'); + }); + })(jQuery); + </script> + <?php foreach($_options as $_option): ?> + <?php echo $this->getOptionHtml($_option) ?> + <?php endforeach; ?> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/js.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/js.phtml new file mode 100644 index 00000000000..9cafa8bb474 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/js.phtml @@ -0,0 +1,88 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<script type="text/javascript"> +//<![CDATA[ +var DateOption = Class.create({ + + getDaysInMonth: function(month, year) + { + var curDate = new Date(); + if (!month) { + month = curDate.getMonth(); + } + if (2 == month && !year) { // leap year assumption for unknown year + return 29; + } + if (!year) { + year = curDate.getFullYear(); + } + return 32 - new Date(year, month - 1, 32).getDate(); + }, + + reloadMonth: function(event) + { + var selectEl = event.findElement(); + var idParts = selectEl.id.split("_"); + if (idParts.length != 3) { + return false; + } + var optionIdPrefix = idParts[0] + "_" + idParts[1]; + var month = parseInt($(optionIdPrefix + "_month").value); + var year = parseInt($(optionIdPrefix + "_year").value); + var dayEl = $(optionIdPrefix + "_day"); + + var days = this.getDaysInMonth(month, year); + + //remove days + for (var i = dayEl.options.length - 1; i >= 0; i--) { + if (dayEl.options[i].value > days) { + dayEl.remove(dayEl.options[i].index); + } + } + + // add days + var lastDay = parseInt(dayEl.options[dayEl.options.length-1].value); + for (i = lastDay + 1; i <= days; i++) { + this.addOption(dayEl, i, i); + } + }, + + addOption: function(select, text, value) + { + var option = document.createElement('OPTION'); + option.value = value; + option.text = text; + + if (select.options.add) { + select.options.add(option); + } else { + select.appendChild(option); + } + } +}); +dateOption = new DateOption(); +//]]> +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/date.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/date.phtml new file mode 100644 index 00000000000..8322a297e9c --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/date.phtml @@ -0,0 +1,79 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_option = $this->getOption() ?> +<?php $_optionId = $_option->getId() ?> +<?php $class = ($_option->getIsRequire()) ? ' required' : ''; ?> +<div class="field date<?php echo $class; ?>"> + <label class="label"> + <span><?php echo $this->escapeHtml($_option->getTitle()) ?></span> + <?php echo $this->getFormatedPrice() ?> + </label> + <div class="control"> + <?php if ($_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_DATE_TIME + || $_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_DATE): ?> + + <?php echo $this->getDateHtml() ?> + + <?php if (!$this->useCalendar()): ?> + <script type="text/javascript"> + //<![CDATA[ + (function($) { + head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/date-option.js') ?>", function() { + $.mage.dateOption({ + datepickerFieldSelector: 'select.datetime-picker', + monthSelector: '#options_<?php echo $_optionId ?>_month', + yearSelector: '#options_<?php echo $_optionId ?>_year' + }); + }); + })(jQuery); + //]]> + </script> + <?php endif; ?> + + <?php endif; ?> + + <?php if ($_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_DATE_TIME + || $_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_TIME): ?> + <span class="time-picker"><?php echo $this->getTimeHtml() ?></span> + <?php endif; ?> + + <?php if ($_option->getIsRequire()): ?> + <input type="hidden" name="validate_datetime_<?php echo $_optionId ?>" class="validate-datetime-<?php echo $_optionId ?>" value="" data-validate="{'validate-required-datetime':<?php echo $_optionId?>}"/> + <?php else: ?> + <input type="hidden" name="validate_datetime_<?php echo $_optionId ?>" class="validate-datetime-<?php echo $_optionId ?>" value="" data-validate="{'validate-optional-datetime':<?php echo $_optionId?>}"/> + <?php endif; ?> + + <script type="text/javascript"> + //<![CDATA[ + (function($) { + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", function() { + $.validator.setDefaults({ignore: ':hidden:not(input[name^="validate_datetime_"])'}); + }); + })(jQuery); + //]]> + </script> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/default.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/default.phtml new file mode 100644 index 00000000000..5bfb09586a9 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/default.phtml @@ -0,0 +1,29 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_option = $this->getOption() ?> +<div class="field"> + <label class="label"><span><?php echo $this->escapeHtml($_option->getTitle()) ?></span></label> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/file.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/file.phtml new file mode 100644 index 00000000000..3d4432539ca --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/file.phtml @@ -0,0 +1,88 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_option = $this->getOption(); ?> +<?php $_fileInfo = $this->getFileInfo(); ?> +<?php $_fileExists = $_fileInfo->hasData(); ?> +<?php $_fileName = 'options_' . $_option->getId() . '_file'; ?> +<?php $_fieldNameAction = $_fileName . '_action'; ?> +<?php $_fieldValueAction = $_fileExists ? 'save_old' : 'save_new'; ?> +<?php $_fileNamed = $_fileName . '_name'; ?> +<?php $class = ($_option->getIsRequire()) ? ' required' : ''; ?> + + +<script type="text/javascript"> +//<![CDATA[ + (function($) { + head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/file-option.js')?>", function() { + $('#input-box-<?php echo $_fileName ?>').fileOption({ + fileName: '<?php echo $_fileName ?>', + fileNamed: '<?php echo $_fileNamed ?>', + fieldNameAction: '<?php echo $_fieldNameAction ?>', + changeFileSelector: '#change-<?php echo $_fileName ?>', + deleteFileSelector: '#delete-<?php echo $_fileName ?>' + }); + }); + })(jQuery); +//]]> +</script> + +<div class="field file<?php echo $class; ?>"> + <label class="label"> + <span><?php echo $this->escapeHtml($_option->getTitle()) ?></span> + <?php echo $this->getFormatedPrice() ?> + </label> + <?php if ($_fileExists): ?> + <div class="control"> + <span class="<?php echo $_fileNamed ?>"><?php echo $_fileInfo->getTitle(); ?></span> + <a href="javascript:void(0)" class="label" id="change-<?php echo $_fileName ?>" > + <?php echo __('Change') ?> + </a> + <?php if (!$_option->getIsRequire()): ?> + <input type="checkbox" id="delete-<?php echo $_fileName ?>" /> + <span class="label"><?php echo __('Delete') ?></span> + <?php endif; ?> + </div> + <?php endif; ?> + <div class="control" id="input-box-<?php echo $_fileName ?>" <?php echo $_fileExists ? 'style="display:none"' : '' ?>> + <input type="file" name="<?php echo $_fileName; ?>" class="product-custom-option<?php echo $_option->getIsRequire() ? ' required' : '' ?>" <?php echo $_fileExists ? 'disabled="disabled"' : '' ?> /> + <input type="hidden" name="<?php echo $_fieldNameAction; ?>" value="<?php echo $_fieldValueAction; ?>" /> + <?php if ($_option->getFileExtension()): ?> + <p class="note"> + <?php echo __('Allowed file extensions to upload')?>: <strong><?php echo $_option->getFileExtension() ?></strong> + </p> + <?php endif; ?> + <?php if ($_option->getImageSizeX() > 0): ?> + <p class="note"> + <?php echo __('Maximum image width')?>: <strong><?php echo $_option->getImageSizeX() ?> <?php echo __('px.')?></strong> + </p> + <?php endif; ?> + <?php if ($_option->getImageSizeY() > 0): ?> + <p class="note"> + <?php echo __('Maximum image height')?>: <strong><?php echo $_option->getImageSizeY() ?> <?php echo __('px.')?></strong> + </p> + <?php endif; ?> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/select.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/select.phtml new file mode 100644 index 00000000000..765061bced1 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/select.phtml @@ -0,0 +1,44 @@ +<?php +/** + * 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 design + * @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) + */ +?> + +<?php /* @var $this \Magento\Catalog\Block\Product\View\Options\Type\Select */ ?> +<?php + $_option = $this->getOption(); + $class = ($_option->getIsRequire()) ? ' required' : ''; +?> +<div class="field<?php echo $class; ?>"> + <label class="label"> + <span><?php echo $this->escapeHtml($_option->getTitle()) ?></span> + </label> + <div class="control"> + <?php echo $this->getValuesHtml() ?> + <?php if ($_option->getIsRequire()): ?> + <?php if ($_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_RADIO || $_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_CHECKBOX): ?> + <span id="options-<?php echo $_option->getId() ?>-container"></span> + <?php endif; ?> + <?php endif;?> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/text.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/text.phtml new file mode 100644 index 00000000000..8a1d38825fc --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/type/text.phtml @@ -0,0 +1,61 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php + $_option = $this->getOption(); + $class = ($_option->getIsRequire()) ? ' required' : ''; +?> +<div class="field<?php if ($_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_AREA) { echo ' textarea';}?><?php echo $class ?>"> + <label class="label"> + <span><?php echo $this->escapeHtml($_option->getTitle()) ?></span> + <?php echo $this->getFormatedPrice() ?> + </label> + <div class="control"> + <?php if ($_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_FIELD): ?> + <?php $_textValidate = null; + if($_option->getIsRequire()){ + $_textValidate['required'] = true; + } + if($_option->getMaxCharacters()){ + $_textValidate['maxlength'] = $_option->getMaxCharacters(); + } + ?> + <input type="text" id="options_<?php echo $_option->getId() ?>_text" class="input-text product-custom-option" <?php if(!empty($_textValidate))echo 'data-validate='.json_encode($_textValidate) ; ?> name="options[<?php echo $_option->getId() ?>]" value="<?php echo $this->escapeHtml($this->getDefaultValue()) ?>" /> + <?php elseif ($_option->getType() == \Magento\Catalog\Model\Product\Option::OPTION_TYPE_AREA): ?> + <?php $_textAreaValidate = null; + if($_option->getIsRequire()){ + $_textAreaValidate['required'] = true; + } + if($_option->getMaxCharacters()){ + $_textAreaValidate['maxlength'] = $_option->getMaxCharacters(); + } + ?> + <textarea id="options_<?php echo $_option->getId() ?>_text" class="product-custom-option" <?php if(!empty($_textAreaValidate))echo 'data-validate='.json_encode($_textAreaValidate) ; ?> name="options[<?php echo $_option->getId() ?>]" rows="5" cols="25"><?php echo $this->escapeHtml($this->getDefaultValue()) ?></textarea> + <?php endif; ?> + <?php if ($_option->getMaxCharacters()): ?> + <p class="note"><?php echo __('Maximum number of characters:')?> <strong><?php echo $_option->getMaxCharacters() ?></strong></p> + <?php endif; ?> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/wrapper.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/wrapper.phtml new file mode 100644 index 00000000000..f1f0c8070aa --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/wrapper.phtml @@ -0,0 +1,36 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +$required = ''; +if ($this->hasRequiredOptions()) { + $required = ' data-hasrequired="' . __('* Required Fields') . '"'; +} +?> +<div class="product options wrapper" id="product-options-wrapper"<?php echo $required; ?>> + <fieldset class="fieldset"> + <?php echo $this->getChildHtml('', true);?> + </fieldset> +</div> diff --git a/dev/tests/unit/testsuite/Magento/Core/Block/_files/template_test_assign.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/wrapper/bottom.phtml similarity index 88% rename from dev/tests/unit/testsuite/Magento/Core/Block/_files/template_test_assign.phtml rename to app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/wrapper/bottom.phtml index bd8dea34ac0..2c956095b46 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Block/_files/template_test_assign.phtml +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/options/wrapper/bottom.phtml @@ -18,12 +18,11 @@ * 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_Core - * @subpackage integration_tests + * @category design * @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) */ ?> -<?php -echo $varOne . ', ' . $varTwo; +<div class="product options bottom"> + <?php echo $this->getChildHtml('', true);?> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/price.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/price.phtml new file mode 100644 index 00000000000..103554f43b9 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/price.phtml @@ -0,0 +1,27 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_product = $this->getProduct() ?> +<?php echo $this->getPriceHtml($_product) ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/price_clone.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/price_clone.phtml new file mode 100644 index 00000000000..dabb8a33bf6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/price_clone.phtml @@ -0,0 +1,27 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_product = $this->getProduct() ?> +<?php echo $this->getPriceHtml($_product, false, '_clone') ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/rating.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/rating.phtml new file mode 100644 index 00000000000..f23bf6963bb --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/rating.phtml @@ -0,0 +1,26 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php echo $this->getReviewsSummaryHtml($this->getProduct(), false, true)?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/tierprices.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/tierprices.phtml new file mode 100644 index 00000000000..7c30a8862ef --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/tierprices.phtml @@ -0,0 +1,219 @@ +<?php +/** + * 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 design + * @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) + */ +?> + +<?php +/** + * @see \Magento\Catalog\Block\Product\View + */ +$_product = $this->getProduct(); +$_tierPrices = $this->getTierPrices(); +$_finalPriceInclTax = $this->helper('Magento\Tax\Helper\Data')->getPrice($_product, $_product->getFinalPrice(), true); + +/** @var $_catalogHelper \Magento\Catalog\Helper\Data */ +$_catalogHelper = $this->helper('Magento\Catalog\Helper\Data'); + +$_weeeTaxAmount = $this->helper('Magento\Weee\Helper\Data')->getAmountForDisplay($_product); +if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_product, array(1,2,4))) { + $_weeeTaxAttributes = $this->helper('Magento\Weee\Helper\Data')->getProductWeeeAttributesForDisplay($_product); +} + +?> +<?php if (count($_tierPrices) > 0): ?> + <ul class="<?php echo ($this->getInGrouped() ? 'tier prices grouped items' : 'prices tier items'); ?>"> + <?php if ($this->getInGrouped()): ?> + <?php $_tierPrices = $this->getTierPrices($_product); ?> + <?php endif; ?> + <?php $this->helper('Magento\Weee\Helper\Data')->processTierPrices($_product, $_tierPrices); ?> + <?php foreach ($_tierPrices as $_index => $_price): ?> + <li class="item"> + <?php if ($_catalogHelper->canApplyMsrp($_product)): ?> + <?php if ($this->getInGrouped()): ?> + <?php echo __('Buy %1$s for', $_price['price_qty']) ?>: + <?php else: ?> + <?php echo __('Buy %1$s', $_price['price_qty']) ?> + <?php endif; ?> + <?php else: ?> + + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayBothPrices()): ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_product, 0)): ?> + <?php echo __('Buy %1$s for %2$s (%3$s incl. tax) each', $_price['price_qty'], $_price['formated_price_incl_weee_only'], $_price['formated_price_incl_weee']) ?> + <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_product, 1)): ?> + <?php echo __('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price_incl_weee_only']); ?> + <?php if ($_weeeTaxAttributes): ?> + (<small> + <?php echo __('%1$s incl tax.', $_price['formated_price_incl_weee']); ?> + <?php $separator = ' + '; foreach ($_weeeTaxAttributes as $_attribute): ?> + <?php echo $separator; ?> + <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()); ?> + <?php endforeach; ?> + </small>) + <?php endif; ?> + <?php echo __('each') ?> + <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_product, 4)): ?> + <?php echo __('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price_incl_weee_only']); ?> + <?php if ($_weeeTaxAttributes): ?> + (<small> + <?php echo __('%1$s incl tax.', $_price['formated_price_incl_weee']); ?> + <?php $separator = ' + '; foreach ($_weeeTaxAttributes as $_attribute): ?> + <?php echo $separator; ?> + <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()+$_attribute->getTaxAmount()); ?> + <?php endforeach; ?> + </small>) + <?php endif; ?> + <?php echo __('each') ?> + <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_product, 2)): ?> + <?php echo __('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price']); ?> + <?php if ($_weeeTaxAttributes): ?> + (<small> + <?php foreach ($_weeeTaxAttributes as $_attribute): ?> + <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()); ?> + <?php endforeach; ?> + <?php echo __('Total incl. Tax: %1$s', $_price['formated_price_incl_weee']); ?> + </small>) + <?php endif; ?> + <?php echo __('each') ?> + <?php else: ?> + <?php echo __('Buy %1$s for %2$s (%3$s incl. tax) each', $_price['price_qty'], $_price['formated_price'], $_price['formated_price_incl_tax']) ?> + <?php endif; ?> + <?php else: ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayPriceIncludingTax()): ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_product, 0)): ?> + <?php echo __('Buy %1$s for %2$s each', $_price['price_qty'], $_price['formated_price_incl_weee']) ?> + <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_product, 1)): ?> + <?php echo __('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price_incl_weee']); ?> + <?php if ($_weeeTaxAttributes): ?> + (<small> + <?php $separator = ''; foreach ($_weeeTaxAttributes as $_attribute): ?> + <?php echo $separator; ?> + <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()); ?> + <?php $separator = ' + '; endforeach; ?> + </small>) + <?php endif; ?> + <?php echo __('each') ?> + <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_product, 4)): ?> + <?php echo __('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price_incl_weee']); ?> + <?php if ($_weeeTaxAttributes): ?> + (<small> + <?php $separator = ''; foreach ($_weeeTaxAttributes as $_attribute): ?> + <?php echo $separator; ?> + <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()+$_attribute->getTaxAmount()); ?> + <?php $separator = ' + '; endforeach; ?> + </small>) + <?php endif; ?> + <?php echo __('each') ?> + <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_product, 2)): ?> + <?php echo __('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price_incl_tax']); ?> + <?php if ($_weeeTaxAttributes): ?> + (<small> + <?php foreach ($_weeeTaxAttributes as $_attribute): ?> + <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()); ?> + <?php endforeach; ?> + <?php echo __('Total incl. Tax: %1$s', $_price['formated_price_incl_weee']); ?> + </small>) + <?php endif; ?> + <?php echo __('each') ?> + <?php else: ?> + <?php echo __('Buy %1$s for %2$s each', $_price['price_qty'], $_price['formated_price_incl_tax']) ?> + <?php endif; ?> + <?php else: ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_product, 0)): ?> + <?php echo __('Buy %1$s for %2$s each', $_price['price_qty'], $_price['formated_price_incl_weee_only']) ?> + <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_product, 1)): ?> + <?php echo __('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price_incl_weee_only']); ?> + <?php if ($_weeeTaxAttributes): ?> + (<small> + <?php $separator = ''; foreach ($_weeeTaxAttributes as $_attribute): ?> + <?php echo $separator; ?> + <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()); ?> + <?php $separator = ' + '; endforeach; ?> + </small>) + <?php endif; ?> + <?php echo __('each') ?> + <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_product, 4)): ?> + <?php echo __('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price_incl_weee_only']); ?> + <?php if ($_weeeTaxAttributes): ?> + (<small> + <?php $separator = ''; foreach ($_weeeTaxAttributes as $_attribute): ?> + <?php echo $separator; ?> + <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()+$_attribute->getTaxAmount()); ?> + <?php $separator = ' + '; endforeach; ?> + </small>) + <?php endif; ?> + <?php echo __('each') ?> + <?php elseif($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_product, 2)): ?> + <?php echo __('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price']); ?> + <?php if ($_weeeTaxAttributes): ?> + (<small> + <?php foreach ($_weeeTaxAttributes as $_attribute): ?> + <?php echo $_attribute->getName(); ?>: <?php echo $this->helper('Magento\Core\Helper\Data')->currency($_attribute->getAmount()); ?> + <?php endforeach; ?> + <?php echo __('Total incl. Tax: %1$s', $_price['formated_price_incl_weee_only']); ?> + </small>) + <?php endif; ?> + <?php echo __('each') ?> + <?php else: ?> + <?php echo __('Buy %1$s for %2$s each', $_price['price_qty'], $_price['formated_price']) ?> + <?php endif; ?> + <?php endif; ?> + <?php endif; ?> + + <?php endif; // Can apply MSRP ?> + + <?php if (!$this->getInGrouped()): ?> + <?php if(($_product->getPrice() == $_product->getFinalPrice() && $_product->getPrice() > $_price['price']) + || ($_product->getPrice() != $_product->getFinalPrice() && $_product->getFinalPrice() > $_price['price'])): ?> + <?php echo __('and') ?> <strong class="benefit"><?php echo __('save')?> <span class="percent tier-<?php echo $_index;?>"><?php echo $_price['savePercent']?></span>% + <?php endif ?></strong> + <?php endif; ?> + + <?php if ($_catalogHelper->isShowPriceOnGesture($_product)):?> + <?php $popupId = 'msrp-popup-' . $_product->getId() . $this->helper('Magento\Core\Helper\Data')->getRandomString(20); ?> + <?php + $addToCartUrl = $this->getProduct()->isSalable() + ? $this->getAddToCartUrl($_product, array('qty' => $_price['price_qty'])) + : ''; + ?> + <a href="#" id="<?php echo($popupId);?>" data-tier-price='{addToCartUrl:"<?php echo $addToCartUrl; ?>", name:"<?php echo $_product->getName() ?>", price:<?php echo json_encode($_price['real_price_html']) ?>, msrp:"<?php echo $this->helper('Magento\Core\Helper\Data')->currency($_product->getMsrp(),true,false) ?>"<?php if (!$this->getInGrouped()): ?>, qty:"<?php echo $_price['price_qty']?>"<?php endif ?>}'><?php echo __('Click for price'); ?></a> + <?php else: ?> + <span class="msrp-price-hide-message"> + <?php echo $_catalogHelper->getMsrpPriceMessage($_product) ?> + </span> + <?php endif; ?> + </li> + <?php endforeach ?> + </ul> + <?php if ($_catalogHelper->isShowPriceOnGesture($_product)):?> + <script type="text/javascript"> + (function($) { + head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/tier-price.js') ?>", function () { + $('#product_addtocart_form').tierPrice({ + inputQty: '#qty' + }); + }); + })(jQuery); + </script> + <?php endif;?> +<?php endif;?> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/type/default.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/type/default.phtml new file mode 100644 index 00000000000..a8e728a5bf6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/type/default.phtml @@ -0,0 +1,39 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php /* @var $this \Magento\Catalog\Block\Product\View\AbstractView */?> +<?php $_product = $this->getProduct() ?> + +<?php if ($this->displayProductStockStatus()): ?> + <?php if ($_product->isAvailable()): ?> + <p class="stock available" title="<?php echo __('Availability') ?>"> + <span><?php echo __('In stock') ?></span> + </p> + <?php else: ?> + <p class="stock unavailable" title="<?php echo __('Availability') ?>"> + <span><?php echo __('Out of stock') ?></span> + </p> + <?php endif; ?> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/type/grouped.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/type/grouped.phtml new file mode 100644 index 00000000000..bcde8441944 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/type/grouped.phtml @@ -0,0 +1,97 @@ +<?php +/** + * 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 design + * @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) + */ + +/** + * Grouped product data template + * + * @see \Magento\Catalog\Block\Product\View\Media + * @see \Magento\Catalog\Block\Product\View\Type\Grouped + */ +?> +<?php $this->setPreconfiguredValue(); ?> +<?php $_product = $this->getProduct(); ?> +<?php $_associatedProducts = $this->getAssociatedProducts(); ?> +<?php $_hasAssociatedProducts = count($_associatedProducts) > 0; ?> +<?php if ($this->displayProductStockStatus()): ?> + <?php if ($_product->isAvailable() && $_hasAssociatedProducts): ?> + <p class="stock available" title="<?php echo __('Availability') ?>"> + <span><?php echo __('In stock') ?></span> + </p> + <?php else: ?> + <p class="stock unavailable" title="<?php echo __('Availability') ?>"> + <span><?php echo __('Out of stock') ?></span> + </p> + <?php endif; ?> +<?php endif; ?> + +<table class="table data grouped" id="super-product-table"> + <thead> + <tr> + <th class="col item"><?php echo __('Product Name') ?></th> + <?php if ($this->getCanShowProductPrice($_product)): ?> + <th class="col price"><?php echo __('Price') ?></th> + <?php endif; ?> + <?php if ($_product->isSaleable()): ?> + <th class="col qty"><?php echo __('Qty') ?></th> + <?php endif; ?> + </tr> + </thead> + <tbody> + <?php if ($_hasAssociatedProducts): ?> + <?php foreach ($_associatedProducts as $_item): ?> + <?php $_finalPriceInclTax = $this->helper('Magento\Tax\Helper\Data')->getPrice($_item, $_item->getFinalPrice(), true) ?> + <tr> + <td class="col item"><strong class="product name"><?php echo $this->escapeHtml($_item->getName()) ?></strong></td> + <?php if ($this->getCanShowProductPrice($_product)): ?> + <td class="col price"> + <?php if ($this->getCanShowProductPrice($_item)): ?> + <?php echo $this->getPriceHtml($_item, true) ?> + <?php echo $this->getTierPriceHtml($_item) ?> + <?php endif; ?> + </td> + <?php endif; ?> + <?php if ($_product->isSaleable()): ?> + <td class="col qty"> + <?php if ($_item->isSaleable()) : ?> + <div class="control qty"> + <input type="text" name="super_group[<?php echo $_item->getId() ?>]" maxlength="12" value="<?php echo $_item->getQty()*1 ?>" title="<?php echo __('Qty') ?>" class="input-text qty" data-validate="{'validate-grouped-qty':'#super-product-table'}"/> + </div> + <?php else: ?> + <p class="stock unavailable" title="<?php echo __('Availability') ?>"> + <span><?php echo __('Out of stock') ?></span> + </p> + <?php endif; ?> + </td> + <?php endif; ?> + </tr> + <?php endforeach; ?> + <?php else: ?> + <tr> + <td class="unavailable" colspan="<?php if ($_product->isSaleable()): ?>4<?php else : ?>3<?php endif; ?>"><?php echo __('No options of this product are available.') ?></td> + </tr> + <?php endif; ?> + </tbody> +</table> + diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/view/type/options/configurable.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/type/options/configurable.phtml new file mode 100644 index 00000000000..7163b9c1b51 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/view/type/options/configurable.phtml @@ -0,0 +1,54 @@ +<?php +/** + * 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 design + * @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) + */ +?> + +<?php +$_product = $this->getProduct(); +$_attributes = $this->helper('Magento\Core\Helper\Data')->decorateArray($this->getAllowAttributes()); +?> +<?php if ($_product->isSaleable() && count($_attributes)):?> + <div class="product options configure"> + <?php foreach($_attributes as $_attribute): ?> + <div class="field required"> + <label class="label" for="attribute<?php echo $_attribute->getAttributeId() ?>"> + <span><?php echo $this->escapeHtml($_attribute->getLabel()) ?></span> + </label> + <div class="control"> + <select name="super_attribute[<?php echo $_attribute->getAttributeId() ?>]" data-validate="{required:true}" id="attribute<?php echo $_attribute->getAttributeId() ?>" class="super-attribute-select"> + <option><?php echo __('Choose an Option...') ?></option> + </select> + </div> + </div> + <?php endforeach; ?> + </div> + <script type="text/javascript"> + (function ($) { + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.parsequery.js') ?>", + "<?php echo $this->getViewFileUrl('Magento_Catalog::js/configurable.js') ?>", function () { + $('#product_addtocart_form').configurable({"spConfig":<?php echo $this->getJsonConfig() ?>}); + }) + })(jQuery); + </script> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/link/link_block.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/link/link_block.phtml new file mode 100644 index 00000000000..ee234cbe027 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/link/link_block.phtml @@ -0,0 +1,26 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="widget product link"><a <?php echo $this->getLinkAttributes() ?>><span><?php echo $this->escapeHtml($this->getAnchorText()) ?></span></a></div> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/link/link_inline.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/link/link_inline.phtml new file mode 100644 index 00000000000..ef8fb3f550d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/link/link_inline.phtml @@ -0,0 +1,26 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<span class="widget product link"><a <?php echo $this->getLinkAttributes() ?>><span><?php echo $this->escapeHtml($this->getAnchorText()) ?></span></a></span> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/column/new_default_list.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/column/new_default_list.phtml new file mode 100644 index 00000000000..d6e0d27bd73 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/column/new_default_list.phtml @@ -0,0 +1,70 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if (($_products = $this->getProductCollection()) && $_products->getSize()): ?> +<?php $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image');?> +<div class="block widget new minilist"> + <div class="title"> + <strong><?php echo __('New Products') ?></strong> + </div> + <div class="content"> + <?php echo $this->getPagerHtml() ?> + <?php $suffix = $this->getNameInLayout(); ?> + <?php $iterator = 1; ?> + <ol class="items minilist products" id="widget-new-products-<?php echo $suffix; ?>"> + <?php foreach ($_products->getItems() as $_product): ?> + <?php echo ($iterator++==1) ? '<li class="item product">' : '</li><li class="item product">' ?> + <div class="product"> + <a class="product photo" href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>"> + <?php echo $imageBlock->init($_product, 'side_column_widget_product_thumbnail')->toHtml() ?> + </a> + <div class="product details"> + <strong class="product name"> + <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>)"><?php echo $this->helper('Magento\Catalog\Helper\Output')->productAttribute($_product, $_product->getName() , 'name') ?></a> + </strong> + <?php echo $this->getPriceHtml($_product, true, '-widget-new-'.$suffix) ?> + <div class="product actions"> + <div class="primary"> + <?php if($_product->isSaleable()): ?> + <a href="<?php echo $this->getAddToCartUrl($_product) ?>" class="action tocart"> + <span><?php echo __('Add to Cart') ?></span> + </a> + <?php else: ?> + <?php if ($_product->getIsSalable()): ?> + <p class="stock available" title="<?php echo __('Availability') ?>"><span><?php echo __('In stock') ?></span></p> + <?php else: ?> + <p class="stock unavailable" title="<?php echo __('Availability') ?>"><span><?php echo __('Out of stock') ?></span></p> + <?php endif; ?> + <?php endif; ?> + </div> + </div> + </div> + </div> + <?php echo ($iterator==count($_products->getItems())+1) ? '</li>' : '' ?> + <?php endforeach; ?> + </ol> + </div> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/column/new_images_list.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/column/new_images_list.phtml new file mode 100644 index 00000000000..dcb47041578 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/column/new_images_list.phtml @@ -0,0 +1,47 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if (($_products = $this->getProductCollection()) && $_products->getSize()): ?> +<?php $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); ?> +<div class="widget block new photos"> + <div class="title"> + <strong><?php echo __('New Products') ?></strong> + </div> + <div class="content"> + <?php echo $this->getPagerHtml() ?> + <?php $suffix = $this->getNameInLayout(); ?> + <ol class="items"> + <?php foreach ($_products->getItems() as $_product): ?> + <li class="item"> + <a class="product photo" href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>"> + <!-- new_products_images_only_widget --> + <?php echo $imageBlock->init($_product, 'new_products_images_only_widget')->toHtml() ?> + </a> + </li> + <?php endforeach; ?> + </ol> + </div> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/column/new_names_list.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/column/new_names_list.phtml new file mode 100644 index 00000000000..217c0418f16 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/column/new_names_list.phtml @@ -0,0 +1,43 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if (($_products = $this->getProductCollection()) && $_products->getSize()): ?> +<div class="widget block new names"> + <div class="title"> + <strong><?php echo __('New Products') ?></strong> + </div> + <div class="content"> + <?php echo $this->getPagerHtml() ?> + <?php $suffix = $this->getNameInLayout(); ?> + <ol class="items"> + <?php foreach ($_products->getItems() as $_product): ?> + <li class="item"> + <strong class="product name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>)"><?php echo $this->helper('Magento\Catalog\Helper\Output')->productAttribute($_product, $_product->getName() , 'name') ?></a></strong> + </li> + <?php endforeach; ?> + </ol> + </div> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/content/new_grid.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/content/new_grid.phtml new file mode 100644 index 00000000000..5eef1b00a97 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/content/new_grid.phtml @@ -0,0 +1,120 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +if ($exist = ($this->getProductCollection() && $this->getProductCollection()->getSize())) { + $type = 'widget-new-grid'; + + $class = 'widget new grid'; + + $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); + $image ='new_products_content_widget_grid'; + $title = __('New Products'); + $items = $this->getProductCollection()->getItems(); + + $showWishlist = true; + $showCompare = true; + $showCart = true; + $rating = true; + $description = false; +} +?> + +<?php if ($exist):?> +<div class="block <?php echo $class; ?>"> + <div class="title"> + <strong><?php echo $title; ?></strong> + </div> + <div class="content"> + <?php echo $this->getPagerHtml() ?> + <?php echo '<!-- ' . $image . '-->' ?> + <ol class="products list items <?php echo $type; ?>"> + <?php $iterator = 1; ?> + <?php foreach($items as $_item): ?> + <?php echo ($iterator++==1) ? '<li class="item product">' : '</li><li class="item product">' ?> + <div class="product"> + <a href="<?php echo $this->getProductUrl($_item) ?>" class="product photo"> + <?php echo $imageBlock->init($_item, $image)->toHtml() ?> + </a> + + <div class="product details"> + + <strong class="product name"><a title="<?php echo $this->escapeHtml($_item->getName()) ?>" href="<?php echo $this->getProductUrl($_item) ?>"> + <?php echo $this->escapeHtml($_item->getName()) ?></a> + </strong> + + <?php echo $this->getPriceHtml($_item, true, '-' . $type) ?> + + <?php if ($_item->getRatingSummary() && $rating): ?> + <?php echo $this->getReviewsSummaryHtml($_item,$rating) ?> + <?php endif; ?> + + <?php if($showWishlist || $showCompare || $showCart): ?> + <div class="product actions"> + + <?php if($showCart): ?> + <div class="primary"> + <?php if($_item->isSaleable()): ?> + <button class="action tocart" data-mage-redirect="{event: 'click', url: '<?php echo $this->getAddToCartUrl($_item) ?>'}" type="button" title="<?php echo __('Add to Cart') ?>"> + <span><?php echo __('Add to Cart') ?></span> + </button> + <?php else: ?> + <?php if ($_item->getIsSalable()): ?> + <p class="stock available"><span><?php echo __('In stock') ?></span></p> + <?php else: ?> + <p class="stock unavailable"><span><?php echo __('Out of stock') ?></span></p> + <?php endif; ?> + <?php endif; ?> + </div> + <?php endif; ?> + + <?php if($showWishlist || $showCompare): ?> + <div class="secondary addto links"> + <?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllow() && $showWishlist): ?> + <a href="<?php echo $this->getAddToWishlistUrl($_item) ?>" class="action towishlist" data-action="add-to-wishlist" title="<?php echo __('Add to Wishlist') ?>"> + <span><?php echo __('Add to Wishlist') ?></span> + </a> + <?php endif; ?> + <?php if($this->getAddToCompareUrl($_item) && $showCompare): ?> + <a href="<?php echo $this->getAddToCompareUrl($_item) ?>" class="action tocompare" title="<?php echo __('Add to Compare') ?>"> + <span><?php echo __('Add to Compare') ?></span> + </a> + <?php endif; ?> + </div> + <?php endif; ?> + </div> + <?php endif; ?> + + </div> + </div> + <?php echo ($iterator==count($items)+1) ? '</li>' : '' ?> + <?php endforeach ?> + </ol> + <script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/mage-attributes-processing.js') ?>"); + </script> + </div> +</div> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/content/new_list.phtml b/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/content/new_list.phtml new file mode 100644 index 00000000000..abfa60384a5 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Catalog/product/widget/new/content/new_list.phtml @@ -0,0 +1,121 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +if ($exist = ($this->getProductCollection() && $this->getProductCollection()->getSize())) { + $type = 'widget-new-list'; + + $class = 'widget new list'; + + $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); + $image ='new_products_content_widget_list'; + $title = __('New Products'); + $items = $this->getProductCollection()->getItems(); + + $showWishlist = true; + $showCompare = true; + $showCart = true; + $rating = true; + $description = true; +} +?> + +<?php if ($exist):?> +<div class="block <?php echo $class; ?>"> + <div class="title"> + <strong><?php echo $title; ?></strong> + </div> + <div class="content"> + <?php echo $this->getPagerHtml() ?> + <?php echo '<!-- ' . $image . '-->' ?> + <ol class="products list items <?php echo $type; ?>"> + <?php $iterator = 1; ?> + <?php foreach($items as $_item): ?> + <?php echo ($iterator++==1) ? '<li class="item product">' : '</li><li class="item product">' ?> + <div class="product"> + + <a href="<?php echo $this->getProductUrl($_item) ?>" class="product photo"> + <?php echo $imageBlock->init($_item, $image)->toHtml() ?> + </a> + + <div class="product details"> + + <strong class="product name"><a title="<?php echo $this->escapeHtml($_item->getName()) ?>" href="<?php echo $this->getProductUrl($_item) ?>"> + <?php echo $this->escapeHtml($_item->getName()) ?></a> + </strong> + + <?php echo $this->getPriceHtml($_item, true, '-' . $type) ?> + + <?php if ($_item->getRatingSummary() && $rating): ?> + <?php echo $this->getReviewsSummaryHtml($_item,$rating) ?> + <?php endif; ?> + + <?php if($showWishlist || $showCompare || $showCart): ?> + <div class="product actions"> + + <?php if($showCart): ?> + <div class="primary"> + <?php if($_item->isSaleable()): ?> + <button class="action tocart" data-mage-redirect="{event: 'click', url: '<?php echo $this->getAddToCartUrl($_item) ?>'}" type="button" title="<?php echo __('Add to Cart') ?>"> + <span><?php echo __('Add to Cart') ?></span> + </button> + <?php else: ?> + <?php if ($_item->getIsSalable()): ?> + <p class="stock available"><span><?php echo __('In stock') ?></span></p> + <?php else: ?> + <p class="stock unavailable"><span><?php echo __('Out of stock') ?></span></p> + <?php endif; ?> + <?php endif; ?> + </div> + <?php endif; ?> + + <?php if($showWishlist || $showCompare): ?> + <div class="secondary addto links"> + <?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllow() && $showWishlist): ?> + <a href="<?php echo $this->getAddToWishlistUrl($_item) ?>" class="action towishlist" data-action="add-to-wishlist" title="<?php echo __('Add to Wishlist') ?>"> + <span><?php echo __('Add to Wishlist') ?></span> + </a> + <?php endif; ?> + <?php if($this->getAddToCompareUrl($_item) && $showCompare): ?> + <a href="<?php echo $this->getAddToCompareUrl($_item) ?>" class="action tocompare" title="<?php echo __('Add to Compare') ?>"> + <span><?php echo __('Add to Compare') ?></span> + </a> + <?php endif; ?> + </div> + <?php endif; ?> + </div> + <?php endif; ?> + + </div> + </div> + <?php echo ($iterator==count($items)+1) ? '</li>' : '' ?> + <?php endforeach ?> + </ol> + <script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/mage-attributes-processing.js') ?>"); + </script> + </div> +</div> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_CatalogSearch/advanced/form.phtml b/app/design/frontend/magento_plushe/Magento_CatalogSearch/advanced/form.phtml new file mode 100644 index 00000000000..446652e8ded --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_CatalogSearch/advanced/form.phtml @@ -0,0 +1,129 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Catalog advanced search form + * + * @see \Magento\CatalogSearch\Block\Advanced\Form + */ +?> +<?php $maxQueryLength= $this->helper('Magento\CatalogSearch\Helper\Data')->getMaxQueryLength();?> +<form class="form search advanced" action="<?php echo $this->getSearchPostUrl() ?>" method="get" id="form-validate"> +<fieldset class="fieldset"> + <legend class="legend"><span><?php echo __('Search Settings') ?></span></legend><br /> + <?php foreach ($this->getSearchableAttributes() as $_attribute): ?> + <?php $_code = $_attribute->getAttributeCode() ?> + <div class="field <?php echo $_code ?>"> + <label class="label" for="<?php echo $_code ?>"><span><?php echo $this->getAttributeLabel($_attribute) ?></span></label> + <div class="control"> + <?php switch($this->getAttributeInputType($_attribute)): + case 'number': ?> + <div class="range fields group group-2"> + <div class="field no-label"> + <div class="control"> + <input type="text" name="<?php echo $_code ?>[from]" value="<?php echo $this->escapeHtml($this->getAttributeValue($_attribute, 'from')) ?>" id="<?php echo $_code ?>" title="<?php echo $this->escapeHtml($this->getAttributeLabel($_attribute)) ?>" class="input-text" maxlength="<?php echo $maxQueryLength;?>" data-validate="{number:true, 'less-than-equals-to':'#<?php echo $_code ?>_to'}" /> + </div> + </div> + <div class="field no-label"> + <div class="control"> + <input type="text" name="<?php echo $_code ?>[to]" value="<?php echo $this->escapeHtml($this->getAttributeValue($_attribute, 'to')) ?>" id="<?php echo $_code ?>_to" title="<?php echo $this->escapeHtml($this->getAttributeLabel($_attribute)) ?>" class="input-text" maxlength="<?php echo $maxQueryLength;?>" data-validate="{number:true, 'greater-than-equals-to':'#<?php echo $_code ?>'}" /> + </div> + </div> + </div> + <?php break; + case 'price': ?> + <div class="range price fields group group-2"> + <div class="field no-label"> + <div class="control"> + <input name="<?php echo $_code ?>[from]" value="<?php echo $this->escapeHtml($this->getAttributeValue($_attribute, 'from')) ?>" id="<?php echo $_code ?>" title="<?php echo $this->escapeHtml($this->getAttributeLabel($_attribute)) ?>" class="input-text" type="text" maxlength="<?php echo $maxQueryLength;?>" data-validate="{number:true, 'less-than-equals-to':'#<?php echo $_code ?>_to'}" /> + </div> + </div> + <div class="field with-addon no-label"> + <div class="control"> + <div class="addon"> + <input name="<?php echo $_code ?>[to]" value="<?php echo $this->escapeHtml($this->getAttributeValue($_attribute, 'to')) ?>" id="<?php echo $_code ?>_to" title="<?php echo $this->escapeHtml($this->getAttributeLabel($_attribute)) ?>" class="input-text" type="text" maxlength="<?php echo $maxQueryLength;?>" data-validate="{number:true, 'greater-than-equals-to':'#<?php echo $_code ?>'}" /> + <label class="addafter" for="<?php echo $_code ?>_to"><?php echo $this->getCurrency($_attribute); ?></label> + </div> + </div> + </div> + </div> + <?php break; + case 'select': ?> + <?php echo $this->getAttributeSelectElement($_attribute) ?> + <?php break; + case 'yesno': ?> + <?php echo $this->getAttributeYesNoElement($_attribute) ?> + <?php break; + case 'date': ?> + <div class="range dates fields group group-2"> + <div class="field date no-label"> + <div class="control"> + <?php echo $this->getDateInput($_attribute, 'from') ?> + </div> + </div> + <div class="field date no-label"> + <div class="control"> + <?php echo $this->getDateInput($_attribute, 'to') ?> + </div> + </div> + </div> + <?php break; + default: ?> + <input type="text" name="<?php echo $_code ?>" id="<?php echo $_code ?>" value="<?php echo $this->escapeHtml($this->getAttributeValue($_attribute)) ?>" title="<?php echo $this->escapeHtml($this->getAttributeLabel($_attribute)) ?>" class="input-text <?php echo $this->getAttributeValidationClass($_attribute) ?>" maxlength="<?php echo $maxQueryLength;?>" /> + <?php endswitch; ?> + </div> + </div> + <?php endforeach; ?> +</fieldset> +<div class="actions"> + <button type="submit" class="action search" title="<?php echo __('Search') ?>"><span><?php echo __('Search') ?></span></button> +</div> +</form> +<script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", + function() { + $('#form-validate').validation({ + errorPlacement: function (error, element) { + var parent = element.parent(); + if (parent.hasClass('range')) { + parent.find(this.errorElement + '.' + this.errorClass).remove().end().append(error); + } else { + error.insertAfter(element); + } + }, + messages: { + 'price[to]': {'greater-than-equals-to': 'Please enter a valid price range.'}, + 'price[from]': {'less-than-equals-to': 'Please enter a valid price range.'} + } + }); + }); + })(jQuery); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_CatalogSearch/advanced/result.phtml b/app/design/frontend/magento_plushe/Magento_CatalogSearch/advanced/result.phtml new file mode 100644 index 00000000000..027b889fc9b --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_CatalogSearch/advanced/result.phtml @@ -0,0 +1,61 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if($this->getResultCount()): ?> + <div class="search found"> + <?php echo __('<strong>%1 item(s)</strong> were found using the following search criteria', $this->getResultCount()); ?> + </div> +<?php else: ?> + <div class="error-msg"> + <div> + <?php echo __('No items were found using the following search criteria.');?> <a href="<?php echo $this->getFormUrl(); ?>"><?php echo __('Modify your search'); ?></a> + </div> + </div> +<?php endif; ?> + +<?php $searchCriterias=$this->getSearchCriterias(); ?> +<div class="search summary"> + <?php foreach (array('left', 'right') as $side): ?> + <?php if(@$searchCriterias[$side]): ?> + <ul class="items"> + <?php foreach($searchCriterias[$side] as $criteria): ?> + <li class="item"><strong><?php echo $this->escapeHtml(__($criteria['name'])); ?>:</strong> <?php echo $this->escapeHtml($criteria['value']); ?></li> + <?php endforeach; ?> + </ul> + <?php endif; ?> + <?php endforeach; ?> +</div> +<?php if($this->getResultCount()): ?> + <div class="note-msg"> + <div> + <?php echo __("Don't see what you're looking for?"); ?> + <a href="<?php echo $this->getFormUrl(); ?>"><?php echo __('Modify your search'); ?></a> + </div> + </div> +<?php endif; ?> +<?php if($this->getResultCount()): ?> + <div class="search results"><?php echo $this->getProductListHtml() ?></div> +<?php endif; ?> +<?php $this->getSearchCriterias(); ?> diff --git a/app/design/frontend/magento_plushe/Magento_CatalogSearch/form.mini.phtml b/app/design/frontend/magento_plushe/Magento_CatalogSearch/form.mini.phtml new file mode 100644 index 00000000000..20624b1c511 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_CatalogSearch/form.mini.phtml @@ -0,0 +1,88 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** @var $this \Magento\Core\Block\Template */ +/** @var $helper \Magento\CatalogSearch\Helper\Data */ +$helper = $this->helper('Magento\CatalogSearch\Helper\Data'); +?> +<div class="block search"> + <div class="title"><strong><?php echo __('Search') ?></strong></div> + <div class="content search"> + <form class="form minisearch" id="search_mini_form" action="<?php echo $helper->getResultUrl() ?>" + method="get"> + <div class="field search"> + <label class="label" for="search"><?php echo __('Search') ?></label> + <div class="control"> + <input id="search" type="text" name="<?php echo $helper->getQueryParamName() ?>" value="<?php echo $helper->getEscapedQueryText() ?>" placeholder="<?php echo __('Search entire store here...') ?>" class="input-text" autocomplete="off"/> + <div id="search_autocomplete" class="search autocomplete"></div> + <a class="action advanced" href="<?php echo $helper->getAdvancedSearchUrl(); ?>"><?php echo __('Advanced Search'); ?></a> + </div> + </div> + <div class="actions"> + <button type="submit" title="<?php echo __('Search') ?>" class="action search"><span><?php echo __('Search') ?></span></button> + </div> + <script type="text/javascript"> + //<![CDATA[ + (function($) { + head.js("<?php echo $this->getViewFileUrl('Magento_CatalogSearch::form-mini.js')?>", function() { + $('#search').catalogSearch({ + formSelector: '#search_mini_form', + url: '<?php echo $helper->getSuggestUrl() ?>', + destinationSelector: '#search_autocomplete' + //placeholder: '<?php echo __('Search entire store here...') ?>', + }); + }); + })(jQuery); + //]]> + </script> + </form> + </div> +</div> + + +<?php /* +<form id="search_mini_form" action="<?php echo $helper->getResultUrl() ?>" + method="get"> + <div class="form-search"> + <label for="search"><?php echo __('Search:') ?></label><input id="search" type="text" name="<?php echo $helper->getQueryParamName() ?>" value="<?php echo $helper->getEscapedQueryText() ?>" class="input-text" autocomplete="off"/> <button type="submit" title="<?php echo __('Search') ?>" class="button"><span><span><?php echo __('Search') ?></span></span></button><a href="<?php echo $helper->getAdvancedSearchUrl(); ?>"><?php echo __('Advanced Search'); ?></a> + <div id="search_autocomplete" class="search-autocomplete"></div> + <script type="text/javascript"> + //<![CDATA[ + (function($) { + head.js("<?php echo $this->getViewFileUrl('Magento_CatalogSearch::form-mini.js')?>", function() { + $('#search').catalogSearch({ + formSelector: '#search_mini_form', + placeholder: '<?php echo __('Search entire store here...') ?>', + url: '<?php echo $helper->getSuggestUrl() ?>', + destinationSelector: '#search_autocomplete' + }); + }); + })(jQuery); + //]]> + </script> + </div> +</form> +*/ ?> diff --git a/app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/catalogsearch_advanced_index.xml b/app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/catalogsearch_advanced_index.xml new file mode 100644 index 00000000000..58a124e9c15 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/catalogsearch_advanced_index.xml @@ -0,0 +1,28 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <update handle="page_one_column"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/catalogsearch_advanced_result.xml b/app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/catalogsearch_advanced_result.xml new file mode 100644 index 00000000000..05344815a0a --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/catalogsearch_advanced_result.xml @@ -0,0 +1,33 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <update handle="page_two_columns_left"/> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="title" xsi:type="string">Catalog Advanced Search</argument> + </action> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/catalogsearch_result_index.xml b/app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/catalogsearch_result_index.xml new file mode 100644 index 00000000000..2471560447b --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/catalogsearch_result_index.xml @@ -0,0 +1,35 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="search_result_list"> + <arguments> + <!-- If position of argument is depend on image size changable in VDE: + positions:list-secondary,grid-secondary,list-actions,grid-actions,list-primary,grid-primary + --> + <argument name="positioned" xsi:type="string">positions:list-secondary</argument> + </arguments> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/catalogsearch_term_popular.xml b/app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/catalogsearch_term_popular.xml new file mode 100644 index 00000000000..8f2b1e21cb7 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/catalogsearch_term_popular.xml @@ -0,0 +1,33 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <update handle="page_one_column"/> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="title" xsi:type="string">Popular Search Terms</argument> + </action> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/override/catalogsearch_result_index.xml b/app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/override/catalogsearch_result_index.xml new file mode 100644 index 00000000000..e6bc30b72bf --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_CatalogSearch/layout/override/catalogsearch_result_index.xml @@ -0,0 +1,46 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Quick Search Form" type="page" parent="default"> + <update handle="page_two_columns_left"/> + <referenceContainer name="left"> + <block class="Magento\CatalogSearch\Block\Layer" name="catalogsearch.leftnav" before="-" template="Magento_Catalog::layer/view.phtml"/> + </referenceContainer> + <referenceContainer name="content"> + <block class="Magento\CatalogSearch\Block\Result" name="search.result" template="result.phtml"> + <block class="Magento\Catalog\Block\Product\ListProduct" name="search_result_list" template="product/list.phtml"> + <block class="Magento\Catalog\Block\Product\ProductList\Toolbar" name="product_list_toolbar" template="product/list/toolbar.phtml"> + <block class="Magento\Page\Block\Html\Pager" name="product_list_toolbar_pager"/> + </block> + <action method="setToolbarBlockName"> + <argument name="name" xsi:type="string">product_list_toolbar</argument> + </action> + </block> + <action method="setListOrders"/> + <action method="setListModes"/> + <action method="setListCollection"/> + </block> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_CatalogSearch/result.phtml b/app/design/frontend/magento_plushe/Magento_CatalogSearch/result.phtml new file mode 100644 index 00000000000..4bf465e769e --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_CatalogSearch/result.phtml @@ -0,0 +1,53 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if($this->getResultCount()): ?> +<?php echo $this->getChildHtml('tagged_product_list_rss_link'); ?> +<div class="search results"> + <?php if ($messages = $this->getNoteMessages()):?> + <div class="note-msg"> + <div> + <?php foreach ($messages as $message):?> + <?php echo $message?><br /> + <?php endforeach;?> + </div> + </div> + <?php endif; ?> + <?php echo $this->getProductListHtml() ?> +</div> +<?php else: ?> + +<div class="note-msg"> + <div> + <?php echo ($this->getNoResultText()) ? $this->getNoResultText() : __('Your search returns no results.') ?> + <?php echo $this->getAdditionalHtml() ?> + <?php if ($messages = $this->getNoteMessages()):?> + <?php foreach ($messages as $message):?> + <br /><?php echo $message?> + <?php endforeach;?> + <?php endif; ?> + </div> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_CatalogSearch/term.phtml b/app/design/frontend/magento_plushe/Magento_CatalogSearch/term.phtml new file mode 100644 index 00000000000..706dff536e6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_CatalogSearch/term.phtml @@ -0,0 +1,35 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php if( sizeof($this->getTerms()) > 0 ): ?> + <ul class="search terms"> + <?php foreach ($this->getTerms() as $_term): ?> + <li class="item"><a href="<?php echo $this->getSearchUrl($_term) ?>" style="font-size:<?php echo $_term->getRatio()*70+75 ?>%;"><?php echo $this->escapeHtml($_term->getName()) ?></a></li> + <?php endforeach; ?> + </ul> +<?php else: ?> + <div class="note-msg"><div><?php echo __('There are no search terms available.'); ?></div></div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/cart.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/cart.phtml new file mode 100644 index 00000000000..af7fcbff53f --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/cart.phtml @@ -0,0 +1,37 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Shopping cart template + * + * @see \Magento\Checkout\Block\Cart + */ +?> +<?php if ($this->getItemsCount()) { + echo $this->getChildHtml('with-items'); +} else { + echo $this->getChildHtml('no-items'); +} diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/cart/coupon.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/cart/coupon.phtml new file mode 100644 index 00000000000..9bd1430c089 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/cart/coupon.phtml @@ -0,0 +1,69 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="block discount"> + <div class="title"><strong><?php echo __('Discount Codes') ?></strong></div> + <div class="content"> + <form id="discount-coupon-form" action="<?php echo $this->getUrl('checkout/cart/couponPost') ?>" method="post"> + <fieldset class="fieldset coupon<?php strlen($this->getCouponCode()) ? ' applied' : ''?>"> + <input type="hidden" name="remove" id="remove-coupon" value="0" /> + <div class="field"> + <label for="coupon_code" class="label"><span><?php echo __('Enter your coupon code if you have one.') ?></span></label> + <div class="control"> + <input type="text" class="input-text" id="coupon_code" name="coupon_code" value="<?php echo $this->escapeHtml($this->getCouponCode()) ?>" /> + </div> + </div> + <div class="actions"> + <div class="primary"> + <button class="action apply" type="button" value="<?php echo __('Apply Coupon') ?>"> + <span><?php echo __('Apply Coupon') ?></span> + </button> + </div> + <?php if(strlen($this->getCouponCode())): ?> + <div class="secondary"> + <button type="button" class="action cancel" value="<?php echo __('Cancel Coupon') ?>"><span><?php echo __('Cancel Coupon') ?></span></button> + </div> + <?php endif; ?> + </div> + </fieldset> + </form> + <script type="text/javascript"> + //<![CDATA[ + (function($) { + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", + "<?php echo $this->getViewFileUrl('Magento_Checkout::js/discount-codes.js')?>", function() { + $('#discount-coupon-form').discountCode({ + couponCodeSelector: '#coupon_code', removeCouponSelector: '#remove-coupon', + applyButton: 'button.action.apply', cancelButton: 'button.action.cancel' + }); + }); + })(jQuery); + //]]> + </script> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/cart/form.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/cart/form.phtml new file mode 100644 index 00000000000..4efca67cfb0 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/cart/form.phtml @@ -0,0 +1,107 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Shopping cart template + * + * @see \Magento\Checkout\Block\Cart + */ +?> +<?php $mergedCells = ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices() ? 2 : 1); ?> +<div class="cart table wrapper<?php echo $mergedCells == 2 ? ' detailed' : ''; ?>"> + <?php echo $this->getChildHtml('form_before') ?> + <form action="<?php echo $this->getUrl('checkout/cart/updatePost') ?>" method="post" id="form-validate" > + <table id="shopping-cart-table" class="cart items data"> + <thead> + <tr> + <th class="col item" rowspan="<?php echo $mergedCells; ?>"><span><?php echo __('Item') ?></span></th> + <th class="col price" colspan="<?php echo $mergedCells; ?>"><span><?php echo __('Unit Price') ?></span></th> + <th class="col qty" rowspan="<?php echo $mergedCells; ?>" class="a-center"><span><?php echo __('Qty') ?></span></th> + <th class="col subtotal" colspan="<?php echo $mergedCells; ?>"><span><?php echo __('Subtotal') ?></span></th> + </tr> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <tr> + <th class="col price excl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(false) ?></th> + <th class="col price incl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(true) ?></th> + <th class="col subtotal excl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(false) ?></th> + <th class="col subtotal incl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(true) ?></th> + </tr> + <?php endif; ?> + </thead> + <?php foreach($this->getItems() as $_item): ?> + <?php echo $this->getItemHtml($_item) ?> + <?php endforeach ?> + </table> + <div class="cart main actions"> + <?php if($this->getContinueShoppingUrl()): ?> + <a class="action continue" href="<?php echo $this->getContinueShoppingUrl() ?>" title="<?php echo __('Continue Shopping') ?>"> + <span><?php echo __('Continue Shopping') ?></span> + </a> + <?php endif; ?> + <button type="submit" name="update_cart_action" value="update_qty" title="<?php echo __('Update Shopping Cart'); ?>" class="action update"> + <span><?php echo __('Update Shopping Cart'); ?></span> + </button> + <button type="submit" name="update_cart_action" value="empty_cart" title="<?php echo __('Clear Shopping Cart'); ?>" class="action clear" id="empty_cart_button"> + <span><?php echo __('Clear Shopping Cart'); ?></span> + </button> + <!--[if lt IE 8]> + <input type="hidden" value="" id="update_cart_action_container" /> + <![endif]--> + <script type="text/javascript"> + //<![CDATA[ + (function($) { + head.js("<?php echo $this->getViewFileUrl('Magento_Checkout::js/shopping-cart.js')?>", + function() { + // Internet Explorer (lt 8) does not support value attribute in button elements + $('#shopping-cart-table').shoppingCart({ + emptyCartButton: 'action.clear', + updateCartActionContainer: '#update_cart_action_container' + }); + }); + })(jQuery); + //]]> + </script> + </div> + </form> + <?php echo $this->getChildHtml('shopping.cart.table.after'); ?> + <script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('js/sticky.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", + function() { + $('#form-validate').validation(); + $('.cart.summary').sticky({ + container: '.cart.container' + }); + }); + })(jQuery) + </script> +</div> + diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/cart/item/configure/updatecart.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/cart/item/configure/updatecart.phtml new file mode 100644 index 00000000000..34e87f8932f --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/cart/item/configure/updatecart.phtml @@ -0,0 +1,60 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_product = $this->getProduct(); ?> +<?php $buttonTitle = __('Update Cart'); ?> +<?php if ($_product->isSaleable()): ?> + <div class="box tocart update"> + <?php if (!$_product->isGrouped()): ?> + <div class="field qty"> + <label class="label" for="qty"><span><?php echo __('Qty:') ?></span></label> + <div class="control"> + <input type="text" name="qty" id="qty" maxlength="12" value="<?php echo $this->getProductDefaultQty() * 1 ?>" title="<?php echo __('Qty') ?>" class="input-text qty" data-validate=" {required:true,digits:true}"/> + </div> + </div> + <?php endif; ?> + <div class="actions"> + <button type="button" class="action primary tocart" title="<?php echo $buttonTitle ?>" id="product-updatecart-button"><span><?php echo $buttonTitle ?></span></button> + </div> + <?php echo $this->getChildHtml('', true) ?> + </div> + + <script type="text/javascript"> + (function ($) { + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", + "<?php echo $this->getViewFileUrl('Magento_Catalog::js/msrp.js') ?>", function () { + $('#product_addtocart_form').addToCart({ + cartButtonId: "#product-updatecart-button", + cartForm: "#product_addtocart_form" + }).validation(); + }); + })(jQuery); + </script> +<?php endif; ?> + + diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/cart/item/default.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/cart/item/default.phtml new file mode 100644 index 00000000000..fd3eb94d980 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/cart/item/default.phtml @@ -0,0 +1,293 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +$_item = $this->getItem(); +$isVisibleProduct = $_item->getProduct()->isVisibleInSiteVisibility(); +$canApplyMsrp = $this->helper('Magento\Catalog\Helper\Data')->canApplyMsrp($_item->getProduct(), \Magento\Catalog\Model\Product\Attribute\Source\Msrp\Type::TYPE_BEFORE_ORDER_CONFIRM); +?> +<tbody class="cart item"> +<tr class="item info"> + <td class="col item"> + <?php if ($this->hasProductUrl()):?><a href="<?php echo $this->getProductUrl() ?>" title="<?php echo $this->escapeHtml($this->getProductName()) ?>" class="product photo"><?php endif;?> + <?php echo $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image')->init($_item->getProduct(), 'cart_page_product_thumbnail')->toHtml(); ?> + <?php if ($this->hasProductUrl()):?></a><?php endif;?> + <div class="product details"> + <strong class="product name"> + <?php if ($this->hasProductUrl()):?> + <a href="<?php echo $this->getProductUrl() ?>"><?php echo $this->escapeHtml($this->getProductName()) ?></a> + <?php else: ?> + <?php echo $this->escapeHtml($this->getProductName()) ?> + <?php endif; ?> + </strong> + <?php if ($_options = $this->getOptionList()):?> + <dl class="cart item options"> + <?php foreach ($_options as $_option) : ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>><?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <div class="truncated_full_value"> + <dl class="item-options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + </div> + <?php endif; ?> + </dd> + <?php endforeach; ?> + </dl> + <?php endif;?> + <?php if ($messages = $this->getMessages()): ?> + <?php foreach ($messages as $message): ?> + <p class="cart item message <?php echo $message['type'] ?>">* <?php echo $this->escapeHtml($message['text']) ?></p> + <?php endforeach; ?> + <?php endif; ?> + <?php $addInfoBlock = $this->getProductAdditionalInformationBlock(); ?> + <?php if ($addInfoBlock): ?> + <?php echo $addInfoBlock->setItem($_item)->toHtml() ?> + <?php endif;?> + </div> + </td> + + <?php if ($canApplyMsrp): ?> + <td class="col msrp a-right"<?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> colspan="2"<?php endif; ?>> + <span class="cart-price"> + <span class="cart-msrp-unit"><?php echo __('See price before order confirmation.'); ?></span> + <?php $helpLinkId = 'cart-msrp-help-' . $_item->getId(); ?> + <a id="<?php echo $helpLinkId ?>" href="#" class="map-help-link"><?php echo __("What's this?"); ?></a> + <script type="text/javascript"> + Catalog.Map.addHelpLink($('<?php echo $helpLinkId ?>'), "<?php echo __("What's this?") ?>"); + </script> + </span> + </td> + <?php else: ?> + + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceExclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="col price excl tax"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()) ?> + <?php endif; ?> + + </span> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="eunit-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="weee"><?php echo __('Total'); ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceInclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="col price incl tax"> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($_item); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl-$_item->getWeeeTaxDisposition()) ?> + <?php endif; ?> + + </span> + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="unit-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="weee"><?php echo __('Total incl. tax'); ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> + <?php endif; ?> + <td class="col qty"> + <div class="control qty"> + <input name="cart[<?php echo $_item->getId() ?>][qty]" value="<?php echo $this->getQty() ?>" type="text" size="4" title="<?php echo __('Qty') ?>" class="input-text qty" maxlength="12" data-validate="{required:true,'validate-greater-than-zero':true}"/> + </div> + </td> + <?php if (($this->helper('Magento\Tax\Helper\Data')->displayCartPriceExclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()) && !$_item->getNoSubtotal()): ?> + <td class="col subtotal excl tax"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($canApplyMsrp): ?> + <span class="cart-msrp-subtotal">--</span> + <?php else: ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()) ?> + <?php endif; ?> + <?php endif; ?> + + </span> + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="esubtotal-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="weee"><?php echo __('Total'); ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> + <?php if (($this->helper('Magento\Tax\Helper\Data')->displayCartPriceInclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()) && !$_item->getNoSubtotal()): ?> + <td class="col subtotal incl tax"> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($_item); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($canApplyMsrp): ?> + <span class="cart-msrp-subtotal">--</span> + <?php else: ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedRowAmount()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl-$_item->getWeeeTaxRowDisposition()) ?> + <?php endif; ?> + <?php endif; ?> + + </span> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="subtotal-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="weee"><?php echo __('Total incl. tax'); ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedRowAmount()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> +</tr> +<tr class="item actions"> + <td colspan="100"> + <div class="actions"> + + <?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllowInCart()) : ?> + <?php if ($isVisibleProduct): ?> + <a href="<?php echo $this->helper('Magento\Wishlist\Helper\Data')->getMoveFromCartUrl($_item->getId()); ?>" class="use-ajax action towishlist"> + <span><?php echo __('Move to Wishlist'); ?></span> + </a> + <?php endif ?> + <?php endif ?> + + <?php if ($isVisibleProduct): ?> + <a class="action edit" href="<?php echo $this->getConfigureUrl() ?>" title="<?php echo __('Edit item parameters') ?>"><span><?php echo __('Edit') ?></span></a> + <?php endif ?> + + <a href="<?php echo $this->getDeleteUrl()?>" title="<?php echo __('Remove item')?>" class="action delete"><span><?php echo __('Remove item')?></span></a> + </div> + </td> +</tr> +</tbody> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/cart/methods.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/cart/methods.phtml new file mode 100644 index 00000000000..8c71d1ff073 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/cart/methods.phtml @@ -0,0 +1,42 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Shopping cart template + * + * @see \Magento\Checkout\Block\Cart + */ +?> +<?php if(!$this->hasError()): ?> +<?php $methods = $this->getMethods('methods') ? : $this->getMethods('top_methods') ?> +<ul class="checkout methods items"> +<?php foreach ($methods as $method): ?> + <?php if ($methodHtml = $this->getMethodHtml($method)): ?> + <li class="item"><?php echo $methodHtml; ?></li> + <?php endif; ?> +<?php endforeach; ?> +</ul> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/cart/minicart.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/cart/minicart.phtml new file mode 100644 index 00000000000..6614e01c4fa --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/cart/minicart.phtml @@ -0,0 +1,137 @@ +<?php +/** + * 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 design + * @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) + */ + +/** + * Shoping cart sidebar + * + * @see \Magento\Checkout\Block\Cart\Sidebar + */ +?> +<?php if ($this->getInList()): ?> + <li data-block="minicart" class="minicart wrapper"> +<?php else: ?> + <div data-block="minicart" class="minicart wrapper"> +<?php endif; ?> +<?php $_cartQty = $this->getSummaryCount() ?> +<?php if (!$this->getIsLinkMode() || !$this->getIsNeedToDisplaySideBar()): ?> + <a data-toggle="dropdown" class="action showcart" href="<?php echo $this->getUrl('checkout/cart'); ?>"> + <span class="text"><?php echo __('My Cart'); ?></span> + <span class="qty<?php echo ($_cartQty > 0) ? '' : ' empty'; ?>"> + <?php echo $_cartQty ?> + </span> + </a> + <div data-target="dropdown" class="block minicart<?php echo ($_cartQty > 0) ? '' : ' empty'; ?>"> + <button title="<?php echo __('Close'); ?>" type="button" class="action close" data-toggle="dropdown"> + <span><?php echo __('Close'); ?></span> + </button> + <div class="title"> + <strong> + <span class="text"><?php echo __('My Cart'); ?></span> + <span title="<?php echo __('Items in Cart'); ?>" class="qty<?php echo ($_cartQty > 0) ? '' : ' empty'; ?>"> + <?php echo $_cartQty ?> + </span> + </strong> + </div> + <div class="content"> + <?php $_items = $this->getRecentItems() ?> + <?php if (count($_items)): ?> + <strong class="subtitle"><?php echo __('Recently added item(s)') ?></strong> + <div data-action="scroll" class="products minilist"> + <ol id="mini-cart" class="minilist items"> + <?php foreach ($_items as $_item): ?> + <?php echo $this->getItemHtml($_item) ?> + <?php endforeach; ?> + </ol> + </div> + <?php else: ?> + <strong class="subtitle empty"> + <?php echo __('You have no items in your shopping cart.') ?> + </strong> + <?php if ($this->getCartEmptyMessage()): ?> + <p class="minicart empty text"><?php echo $this->getCartEmptyMessage(); ?></p> + <?php endif; ?> + <?php endif ?> + + <?php if ($_cartQty || $this->getAllowCartLink()): ?> + <?php $isPossibleOnepageCheckout = $_cartQty && $this->isPossibleOnepageCheckout() ?> + <?php if ($isPossibleOnepageCheckout): ?> + <div class="subtotal"> + <?php if ($this->canApplyMsrp()): ?> + <span class="mark msrp"> + <?php echo __('ORDER TOTAL WILL BE DISPLAYED BEFORE YOU SUBMIT THE ORDER'); ?> + </span> + <?php else: ?> + <span class="mark"> + <?php echo __('Cart Subtotal') ?> + </span> + <div class="amount"> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($this->getSubtotal()) ?> + <?php if ($_subtotalInclTax = $this->getSubtotalInclTax()): ?> + <span class="amount incl tax"> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_subtotalInclTax) ?> + <?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcText(true) ?> + </span> + <?php endif; ?> + </div> + <?php endif; ?> + </div> + <?php endif ?> + <?php echo $this->getChildHtml('minicart_info') ?> + <div class="actions"> + <div class="primary"> + <?php if ($isPossibleOnepageCheckout): ?> + <?php echo $this->getChildHtml('extra_actions') ?> + <button id="top-cart-btn-checkout" type="button" class="action checkout" title="<?php echo __('Checkout') ?>"> + <span><?php echo __('Checkout') ?></span> + </button> + <?php endif; ?> + </div> + <div class="secondary"> + <a class="action viewcart" href="<?php echo $this->getUrl('checkout/cart'); ?>"> + <span><?php echo __('View cart') ?></span> + </a> + </div> + </div> + <?php endif ?> + </div> + </div> +<?php endif; ?> +<script type="text/javascript"> + (function($) { + head.js("<?php echo $this->getViewFileUrl('Magento_Checkout::js/sidebar.js') ?>", function() { + $('[data-block="minicart"]').sidebar({ + checkoutUrl: '<?php echo $this->getCheckoutUrl();?>', + checkoutButton: '#top-cart-btn-checkout', + removeButton: '#mini-cart a.action.delete', + confirmMessage: '<?php echo __('Are you sure you would like to remove this item from the shopping cart?') ?>' + }); + }); + })(jQuery); +</script> +<?php if ($this->getInList()): ?> + </li> +<?php else: ?> + </div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/cart/noItems.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/cart/noItems.phtml new file mode 100644 index 00000000000..1b41606e3f0 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/cart/noItems.phtml @@ -0,0 +1,31 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="cart empty"> + <?php echo $this->getChildHtml('checkout_cart_empty_widget'); ?> + <p><?php echo __('You have no items in your shopping cart.') ?></p> + <p><?php echo __('Click <a href="%1">here</a> to continue shopping.', $this->getContinueShoppingUrl()) ?></p> + <?php echo $this->getChildHtml('shopping.cart.table.after'); ?> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/cart/shipping.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/cart/shipping.phtml new file mode 100644 index 00000000000..35caee43cee --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/cart/shipping.phtml @@ -0,0 +1,126 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php /** @var $this \Magento\Checkout\Block\Cart\Shipping */ ?> +<div class="block shipping"> + <div class="title"><strong><?php echo __('Estimate Shipping and Tax') ?></strong></div> + <div class="content"> + <form action="<?php echo $this->getUrl('checkout/cart/estimatePost') ?>" method="post" id="shipping-zip-form"> + <fieldset class="fieldset estimate"> + <p class="field note"><?php echo __('Enter your destination to get a shipping estimate.') ?></p> + <div class="field country"> + <label for="country" class="label"><span><?php echo __('Country') ?></span></label> + <div class="control"> + <?php echo $this->getDirectoryBlock()->getCountryHtmlSelect($this->getEstimateCountryId()) ?> + </div> + </div> + <?php //if($this->getStateActive()): ?> + <div class="field region<?php if ($this->isStateProvinceRequired()) echo ' required' ?>"> + <label for="region_id" class="label"><span><?php echo __('State/Province') ?></span></label> + <div class="control"> + <select id="region_id" name="region_id" title="<?php echo __('State/Province') ?>" style="display:none;"<?php echo ($this->isStateProvinceRequired() ? ' class="validate-select"' : '') ?>> + <option value=""><?php echo __('Please select region, state or province') ?></option> + </select> + <input type="text" id="region" name="region" value="<?php echo $this->escapeHtml($this->getEstimateRegion()) ?>" title="<?php echo __('State/Province') ?>" class="input-text" style="display:none;" /> + </div> + </div> + <?php //endif; ?> + <?php if($this->getCityActive()): ?> + <div class="field city<?php if ($this->isCityRequired()) echo ' required' ?>"> + <label for="city" class="label"><span><?php echo __('City') ?></span></label> + <div class="control"> + <input class="input-text<?php if ($this->isCityRequired()):?> required-entry<?php endif;?>" id="city" type="text" name="estimate_city" value="<?php echo $this->escapeHtml($this->getEstimateCity()) ?>" /> + </div> + </div> + <?php endif; ?> + <div class="field postcode<?php if ($this->isZipCodeRequired()) echo ' required' ?>"> + <label for="postcode" class="label"><span><?php echo __('Zip/Postal Code') ?></span></label> + <div class="control"> + <input class="input-text validate-postcode<?php if ($this->isZipCodeRequired()):?> required-entry<?php endif;?>" type="text" id="postcode" name="estimate_postcode" value="<?php echo $this->escapeHtml($this->getEstimatePostcode()) ?>" /> + </div> + </div> + <div class="actions"> + <button type="submit" class="action quote"><span><?php echo __('Get a Quote') ?></span></button> + </div> + </fieldset> + </form> + <script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", + "<?php echo $this->getViewFileUrl('Magento_Checkout::js/region-updater.js') ?>", + function() { + $('#country').regionUpdater({ + optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, + regionListId: '#region_id', + regionInputId: '#region', + postcodeId: '#postcode', + form: $('#shipping-zip-form').validation(), + regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, + defaultRegion: "<?php echo $this->getEstimateRegionId() ?>", + countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> + }); + }); + })(jQuery); + </script> + <?php if (($_shippingRateGroups = $this->getEstimateRates())): ?> + <form id="co-shipping-method-form" action="<?php echo $this->getUrl('checkout/cart/estimateUpdatePost') ?>"> + <fieldset class="fieldset rates"> + <dl class="items methods"> + <?php foreach ($_shippingRateGroups as $code => $_rates): ?> + <dt class="item title"><span><?php echo $this->escapeHtml($this->getCarrierName($code)) ?></span></dt> + <dd class="item options"> + <?php foreach ($_rates as $_rate): ?> + <div class="field choice item<?php if ($_rate->getErrorMessage()) echo ' error-msg';?>"> + <?php if ($_rate->getErrorMessage()): ?> + <?php echo $this->escapeHtml($_rate->getErrorMessage()) ?> + <?php else: ?> + <input name="estimate_method" type="radio" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>"<?php if($_rate->getCode()===$this->getAddressShippingMethod()) echo ' checked="checked"' ?> class="radio" /> + <label class="label" for="s_method_<?php echo $_rate->getCode() ?>"> + <span><?php echo $this->escapeHtml($_rate->getMethodTitle()) ?></span> + <?php $_excl = $this->getShippingPrice($_rate->getPrice(), $this->helper('Magento\Tax\Helper\Data')->displayShippingPriceIncludingTax()); ?> + <?php $_incl = $this->getShippingPrice($_rate->getPrice(), true); ?> + <?php echo $_excl; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayShippingBothPrices() && $_incl != $_excl): ?> + (<?php echo __('Incl. Tax'); ?> <?php echo $_incl; ?>) + <?php endif; ?> + </label> + <?php endif ?> + </div> + <?php endforeach; ?> + </dd> + <?php endforeach; ?> + </dl> + <div class="actions"> + <button type="submit" class="action update" name="do" value="<?php echo __('Update Total') ?>"><span><?php echo __('Update Total') ?></span></button> + </div> + </fieldset> + </form> + <?php endif; ?> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/cart/sidebar/default.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/cart/sidebar/default.phtml new file mode 100644 index 00000000000..32a7bb3c4aa --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/cart/sidebar/default.phtml @@ -0,0 +1,352 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_item = $this->getItem() ?> +<?php $canApplyMsrp = $this->helper('Magento\Catalog\Helper\Data')->canApplyMsrp($_item->getProduct(), \Magento\Catalog\Model\Product\Attribute\Source\Msrp\Type::TYPE_BEFORE_ORDER_CONFIRM); ?> +<?php $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image')?> +<li class="item product"> + <div class="product"> + <?php if ($this->hasProductUrl()): ?> + <a href="<?php echo $this->getProductUrl()?>" title="<?php echo $this->escapeHtml($this->getProductName()) ?>" class="product photo"> + <?php echo $imageBlock->init($_item->getProduct(), 'mini_cart_product_thumbnail')->toHtml() ?> + </a> + <?php else: ?> + <span class="product photo"> + <?php echo $imageBlock->init($_item->getProduct(), 'mini_cart_product_thumbnail')->toHtml() ?> + </span> + <?php endif; ?> + + <div class="product details"> + <strong class="product name"> + <?php if ($this->hasProductUrl()): ?> + <a href="<?php echo $this->getProductUrl() ?>"><?php echo $this->escapeHtml($this->getProductName()) ?></a> + <?php else: ?> + <?php echo $this->escapeHtml($this->getProductName()) ?> + <?php endif; ?> + </strong> + + + <?php if ($_options = $this->getOptionList()):?> + <div class="product options wrapper"> + <span class="more"><?php echo __('View Details') ?></span> + + <div class="product options details"> + <strong class="title"><?php echo __('Options Details'); ?></strong> + <dl class="product options list"> + <?php foreach ($_options as $_option) : ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd> + <?php if (is_array($_option['value'])): ?> + <?php echo nl2br(implode("\n", $_option['value'])) ?> + <?php else: ?> + <?php echo $_option['value'] ?> + <?php endif; ?> + </dd> + <?php endforeach; ?> + </dl> + </div> + </div> + <?php endif; ?> + + <?php if ($_item->getProduct()->isVisibleInSiteVisibility()):?> + <a href="<?php echo $this->getConfigureUrl() ?>" title="<?php echo __('Edit item') ?>" class="action edit"><span><?php echo __('Edit')?></span></a> + <?php endif ?> + + +<?php // Prices ?> + +<div class="pricing details<?php echo $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices() ? ' complex' : ''; ?>"> + + + <?php if ($canApplyMsrp): ?> + + <div class="rate map"> + <span class="label"><?php echo __('Price'); ?></span> + <span class="value"><?php echo __('See price before order confirmation.'); ?></span> + </div> + + <?php else: ?> + + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceExclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <div class="rate"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <span class="label excl tax"><?php echo __('Excl. Tax'); ?></span> + <?php else: ?> + <span class="label display"><?php echo __('Price'); ?></span> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?> + <span class="value excl tax"> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?> + </span> + <?php else: ?> + <span class="value display"> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()) ?> + </span> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales')): ?> + + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <div class="rate weee"> + <span class="label weee"><?php echo $tax['title']; ?></span> + <span class="value weee"><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount'],true,true); ?></span> + </div> + <?php endforeach; ?> + + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales')): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <div class="rate weee"> + <span class="label weee"><?php echo $tax['title']; ?></span> + <span class="value weee"><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span> + </div> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales')): ?> + + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <div class="rate weee"> + <span class="label weee"><?php echo $tax['title']; ?></span> + <span class="value weee"><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span> + </div> + <?php endforeach; ?> + + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales')): ?> + <div class="rate weee total"> + <span class="label weee"><?php echo __('Total:'); ?></span> + <span class="value weee"><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + <?php endif; ?> + + + + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceInclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($_item); ?> + <div class="rate"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <span class="label tax incl"><?php echo __('Incl. Tax'); ?></span> + <?php else: ?> + <span class="label display"><?php echo __('Price'); ?></span> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?> + <span class="value tax incl"><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?></span> + <?php else: ?> + <span class="value display"><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl-$_item->getWeeeTaxDisposition()) ?></span> + <?php endif; ?> + </div> + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales')): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <div class="rate weee"> + <span class="label weee"><?php echo $tax['title']; ?></span> + <span class="value weee"><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount'],true,true); ?></span> + </div> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales')): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <div class="rate weee"> + <span class="label weee"><?php echo $tax['title']; ?></span> + <span class="value weee"><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span> + </div> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales')): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <div class="rate weee"> + <span class="label weee"><?php echo $tax['title']; ?></span> + <span class="value weee"><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span> + </div> + <?php endforeach; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales')): ?> + <div class="rate weee total"> + <span class="label weee tax incl"><?php echo __('Total incl. tax'); ?></span> + <span class="value weee"><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + <?php endif; ?> + + <?php endif; //Can apply MSRP ?> + + <div class="details qty"> + <span class="label"><?php echo __('Qty'); ?></span> + <span class="value qty"><?php echo $this->getQty() ?></span> + </div> + +</div> + + + + + + <div class="product actions"> + <a href="<?php echo $this->getDeleteUrl() ?>" title="<?php echo __('Remove item') ?>" class="action delete"> + <span><?php echo __('Remove')?></span> + </a> + </div> + </div> + + + + + + +<?php /* + + + + + + + + <table cellpadding="0"> + + <?php if ($canApplyMsrp): ?> + + <tr><th><?php echo __('Price'); ?></th><td><span class="map-cart-sidebar-item"><?php echo __('See price before order confirmation.'); ?></span></td></tr> + + <?php else: ?> + + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceExclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <tr> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <th><?php echo __('Excl. Tax'); ?></th> + <?php else: ?> + <th><?php echo __('Price'); ?></th> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?> + <td><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?></td> + <?php else: ?> + <td><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()) ?></td> + <?php endif; ?> + </tr> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales')): ?> + + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <tr> + <th><small><?php echo $tax['title']; ?>:</small></th> + <td><small><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount'],true,true); ?></small></td> + </tr> + <?php endforeach; ?> + + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales')): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <tr> + <th><small><?php echo $tax['title']; ?></small></th> + <td><small><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></small></td> + </tr> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales')): ?> + + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <tr> + <th><small><?php echo $tax['title']; ?></small></th> + <td><small><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></small></td> + </tr> + <?php endforeach; ?> + + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales')): ?> + <tr> + <th><small><?php echo __('Total:'); ?></small></th> + <td><small><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?></small></td> + </tr> + <?php endif; ?> + <?php endif; ?> + <?php endif; ?> + + + + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceInclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($_item); ?> + <tr> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <th><?php echo __('Incl. Tax'); ?></th> + <?php else: ?> + <th><?php echo __('Price'); ?></th> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales')): ?> + <td><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?></td> + <?php else: ?> + <td><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl-$_item->getWeeeTaxDisposition()) ?></td> + <?php endif; ?> + </tr> + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales')): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <tr> + <th><small><?php echo $tax['title']; ?></small></th> + <td><small><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount'],true,true); ?></small></td> + </tr> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales')): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <tr> + <th><small><?php echo $tax['title']; ?></small></th> + <td><small><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></small></td> + </tr> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales')): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <tr> + <th><small><?php echo $tax['title']; ?></small></th> + <td><small><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></small></td> + </tr> + <?php endforeach; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales')): ?> + <tr> + <th><small><?php echo __('Total incl. tax'); ?></small></th> + <td><small><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?></small></td> + </tr> + <?php endif; ?> + <?php endif; ?> + <?php endif; ?> + + <?php endif; //Can apply MSRP ?> + <tr> + <th><?php echo __('Qty'); ?></th> + <td><?php echo $this->getQty() ?></td> + </tr> + </table> + + <?php if ($_item->getProduct()->isVisibleInSiteVisibility()):?> + <a href="<?php echo $this->getConfigureUrl() ?>" title="<?php echo __('Edit item') ?>" class="btn-edit"><?php echo __('Edit item')?></a> + | + <?php endif ?> + <a href="<?php echo $this->getDeleteUrl() ?>" title="<?php echo __('Remove item') ?>" class="btn-remove"><?php echo __('Remove item')?></a> + </div> + </div> + */ ?> + + </div> +</li> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/cart/totals.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/cart/totals.phtml new file mode 100644 index 00000000000..ea12c71727e --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/cart/totals.phtml @@ -0,0 +1,49 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Shopping cart totals template + * + * @see \Magento\Checkout\Block\Cart\Totals + * @var $this \Magento\Checkout\Block\Cart\Totals + */ +?> +<div class="cart totals"> +<?php if ($this->canApplyMsrp()): ?> + <div class="cart-msrp-totals"><?php echo __('ORDER TOTAL WILL BE DISPLAYED BEFORE YOU SUBMIT THE ORDER'); ?></div> +<?php else: ?> + <table id="shopping-cart-totals-table" class="table totals"> + <col /> + <col width="1" /> + <tfoot> + <?php echo $this->renderTotals('footer'); ?> + </tfoot> + <tbody> + <?php echo $this->renderTotals(); ?> + </tbody> + </table> +<?php endif; ?> +</div> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/js/opcheckout.js b/app/design/frontend/magento_plushe/Magento_Checkout/js/opcheckout.js new file mode 100644 index 00000000000..fab21c08936 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/js/opcheckout.js @@ -0,0 +1,494 @@ +/** + * 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 one page checkout first step + * @package mage + * @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) + */ +/*jshint browser:true jquery:true*/ +/*global alert*/ +(function($, window) { + 'use strict'; + // Base widget, handle ajax events and first section(Checkout Method) in one page checkout accordion + $.widget('mage.opcheckout', { + options: { + checkout: { + loginGuestSelector: '#login\\:guest', + loginRegisterSelector: '#login\\:register', + loginFormSelector: '#login-form', + continueSelector: '#onepage-guest-register-button', + registerCustomerPasswordSelector: '#co-billing-form .field.password,#co-billing-form .field.confirm', + suggestRegistration: false + }, + sectionSelectorPrefix: '#opc-', + billingSection: 'billing', + ajaxLoaderPlaceButton: false, + updateSelectorPrefix: '#checkout-', + updateSelectorSuffix: '-load', + backSelector: '.action.back', + minBalance: 0.0001 + }, + + _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('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)); + }, + + /** + * Callback function for before ajax send event(global) + * @private + */ + _ajaxSend: function() { + this.element.addClass('loading'); + var loader = this.element.find('.section.active .please-wait').show(); + if (this.options.ajaxLoaderPlaceButton) { + loader.siblings('.button').hide(); + } + }, + + /** + * Callback function for ajax complete event(global) + * @private + */ + _ajaxComplete: function() { + this.element.removeClass('loading'); + this.element.find('.please-wait').hide(); + if (this.options.ajaxLoaderPlaceButton) { + this.element.find('.button').show(); + } + }, + + /** + * ajax error for all onepage checkout ajax calls + * @private + */ + _ajaxError: function() { + window.location.href = this.options.failureUrl; + }, + + /** + * callback function when continue button is clicked + * @private + * @param elem - continue button + * @return {Boolean} + */ + _continue: function(elem) { + var json = elem.data('checkout'); + if (json.isGuestCheckoutAllowed) { + if ($(this.options.checkout.loginGuestSelector).is(':checked')) { + this._ajaxContinue(this.options.checkout.saveUrl, {method:'guest'}, this.options.billingSection); + this.element.find(this.options.checkout.registerCustomerPasswordSelector).hide(); + } else if ($(this.options.checkout.loginRegisterSelector).is(':checked')) { + this._ajaxContinue(this.options.checkout.saveUrl, {method:'register'}, this.options.billingSection); + this.element.find(this.options.checkout.registerCustomerPasswordSelector).show(); + } else { + alert($.mage.__('Please choose to register or to checkout as a guest')); + } + } + return false; + }, + + /** + * Ajax call to save checkout info to backend and enable next section in accordion + * @private + * @param url - ajax url + * @param data - post data for ajax call + * @param gotoSection - the section needs to show after ajax call + * @param successCallback - custom callback function in ajax success + */ + _ajaxContinue: function(url, data, gotoSection, successCallback) { + $.ajax({ + url: url, + type: 'post', + context: this, + data: data, + dataType: 'json', + beforeSend: this._ajaxSend, + complete: this._ajaxComplete, + success: function(response) { + if (successCallback) { + successCallback.call(this, response); + } + if ($.type(response) === 'object' && !$.isEmptyObject(response)) { + if (response.error) { + var msg = response.message; + if (msg) { + if ($.type(msg) === 'array') { + msg = msg.join("\n"); + } + $(this.options.countrySelector).trigger('change'); + alert($.mage.__(msg)); + } else { + alert($.mage.__(response.error)); + } + return; + } + if (response.redirect) { + $.mage.redirect(response.redirect); + return false; + } + else if (response.success) { + $.mage.redirect(this.options.review.successUrl); + return false; + } + if (response.update_section) { + if (response.update_section.name === 'payment-method' && response.update_section.html.indexOf('data-checkout-price')) { + this.element.find(this.options.payment.form).find('[data-checkout-price]').remove(); + } + $(this.options.updateSelectorPrefix + response.update_section.name + this.options.updateSelectorSuffix) + .html($(response.update_section.html)).trigger('contentUpdated'); + } + if (response.duplicateBillingInfo) { + $(this.options.shipping.copyBillingSelector).prop('checked', true).trigger('click'); + $(this.options.shipping.addressDropdownSelector).val($(this.options.billing.addressDropdownSelector).val()).change(); + } + if (response.goto_section) { + this.element.trigger('gotoSection', response.goto_section); + } + } else { + this.element.trigger('gotoSection', gotoSection); + } + } + }); + }, + + /** + * Update progress sidebar content + * @private + * @param toStep + */ + _ajaxUpdateProgress: function(toStep) { + if (toStep) { + $.ajax({ + url: this.options.progressUrl, + type: 'get', + async: false, + cache: false, + context: this, + data: toStep ? {toStep: toStep} : null, + success: function(response) { + $(this.options.checkoutProgressContainer).html(response); + } + }); + } + } + }); + + // Extension for mage.opcheckout - second section(Billing Information) in one page checkout accordion + $.widget('mage.opcheckout', $.mage.opcheckout, { + options: { + billing: { + addressDropdownSelector: '#billing-address-select', + newAddressFormSelector: '#billing-new-address-form', + continueSelector: '#billing-buttons-container .button', + form: '#co-billing-form' + } + }, + + _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(); + } , + + _billingSave: function() { + this._ajaxContinue(this.options.billing.saveUrl, $(this.options.billing.form).serialize(), false, function() { + //Trigger indicating billing save. eg. GiftMessage listens to this to inject gift options + this.element.trigger('billingSave'); + }); + } + }); + + // Extension for mage.opcheckout - third section(Shipping Information) in one page checkout accordion + $.widget('mage.opcheckout', $.mage.opcheckout, { + options: { + shipping: { + form: '#co-shipping-form', + addressDropdownSelector: '#shipping-address-select', + newAddressFormSelector: '#shipping-new-address-form', + copyBillingSelector: '#shipping\\:same_as_billing', + countrySelector: '#shipping\\:country_id', + continueSelector:'#shipping-buttons-container .button' + } + }, + + _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')) { + 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(); + }, + + /** + * Copy billing address info to shipping address + * @private + */ + _billingToShipping: function() { + $(':input[name]', this.options.billing.form).each($.proxy(function(key, value) { + var fieldObj = $(value.id.replace('billing:', '#shipping\\:')); + fieldObj.val($(value).val()); + if (fieldObj.is("select")) { + fieldObj.trigger('change'); + } + }, this)); + $(this.options.shipping.copyBillingSelector).prop('checked', true); + } + }); + + // Extension for mage.opcheckout - fourth section(Shipping Method) in one page checkout accordion + $.widget('mage.opcheckout', $.mage.opcheckout, { + options: { + shippingMethod: { + continueSelector: '#shipping-method-buttons-container .button', + form: '#co-shipping-method-form' + } + }, + + _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() { + 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(); + }, + + /** + * Make sure at least one shipping method is selected + * @return {Boolean} + * @private + */ + _validateShippingMethod: function() { + var methods = this.element.find('[name="shipping_method"]'); + if (methods.length === 0) { + alert($.mage.__('Your order cannot be completed at this time as there is no shipping methods available for it. Please make necessary changes in your shipping address.')); + return false; + } + if (methods.filter(':checked').length) { + return true; + } + alert($.mage.__('Please specify shipping method.')); + return false; + } + }); + + // Extension for mage.opcheckout - fifth section(Payment Information) in one page checkout accordion + $.widget('mage.opcheckout', $.mage.opcheckout, { + options: { + payment: { + continueSelector: '#payment-buttons-container .button', + form: '#co-payment-form', + methodsContainer: '#checkout-payment-method-load', + freeInput: { + tmpl: '<input id="hidden-free" type="hidden" name="payment[method]" value="free">', + selector: '#hidden-free' + } + } + }, + + _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) { + if (data.price) { + this.checkoutPrice += data.price; + } + if (data.totalPrice) { + data.totalPrice = this.checkoutPrice; + } + if (this.checkoutPrice < this.options.minBalance) { + // Add free input field, hide and disable unchecked checkbox payment method and all radio button payment methods + this._disablePaymentMethods(); + } else { + // 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(); + }, + + /** + * Display payment details when payment method radio button is checked + * @private + * @param e + */ + _paymentMethodHandler: function(e) { + var _this = $(e.target), + parentsDl = _this.closest('dl'); + parentsDl.find('dt input:radio').prop('checked', false); + _this.prop('checked', true); + parentsDl.find('dd ul').hide().find('[name^="payment["]').prop('disabled', true); + _this.parent().nextUntil('dt').find('ul').show().find('[name^="payment["]').prop('disabled', false); + }, + + /** + * make sure one payment method is selected + * @private + * @return {Boolean} + */ + _validatePaymentMethod: function() { + var methods = this.element.find('[name^="payment["]'); + if (methods.length === 0) { + alert($.mage.__('Your order cannot be completed at this time as there is no payment methods available for it.')); + return false; + } + if (this.checkoutPrice < this.options.minBalance) { + return true; + } else if (methods.filter('input:radio:checked').length) { + return true; + } + alert($.mage.__('Please specify payment method.')); + return false; + }, + + /** + * Disable and enable payment methods + * @private + */ + _disablePaymentMethods: function() { + var paymentForm = $(this.options.payment.form); + paymentForm.find('input[name="payment[method]"]').prop('disabled', true); + paymentForm.find(this.options.payment.methodsContainer).hide().find('[name^="payment["]').prop('disabled', true); + paymentForm.find('input[id^="use"][name^="payment[use"]:not(:checked)').prop('disabled', true).parent().hide(); + paymentForm.find(this.options.payment.freeInput.selector).remove(); + $.tmpl(this.options.payment.freeInput.tmpl).appendTo(paymentForm); + }, + + /** + * Enable and enable payment methods + * @private + */ + _enablePaymentMethods: function() { + var paymentForm = $(this.options.payment.form); + paymentForm.find('input[name="payment[method]"]').prop('disabled', false); + paymentForm.find(this.options.payment.methodsContainer).show(); + paymentForm.find('input[id^="use"][name^="payment[use"]:not(:checked)').prop('disabled', false).parent().show(); + paymentForm.find(this.options.payment.freeInput.selector).remove(); + } + }); + + // Extension for mage.opcheckout - last section(Order Review) in one page checkout accordion + $.widget('mage.opcheckout', $.mage.opcheckout, { + options: { + review: { + continueSelector: '#review-buttons-container .button' + } + }, + + _create: function() { + this._super(); + this.element + .on('click', this.options.review.continueSelector, $.proxy(function() { + if ($(this.options.payment.form).validation && + $(this.options.payment.form).validation('isValid')) { + this._ajaxContinue( + this.options.review.saveUrl, + $(this.options.payment.form).serialize()); + } + }, this)); + } + }); +})(jQuery, window); diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_cart_index.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_cart_index.xml new file mode 100644 index 00000000000..981ab172354 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_cart_index.xml @@ -0,0 +1,49 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <update handle="page_one_column" /> + <referenceContainer name="checkout.cart.items"> + <container name="checkout.cart.container" label="invisible" htmlTag="div" htmlClass="cart container" before="-"> + <container name="cart.summary" label="Cart Summary Container" htmlTag="div" htmlClass="cart summary" after="-"> + <block class="Magento\Core\Block\Template" name="checkout.cart.summary.title" before="-" template="Magento_Core::text.phtml"> + <arguments> + <argument translate="true" name="text" xsi:type="string">Summary</argument> + <argument name="tag" xsi:type="string">strong</argument> + <argument name="attributes" xsi:type="array"> + <item name="title" translate="true" xsi:type="string">Summary</item> + </argument> + <argument name="css_class" xsi:type="string">summary title</argument> + </arguments> + </block> + </container> + </container> + </referenceContainer> + <move element="checkout.cart.form" destination="checkout.cart.container"/> + <move element="checkout.cart.shipping" destination="cart.summary"/> + <move element="checkout.cart.coupon" destination="cart.summary" /> + <move element="checkout.cart.totals" destination="cart.summary"/> + <move element="checkout.cart.methods.bottom" destination="cart.summary"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping.xml new file mode 100644 index 00000000000..6ee5a363ead --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping.xml @@ -0,0 +1,27 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_editaddress.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_editaddress.xml new file mode 100644 index 00000000000..b99353cee0e --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_editaddress.xml @@ -0,0 +1,34 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <update handle="checkout_multishipping"/> + <update handle="checkout_multishipping_customer_address"/> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="label" xsi:type="string">Edit Address</argument> + </action> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_editbilling.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_editbilling.xml new file mode 100644 index 00000000000..024408703e3 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_editbilling.xml @@ -0,0 +1,34 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <update handle="checkout_multishipping"/> + <update handle="checkout_multishipping_customer_address"/> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="label" xsi:type="string">Change Billing Address</argument> + </action> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_editshipping.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_editshipping.xml new file mode 100644 index 00000000000..6354c13f57a --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_editshipping.xml @@ -0,0 +1,34 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <update handle="checkout_multishipping"/> + <update handle="checkout_multishipping_customer_address"/> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="label" xsi:type="string">Edit Shipping Address</argument> + </action> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_newbilling.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_newbilling.xml new file mode 100644 index 00000000000..7830a2c990e --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_newbilling.xml @@ -0,0 +1,34 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <update handle="checkout_multishipping"/> + <update handle="checkout_multishipping_customer_address"/> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="label" xsi:type="string">Create Billing Address</argument> + </action> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_newshipping.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_newshipping.xml new file mode 100644 index 00000000000..f9a3309971a --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_newshipping.xml @@ -0,0 +1,34 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <update handle="checkout_multishipping"/> + <update handle="checkout_multishipping_customer_address"/> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="label" xsi:type="string">Create Shipping Address</argument> + </action> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_selectbilling.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_selectbilling.xml new file mode 100644 index 00000000000..e93e4be3ff0 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_address_selectbilling.xml @@ -0,0 +1,36 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <update handle="checkout_multishipping"/> + <referenceContainer name="content"> + <block class="Magento\Checkout\Block\Multishipping\Address\Select" name="checkout_address_select" template="multishipping/address/select.phtml"/> + </referenceContainer> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument name="label" translate="true" xsi:type="string">Change Billing Address</argument> + </action> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_addresses.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_addresses.xml new file mode 100644 index 00000000000..c7e28ffe5a6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_addresses.xml @@ -0,0 +1,33 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <container name="additional.product.info" label="Additional Product Info"/> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="label" xsi:type="string">Ship to Multiple Addresses</argument> + </action> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_billing.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_billing.xml new file mode 100644 index 00000000000..26afc1048ab --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_billing.xml @@ -0,0 +1,36 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="label" xsi:type="string">Billing Information</argument> + </action> + </referenceBlock> + <referenceBlock name="checkout_billing"> + <container name="payment_methods_before" label="Payment Methods Before"/> + <container name="payment_methods_after" label="Payment Methods After"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_overview.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_overview.xml new file mode 100644 index 00000000000..64eb779675a --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_overview.xml @@ -0,0 +1,33 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="label" xsi:type="string">Review Order</argument> + </action> + </referenceBlock> + <container name="additional.product.info" label="Additional Product Info"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_shipping.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_shipping.xml new file mode 100644 index 00000000000..8b7a2719c6a --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_shipping.xml @@ -0,0 +1,33 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="title" xsi:type="string">Shipping Information</argument> + </action> + </referenceBlock> + <container name="additional.product.info" label="Additional Product Info"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_success.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_success.xml new file mode 100644 index 00000000000..9a4c4da6351 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_multishipping_success.xml @@ -0,0 +1,32 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="title" xsi:type="string">Your order has been received.</argument> + </action> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_onepage_paymentmethod.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_onepage_paymentmethod.xml new file mode 100644 index 00000000000..9cd39e379f5 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_onepage_paymentmethod.xml @@ -0,0 +1,31 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="payment_method"> + <block class="Magento\Core\Block\Template" name="checkout.onepage.payment.methods.scripts" as="scripts"/> + <block class="Magento\Core\Block\Template" name="checkout.onepage.payment.methods.additional" as="additional"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_onepage_review.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_onepage_review.xml new file mode 100644 index 00000000000..0b9179276af --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/checkout_onepage_review.xml @@ -0,0 +1,30 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="root"> + <container name="additional.product.info" after="order_review" label="Additional Product Info"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/default.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/default.xml new file mode 100644 index 00000000000..94c94a523fe --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/default.xml @@ -0,0 +1,28 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <remove name="checkout_cart_link"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_cart_index.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_cart_index.xml new file mode 100644 index 00000000000..3ada6793dae --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_cart_index.xml @@ -0,0 +1,59 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Shopping Cart" type="page" parent="default"> + <referenceContainer name="content"> + <block class="Magento\Checkout\Block\Cart" name="checkout.cart" template="cart.phtml"> + <container name="checkout.cart.items" label="invisible" as="with-items"> + <block class="Magento\Checkout\Block\Cart" name="checkout.cart.form" as="cart-items" template="cart/form.phtml"> + <block class="Magento\Checkout\Block\Cart\Item\Renderer" as="simple" template="cart/item/default.phtml"/> + <block class="Magento\Checkout\Block\Cart\Item\Renderer\Grouped" as="grouped" template="cart/item/default.phtml"/> + <block class="Magento\Checkout\Block\Cart\Item\Renderer\Configurable" as="configurable" template="cart/item/default.phtml"/> + <container name="checkout.cart.form.before" as="form_before" label="Shopping Cart Items Before" htmlTag="div" htmlClass="rewards"/> + <container name="checkout.cart.widget" as="checkout_cart_widget" label="Shopping Cart Items After"/> + </block> + <block class="Magento\Checkout\Block\Cart\Shipping" name="checkout.cart.shipping" as="shipping" after="checkout.cart.summary.title" template="cart/shipping.phtml"/> + <block class="Magento\Checkout\Block\Cart\Coupon" name="checkout.cart.coupon" as="coupon" after="checkout.cart.shipping" template="cart/coupon.phtml"/> + <block class="Magento\Checkout\Block\Cart\Totals" name="checkout.cart.totals" as="totals" template="cart/totals.phtml"/> + <block class="Magento\Checkout\Block\Cart" name="checkout.cart.methods.bottom" template="cart/methods.phtml"> + <container name="checkout.cart.methods" as="methods" label="Payment Methods After Checkout Button"> + <block class="Magento\Checkout\Block\Onepage\Link" name="checkout.cart.methods.onepage.bottom" template="onepage/link.phtml"/> + <block class="Magento\Checkout\Block\Multishipping\Link" name="checkout.cart.methods.multishipping" template="multishipping/link.phtml"/> + </container> + </block> + <block class="Magento\Checkout\Block\Cart\Crosssell" name="checkout.cart.crosssell" template="Magento_Catalog::product/list/items.phtml" after="-"> + <arguments> + <argument name="type" xsi:type="string">crosssell</argument> + </arguments> + </block> + </container> + <container name="checkout.cart.noitems" label="invisible" as="no-items"> + <block class="Magento\Checkout\Block\Cart" name="checkout.cart.empty" template="cart/noItems.phtml"/> + <container name="checkout.cart.empty.widget" as="checkout_cart_empty_widget" label="Empty Shopping Cart Content Before"/> + </container> + </block> + </referenceContainer> + <container name="additional.product.info" label="Additional Product Info"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_multishipping_customer_address.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_multishipping_customer_address.xml new file mode 100644 index 00000000000..0ea12f489c4 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_multishipping_customer_address.xml @@ -0,0 +1,31 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Multishipping Checkout Customer Address Edit Form" type="page" parent="customer_address_form"> + <referenceContainer name="content"> + <block class="Magento\Customer\Block\Address\Edit" name="customer_address_edit" template="address/edit.phtml"/> + </referenceContainer> + <update handle="customer_form_template_handle"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_onepage_additional.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_onepage_additional.xml new file mode 100644 index 00000000000..658ee9f1e97 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_onepage_additional.xml @@ -0,0 +1,34 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="One Page Checkout Additional Address Form" type="fragment" owner="checkout_onepage_index"> + <block class="Magento\Page\Block\Html" name="root" output="1" template="page_fragment.phtml"> + <block class="Magento\Checkout\Block\Onepage\Shipping\Method\Additional" name="shipping_method_available" template="onepage/shipping_method/additional.phtml"> + <action method="setDontDisplayContainer"> + <argument name="param" xsi:type="string">1</argument> + </action> + </block> + </block> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_onepage_failure.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_onepage_failure.xml new file mode 100644 index 00000000000..2ec8a0fd124 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_onepage_failure.xml @@ -0,0 +1,36 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="One Page Checkout Failure" type="page" parent="default"> + <update handle="page_one_column"/> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="title" xsi:type="string">Your order has been received.</argument> + </action> + </referenceBlock> + <referenceContainer name="content"> + <block class="Magento\Checkout\Block\Onepage\Failure" name="checkout.failure" template="onepage/failure.phtml"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_onepage_index.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_onepage_index.xml new file mode 100644 index 00000000000..d0d050a6d3a --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_onepage_index.xml @@ -0,0 +1,72 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="One Page Checkout" type="page" parent="default"> + <referenceBlock name="root"> + <action method="setTemplate"> + <argument name="template" xsi:type="string">1column.phtml</argument> + </action> + </referenceBlock> + <referenceBlock name="head"> + <block class="Magento\Page\Block\Html\Head\Script" name="magento-checkout-js-opcheckout-js"> + <arguments> + <argument name="file" xsi:type="string">Magento_Checkout::js/opcheckout.js</argument> + </arguments> + </block> + </referenceBlock> + <referenceContainer name="content"> + <container name="checkout.progress.wrapper" label="Checkout Progress Wrapper" htmlTag="div" htmlId="checkout-progress-wrapper"> + <block class="Magento\Checkout\Block\Onepage\Progress" name="checkout.progress" before="-" template="onepage/progress.phtml"/> + </container> + </referenceContainer> + <referenceContainer name="content"> + <block class="Magento\Checkout\Block\Onepage" name="checkout.onepage" template="onepage.phtml"> + <block class="Magento\Checkout\Block\Onepage\Login" name="checkout.onepage.login" as="login" template="onepage/login.phtml"> + <container name="checkout.onepage.login.before" as="login_before" label="Login/Registration Before" htmlTag="div"/> + <container name="form.login.additional.info" label="invisible" as="form_additional_info"/> + </block> + <block class="Magento\Checkout\Block\Onepage\Billing" name="checkout.onepage.billing" as="billing" template="onepage/billing.phtml"> + <container name="form.billing.additional.info" label="invisible" as="form_additional_info"/> + </block> + <block class="Magento\Checkout\Block\Onepage\Shipping" name="checkout.onepage.shipping" as="shipping" template="onepage/shipping.phtml" /> + <block class="Magento\Checkout\Block\Onepage\Shipping\Method" name="checkout.onepage.shipping_method" as="shipping_method" template="onepage/shipping_method.phtml"> + <block class="Magento\Checkout\Block\Onepage\Shipping\Method\Available" name="checkout.onepage.shipping_method.available" as="available" template="onepage/shipping_method/available.phtml"/> + <block class="Magento\Checkout\Block\Onepage\Shipping\Method\Additional" name="checkout.onepage.shipping_method.additional" as="additional" template="onepage/shipping_method/additional.phtml"/> + </block> + <block class="Magento\Checkout\Block\Onepage\Payment" name="checkout.onepage.payment" as="payment" template="onepage/payment.phtml"> + <block class="Magento\Checkout\Block\Onepage\Payment\Methods" name="checkout.payment.methods" as="methods" template="onepage/payment/methods.phtml"> + <action method="setMethodFormTemplate"> + <argument name="method" xsi:type="string">purchaseorder</argument> + <argument name="template" xsi:type="string">Magento_Payment::form/purchaseorder.phtml</argument> + </action> + </block> + <block class="Magento\Core\Block\Template" name="checkout.onepage.payment.additional" as="additional"/> + <block class="Magento\Core\Block\Template" name="checkout.onepage.payment.methods_additional" as="methods_additional"/> + </block> + <block class="Magento\Checkout\Block\Onepage\Review" name="checkout.onepage.review" as="review" template="onepage/review.phtml"/> + </block> + </referenceContainer> + <update handle="customer_form_template_handle"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_onepage_success.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_onepage_success.xml new file mode 100644 index 00000000000..8eb136e4ea3 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/checkout_onepage_success.xml @@ -0,0 +1,36 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="One Page Checkout Success" type="page" parent="default"> + <update handle="page_one_column"/> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="title" xsi:type="string">Your order has been received.</argument> + </action> + </referenceBlock> + <referenceContainer name="content"> + <block class="Magento\Checkout\Block\Onepage\Success" name="checkout.success" template="success.phtml"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/default.xml b/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/default.xml new file mode 100644 index 00000000000..38f1fbec78f --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/layout/override/default.xml @@ -0,0 +1,39 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="head.components"> + <block class="Magento\Core\Block\Template" name="checkout_page_head_components" template="Magento_Checkout::js/components.phtml"/> + </referenceBlock> + <referenceContainer name="header"> + <block class="Magento\Checkout\Block\Cart\Sidebar" name="minicart" as="minicart" after="logo" template="cart/minicart.phtml"> + <block class="Magento\Checkout\Block\Cart\Item\Renderer" as="simple" template="cart/sidebar/default.phtml"/> + <block class="Magento\Checkout\Block\Cart\Item\Renderer\Grouped" as="grouped" template="cart/sidebar/default.phtml"/> + <block class="Magento\Checkout\Block\Cart\Item\Renderer\Configurable" as="configurable" template="cart/sidebar/default.phtml"/> + <container name="minicart.extra.info" as="minicart_info" label="My Cart Extra info"/> + <container name="topCart.extra_actions" as="extra_actions" label="My Cart Extra Actions"/> + </block> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/address/select.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/address/select.phtml new file mode 100644 index 00000000000..91a0dd3b6de --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/address/select.phtml @@ -0,0 +1,60 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="multicheckout block change billing"> + <div class="actions"> + <button type="button" class="action add" role="add-address" title="<?php echo __('Add New Address') ?>"><span><?php echo __('Add New Address') ?></span></button> + </div> + <?php $_index=0 ?> + <?php foreach ($this->getAddressCollection() as $_address): ?> + <div class="box billing<?php if($_index%2==0): ?> odd<?php endif; ?>"> + <address> + <?php echo $_address->format('html') ?> + <?php if($this->isAddressDefaultBilling($_address)): ?> + <br /><strong><?php echo __('Default Billing') ?></strong> + <?php endif; ?> + <?php if($this->isAddressDefaultShipping($_address)): ?> + <br /><strong><?php echo __('Default Shipping') ?></strong> + <?php endif; ?> + </address> + <div class="actions"> + <a href="<?php echo $this->getEditAddressUrl($_address) ?>" class="action edit"><span><?php echo __('Edit Address') ?></span></a> + <a href="<?php echo $this->getSetAddressUrl($_address) ?>" class="action select"><span><?php echo __('Select Address') ?></span></a> + </div> + </div> + <?php $_index++ ?> + <?php endforeach; ?> + <div class="actions"> + <a href="<?php echo $this->getBackUrl() ?>" class="action back"><span><?php echo __('Back to Billing Information') ?></span></a> + </div> +</div> +<script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('Magento_Customer::address.js'); ?>", function() { + jQuery('.actions').address({ + addAddress: "button[role='add-address']", + addAddressLocation: '<?php echo $this->getAddNewUrl() ?>' + }); + }); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/addresses.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/addresses.phtml new file mode 100644 index 00000000000..6c8f5f322c3 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/addresses.phtml @@ -0,0 +1,92 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Ship to multiple address template + * + * @see \Magento\Checkout\Block\Multishipping\Addresses + */ +?> +<form id="checkout_multishipping_form" action="<?php echo $this->getPostActionUrl() ?>" method="post" class="multicheckout address form"> + <div class="title"> + <strong><?php echo __('Please select a shipping address for applicable items.') ?></strong> + <button type="button" title="<?php echo __('Enter a New Address') ?>" class="action add" data-role="add-new-address"><span><?php echo __('Enter a New Address') ?></span></button> + </div> + <input type="hidden" name="continue" value="0" id="can_continue_flag"/> + <input type="hidden" name="new_address" value="0" id="add_new_address_flag"/> + <table class="items data" id="multiship-addresses-table"> + <thead> + <tr> + <th class="col product"><?php echo __('Product') ?></th> + <th class="col qty"><?php echo __('Qty') ?></th> + <th class="col address"><?php echo __('Send To') ?></th> + <th class="col delete"> </th> + </tr> + </thead> + <tbody> + <?php foreach ($this->getItems() as $_index => $_item): ?> + <?php if ($_item->getQuoteItem()) : ?> + <tr> + <td class="col product"><?php echo $this->getItemHtml($_item->getQuoteItem()) ?></td> + <td class="col qty"> + <input type="text" name="ship[<?php echo $_index ?>][<?php echo $_item->getQuoteItemId() ?>][qty]" value="<?php echo $this->escapeHtml($_item->getQty()) ?>" size="2" class="input-text qty" data-validate="{number: true}"/> + </td> + <td class="col address"> + <?php if ($_item->getProduct()->getIsVirtual()): ?> + <div class="applicable"><?php echo __('Shipping selection is not applicable.'); ?></div> + <?php else: ?> + <?php echo $this->getAddressesHtmlSelect($_item, $_index); ?> + <?php endif; ?> + </td> + <td class="col delete"> + <a href="<?php echo $this->getItemDeleteUrl($_item) ?>" title="<?php echo __('Remove Item') ?>" class="action delete"> + <span><?php echo __('Remove item') ?></span> + </a> + </td> + </tr> + <?php endif; ?> + <?php endforeach; ?> + </tbody> + </table> + <div class="actions"> + <a href="<?php echo $this->getBackUrl() ?>" class="action back"><span><?php echo __('Back to Shopping Cart') ?></span></a> + <button type="submit" class="action update" data-role="can-continue" data-flag="0"><span><?php echo __('Update Qty & Addresses') ?></span></button> + <button type="submit" title="<?php echo __('Continue to Shipping Information') ?>" class="action continue<?php if ($this->isContinueDisabled()):?> disabled<?php endif; ?>" data-role="can-continue" data-flag="1"<?php if ($this->isContinueDisabled()):?> disabled="disabled"<?php endif; ?>><span><?php echo __('Continue to Shipping Information') ?></span></button> + </div> +</form> + +<script type="text/javascript"> + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", + "<?php echo $this->getViewFileUrl('Magento_Checkout::js/multi-shipping.js') ?>", + function () { + jQuery('#checkout_multishipping_form').multiShipping().validation(); + } + ); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/agreements.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/agreements.phtml new file mode 100644 index 00000000000..c2d5797a9f6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/agreements.phtml @@ -0,0 +1,49 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php +/** + * @see \Magento\Checkout\Block\Agreements + */ +?> +<?php if (!$this->getAgreements()) return; ?> +<ol id="checkout-agreements" class="checkout agreements"> +<?php foreach ($this->getAgreements() as $_a): ?> + <li class="item"> + <div class="agreement"<?php echo ($_a->getContentHeight() ? ' style="height:' . $_a->getContentHeight() . '"' : '')?>> + <?php if ($_a->getIsHtml()):?> + <?php echo $_a->getContent() ?> + <?php else:?> + <?php echo nl2br($this->escapeHtml($_a->getContent())) ?> + <?php endif; ?> + </div> + <div class="field choice"> + <input type="checkbox" id="agreement-<?php echo $_a->getId()?>" name="agreement[<?php echo $_a->getId()?>]" value="1" title="<?php echo $this->escapeHtml($_a->getCheckboxText()) ?>" class="checkbox" /> + <label for="agreement-<?php echo $_a->getId()?>" class="label"><?php echo $_a->getIsHtml() ? $_a->getCheckboxText() : $this->escapeHtml($_a->getCheckboxText()) ?></label> + </div> + </li> +<?php endforeach ?> +</ol> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/billing.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/billing.phtml new file mode 100644 index 00000000000..e9e312eb177 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/billing.phtml @@ -0,0 +1,98 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Multishipping checkout billing information + * + * @see \Magento\Checkout\Block\Multishipping\Billing + */ +?> +<form action="<?php echo $this->getPostActionUrl() ?>" method="post" id="multishipping-billing-form" class="form multicheckout billing"> + <div class="block billing"> + <div class="box address"> + <strong class="subtitle"> + <span><?php echo __('Billing Address') ?></span> + <a href="<?php echo $this->getSelectAddressUrl() ?>" class="action"><span><?php echo __('Change') ?></span></a> + </strong> + <?php $_address = $this->getAddress() ?> + <address><?php echo $_address->format('html') ?></address> + </div> + <div class="box method"> + <strong class="subtitle"><span><?php echo __('Payment Method') ?></span></strong> + <?php echo $this->getChildHtml('payment_methods_before') ?> + <?php /* Payment methods forms list */ ?> + <dl class="sp-methods" id="payment-methods"> + <?php + $_methods = $this->getMethods(); + $_methodsCount = count($_methods); + ?> + <?php foreach ($_methods as $_method): $_code = $_method->getCode() ?> + <dt> + <?php if ($_methodsCount > 1): ?> + <input type="radio" id="p_method_<?php echo $_code ?>" value="<?php echo $_code ?>" name="payment[method]" title="<?php echo $this->escapeHtml($_method->getTitle()) ?>" <?php if ($this->getSelectedMethodCode() == $_code): ?> checked="checked"<?php endif; ?> class="radio"/> + <?php else : ?> + <input type="radio" id="p_method_<?php echo $_code ?>" value="<?php echo $_code ?>" name="payment[method]" checked="checked" class="radio solo method"/> + <?php endif; ?> + <label for="p_method_<?php echo $_code ?>"><?php echo $this->escapeHtml($_method->getTitle()) ?></label> + </dt> + <?php if ($html = $this->getChildHtml('payment.method.' . $_code)) : ?> + <dd> + <?php echo $html; ?> + </dd> + <?php endif; ?> + <?php endforeach; ?> + </dl> + <?php echo $this->getChildHtml('payment_methods_after') ?> + <?php echo $this->getChildHtml('checkout_billing_items') ?> + </div> + </div> + <div class="actions"> + <a href="<?php echo $this->getBackUrl() ?>" class="action back"><span><?php echo __('Back to Shipping Information') ?></span></a> + <button id="payment-continue" type="submit" class="action continue"><span><?php echo __('Continue to Review Your Order') ?></span></button> + </div> +</form> +<script type="text/javascript"> + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", + "<?php echo $this->getViewFileUrl('Magento_Checkout::js/payment.js') ?>", + function() { + jQuery('#multishipping-billing-form').payment({ + checkoutPrice: <?php echo (float)$this->getQuoteBaseGrandTotal(); ?> + }).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); + } else { + element.after(error); + } + } + }); + }); +</script> + diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/billing/items.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/billing/items.phtml new file mode 100644 index 00000000000..25a6d9d17e6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/billing/items.phtml @@ -0,0 +1,52 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if ($this->getQuote()->hasVirtualItems()): ?> +<div class="block other"> + <div class="title"><strong><?php echo __('Other items in your order') ?></strong></div> + <div class="content"> + <strong class="subtitle"> + <span><?php echo __('Items') ?></span> + <a href="<?php echo $this->getVirtualProductEditUrl() ?>" class="action edit"><span><?php echo __('Edit Items') ?></></a> + </strong> + <table class="items data" id="unavailable-shipping-table"> + <thead> + <tr> + <th class="col item"><?php echo __('Product Name') ?></th> + <th class="col qty"><?php echo __('Qty') ?></th> + </tr> + </thead> + <tbody> + <?php foreach ($this->getVirtualQuoteItems() as $_item): ?> + <tr> + <td class="col item"><?php echo $this->getItemHtml($_item) ?></td> + <td class="col qty"><?php echo $_item->getQty() ?></td> + </tr> + <?php endforeach; ?> + </tbody> + </table> + </div> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/item/default.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/item/default.phtml new file mode 100644 index 00000000000..3b4ffb1fea8 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/item/default.phtml @@ -0,0 +1,47 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="product details"> + <strong class="product name"><a href="<?php echo $this->getProductUrl() ?>"><?php echo $this->escapeHtml($this->getProductName()) ?></a></strong> + <?php if ($_options = $this->getOptionList()): ?> + <dl class="item options"> + <?php foreach ($_options as $_option) : ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>><?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <dl class="item options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + <?php endif; ?> + </dd> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <?php if ($addtInfoBlock = $this->getProductAdditionalInformationBlock()): ?> + <?php echo $addtInfoBlock->setItem($this->getItem())->toHtml() ?> + <?php endif; ?> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/link.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/link.phtml new file mode 100644 index 00000000000..6d72e1a9009 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/link.phtml @@ -0,0 +1,26 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<a class="action multicheckout" href="<?php echo $this->getCheckoutUrl()?>" title="<?php echo __('Checkout with Multiple Addresses');?>"><span><?php echo __('Checkout with Multiple Addresses');?></span></a> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/overview.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/overview.phtml new file mode 100644 index 00000000000..781504d434a --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/overview.phtml @@ -0,0 +1,186 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php /** @var $this \Magento\Checkout\Block\Multishipping\Overview */ ?> +<form action="<?php echo $this->getPostActionUrl() ?>" method="post" id="review-order-form" class="form multicheckout overview"> + <div class="block billing"> + <div class="title"><strong><?php echo __('Billing Information') ?></strong></div> + <div class="box address"> + <?php $_address=$this->getBillingAddress() ?> + <strong class="subtitle"> + <span><?php echo __('Billing Address') ?></span> + <a href="<?php echo $this->getEditBillingAddressUrl($_address) ?>" class="action edit"><span><?php echo __('Change') ?></span></a> + </strong> + <address> + <?php echo $_address->format('html') ?> + </address> + </div> + <div class="box method"> + <strong class="subtitle"> + <span><?php echo __('Payment Method') ?></span> + <a href="<?php echo $this->getEditBillingUrl() ?>" class="action edit"><span><?php echo __('Change') ?></span></a> + </strong> + <div class="content"> + <input type="hidden" name="payment[cc_number]" value="<?php echo $this->escapeHtml($this->getPayment()->getCcNumber())?>" /> + <input type="hidden" name="payment[cc_cid]" value="<?php echo $this->escapeHtml($this->getPayment()->getCcCid())?>" /> + <?php echo $this->getPaymentHtml() ?> + </div> + </div> + </div> + <div class="block shipping"> + <div class="title"><strong><?php echo __('Shipping Information') ?></strong></div> + <?php $mergedCells = ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices() ? 2 : 1); ?> + <?php foreach ($this->getShippingAddresses() as $_index => $_address): ?> + <div class="content"> + <div class="title"> + <strong><?php echo __('Address %1 of %2', ($_index+1), $this->getShippingAddressCount()) ?></strong> + </div> + <div class="box address"> + <strong class="subtitle"> + <span><?php echo __('Shipping To') ?></span> + <a href="<?php echo $this->getEditShippingAddressUrl($_address) ?>" class="action edit"><span><?php echo __('Change') ?></span></a> + </strong> + <address> + <?php echo $_address->format('html') ?> + </address> + </div> + <div class="box method"> + <strong class="subtitle"> + <span><?php echo __('Shipping Method') ?></span> + <a href="<?php echo $this->getEditShippingUrl() ?>" class="action edit"><span><?php echo __('Change') ?></span></a> + </strong> + <?php if($_rate=$this->getShippingAddressRate($_address)): ?> + <p> + <?php echo $this->escapeHtml($_rate->getCarrierTitle()) ?> (<?php echo $this->escapeHtml($_rate->getMethodTitle()) ?>) + <?php $_excl = $this->getShippingPriceExclTax($_address); ?> + <?php $_incl = $this->getShippingPriceInclTax($_address); ?> + + <?php echo $_excl; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayShippingBothPrices() && $_incl != $_excl): ?> + (<?php echo __('Incl. Tax'); ?> <?php echo $_incl; ?>) + <?php endif; ?> + </p> + <?php endif; ?> + </div> + <div class="box items"> + <strong class="subtitle"> + <span><?php echo __('Items') ?></span> + <a href="<?php echo $this->getAddressesEditUrl() ?>" class="action edit"><span><?php echo __('Edit Items') ?></span></a> + </strong> + <table class="items data" id="overview-table-<?php echo $_address->getId() ?>"> + <thead> + <tr> + <th rowspan="<?php echo $mergedCells; ?>" class="col item"><?php echo __('Product Name') ?></th> + <th colspan="<?php echo $mergedCells; ?>" class="col price"><?php echo __('Price') ?></th> + <th rowspan="<?php echo $mergedCells; ?>" class="col qty"><?php echo __('Qty') ?></th> + <th colspan="<?php echo $mergedCells; ?>" class="col subtotal"><?php echo __('Subtotal') ?></th> + </tr> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <tr> + <th class="col price excl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(false) ?></th> + <th class="col price incl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(true) ?></th> + <th class="col subtotal excl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(false) ?></th> + <th class="col subtotal incl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(true) ?></th> + </tr> + <?php endif; ?> + </thead> + <tfoot> + <?php echo $this->renderTotals($this->getShippingAddressTotals($_address)); ?> + </tfoot> + <tbody> + <?php foreach ($this->getShippingAddressItems($_address) as $_item): ?> + <?php echo $this->getRowItemHtml($_item); ?> + <?php endforeach; ?> + </tbody> + </table> + </div> + <script type="text/javascript">jQuery('#overview-table-<?php echo $_address->getId() ?>').decorate('table')</script> + </div> + <?php if($this->getShippingAddressCount()!=$_index+1): ?> + <?php endif; ?> + <?php endforeach; ?> + </div> + + <?php if ($this->getQuote()->hasVirtualItems()): ?> + <div class="block other"> + <div class="title"><strong><?php echo __('Other items in your order') ?></strong></div> + <div class="content"> + <strong class="subtitle"> + <span><?php echo __('Items') ?></span> + <a href="<?php echo $this->getVirtualProductEditUrl() ?>" class="action edit"><span><?php echo __('Edit Items') ?></span></a> + </strong> + <?php $mergedCells = ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices() ? 2 : 1); ?> + <table class="items data" id="virtual-overview-table"> + <thead> + <tr> + <th rowspan="<?php echo $mergedCells; ?>" class="col item"><?php echo __('Product Name') ?></th> + <th colspan="<?php echo $mergedCells; ?>" class="col price"><?php echo __('Price') ?></th> + <th rowspan="<?php echo $mergedCells; ?>" class="col qty"><?php echo __('Qty') ?></th> + <th colspan="<?php echo $mergedCells; ?>" class="col subtotal"><?php echo __('Subtotal') ?></th> + </tr> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <tr> + <th class="col price excl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(false) ?></th> + <th class="col price incl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(true) ?></th> + <th class="col subtotal excl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(false) ?></th> + <th class="col subtotal incl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(true) ?></th> + </tr> + <?php endif; ?> + </thead> + <tfoot> + <?php echo $this->renderTotals($this->getBillinAddressTotals()); ?> + </tfoot> + <tbody> + <?php foreach ($this->getVirtualItems() as $_item): ?> + <?php echo $this->getRowItemHtml($_item); ?> + <?php endforeach; ?> + </tbody> + </table> + </div> + </div> + <?php endif; ?> + + <?php echo $this->getChildHtml('items_after'); ?> + + <div id="checkout-review-submit" class="checkout review"> + <?php echo $this->getChildHtml('agreements') ?> + <div class="grand total"> + <strong class="label"><?php echo __('Grand Total:') ?></strong> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($this->getTotal()) ?> + </div> + <div class="actions" id="review-buttons-container"> + <a href="<?php echo $this->getBackUrl() ?>" class="action back"><span><?php echo __('Back to Billing Information') ?></span></a> + <button type="submit" class="action submit" id="review-button"><span><?php echo __('Place Order') ?></span></button> + <span id="review-please-wait" class="please-wait load indicator" style="display:none;"> + <span><?php echo __('Submitting order information...') ?></span> + </span> + </div> + </div> +</form> +<script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('Magento_Checkout::js/overview.js')?>", function() { + jQuery('#review-order-form').orderOverview(); + }); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/overview/item.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/overview/item.phtml new file mode 100644 index 00000000000..d7cb049a107 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/overview/item.phtml @@ -0,0 +1,216 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php +/** + * Quote Item row html + * + * @see \Magento\Checkout\Block\Cart\Item\Renderer + */ +?> +<?php $_item = $this->getItem() ?> +<tr> + <td class="col item"><?php echo $this->getRenderedBlock()->getItemHtml($_item) ?></td> +<?php /* Excluding Tax */ ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceExclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="col price excl tax"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()) ?> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="eunit-item-tax-details<?php echo $_item->getId(); ?>" style="display: none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> +<?php /* // Excluding Tax */ ?> + +<?php /* Including Tax */ ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceInclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="col price incll tax"> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($_item); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl-$_item->getWeeeTaxDisposition()) ?> + <?php endif; ?> + </span> + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="unit-item-tax-details<?php echo $_item->getId(); ?>" style="display: none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + + </td> + <?php endif; ?> +<?php /* // Including Tax */ ?> + <td class="col qty"><?php echo $_item->getQty()*1 ?></td> +<?php /* Excluding Tax Subtotal */ ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceExclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="col subtotal excl tax"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()) ?> + <?php endif; ?> + + </span> + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="esubtotal-item-tax-details<?php echo $_item->getId(); ?>" style="display: none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="weee"><?php echo __('Total'); ?>:<br /> <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> +<?php /* //Excluding Tax Subtotal */ ?> + +<?php /* Including Tax Subtotal */ ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceInclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="col subtotal incl tax"> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($_item); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedRowAmount()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl-$_item->getWeeeTaxRowDisposition()) ?> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="subtotal-item-tax-details<?php echo $_item->getId(); ?>" style="display: none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="weee"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedRowAmount()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> +<?php /* //Including Tax Subtotal */ ?> +</tr> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/shipping.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/shipping.phtml new file mode 100644 index 00000000000..9725a84bc70 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/shipping.phtml @@ -0,0 +1,118 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Multishipping checkout shipping template + * + * @see \Magento\Checkout\Block\Multishipping\Shipping + * @var $this \Magento\Checkout\Block\Multishipping\Shipping + */ +?> +<form action="<?php echo $this->getPostActionUrl() ?>" method="post" id="shipping_method_form" class="form multicheckout shipping"> + <div class="title"> + <strong><?php echo __('Select Shipping Method') ?></strong> + </div> + <?php foreach ($this->getAddresses() as $_index => $_address): ?> + <div class="block shipping"> + <div class="title"><strong><?php echo __('Address %1 of %2', ($_index+1), $this->getAddressCount()) ?></strong></div> + <div class="content"> + <div class="box address"> + <strong class="subtitle"> + <span><?php echo __('Shipping To') ?></span> + <a href="<?php echo $this->getAddressEditUrl($_address) ?>" class="action edit"><span><?php echo __('Change') ?></span></a> + </strong> + <address><?php echo $_address->format('html') ?></address> + </div> + <div class="box method"> + <strong class="subtitle"> + <span><?php echo __('Shipping Method') ?></span> + </strong> + <?php if (!($_shippingRateGroups = $this->getShippingRates($_address))): ?> + <p><?php echo __('Sorry, no quotes are available for this order at this time.') ?></p> + <?php else: ?> + <dl class="sp-methods items methods"> + <?php $_sole = count($_shippingRateGroups) == 1; foreach ($_shippingRateGroups as $code => $_rates): ?> + <dt class="item title"><?php echo $this->escapeHtml($this->getCarrierName($code)) ?></dt> + <dd class="item options"> + <?php $_sole = $_sole && count($_rates) == 1; foreach ($_rates as $_rate): ?> + <div class="field choice"> + <?php if ($_rate->getErrorMessage()): ?> + <strong><?php echo $this->escapeHtml($_rate->getCarrierTitle()) ?>: <?php echo $this->escapeHtml($_rate->getErrorMessage()) ?></strong> + <?php else: ?> + <?php if ($_sole) : ?> + <input type="radio" name="shipping_method[<?php echo $_address->getId() ?>]" value="<?php echo $this->escapeHtml($_rate->getCode()) ?>" id="s_method_<?php echo $_address->getId() ?>_<?php echo $_rate->getCode() ?>" class="radio solo method" checked="checked"/> + <?php else: ?> + <input type="radio" name="shipping_method[<?php echo $_address->getId() ?>]" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_address->getId() ?>_<?php echo $_rate->getCode() ?>"<?php if($_rate->getCode()===$this->getAddressShippingMethod($_address)) echo ' checked="checked"' ?> class="radio" /> + <?php endif; ?> + <label for="s_method_<?php echo $_address->getId() ?>_<?php echo $_rate->getCode() ?>"><?php echo $this->escapeHtml($_rate->getMethodTitle()) ?> + <?php $_excl = $this->getShippingPrice($_address, $_rate->getPrice(), $this->helper('Magento\Tax\Helper\Data')->displayShippingPriceIncludingTax()); ?> + <?php $_incl = $this->getShippingPrice($_address, $_rate->getPrice(), true); ?> + <?php echo $_excl; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayShippingBothPrices() && $_incl != $_excl): ?> + (<?php echo __('Incl. Tax'); ?> <?php echo $_incl; ?>) + <?php endif; ?> + </label> + <?php endif ?> + </div> + <?php endforeach; ?> + </dd> + <?php endforeach; ?> + </dl> + <?php endif; ?> + </div> + <div class="box items"> + <?php echo $this->helper('Magento\GiftMessage\Helper\Message')->getInline('multishipping_adress_checkbox', $_address); ?> + <strong class="subtitle"> + <span><?php echo __('Items') ?></span> + <a href="<?php echo $this->getItemsEditUrl($_address) ?>" class="action edit"><span><?php echo __('Edit Items') ?></span></a> + </strong> + <table class="items data" id="shipping-table-<?php echo $_address->getId() ?>"> + <thead> + <tr> + <th class="col item"><?php echo __('Product Name') ?></th> + <th class="col qty"><?php echo __('Qty') ?></th> + </tr> + </thead> + <tbody> + <?php foreach ($this->getAddressItems($_address) as $_item): ?> + <tr> + <td class="col item"><?php echo $this->getItemHtml($_item->getQuoteItem()) ?></td> + <td class="col qty"><?php echo $_item->getQty() ?></td> + </tr> + <?php endforeach; ?> + </tbody> + </table> + <?php echo $this->helper('Magento\GiftMessage\Helper\Message')->getInline('multishipping_address', $_address); ?> + </div> + </div> + </div> + <?php endforeach; ?> + <?php echo $this->getChildHtml('checkout_billing_items') ?> + <div class="actions"> + <a href="<?php echo $this->getBackUrl() ?>" class="action back"><span><?php echo __('Back to Select Addresses') ?></span></a> + <button class="action continue" type="submit"><span><?php echo __('Continue to Billing Information') ?></span></button> + </div> +</form> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/state.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/state.phtml new file mode 100644 index 00000000000..e718013b82c --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/state.phtml @@ -0,0 +1,38 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php +/** + * Mustishipping state + * + * @see \Magento\Checkout\Block\Multishipping\State + */ +?> +<ul class="block multicheckout progress" id="checkout-progress-state"> + <?php foreach ($this->getSteps() as $_step): ?> + <li title="<?php echo $_step->getLabel() ?>"<?php if($_step->getIsActive()): ?> class="active"<?php endif; ?>><span><?php echo $_step->getLabel() ?></span></li> + <?php endforeach; ?> +</ul> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/success.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/success.phtml new file mode 100644 index 00000000000..51ef877cc16 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/multishipping/success.phtml @@ -0,0 +1,45 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<div class="multicheckout success"> + <h2 class="subtitle"><?php echo __('Thank you for your purchase!') ?></h2> + <p><?php echo __('Thanks for your order. We\'ll send you emails with order details and tracking information.') ?></p> + <?php if($_orderIds = $this->getOrderIds()): ?> + <p> + <?php $flag = false ?> + <?php echo __('Your order number is ') ?> + <?php foreach ($_orderIds as $orderId=>$incrementId): ?> + <?php if ($flag): ?><?php echo ', ' ?><?php endif; ?> + <?php $flag = true ?> + <a href="<?php echo $this->getViewOrderUrl($orderId) ?>"><?php echo $incrementId ?></a> + <?php endforeach; ?> + </p> + <?php endif; ?> + <?php echo $this->getChildHtml() ?> + <div class="actions"> + <a class="action continue" title="<?php echo __('Continue Shopping') ?>" href="<?php echo $this->getContinueUrl() ?>"><span><?php echo __('Continue Shopping') ?></span></a> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/onepage.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/onepage.phtml new file mode 100644 index 00000000000..7e00b188d24 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/onepage.phtml @@ -0,0 +1,94 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +$_paymentBlock = $this->getLayout()->getBlock('checkout.onepage.payment'); +$_registerParam = $this->getRequest()->getParam('register'); +?> +<div class="opc wrapper"> + <ol class="opc" id="checkoutSteps"> + <?php $i=0; foreach($this->getSteps() as $_stepId => $_stepInfo): ?> + <?php if (!$this->getChildBlock($_stepId) || !$this->getChildBlock($_stepId)->isShow()): continue; endif; $i++ ?> + <li id="opc-<?php echo $_stepId ?>" class="section<?php echo !empty($_stepInfo['allow'])?' allow':'' ?><?php echo !empty($_stepInfo['complete'])?' saved':'' ?>"> + <div class="step-title"> + <span class="number"><?php echo $i ?></span> + <h2><?php echo $_stepInfo['label'] ?></h2> + <!--<a href="#"><?php echo __('Edit') ?></a>--> + </div> + <div id="checkout-step-<?php echo $_stepId ?>" class="step a-item" style="display:none;"> + <?php echo $this->getChildHtml($_stepId) ?> + </div> + </li> + <?php endforeach ?> + </ol> + <script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", + "<?php echo $this->getViewFileUrl('Magento_Checkout::js/accordion.js') ?>", + function() { + $('#checkoutSteps') + .accordion({ + activeSelector: '#opc-<?php echo $this->getActiveStep() ?>' + }) + .opcheckout({ + quoteBaseGrandTotal: <?php echo (float)$_paymentBlock->getQuoteBaseGrandTotal() ?>, + progressUrl: '<?php echo $this->getUrl('checkout/onepage/progress') ?>', + reviewUrl: '<?php echo $this->getUrl('checkout/onepage/review') ?>', + failureUrl: '<?php echo $this->getUrl('checkout/cart') ?>', + getAddressUrl: '<?php echo $this->getUrl('checkout/onepage/getAddress') ?>address/', + checkoutAgreements: '#checkout-agreements', + checkoutProgressContainer: '#checkout-progress-wrapper', + checkout: { + suggestRegistration: <?php echo ($_registerParam || $_registerParam === '') ? 'true' : 'false' ?>, + saveUrl: '<?php echo $this->getUrl('checkout/onepage/saveMethod') ?>' + }, + billing: { + saveUrl: '<?php echo $this->getUrl('checkout/onepage/saveBilling') ?>' + }, + shipping: { + saveUrl: '<?php echo $this->getUrl('checkout/onepage/saveShipping') ?>' + }, + shippingMethod: { + saveUrl: "<?php echo $this->getUrl('checkout/onepage/saveShippingMethod') ?>" + }, + payment: { + <?php if ($_paymentBlock->getChildBlock('methods')->getSelectedMethodCode()): ?> + defaultPaymentMethod: "<?php echo $_paymentBlock->getChildBlock('methods')->getSelectedMethodCode() ?>", + <?php endif ?> + saveUrl: '<?php echo $this->getUrl('checkout/onepage/savePayment') ?>' + }, + review: { + saveUrl: '<?php echo $this->getUrl('checkout/onepage/saveOrder') ?>', + successUrl: '<?php echo $this->getUrl('checkout/onepage/success') ?>' + } + }); + }); + })(jQuery); + </script> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/onepage/billing.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/billing.phtml new file mode 100644 index 00000000000..5e76f4cd52b --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/billing.phtml @@ -0,0 +1,212 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<form class="form billing" id="co-billing-form" action="" data-hasrequired="<?php echo __('* Required Fields') ?>"> + + <?php if ($this->customerHasAddresses()): ?> + <div class="field addresses"> + <label class="label" for="billing-address-select"><span><?php echo __('Select a billing address from your address book or enter a new address.') ?></span></label> + <div class="control"> + <?php echo $this->getAddressesHtmlSelect('billing') ?> + </div> + </div> + <?php endif; ?> + <fieldset class="fieldset address" id="billing-new-address-form"<?php if ($this->customerHasAddresses()): ?> style="display:none;"<?php endif; ?> + <input type="hidden" name="billing[address_id]" value="<?php echo $this->getAddress()->getId() ?>" id="billing:address_id" /> + + <?php echo $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Name')->setObject($this->getAddress()->getFirstname() ? $this->getAddress() : $this->getQuote()->getCustomer())->setForceUseCustomerRequiredAttributes(!$this->isCustomerLoggedIn())->setFieldIdFormat('billing:%s')->setFieldNameFormat('billing[%s]')->toHtml() ?> + + <?php if (!$this->isCustomerLoggedIn()): ?> + <div class="field required"> + <label class="label" for="billing:email"><span><?php echo __('Email Address') ?></span></label> + <div class="control"> + <input type="text" name="billing[email]" id="billing:email" value="<?php echo $this->escapeHtml($this->getAddress()->getEmail()) ?>" title="<?php echo __('Email Address') ?>" class="input-text" data-validate="{required:true, 'validate-email':true}"/> + </div> + </div> + <?php endif; ?> + + <div class="field company"> + <label class="label" for="billing:company"><span><?php echo __('Company') ?></span></label> + <div class="control"> + <input type="text" id="billing:company" name="billing[company]" value="<?php echo $this->escapeHtml($this->getAddress()->getCompany()) ?>" title="<?php echo __('Company') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('company') ?>" /> + </div> + </div> + + <?php if ($this->helper('Magento\Customer\Helper\Address')->isVatAttributeVisible()) : ?> + <div class="field taxvat"> + <label class="label" for="billing:vat_id"><span><?php echo __('VAT Number') ?></span></label> + <div class="control"> + <input type="text" id="billing:vat_id" name="billing[vat_id]" value="<?php echo $this->escapeHtml($this->getAddress()->getVatId()) ?>" title="<?php echo __('VAT Number') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('vat_id') ?>" /> + </div> + </div> + <?php endif; ?> + + <?php $_streetValidationClass = $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('street'); ?> + <div class="field street required"> + <label class="label" for="billing:street1"><span><?php echo __('Address') ?></span></label> + <div class="control"> + <input type="text" title="<?php echo __('Street Address') ?>" name="billing[street][]" id="billing:street1" value="<?php echo $this->escapeHtml($this->getAddress()->getStreet(1)) ?>" class="input-text <?php echo $_streetValidationClass ?>" /> + <div class="nested"> + <?php $_streetValidationClass = trim(str_replace('required-entry', '', $_streetValidationClass)); ?> + <?php for ($_i = 2, $_n = $this->helper('Magento\Customer\Helper\Address')->getStreetLines(); $_i <= $_n; $_i++): ?> + <div class="field additional no-label"> + <div class="control"> + <input type="text" title="<?php echo __('Street Address %1', $_i) ?>" name="billing[street][]" id="billing:street<?php echo $_i ?>" value="<?php echo $this->escapeHtml($this->getAddress()->getStreet($_i)) ?>" class="input-text <?php echo $_streetValidationClass ?>" /> + </div> + </div> + <?php endfor; ?> + </div> + </div> + </div> + + + <div class="field city required"> + <label class="label" for="billing:city"><span><?php echo __('City') ?></span></label> + <div class="control"> + <input type="text" title="<?php echo __('City') ?>" name="billing[city]" value="<?php echo $this->escapeHtml($this->getAddress()->getCity()) ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('city') ?>" id="billing:city" /> + </div> + </div> + + <div class="field region required"> + <label class="label" for="billing:region_id"><span><?php echo __('State/Province') ?></span></label> + <div class="control"> + <select id="billing:region_id" name="billing[region_id]" title="<?php echo __('State/Province') ?>" data-validate="{'validate-select':true}" style="display:none;"> + <option value=""><?php echo __('Please select region, state or province') ?></option> + </select> + <input type="text" id="billing:region" name="billing[region]" value="<?php echo $this->escapeHtml($this->getAddress()->getRegion()) ?>" title="<?php echo __('State/Province') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('region') ?>" style="display:none;" /> + </div> + </div> + + <div class="field zip required"> + <label class="label" for="billing:postcode"><span><?php echo __('Zip/Postal Code') ?></span></label> + <div class="control"> + <input type="text" title="<?php echo __('Zip/Postal Code') ?>" name="billing[postcode]" id="billing:postcode" value="<?php echo $this->escapeHtml($this->getAddress()->getPostcode()) ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('postcode') ?>" data-validate="{'validate-zip-international':true}"/> + </div> + </div> + + <div class="field country required"> + <label class="label" for="billing:country_id"><span><?php echo __('Country') ?></span></label> + <div class="control"> + <?php echo $this->getCountryHtmlSelect('billing') ?> + </div> + </div> + + <div class="field telephone required"> + <label class="label" for="billing:telephone"><span><?php echo __('Telephone') ?></span></label> + <div class="control"> + <input type="text" name="billing[telephone]" value="<?php echo $this->escapeHtml($this->getAddress()->getTelephone()) ?>" title="<?php echo __('Telephone') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('telephone') ?>" id="billing:telephone" /> + </div> + </div> + + <div class="field fax"> + <label class="label" for="billing:fax"><span><?php echo __('Fax') ?></span></label> + <div class="control"> + <input type="text" name="billing[fax]" value="<?php echo $this->escapeHtml($this->getAddress()->getFax()) ?>" title="<?php echo __('Fax') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('fax') ?>" id="billing:fax" /> + </div> + </div> + + <?php if(!$this->isCustomerLoggedIn()): ?> + <?php $_dob = $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Dob') ?> + <?php $_taxvat = $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Taxvat') ?> + <?php $_gender = $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Gender') ?> + + <?php if ($_dob->isEnabled()): ?> + <?php echo $_dob->setDate($this->getQuote()->getCustomerDob())->setFieldIdFormat('billing:%s')->setFieldNameFormat('billing[%s]')->toHtml() ?> + <?php endif; ?> + <?php if ($_taxvat->isEnabled()): ?> + <?php echo $_taxvat->setTaxvat($this->getQuote()->getCustomerTaxvat())->setFieldIdFormat('billing:%s')->setFieldNameFormat('billing[%s]')->toHtml() ?> + <?php endif ?> + <?php if ($_gender->isEnabled()): ?> + <?php echo $_gender->setGender($this->getQuote()->getCustomerGender())->setFieldIdFormat('billing:%s')->setFieldNameFormat('billing[%s]')->toHtml() ?> + <?php endif ?> + <?php $customerAttributes = $this->getChildBlock('customer_form_customer_user_defined_attributes');?> + <?php if ($customerAttributes): ?> + <?php $customerAttributes->setEntityModelClass('Magento\Customer\Model\Customer')->setFieldIdFormat('billing:%1$s');?> + <?php $customerAttributes->setFieldNameFormat('billing[%1$s]')->setShowContainer(false);?> + <?php echo $customerAttributes->setExcludeFileAttributes(true)->toHtml()?> + <?php endif;?> + <div class="field password required"> + <label class="label" for="billing:customer_password"><span><?php echo __('Password') ?></span></label> + <div class="control"> + <input type="password" name="billing[customer_password]" id="billing:customer_password" title="<?php echo __('Password') ?>" class="input-text" data-validate="{required:true, 'validate-password':true}"/> + </div> + </div> + <div class="field confirm required"> + <label class="label" for="billing:confirm_password"><span><?php echo __('Confirm Password') ?></span></label> + <div class="control"> + <input type="password" name="billing[confirm_password]" title="<?php echo __('Confirm Password') ?>" id="billing:confirm_password" class="input-text" data-validate="{required:true, 'validate-cpassword':true}"/> + </div> + </div> + <?php endif; ?> + <?php echo $this->getChildHtml('form_additional_info'); ?> + <?php if ($this->isCustomerLoggedIn() && $this->customerHasAddresses()):?> + <div class="field save choice"> + <input type="checkbox" name="billing[save_in_address_book]" value="1" title="<?php echo __('Save in address book') ?>" id="billing:save_in_address_book" <?php if ($this->getAddress()->getSaveInAddressBook()):?> checked="checked"<?php endif;?> class="checkbox" /> + <label class="label" for="billing:save_in_address_book"><span><?php echo __('Save in address book') ?></span></label> + </div> + <?php else:?> + <input type="hidden" name="billing[save_in_address_book]" value="1" /> + <?php endif; ?> + <?php /* Extensions placeholder */ ?> + <?php echo $this->getChildHtml('checkout.onepage.billing.extra')?> +</fieldset> +<?php if ($this->canShip()): ?> + <div class="field choice"> + <input type="radio" name="billing[use_for_shipping]" id="billing:use_for_shipping_yes" value="1"<?php if ($this->isUseBillingAddressForShipping()) {?> checked="checked"<?php }?> class="radio" /> + <label class="label" for="billing:use_for_shipping_yes"><span><?php echo __('Ship to this address') ?></span></label> + </div> + <div class="field choice"> + <input type="radio" name="billing[use_for_shipping]" id="billing:use_for_shipping_no" value="0"<?php if (!$this->isUseBillingAddressForShipping()) {?> checked="checked"<?php }?> class="radio" /> + <label class="label" for="billing:use_for_shipping_no"><span><?php echo __('Ship to different address') ?></span></label> + </div> +<?php endif; ?> + +<?php if (!$this->canShip()): ?> + <input type="hidden" name="billing[use_for_shipping]" value="1" /> +<?php endif; ?> +<div class="actions buttons-set form-buttons btn-only" id="billing-buttons-container"> + <div class="primary"><button type="button" class="button action continue"><span><?php echo __('Continue') ?></span></button></div> + <span id="billing-please-wait" class="please-wait load indicator" style="display:none;"> + <span><?php echo __('Loading next step...') ?></span> + </span> +</div> +</form> +<script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('Magento_Checkout::js/region-updater.js') ?>", + function() { + $('#billing\\:country_id').regionUpdater({ + optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, + regionListId: '#billing\\:region_id', + regionInputId: '#billing\\:region', + postcodeId: '#billing\\:postcode', + regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, + defaultRegion: "<?php echo $this->getAddress()->getRegionId() ?>", + countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> + }); + }); + })(jQuery); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/onepage/failure.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/failure.phtml new file mode 100644 index 00000000000..f0ccb4c1f26 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/failure.phtml @@ -0,0 +1,28 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if ($this->getRealOrderId()) : ?><p><?php echo __('Order #') . $this->getRealOrderId() ?></p><?php endif ?> +<?php if ($error = $this->getErrorMessage()) : ?><p><?php echo $error ?></p><?php endif ?> +<p><?php echo __('Click <a href="%1">here</a> to continue shopping.', $this->getContinueShoppingUrl()) ?></p> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/onepage/link.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/link.phtml new file mode 100644 index 00000000000..a016f12eaca --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/link.phtml @@ -0,0 +1,28 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if ($this->isPossibleOnepageCheckout()):?> + <button type="button" title="<?php echo __('Proceed to Checkout') ?>" class="action primary checkout<?php if ($this->isDisabled()):?> disabled<?php endif; ?>"<?php if ($this->isDisabled()):?> disabled="disabled"<?php endif; ?> onclick="window.location='<?php echo $this->getCheckoutUrl() ?>';"><span><span><?php echo __('Proceed to Checkout') ?></span></span></button> +<?php endif?> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/onepage/login.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/login.phtml new file mode 100644 index 00000000000..a66ba381e91 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/login.phtml @@ -0,0 +1,154 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Customer onepage checkout login form template + * + */ +/** @var $this \Magento\Checkout\Block\Onepage\Login */ +?> +<div class="step login wrapper"> +<?php echo $this->getChildHtml('login_before')?> +<div class="block customer login"> + <div class="title"><strong><?php echo __('Login') ?></strong></div> + <div class="content"> + <form class="form login" id="login-form" action="<?php echo $this->getPostAction() ?>" method="post"> + <fieldset class="fieldset login" data-hasrequired="<?php echo __('* Required Fields') ?>"> + <p class="field note"><?php echo __('Already registered?') ?> <?php echo __('Please log in below:') ?></p> + <div class="field email required"> + <label class="label" for="login-email"><span><?php echo __('Email Address') ?></span></label> + <div class="control"> + <input type="text" class="input-text" id="login-email" name="login[username]" data-validate="{required:true, 'validate-email':true}" value="<?php echo $this->escapeHtml($this->getUsername()) ?>" /> + </div> + </div> + <div class="field password required"> + <label for="login-password" class="label"><span><?php echo __('Password') ?></span></label> + <div class="control"> + <input type="password" class="input-text" id="login-password" name="login[password]" data-validate="{required:true, 'validate-password':true}"/> + </div> + </div> + <?php echo $this->getChildHtml('form_additional_info'); ?> + <div class="actions"> + <input name="context" type="hidden" value="checkout" /> + <div class="primary"> + <button type="submit" class="action login"><span><?php echo __('Login') ?></span></button> + </div> + <div class="secondary"> + <a class="action remind" href="<?php echo $this->helper('Magento\Customer\Helper\Data')->getForgotPasswordUrl()?>"> + <span><?php echo __('Forgot Your Password?') ?></span> + </a> + </div> + </div> + </fieldset> + </form> + </div> + <script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", + function() { + $('#login-form').validation(); + }); + })(jQuery); + </script> +</div> +<?php if ( $this->isAllowedGuestCheckout() || $this->helper('Magento\Customer\Helper\Data')->isRegistrationAllowed() ): ?> +<div class="block guest"> + <div class="title"> + <strong> + <?php if( $this->isAllowedGuestCheckout() && $this->helper('Magento\Customer\Helper\Data')->isRegistrationAllowed() ): ?> + <?php echo __('Checkout as a Guest or Register') ?> + <?php elseif ( $this->isAllowedGuestCheckout() && !$this->helper('Magento\Customer\Helper\Data')->isRegistrationAllowed() ): ?> + <?php echo __('Checkout as a Guest') ?> + <?php else: ?> + <?php echo __('Register to Create an Account') ?> + <?php endif; ?> + </strong> + </div> + <div class="content"> + <?php if( !$this->isAllowedGuestCheckout() && $this->helper('Magento\Customer\Helper\Data')->isRegistrationAllowed() ): ?> + <p><strong><?php echo __('Register and save time!') ?></strong><br /> + <?php echo __('Register with us for future convenience:') ?></p> + <ul> + <li><?php echo __('Fast and easy check out') ?></li> + <li><?php echo __('Easy access to your order history and status') ?></li> + </ul> + <?php elseif( $this->isAllowedGuestCheckout() && $this->helper('Magento\Customer\Helper\Data')->isRegistrationAllowed() ): ?> + <p class="note"><?php echo __('Register with us for future convenience:') ?></p> + <?php endif ?> + + <?php if( $this->isAllowedGuestCheckout() ): ?> + <fieldset class="fieldset guest"> + <?php if( $this->isAllowedGuestCheckout() ): ?> + <div class="field choice"> + <input type="radio" name="checkout_method" id="login:guest" value="guest"<?php if($this->getQuote()->getCheckoutMethod()==Magento\Checkout\Model\Type\Onepage::METHOD_GUEST): ?> checked="checked"<?php endif; ?> class="radio" /> + <label class="label" for="login:guest"><span><?php echo __('Checkout as Guest') ?></span></label> + </div> + <?php endif; ?> + <?php if( $this->helper('Magento\Customer\Helper\Data')->isRegistrationAllowed() ): ?> + <div class="field choice"> + <input type="radio" name="checkout_method" id="login:register" value="register"<?php if($this->getQuote()->getCheckoutMethod()==Magento\Checkout\Model\Type\Onepage::METHOD_REGISTER || !$this->isAllowedGuestCheckout()): ?> checked="checked"<?php endif ?> class="radio" /> + <label class="label" for="login:register"><span><?php echo __('Register') ?></span></label> + </div> + <?php endif; ?> + </fieldset> + <?php else: ?> + <input type="hidden" name="checkout_method" id="login:register" value="register" checked="checked" /> + <?php endif; ?> + <div class="actions"> + <span class="please-wait load indicator" style="display:none;"> + <span><?php echo __('Loading next step...') ?></span> + </span> + <?php if ($this->isAllowedGuestCheckout()): ?> + <button id="onepage-guest-register-button" type="button" class="action continue" data-checkout='{"isGuestCheckoutAllowed":true}'><span><?php echo __('Continue') ?></span></button> + <?php elseif ($this->helper('Magento\Checkout\Helper\Data')->isCustomerMustBeLogged()): ?> + <button id="onepage-guest-register-button" type="button" class="action register" data-checkout='{"isGuestCheckoutAllowed":false, "registrationUrl":"<?php echo $this->helper('Magento\Checkout\Helper\Url')->getRegistrationUrl();?>"}'><span><?php echo __('Register') ?></span></button> + <?php else: ?> + <form action="<?php echo $this->getUrl('persistent/index/saveMethod'); ?>"> + <button id="onepage-guest-register-button" type="submit" class="action register"><span><?php echo __('Register') ?></span></button> + </form> + <?php endif; ?> + </div> + </div> +</div> +<?php endif; ?> +</div> +<script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", + function() { + $('#login-form').validation(); + } + )} + )(jQuery); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/onepage/payment.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/payment.phtml new file mode 100644 index 00000000000..fe8f86c816f --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/payment.phtml @@ -0,0 +1,43 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<form action="" id="co-payment-form" class="form payments"> + <fieldset class="fieldset"> + <?php echo $this->getChildChildHtml('methods_additional') ?> + <?php echo $this->getChildHtml('methods') ?> + </fieldset> + <?php echo $this->getChildChildHtml('additional') ?> + <div class="buttons-set actions" id="payment-buttons-container"> + <div class="primary"> + <button type="button" class="button action continue"><span><?php echo __('Continue') ?></span></button> + </div> + <div class="secondary"> + <a class="action back" href="#"><span><?php echo __('Back') ?></span></a> + </div> + <span id="payment-please-wait" class="please-wait load indicator" style="display:none"> + <span><?php echo __('Loading next step...') ?></span> + </span> + </div> +</form> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/onepage/progress.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/progress.phtml new file mode 100644 index 00000000000..5719d1f9962 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/progress.phtml @@ -0,0 +1,114 @@ +<?php +/** + * 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 design + * @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) + */ +/* @var $this \Magento\Checkout\Block\Onepage\Progress */ +?> +<div class="block progress onepage opc-block-progress"> + <div class="title"> + <strong><?php echo __('Your Checkout Progress') ?></strong> + </div> + <div class="content"> + <dl> + <?php if ($this->getCheckout()->getStepData('billing', 'is_show')): ?> + <?php if ($this->isStepComplete('billing')): ?> + <dt class="complete"> + <?php echo __('Billing Address') ?> <span class="separator">|</span> + <a href="#billing" data-goto-section="billing"><?php echo __('Change') ?></a> + </dt> + <dd class="complete"> + <address><?php echo $this->getBilling()->format('html') ?></address> + </dd> + <?php else: ?> + <dt> + <?php echo __('Billing Address') ?> + </dt> + <?php endif; ?> + <?php endif; ?> + + <?php if ($this->getCheckout()->getStepData('shipping', 'is_show')): ?> + <?php if ($this->isStepComplete('shipping')): ?> + <dt class="complete"> + <?php echo __('Shipping Address') ?> <span class="separator">|</span> + <a href="#payment" data-goto-section="shipping"><?php echo __('Change') ?></a> + </dt> + <dd class="complete"> + <address><?php echo $this->getShipping()->format('html') ?></address> + </dd> + <?php else: ?> + <dt> + <?php echo __('Shipping Address') ?> + </dt> + <?php endif; ?> + <?php endif; ?> + + <?php if ($this->getCheckout()->getStepData('shipping_method', 'is_show')): ?> + <?php if ($this->isStepComplete('shipping_method')): ?> + <dt class="complete"> + <?php echo __('Shipping Method') ?> <span class="separator">|</span> + <a href="#shipping_method" data-goto-section="shipping_method"><?php echo __('Change') ?></a> + </dt> + <dd class="complete"> + <?php if ($this->getShippingMethod()): ?> + <?php echo $this->escapeHtml($this->getShippingDescription()) ?> + + <?php $_excl = $this->getShippingPriceExclTax(); ?> + <?php $_incl = $this->getShippingPriceInclTax(); ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayShippingPriceIncludingTax()): ?> + <?php echo $_incl; ?> + <?php else: ?> + <?php echo $_excl; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayShippingBothPrices() && $_incl != $_excl): ?> + (<?php echo __('Incl. Tax'); ?> <?php echo $_incl; ?>) + <?php endif; ?> + + <?php else: ?> + <?php echo __('Shipping method has not been selected yet') ?> + <?php endif; ?> + </dd> + <?php else: ?> + <dt> + <?php echo __('Shipping Method') ?> + </dt> + <?php endif; ?> + <?php endif; ?> + + <?php if ($this->getCheckout()->getStepData('payment', 'is_show')): ?> + <?php if ($this->isStepComplete('payment')): ?> + <dt class="complete"> + <?php echo __('Payment Method') ?> <span class="separator">|</span> + <a href="#payment" data-goto-section="payment"><?php echo __('Change') ?></a> + </dt> + <dd class="complete"> + <?php echo $this->getPaymentHtml() ?> + </dd> + <?php else: ?> + <dt> + <?php echo __('Payment Method') ?> + </dt> + <?php endif; ?> + <?php endif; ?> + </dl> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/onepage/review/button.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/review/button.phtml new file mode 100644 index 00000000000..35ddad1c26c --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/review/button.phtml @@ -0,0 +1,26 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<button role='review-save' type="submit" title="<?php echo __('Place Order') ?>" class="button btn-checkout action checkout"><span><?php echo __('Place Order') ?></span></button> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/onepage/review/info.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/review/info.phtml new file mode 100644 index 00000000000..9b8fc74bc43 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/review/info.phtml @@ -0,0 +1,65 @@ +\<?php +/** + * 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 design + * @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) + */ +?> +<?php echo $this->getChildHtml('items_before'); ?> +<div id="checkout-review-table-wrapper" class="review table wrapper"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): $colspan = $rowspan = 2; else: $colspan = $rowspan = 1; endif; ?> + <table class="order review items data" id="checkout-review-table"> + <thead> + <tr> + <th rowspan="<?php echo $rowspan ?>" class="col item"><?php echo __('Product Name') ?></th> + <th colspan="<?php echo $colspan ?>" class="col price"><?php echo __('Price') ?></th> + <th rowspan="<?php echo $rowspan ?>" class="col qty"><?php echo __('Qty') ?></th> + <th colspan="<?php echo $colspan ?>" class="col subtotal"><?php echo __('Subtotal') ?></th> + </tr> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <tr> + <th class="col price excl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(false) ?></th> + <th class="col price incl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(true) ?></th> + <th class="col subtotal excl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(false) ?></th> + <th class="col subtotal incl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(true) ?></th> + </tr> + <?php endif; ?> + </thead> + <?php echo $this->getChildHtml('totals'); ?> + <tbody> + <?php foreach($this->getItems() as $_item): ?> + <?php echo $this->getItemHtml($_item)?> + <?php endforeach ?> + </tbody> + </table> +</div> +<?php echo $this->getChildHtml('items_after'); ?> + +<div id="checkout-review-submit" class="checkout submit order"> + <?php echo $this->getChildHtml('agreements') ?> + <div class="buttons-set actions" id="review-buttons-container"> + <div class="primary"><?php echo $this->getChildHtml('button') ?></div> + <div class="secondary"><?php echo __('Forgot an Item?') ?> <a href="<?php echo $this->getUrl('checkout/cart') ?>" class="action edit"><span><?php echo __('Edit Your Cart') ?></span></a></div> + <span class="please-wait load indicator" id="review-please-wait" style="display:none;"> + <span><?php echo __('Submitting order information...') ?></span> + </span> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/onepage/review/item.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/review/item.phtml new file mode 100644 index 00000000000..a177ee2976d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/review/item.phtml @@ -0,0 +1,238 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_item = $this->getItem()?> +<tr> + <td class="col item"><strong class="product name"><?php echo $this->escapeHtml($this->getProductName()) ?></strong> + <?php if ($_options = $this->getOptionList()):?> + <dl class="review item options"> + <?php foreach ($_options as $_option) : ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>><?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <div class="truncated_full_value"> + <dl class="item-options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + </div> + <?php endif; ?> + </dd> + <?php endforeach; ?> + </dl> + <?php endif;?> + <?php if ($addtInfoBlock = $this->getProductAdditionalInformationBlock()):?> + <?php echo $addtInfoBlock->setItem($_item)->toHtml() ?> + <?php endif;?> + </td> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceExclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="col price excl tax"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()) ?> + <?php endif; ?> + + </span> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="eunit-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></small></span><br /> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceInclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="col price incl tax"> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($_item); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl-$_item->getWeeeTaxDisposition()) ?> + <?php endif; ?> + + </span> + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="unit-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></small></span><br /> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> + <td class="col qty"><span class="qty"><?php echo $_item->getQty() ?></span></td> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceExclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="col subtotal excl tax"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()) ?> + <?php endif; ?> + + </span> + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="esubtotal-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></small></span><br /> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceInclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="col subtotal incl tax"> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($_item); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedRowAmount()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl-$_item->getWeeeTaxRowDisposition()) ?> + <?php endif; ?> + + </span> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="subtotal-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></small></span><br /> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedRowAmount()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> +</tr> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/onepage/review/totals.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/review/totals.phtml new file mode 100644 index 00000000000..70938f93971 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/review/totals.phtml @@ -0,0 +1,46 @@ +<?php +/** + * 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 design + * @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) + */ + +/** + * @see \Magento\Checkout\Block\Cart\Totals + */ +?> +<?php if ($this->getTotals()): ?> +<tfoot> + <?php $_colspan = $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices() ? 5 : 3; ?> + <?php echo $this->renderTotals(null, $_colspan); ?> + <?php echo $this->renderTotals('footer', $_colspan); ?> + <?php if ($this->needDisplayBaseGrandtotal()):?> + <tr> + <td class="col label" colspan="<?php echo $_colspan; ?>"> + <small><?php echo __('Your credit card will be charged for') ?></small> + </td> + <td class="col total"> + <small><?php echo $this->displayBaseGrandtotal() ?></small> + </td> + </tr> + <?php endif?> +</tfoot> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/onepage/shipping.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/shipping.phtml new file mode 100644 index 00000000000..6c183170aee --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/shipping.phtml @@ -0,0 +1,144 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<form class="form shipping address" action="" id="co-shipping-form" data-hasrequired="<?php echo __('* Required Fields') ?>"> + +<?php if ($this->customerHasAddresses()): ?> + <div class="field addresses"> + <label class="label" for="shipping-address-select"><span><?php echo __('Select a shipping address from your address book or enter a new address.') ?></span></label> + <div class="control"><?php echo $this->getAddressesHtmlSelect('shipping') ?></div> + </div> +<?php endif ?> + <fieldset class="fieldset address" id="shipping-new-address-form"<?php if ($this->customerHasAddresses()): ?> style="display:none;"<?php endif ?>> + <input type="hidden" name="shipping[address_id]" value="<?php echo $this->getAddress()->getId() ?>" id="shipping:address_id" /> + <?php echo $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Name')->setObject($this->getAddress())->setFieldIdFormat('shipping:%s')->setFieldNameFormat('shipping[%s]')->toHtml() ?> + <div class="field company"> + <label class="label" for="shipping:company"><span><?php echo __('Company') ?></span></label> + <div class="control"> + <input type="text" id="shipping:company" name="shipping[company]" value="<?php echo $this->escapeHtml($this->getAddress()->getCompany()) ?>" title="<?php echo __('Company') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('company') ?>" /> + </div> + </div> + <?php if ($this->helper('Magento\Customer\Helper\Address')->isVatAttributeVisible()) : ?> + <div class="field taxvat"> + <label class="label" for="shipping:vat_id"><span><?php echo __('VAT Number'); ?></span></label> + <div class="control"> + <input type="text" id="shipping:vat_id" name="shipping[vat_id]" value="<?php echo $this->escapeHtml($this->getAddress()->getVatId()); ?>" title="<?php echo __('VAT Number'); ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('vat_id') ?>" /> + </div> + </div> + <?php endif; ?> + <?php $_streetValidationClass = $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('street'); ?> + <div class="field street required"> + <label class="label" for="shipping:street1"><span><?php echo __('Address') ?></span></label> + <div class="control"> + <input type="text" title="<?php echo __('Street Address') ?>" name="shipping[street][]" id="shipping:street1" value="<?php echo $this->escapeHtml($this->getAddress()->getStreet(1)) ?>" class="input-text <?php echo $_streetValidationClass ?>" /> + <div class="nested"> + <?php $_streetValidationClass = trim(str_replace('required-entry', '', $_streetValidationClass)); ?> + <?php for ($_i = 2, $_n = $this->helper('Magento\Customer\Helper\Address')->getStreetLines(); $_i <= $_n; $_i++): ?> + <div class="field additional no-label"> + <div class="control"> + <input type="text" title="<?php echo __('Street Address %1', $_i) ?>" name="shipping[street][]" id="shipping:street<?php echo $_i ?>" value="<?php echo $this->escapeHtml($this->getAddress()->getStreet($_i)) ?>" class="input-text <?php echo $_streetValidationClass ?>" /> + </div> + </div> + <?php endfor; ?> + </div> + </div> + </div> + + <div class="field city required"> + <label class="label" for="shipping:city"><span><?php echo __('City') ?></span></label> + <div class="control"> + <input type="text" title="<?php echo __('City') ?>" name="shipping[city]" value="<?php echo $this->escapeHtml($this->getAddress()->getCity()) ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('city') ?>" id="shipping:city" /> + </div> + </div> + <div class="field region required"> + <label class="label" for="shipping:region"><span><?php echo __('State/Province') ?></span></label> + <div class="control"> + <select id="shipping:region_id" name="shipping[region_id]" title="<?php echo __('State/Province') ?>" class="validate-select" style="display:none;"> + <option value=""><?php echo __('Please select region, state or province') ?></option> + </select> + <input type="text" id="shipping:region" name="shipping[region]" value="<?php echo $this->escapeHtml($this->getAddress()->getRegion()) ?>" title="<?php echo __('State/Province') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('region') ?>" style="display:none;" /> + </div> + </div> + <div class="field zip required"> + <label class="label" for="shipping:postcode"><span><?php echo __('Zip/Postal Code') ?></span></label> + <div class="control"> + <input type="text" title="<?php echo __('Zip/Postal Code') ?>" name="shipping[postcode]" id="shipping:postcode" value="<?php echo $this->escapeHtml($this->getAddress()->getPostcode()) ?>" class="input-text validate-zip-international <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('postcode') ?>" /> + </div> + </div> + <div class="field country required"> + <label class="label" for="shipping:country_id"><span><?php echo __('Country') ?></span></label> + <div class="control"> + <?php echo $this->getCountryHtmlSelect('shipping') ?> + </div> + </div> + <div class="field telephone required"> + <label class="label" for="shipping:telephone"><span><?php echo __('Telephone') ?></span></label> + <div class="control"> + <input type="text" name="shipping[telephone]" value="<?php echo $this->escapeHtml($this->getAddress()->getTelephone()) ?>" title="<?php echo __('Telephone') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('telephone') ?>" id="shipping:telephone" /> + </div> + </div> + <div class="field fax"> + <label class="label" for="shipping:fax"><span><?php echo __('Fax') ?></span></label> + <div class="control"> + <input type="text" name="shipping[fax]" value="<?php echo $this->escapeHtml($this->getAddress()->getFax()) ?>" title="<?php echo __('Fax') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('fax') ?>" id="shipping:fax" /> + </div> + </div> + + <?php if ($this->isCustomerLoggedIn() && $this->customerHasAddresses()):?> + <div class="field choice save"> + <input type="checkbox" name="shipping[save_in_address_book]" value="1" title="<?php echo __('Save in address book') ?>" id="shipping:save_in_address_book" <?php if ($this->getAddress()->getSaveInAddressBook()):?> checked="checked"<?php endif;?> class="checkbox" /> + <label class="label" for="shipping:save_in_address_book"><span><?php echo __('Save in address book') ?></span></label> + </div> + <?php else:?> + <input type="hidden" name="shipping[save_in_address_book]" value="1" /> + <?php endif;?> + </fieldset> + <div class="choice field"> + <input type="checkbox" name="shipping[same_as_billing]" id="shipping:same_as_billing" value="1"<?php if($this->getAddress()->getSameAsBilling()): ?> checked="checked"<?php endif; ?> class="checkbox" /> + <label class="label" for="shipping:same_as_billing"><span><?php echo __('Use Billing Address') ?></span></label> + </div> + <div class="actions buttons-set form-buttons" id="shipping-buttons-container"> + <div class="primary"><button type="button" class="button action continue"><span><?php echo __('Continue') ?></span></button></div> + <div class="secondary"><a href="#" class="action back"><span><?php echo __('Back') ?></span></a> + <span id="shipping-please-wait" class="please-wait load indicator" style="display:none;"><span><?php echo __('Loading next step...') ?></span></span> + </div> +</form> +<script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('Magento_Checkout::js/region-updater.js') ?>", + function() { + $('#shipping\\:country_id').regionUpdater({ + optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, + regionListId: '#shipping\\:region_id', + regionInputId: '#shipping\\:region', + postcodeId: '#shipping\\:postcode', + regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, + defaultRegion: "<?php echo $this->getAddress()->getRegionId() ?>", + countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> + }); + }); + })(jQuery); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/onepage/shipping_method.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/shipping_method.phtml new file mode 100644 index 00000000000..955011f9ff0 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/shipping_method.phtml @@ -0,0 +1,40 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<form class="form shipping methods" id="co-shipping-method-form" action=""> + <div id="checkout-shipping-method-load"> + <?php echo $this->getChildHtml('available') ?> + </div> + <div id="onepage-checkout-shipping-method-additional-load"> + <?php echo $this->getChildHtml('additional') ?> + </div> + <div class="actions buttons-set" id="shipping-method-buttons-container"> + <div class="primary"><button type="button" class="button action continue"><span><?php echo __('Continue') ?></span></button></div> + <div class="secondary"><a class="action back" href="#"><span><?php echo __('Back') ?></span></a></div> + <span id="shipping-method-please-wait" class="please-wait load indicator" style="display:none;"> + <span><?php echo __('Loading next step...') ?></span> + </span> + </div> +</form> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/onepage/shipping_method/available.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/shipping_method/available.phtml new file mode 100644 index 00000000000..15c7081b746 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/onepage/shipping_method/available.phtml @@ -0,0 +1,63 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php /** @var $this \Magento\Checkout\Block\Onepage\Shipping\Method\Available */ ?> +<?php $_shippingRateGroups = $this->getShippingRates(); ?> +<?php if (!$_shippingRateGroups): ?> + <p><?php echo __('Sorry, no quotes are available for this order at this time.') ?></p> +<?php else: ?> + <dl class="sp-methods items methods"> + <?php $shippingCodePrice = array(); ?> + <?php $_sole = count($_shippingRateGroups) == 1; foreach ($_shippingRateGroups as $code => $_rates): ?> + <dt class="item title"><?php echo $this->escapeHtml($this->getCarrierName($code)) ?></dt> + <dd class="item options"> + <?php $_sole = $_sole && count($_rates) == 1; foreach ($_rates as $_rate): ?> + <?php $shippingCodePrice[] = '"'.$_rate->getCode().'":'.(float)$_rate->getPrice(); ?> + <div class="field choice"> + <?php if ($_rate->getErrorMessage()): ?> + <ul class="messages"><li class="error-msg"><ul><li><?php echo $this->escapeHtml($_rate->getErrorMessage()) ?></li></ul></li></ul> + <?php else: ?> + <?php if ($_sole) : ?> + <span class="no-display"><input name="shipping_method" type="radio" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>" checked="checked" /></span> + <?php else: ?> + <input name="shipping_method" type="radio" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>"<?php if($_rate->getCode()===$this->getAddressShippingMethod()) echo ' checked="checked"' ?> class="radio"/> + <?php endif; ?> + <label class="label" for="s_method_<?php echo $_rate->getCode() ?>"><span><?php echo $this->escapeHtml($_rate->getMethodTitle()) ?> + <?php $_excl = $this->getShippingPrice($_rate->getPrice(), $this->helper('Magento\Tax\Helper\Data')->displayShippingPriceIncludingTax()); ?> + <?php $_incl = $this->getShippingPrice($_rate->getPrice(), true); ?> + <?php echo $_excl; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayShippingBothPrices() && $_incl != $_excl): ?> + (<?php echo __('Incl. Tax'); ?> <?php echo $_incl; ?>) + <?php endif; ?> + </span> + </label> + <?php endif ?> + </div> + <?php endforeach; ?> + </dd> + <?php endforeach; ?> + </dl> + <div class="no-display" data-shipping-code-price='{<?php echo implode(",",$shippingCodePrice); ?>}'></div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/success.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/success.phtml new file mode 100644 index 00000000000..95681ab6f6e --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/success.phtml @@ -0,0 +1,58 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<h2 class="subtitle"><?php echo __('Thank you for your purchase!') ?></h2> +<?php if ($this->getOrderId()):?> + <?php if ($this->getCanViewOrder()) :?> + <p><?php echo __('Your order # is: %1.', sprintf('<a href="%s">%s</a>', $this->escapeHtml($this->getViewOrderUrl()), $this->escapeHtml($this->getOrderId()))) ?></p> + <?php else :?> + <p><?php echo __('Your order # is: %1.', $this->escapeHtml($this->getOrderId())) ?></p> + <?php endif;?> + <p><?php echo __('You will receive an order confirmation email with details of your order and a link to track its progress.') ?></p> + <?php if ($this->getCanViewOrder() && $this->getCanPrintOrder()) :?> + <p> + <?php echo __('Click <a href="%1" onclick="this.target=\'_blank\'">here to print</a> a copy of your order confirmation.', $this->getPrintUrl()) ?> + <?php echo $this->getChildHtml() ?> + </p> + <?php endif;?> +<?php endif;?> + +<?php if ($this->getAgreementRefId()): ?> + <p><?php echo __('Your billing agreement # is: %1.', sprintf('<a href="%s">%s</a>', $this->escapeHtml($this->getAgreementUrl()), $this->escapeHtml($this->getAgreementRefId())))?></p> +<?php endif;?> + +<?php if ($profiles = $this->getRecurringProfiles()):?> +<p><?php echo __('Your recurring payment profiles:'); ?></p> +<ul> +<?php foreach($profiles as $profile):?> +<?php $profileIdHtml = ($this->getCanViewProfiles() ? sprintf('<a href="%s">%s</a>', $this->escapeHtml($this->getProfileUrl($profile)), $this->escapeHtml($this->getObjectData($profile, 'reference_id'))) : $this->escapeHtml($this->getObjectData($profile, 'reference_id')));?> + <li><?php echo __('Payment profile # %1: "%2".', $profileIdHtml, $this->escapeHtml($this->getObjectData($profile, 'schedule_description')))?></li> +<?php endforeach;?> +</ul> +<?php endif;?> + +<div class="actions"> + <a class="action continue" title="<?php echo __('Continue Shopping') ?>" href="<?php echo $this->getUrl() ?>"><span><?php echo __('Continue Shopping') ?></span></a> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Checkout/total/default.phtml b/app/design/frontend/magento_plushe/Magento_Checkout/total/default.phtml new file mode 100644 index 00000000000..06114863bae --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Checkout/total/default.phtml @@ -0,0 +1,37 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<tr class="discount"> + <td colspan="<?php echo $this->getColspan(); ?>" style="<?php echo $this->getTotal()->getStyle() ?>" class="mark"> + <?php if ($this->getRenderingArea() == $this->getTotal()->getArea()): ?><strong><?php endif; ?> + <?php echo $this->escapeHtml($this->getTotal()->getTitle()); ?> + <?php if ($this->getRenderingArea() == $this->getTotal()->getArea()): ?></strong><?php endif; ?> + </td> + <td style="<?php echo $this->getTotal()->getStyle() ?>" class="amount"> + <?php if ($this->getRenderingArea() == $this->getTotal()->getArea()): ?><strong><?php endif; ?> + <span><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($this->getTotal()->getValue()) ?></span> + <?php if ($this->getRenderingArea() == $this->getTotal()->getArea()): ?></strong><?php endif; ?> + </td> +</tr> diff --git a/app/design/frontend/magento_plushe/Magento_Cms/default/footerbanners.phtml b/app/design/frontend/magento_plushe/Magento_Cms/default/footerbanners.phtml new file mode 100644 index 00000000000..5c3641cab13 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Cms/default/footerbanners.phtml @@ -0,0 +1,37 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="widget widget-static-block"> + <div class="place locator"> + <strong>plushe Near You:</strong> <a class="link locator" href="#">Find stores and retailers.</a> + </div> + <div class="place blog"> + <a class="link blog" href="#">Blog</a> + </div> + <div class="place info"> + <img src="<?php echo $this->getViewFileUrl('images/info_photo.jpg')?>" alt="plushe" align="left" /> <strong>Our Story:</strong> + <p>Use this space to tell customers a little about your business, such as when you opened. And why.</p> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Cms/default/home.phtml b/app/design/frontend/magento_plushe/Magento_Cms/default/home.phtml new file mode 100644 index 00000000000..781ecd46d40 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Cms/default/home.phtml @@ -0,0 +1,53 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="home main slider"> + <div class="banner main"> + <img class="banner image" alt="plushe" src="<?php echo $this->getViewFileUrl('images/main_image1.jpg') ?>" /> + <div class="banner content"> + <span contenteditable="true" class="banner text">NEW ARRIVALS</span> + <a class="action banner" href="#"><span contenteditable="true">Shop now</span></a> + </div> + </div> +</div> + +<div class="home banners"> + <a href="#" class="banner link style1"> + <img class="banner image" alt="plushe" src="<?php echo $this->getViewFileUrl('images/banner1.jpg') ?>" /> + <span contenteditable="true" class="banner text">MY plushe</span> + </a> + <a href="#" class="banner link style2"> + <img class="banner image" alt="plushe" src="<?php echo $this->getViewFileUrl('images/banner2.jpg') ?>" /> + <span contenteditable="true" class="banner text">FOOTWEAR</span> + </a> + <a href="#" class="banner link style3"> + <img class="banner image" alt="plushe" src="<?php echo $this->getViewFileUrl('images/banner3.jpg') ?>" /> + <span contenteditable="true" class="banner text">SPRING <b>SALE</b></span> + </a> + <a href="#" class="banner link style4"> + <img class="banner image" alt="plushe" src="<?php echo $this->getViewFileUrl('images/banner4.jpg') ?>" /> + <span contenteditable="true" class="banner text">ITEM OF THE WEEK</span> + </a> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Cms/layout/override/default.xml b/app/design/frontend/magento_plushe/Magento_Cms/layout/override/default.xml new file mode 100644 index 00000000000..85d511a027c --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Cms/layout/override/default.xml @@ -0,0 +1,36 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceContainer name="footer"> + <container name="cms_footer_links_container" label="CMS Footer Links" htmlTag="div" htmlClass="links" before="footer_links"> + <block class="Magento\Cms\Block\Block" name="cms_footer_links"> + <arguments> + <argument name="block_id" xsi:type="string">footer_links</argument> + </arguments> + </block> + </container> + </referenceContainer> +</layout> diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Db/_files/config.xml b/app/design/frontend/magento_plushe/Magento_Cms/layout/override/print.xml similarity index 93% rename from dev/tests/unit/testsuite/Magento/Core/Model/Db/_files/config.xml rename to app/design/frontend/magento_plushe/Magento_Cms/layout/override/print.xml index 0c12897169a..6c60196129d 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Db/_files/config.xml +++ b/app/design/frontend/magento_plushe/Magento_Cms/layout/override/print.xml @@ -19,10 +19,8 @@ * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * - * @category Mage - * @package Magento_Core * @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) */ --> -<config/> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> diff --git a/app/design/frontend/magento_plushe/Magento_Contacts/form.phtml b/app/design/frontend/magento_plushe/Magento_Contacts/form.phtml new file mode 100644 index 00000000000..44de81662b0 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Contacts/form.phtml @@ -0,0 +1,70 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<form class="form contact" action="<?php echo $this->getFormAction(); ?>" id="contact-form" method="post" data-hasrequired="<?php echo __('* Required Fields') ?>"> + <fieldset class="fieldset"> + <legend class="legend"><span><?php echo __('Contact Information') ?></span></legend><br /> + <div class="field name required"> + <label class="label" for="name"><span><?php echo __('Name') ?></span></label> + <div class="control"> + <input name="name" id="name" title="<?php echo __('Name') ?>" value="<?php echo $this->escapeHtml($this->helper('Magento\Contacts\Helper\Data')->getUserName()) ?>" class="input-text" type="text" data-validate="{required:true}"/> + </div> + </div> + <div class="field email required"> + <label class="label" for="email"><span><?php echo __('Email') ?></span></label> + <div class="control"> + <input name="email" id="email" title="<?php echo __('Email') ?>" value="<?php echo $this->escapeHtml($this->helper('Magento\Contacts\Helper\Data')->getUserEmail()) ?>" class="input-text" type="text" data-validate="{required:true, 'validate-email':true}"/> + </div> + </div> + <div class="field telephone"> + <label class="label" for="telephone"><span><?php echo __('Telephone') ?></span></label> + <div class="control"> + <input name="telephone" id="telephone" title="<?php echo __('Telephone') ?>" value="" class="input-text" type="text" /> + </div> + </div> + <div class="field comment required"> + <label class="label" for="comment"><span><?php echo __('Comment') ?></span></label> + <div class="control"> + <textarea name="comment" id="comment" title="<?php echo __('Comment') ?>" class="input-text" cols="5" rows="3" data-validate="{required:true}"></textarea> + </div> + </div> + </fieldset> + <div class="actions"> + <input type="hidden" name="hideit" id="hideit" value="" /> + <button type="submit" title="<?php echo __('Submit') ?>" class="action submit"> + <span><?php echo __('Submit') ?></span> + </button> + </div> +</form> +<script type="text/javascript"> + (function($) { + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", function() { + $('#contact-form').validation(); + }); + })(jQuery); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Contacts/layout/contacts_index_index.xml b/app/design/frontend/magento_plushe/Magento_Contacts/layout/contacts_index_index.xml new file mode 100644 index 00000000000..58a124e9c15 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Contacts/layout/contacts_index_index.xml @@ -0,0 +1,28 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <update handle="page_one_column"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Contacts/layout/override/default.xml b/app/design/frontend/magento_plushe/Magento_Contacts/layout/override/default.xml new file mode 100644 index 00000000000..d9b1bc6867e --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Contacts/layout/override/default.xml @@ -0,0 +1,36 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="footer_links"> + <block class="Magento\Page\Block\Link" ifconfig="contacts/contacts/enabled" + name="contact-us-link"> + <arguments> + <argument name="label" xsi:type="string">Contact Us</argument> + <argument name="href" xsi:type="string">contacts</argument> + </arguments> + </block> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Core/text.phtml b/app/design/frontend/magento_plushe/Magento_Core/text.phtml new file mode 100644 index 00000000000..26002f9e02f --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Core/text.phtml @@ -0,0 +1,35 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ + +$attributes = $this->getCssClass() ? ' class="' . $this->getCssClass() . '"' : ''; +$attr = $this->getAttributes(); +if ( !empty($attr) ) { + foreach ($this->getAttributes() as $attribute => $value ) { + $attributes .= ' '. $attribute . '="' . $value . '"'; + } +}; +echo + '<' . $this->getTag() . $attributes . '>' . $this->getText() . '</' . $this->getTag() . '>'; diff --git a/app/design/frontend/magento_plushe/Magento_Customer/account/customer.phtml b/app/design/frontend/magento_plushe/Magento_Customer/account/customer.phtml new file mode 100644 index 00000000000..f158025e446 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/account/customer.phtml @@ -0,0 +1,37 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if($this->customerLoggedIn()): ?> + <li class="customer welcome"> + <strong class="customer name" data-toggle="dropdown"> + <span><?php echo $this->getCustomerName(); ?></span> + </strong> + <?php if($this->getChildHtml()):?> + <menu class="menu" data-target="dropdown"> + <?php echo $this->getChildHtml();?> + </menu> + <?php endif; ?> + </li> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/account/dashboard/address.phtml b/app/design/frontend/magento_plushe/Magento_Customer/account/dashboard/address.phtml new file mode 100644 index 00000000000..b0c420fc344 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/account/dashboard/address.phtml @@ -0,0 +1,51 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="block dashboard addresses"> + <div class="title"> + <strong><?php echo __('Address Book') ?></strong> + <a class="action edit" href="<?php echo $this->getAddressBookUrl() ?>"><span><?php echo __('Manage Addresses') ?></span></a> + </div> + <div class="content"> + <div class="box address billing"> + <strong class="subtitle"> + <span><?php echo __('Default Billing Address') ?></span> + <a class="action edit" href="<?php echo $this->getPrimaryBillingAddressEditUrl() ?>"><span><?php echo __('Edit Address') ?></span></a> + </strong> + <address> + <?php echo $this->getPrimaryBillingAddressHtml() ?> + </address> + </div> + <div class="box address shipping"> + <strong class="subtitle"> + <span><?php echo __('Default Shipping Address') ?></span> + <a class="action edit" href="<?php echo $this->getPrimaryShippingAddressEditUrl() ?>"><span><?php echo __('Edit Address') ?></span></a> + </strong> + <address> + <?php echo $this->getPrimaryShippingAddressHtml() ?> + </address> + </div> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/account/dashboard/hello.phtml b/app/design/frontend/magento_plushe/Magento_Customer/account/dashboard/hello.phtml new file mode 100644 index 00000000000..29e0f6bbfe2 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/account/dashboard/hello.phtml @@ -0,0 +1,31 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="block dashboard welcome"> + <div class="title"><strong><?php echo __('Hello, %1!', $this->escapeHtml($this->getCustomerName())) ?></strong></div> + <div class="content"> + <p><?php echo __('From your My Account Dashboard you have the ability to view a snapshot of your recent account activity and update your account information. Select a link below to view or edit information.') ?></p> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/account/dashboard/info.phtml b/app/design/frontend/magento_plushe/Magento_Customer/account/dashboard/info.phtml new file mode 100644 index 00000000000..c9a1d6f15fd --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/account/dashboard/info.phtml @@ -0,0 +1,58 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="block dashboard info"> + <div class="title"><strong><?php echo __('Account Information') ?></strong></div> + <div class="content"> + <div class="box information"> + <strong class="subtitle"> + <?php echo __('Contact Information') ?> + <a class="action edit" href="<?php echo $this->getUrl('customer/account/edit') ?>"><span><?php echo __('Edit') ?></span></a> + </strong> + <p> + <?php echo $this->escapeHtml($this->getCustomer()->getName()) ?><br /> + <?php echo $this->escapeHtml($this->getCustomer()->getEmail()) ?><br /> + <a href="<?php echo $this->getChangePasswordUrl() ?>"><?php echo __('Change Password') ?></a> + </p> + </div> + <?php if( $this->isNewsletterEnabled() ): ?> + <div class="box newsletter"> + <strong class="subtitle"> + <?php echo __('Newsletters') ?> + <a class="action edit" href="<?php echo $this->getUrl('newsletter/manage') ?>"><span><?php echo __('Edit') ?></span></a> + </strong> + <p> + <?php if( $this->getIsSubscribed() ): ?> + <?php echo __("You are currently subscribed to 'General Subscription'.") ?> + <?php else: ?> + <?php echo __('You are currently not subscribed to any newsletter.') ?> + <?php endif; ?> + </p> + <?php /* Extensions placeholder */ ?> + <?php echo $this->getChildHtml('customer.account.dashboard.info.extra')?> + </div> + <?php endif; ?> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/account/link/back.phtml b/app/design/frontend/magento_plushe/Magento_Customer/account/link/back.phtml new file mode 100644 index 00000000000..f983ab287d7 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/account/link/back.phtml @@ -0,0 +1,28 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="actions"> + <div class="secondary"><a class="action back" href="<?php echo $this->escapeUrl($this->getBackUrl()) ?>"><span><?php echo __('Back') ?></span></a></div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/account/navigation.phtml b/app/design/frontend/magento_plushe/Magento_Customer/account/navigation.phtml new file mode 100644 index 00000000000..cb0c609ef62 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/account/navigation.phtml @@ -0,0 +1,38 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php /** @var $this \Magento\Customer\Block\Account\Navigation */ ?> +<div class="block account nav"> + <div class="title"> + <strong><?php echo __('My Account'); ?></strong> + </div> + <div class="content"> + <navigation class="account nav"> + <ul class="nav items"> + <?php echo $this->getChildHtml();?> + </ul> + </navigation> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/address/book.phtml b/app/design/frontend/magento_plushe/Magento_Customer/address/book.phtml new file mode 100644 index 00000000000..797ef9838b4 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/address/book.phtml @@ -0,0 +1,110 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Temlate for \Magento\Customer\Block\Address\Book block + * @var $test \Magento\Customer\Block\Address\Book + */ +?> +<div class="block addresses default"> + <div class="title"><strong><?php echo __('Default Addresses') ?></strong></div> + <div class="content"> + <?php if($_pAddsses = $this->getDefaultBilling()): ?> + <div class="box address billing"> + <strong class="subtitle"> + <span><?php echo __('Default Billing Address') ?></span> + <a class="action edit" href="<?php echo $this->getAddressEditUrl($this->getAddressById($_pAddsses)) ?>"> + <span><?php echo __('Change Billing Address') ?></span> + </a> + </strong> + <address> + <?php echo $this->getAddressHtml($this->getAddressById($_pAddsses)) ?> + </address> + </div> + <?php else: ?> + <div class="box address no billing"> + <strong class="box-title"><span><?php echo __('Default Billing Address') ?></span></strong> + <p><?php echo __('You have no default billing address in your address book.') ?></p> + </div> + <?php endif ?> + + <?php if($_pAddsses = $this->getDefaultShipping()): ?> + <div class="box address shipping"> + <strong class="subtitle"> + <span><?php echo __('Default Shipping Address') ?></span> + <a class="action edit" href="<?php echo $this->getAddressEditUrl($this->getAddressById($_pAddsses)) ?>"> + <span><?php echo __('Change Shipping Address') ?></span> + </a> + </strong> + <address> + <?php echo $this->getAddressHtml($this->getAddressById($_pAddsses)) ?> + </address> + </div> + <?php else: ?> + <div class="box address shipping"> + <strong class="subtitle"><span><?php echo __('Default Shipping Address') ?></span></strong> + <p><?php echo __('You have no default shipping address in your address book.') ?></p> + </div> + <?php endif ?> + </div> +</div> + +<div class="block addresses list"> + <div class="title"><strong><?php echo __('Additional Address Entries') ?></strong></div> + <div class="content"> + <?php if($_pAddsses = $this->getAdditionalAddresses()): ?> + <ol class="items addresses"> + <?php foreach($_pAddsses as $_address): ?> + <li class="item"> + <address> + <?php echo $this->getAddressHtml($_address) ?><br /> + </address> + <div class="item actions"> + <a class="action edit" href="<?php echo $this->getUrl('customer/address/edit', array('id'=>$_address->getId())) ?>"><span><?php echo __('Edit Address') ?></span></a> + <a class="action delete" href="#" role="delete-address" data-address="<?php echo $_address->getId() ?>"><span><?php echo __('Delete Address') ?></span></a> + </div> + </li> + <?php endforeach; ?> + </ol> + <?php else: ?> + <p><?php echo __('You have no additional address entries in your address book.') ?></p> + <?php endif ?> + </div> +</div> + +<div class="actions"> + <div class="secondary"><a class="action back" href="<?php echo $this->escapeUrl($this->getBackUrl()) ?>"><span><?php echo __('Back') ?></span></a></div> +</div> +<script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('Magento_Customer::address.js'); ?>", function() { + jQuery('hgroup.page.title').address({ + deleteAddress: "li.item a[role='delete-address']", + deleteUrlPrefix: '<?php echo $this->getDeleteUrl() ?>id/', + addAddress: "button[role='add-address']", + addAddressLocation: '<?php echo $this->getAddAddressUrl() ?>' + }); + }); +</script> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Customer/address/button.phtml b/app/design/frontend/magento_plushe/Magento_Customer/address/button.phtml new file mode 100644 index 00000000000..7cf5a8cafe8 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/address/button.phtml @@ -0,0 +1,32 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Temlate for \Magento\Customer\Block\Address\Book block + * @var $test \Magento\Customer\Block\Address\Book + */ +?> +<button type="button" role="add-address" title="<?php echo __('Add New Address') ?>" class="action add"><span><?php echo __('Add New Address') ?></span></button> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Customer/address/edit.phtml b/app/design/frontend/magento_plushe/Magento_Customer/address/edit.phtml new file mode 100644 index 00000000000..560d23a119d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/address/edit.phtml @@ -0,0 +1,164 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Edit customer address template + * + * @see \Magento\Customer\Block\Address\Edit + */ +?> +<form class="form address edit" action="<?php echo $this->getSaveUrl() ?>" method="post" id="form-validate" enctype="multipart/form-data" data-hasrequired="<?php echo __('* Required Fields') ?>"> + <fieldset class="fieldset"> + <legend class="legend"><span><?php echo __('Contact Information') ?></span></legend><br /> + <?php echo $this->getBlockHtml('formkey')?> + <input type="hidden" name="success_url" value="<?php echo $this->getSuccessUrl() ?>" /> + <input type="hidden" name="error_url" value="<?php echo $this->getErrorUrl() ?>" /> + <?php echo $this->getNameBlockHtml() ?> + <div class="field company"> + <label class="label" for="company"><span><?php echo __('Company') ?></span></label> + <div class="control"> + <input type="text" name="company" id="company" title="<?php echo __('Company') ?>" value="<?php echo $this->escapeHtml($this->getAddress()->getCompany()) ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('company') ?>" /> + </div> + </div> + <div class="field telephone required"> + <label class="label" for="telephone"><span><?php echo __('Telephone') ?></span></label> + <div class="control"> + <input type="text" name="telephone" value="<?php echo $this->escapeHtml($this->getAddress()->getTelephone()) ?>" title="<?php echo __('Telephone') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('telephone') ?>" id="telephone" /> + </div> + </div> + <div class="field fax"> + <label class="label" for="fax"><span><?php echo __('Fax') ?></span></label> + <div class="control"> + <input type="text" name="fax" id="fax" title="<?php echo __('Fax') ?>" value="<?php echo $this->escapeHtml($this->getAddress()->getFax()) ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('fax') ?>" /> + </div> + </div> + </fieldset> + <fieldset class="fieldset"> + <legend class="legend"><span><?php echo __('Address') ?></span></legend><br /> + <?php $_streetValidationClass = $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('street'); ?> + <div class="field street required"> + <label for="street_1" class="label"><span><?php echo __('Street Address') ?></span></label> + <div class="control"> + <input type="text" name="street[]" value="<?php echo $this->escapeHtml($this->getAddress()->getStreet(1)) ?>" title="<?php echo __('Street Address') ?>" id="street_1" class="input-text <?php echo $_streetValidationClass ?>" /> + <div class="nested"> + <?php $_streetValidationClass = trim(str_replace('required-entry', '', $_streetValidationClass)); ?> + <?php for ($_i = 2, $_n = $this->helper('Magento\Customer\Helper\Address')->getStreetLines(); $_i <= $_n; $_i++): ?> + <div class="field additional no-label"> + <div class="control"> + <input type="text" name="street[]" value="<?php echo $this->escapeHtml($this->getAddress()->getStreet($_i)) ?>" title="<?php echo __('Street Address %1', $_i) ?>" id="street_<?php echo $_i ?>" class="input-text <?php echo $_streetValidationClass ?>" /> + </div> + </div> + <?php endfor; ?> + </div> + </div> + </div> + + <?php if ($this->helper('Magento\Customer\Helper\Address')->isVatAttributeVisible()) : ?> + <div class="field taxvat"> + <label class="label" for="vat_id"><span><?php echo __('VAT Number') ?></span></label> + <div class="control"> + <input type="text" name="vat_id" value="<?php echo $this->escapeHtml($this->getAddress()->getVatId()) ?>" title="<?php echo __('VAT Number') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('vat_id') ?>" id="vat_id" /> + </div> + </div> + <?php endif; ?> + <div class="field city required"> + <label class="label" for="city"><span><?php echo __('City') ?></span></label> + <div class="control"> + <input type="text" name="city" value="<?php echo $this->escapeHtml($this->getAddress()->getCity()) ?>" title="<?php echo __('City') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('city') ?>" id="city" /> + </div> + </div> + <div class="field region required"> + <label class="label" for="region_id"><span><?php echo __('State/Province') ?></span></label> + <div class="control"> + <select id="region_id" name="region_id" title="<?php echo __('State/Province') ?>" class="validate-select" style="display:none;"> + <option value=""><?php echo __('Please select region, state or province') ?></option> + </select> + <input type="text" id="region" name="region" value="<?php echo $this->escapeHtml($this->getAddress()->getRegion()) ?>" title="<?php echo __('State/Province') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('region') ?>" /> + </div> + </div> + <div class="field zip required"> + <label class="label" for="zip"><span><?php echo __('Zip/Postal Code') ?></span></label> + <div class="control"> + <input type="text" name="postcode" value="<?php echo $this->escapeHtml($this->getAddress()->getPostcode()) ?>" title="<?php echo __('Zip/Postal Code') ?>" id="zip" class="input-text validate-zip-international <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('postcode') ?>" /> + </div> + </div> + <div class="field country required"> + <label class="label" for="country"><span><?php echo __('Country') ?></span></label> + <div class="control"> + <?php echo $this->getCountryHtmlSelect() ?> + </div> + </div> + + <?php if($this->isDefaultBilling()): ?> + <div class="field note default"><?php echo __('Default Billing Address') ?></div> + <?php elseif($this->canSetAsDefaultBilling()): ?> + <div class="field choice set billing"> + <input type="checkbox" id="primary_billing" name="default_billing" value="1" class="checkbox" /> + <label class="label" for="primary_billing"><span><?php echo __('Use as my default billing address') ?></span></label> + </div> + <?php else: ?> + <input type="hidden" name="default_billing" value="1" /> + <?php endif; ?> + + <?php if($this->isDefaultShipping()): ?> + <div class="field note default"><?php echo __('Default Shipping Address') ?></div> + <?php elseif($this->canSetAsDefaultShipping()): ?> + <div class="field choice set shipping"> + <input type="checkbox" id="primary_shipping" name="default_shipping" value="1" class="checkbox" /> + <label class="label" for="primary_shipping"><span><?php echo __('Use as my default shipping address') ?></span></label> + </div> + <?php else: ?> + <input type="hidden" name="default_shipping" value="1" /> + <?php endif; ?> + </fieldset> + <div class="actions"> + <div class="primary"><button type="submit" class="action submit" title="<?php echo __('Save Address') ?>"><span><?php echo __('Save Address') ?></span></button></div> + <div class="secondary"><a class="action back" href="<?php echo $this->escapeUrl($this->getBackUrl()) ?>"><span><?php echo __('Go back') ?></span></a></div> + </div> +</form> +<script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", + "<?php echo $this->getViewFileUrl('Magento_Checkout::js/region-updater.js') ?>", + function() { + $('#country').regionUpdater({ + optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, + regionListId: '#region_id', + regionInputId: '#region', + postcodeId: '#zip', + form: $('#form-validate').validation(), + regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, + defaultRegion: "<?php echo $this->getAddress()->getRegionId() ?>", + countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> + }); + }); + })(jQuery); +</script> + diff --git a/app/design/frontend/magento_plushe/Magento_Customer/form/address.phtml b/app/design/frontend/magento_plushe/Magento_Customer/form/address.phtml new file mode 100644 index 00000000000..b2493aded84 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/form/address.phtml @@ -0,0 +1,155 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="page-title"> + <h1><?php if($data->getAddressId()): ?><?php echo __('Edit Address Entry') ?><?php else: ?><?php echo __('New Address Entry') ?><?php endif ?></h1> +</div> +<?php echo $this->getMessagesBlock()->getGroupedHtml() ?> +<form action="<?php echo $action ?>" method="post" id="form-validate"> + <div class="fieldset"> + <input type="hidden" name="address_id" value="<?php echo $data->getAddressId() ?>" /> + <input type="hidden" name="customer_id" id="address_id" value="<?php echo $data->getCustomerId() ?>" /> + <h2 class="legend"><?php echo __('Personal Information') ?></h2> + <ul class="form-list"> + <li class="fields"> + <?php echo $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Name')->setObject($data)->toHtml() ?> + </li> + <li> + <label for="company"><?php echo __('Company') ?></label> + <div class="input-box"> + <input type="text" name="company" id="company" title="<?php echo __('Company') ?>" value="<?php echo $this->escapeHtml($data->getCompany()) ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('company') ?>" /> + </div> + </li> + </ul> + </div> + <div class="fieldset"> + <h2 class="legend"><?php echo __('Address') ?></h2> + <ul class="form-list"> + <?php $_streetValidationClass = $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('street'); ?> + <li> + <label for="street_1" class="required"><em>*</em><?php echo __('Street Address') ?></label> + <div class="input-box"> + <input type="text" name="street[]" value="<?php echo $this->escapeHtml($data->getStreet(1)) ?>" title="<?php echo __('Street Address') ?>" id="street_1" class="input-text <?php echo $_streetValidationClass ?>" /> + </div> + </li> + <?php $_streetValidationClass = trim(str_replace('required-entry', '', $_streetValidationClass)); ?> + <?php for ($_i = 2, $_n = $this->helper('Magento\Customer\Helper\Address')->getStreetLines(); $_i <= $_n; $_i++): ?> + <li class="add-field"> + <div class="input-box"> + <input type="text" name="street[]" value="<?php echo $this->escapeHtml($data->getStreet($_i)) ?>" title="<?php echo __('Street Address %1', $_i) ?>" id="street_<?php echo $_i ?>" class="input-text <?php echo $_streetValidationClass ?>" /> + </div> + </li> + <?php endfor; ?> + <li class="fields"> + <div class="field"> + <label for="city" class="required"><em>*</em><?php echo __('City') ?></label> + <div class="input-box"> + <input type="text" name="city" value="<?php echo $this->escapeHtml($data->getCity()) ?>" title="<?php echo __('City') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('city') ?>" id="city" /> + </div> + </div> + <div class="field"> + <label for="region_id" class="required"><em>*</em><?php echo __('State/Province') ?></label> + <div class="input-box"> + <select id="region_id" name="region_id" title="<?php echo __('State/Province') ?>" class="validate-select" style="display:none;"> + <option value=""><?php echo __('Please select region, state or province') ?></option> + </select> + <input type="text" id="region" name="region" value="<?php echo $this->escapeHtml($this->getAddress()->getRegion()) ?>" title="<?php echo __('State/Province') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('region') ?>" style="display:none;" /> + </div> + </div> + </li> + <li class="fields"> + <div class="field"> + <label for="zip" class="required"><em>*</em><?php echo __('Zip/Postal Code') ?></label> + <div class="input-box"> + <input type="text" name="postcode" value="<?php echo $this->escapeHtml($data->getPostcode()) ?>" title="<?php echo __('Zip/Postal Code') ?>" id="zip" class="input-text validate-zip-international <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('postcode') ?>" /> + </div> + </div> + <div class="field"> + <label for="country" class="required"><em>*</em><?php echo __('Country') ?></label> + <div class="input-box"> + <select name="country_id" id="country" title="<?php echo __('Country') ?>" class="validate-select"> + <?php echo $countries->toHtmlOptions($data->getCountryId()) ?> + </select> + </div> + </div> + </li> + <li class="fields"> + <div class="field"> + <label for="telephone" class="required"><em>*</em><?php echo __('Telephone') ?></label> + <div class="input-box"> + <input type="text" name="telephone" value="<?php echo $this->escapeHtml($data->getTelephone()) ?>" title="<?php echo __('Telephone') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('telephone') ?>" id="telephone" /> + </div> + </div> + <div class="field"> + <label for="fax"><?php echo __('Fax') ?></label> + <div class="input-box"> + <input type="text" name="fax" value="<?php echo $this->escapeHtml($data->getFax()) ?>" title="<?php echo __('Fax') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('fax') ?>" id="fax" /> + </div> + </div> + </li> + <?php foreach ($primaryTypes as $code=>$type): ?> + <li class="control"> + <?php if ($address->isPrimary($type['address_type_id'])): ?> + <p><?php echo __("This is My Default %1 Address", ucfirst($type['name'])) ?></p> + <?php else: ?> + <div class="input-box"> + <input type="checkbox" id="primary_<?php echo $code ?>" name="primary_types[]" value="<?php echo $type['address_type_id'] ?>" class="checkbox" /> + </div> + <label for="primary_<?php echo $code ?>"><?php echo __("Use as My Default %1 Address", ucfirst($type['name'])) ?></label> + <?php endif ?> + </li> + <?php endforeach ?> + </ul> + </div> + <div class="buttons-set form-buttons"> + <p class="back-link"><a href="<?php echo $this->getUrl('customer/address/') ?>"><small>« </small><?php echo __('Back') ?></a></p> + <button class="button" type="submit"><span><span><?php echo __('Save Address') ?></span></span></button> + </div> + <p class="required"><?php echo __('* Required Fields') ?></p> +</form> +<script type="text/javascript"> + //<![CDATA[ + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", + "<?php echo $this->getViewFileUrl('Magento_Checkout::js/region-updater.js') ?>", + function() { + $('#country').regionUpdater({ + optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, + regionListId: '#region_id', + regionInputId: '#region', + postcodeId: '#zip', + form: $('#form-validate').validation(), + regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, + defaultRegion: "<?php echo $this->getAddress()->getRegionId() ?>", + countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> + }); + }); + })(jQuery); + //]]> +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/form/changepassword.phtml b/app/design/frontend/magento_plushe/Magento_Customer/form/changepassword.phtml new file mode 100644 index 00000000000..756af607ee2 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/form/changepassword.phtml @@ -0,0 +1,68 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php echo $this->getMessagesBlock()->getGroupedHtml() ?> +<form action="<?php echo $action ?>" method="post" id="form-validate"> +<div class="fieldset"> + <ul class="form-list"> + <li class="fields"> + <div class="field"> + <label for="current_password" class="required"><em>*</em><?php echo __('Current Password') ?></label> + <div class="input-box"> + <input type="password" class="input-text" name="current_password" id="current_password" data-validate="{required:true, 'validate-password':true}"/> + </div> + </div> + </li> + <li class="fields"> + <div class="field"> + <label for="password" class="required"><em>*</em><?php echo __('New Password') ?></label> + <div class="input-box"> + <input type="password" class="input-text" name="password" id="password" data-validate="{required:true, 'validate-password':true}"/> + </div> + </div> + <div class="field"> + <label for="confirmation" class="required"><em>*</em><?php echo __('Confirm New Password') ?></label> + <div class="input-box"> + <input type="password" class="input-text" name="confirmation" id="confirmation" data-validate="{required:true, equalTo:'#password'}"/> + </div> + </div> + </li> + </ul> +</div> +<div class="buttons-set form-buttons"> + <p class="back-link"><a href="<?php echo $this->getUrl('customer/account') ?>"><small>« </small><?php echo __('Back') ?></a></p> + <button type="submit" class="button"><span><span><?php echo __('Save Password') ?></span></span></button> +</div> +<p class="required"><?php echo __('* Required Fields') ?></p> +</form> +<script type="text/javascript"> + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", function() { + jQuery('#form-validate').validation(); + }); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/form/confirmation.phtml b/app/design/frontend/magento_plushe/Magento_Customer/form/confirmation.phtml new file mode 100644 index 00000000000..e1c81f393e7 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/form/confirmation.phtml @@ -0,0 +1,59 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="page-title"> + <h1><?php echo __('Send confirmation link') ?></h1> +</div> +<?php echo $this->getMessagesBlock()->getGroupedHtml() ?> +<form action="" method="post" id="form-validate"> + <div class="fieldset"> + <p><?php echo __('Please enter your email below and we will send you the confirmation link for it.') ?></p> + <ul class="form-list"> + <li> + <label for="email_address" class="required"><em>*</em><?php echo __('Email Address') ?></label> + <div class="input-box"> + <input type="text" name="email" id="email_address" class="input-text" value="<?php echo $this->escapeHtml($this->getEmail()) ?>" data-validate="{required:true, 'validate-email':true}"/> + </div> + </li> + </ul> + </div> + <div class="buttons-set form-buttons"> + <p class="back-link"><a href="<?php echo $this->helper('Magento\Customer\Helper\Data')->getLoginUrl() ?>"><small>« </small><?php echo __('Back to Login') ?></a></p> + <button type="submit" class="button right"><span><span><?php echo __('Submit') ?></span></span></button> + </div> + <p class="required"><?php echo __('* Required Fields') ?></p> +</form> +<script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", + function() { + $('#form-validate').validation(); + }); + })(jQuery); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/form/edit.phtml b/app/design/frontend/magento_plushe/Magento_Customer/form/edit.phtml new file mode 100644 index 00000000000..6f95865e869 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/form/edit.phtml @@ -0,0 +1,129 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<form class="form edit account" action="<?php echo $this->getUrl('customer/account/editPost') ?>" method="post" id="form-validate" enctype="multipart/form-data" data-hasrequired="<?php echo __('* Required Fields') ?>"> +<fieldset class="fieldset info"> + <?php echo $this->getBlockHtml('formkey')?> + <legend class="legend"><span><?php echo __('Account Information') ?></span></legend><br /> + <?php echo $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Name')->setObject($this->getCustomer())->toHtml() ?> + <div class="field email required"> + <label class="label" for="email"><span><?php echo __('Email Address') ?></span></label> + <div class="control"> + <input type="text" name="email" id="email" value="<?php echo $this->escapeHtml($this->getCustomer()->getEmail()) ?>" title="<?php echo __('Email Address') ?>" class="input-text" data-validate="{required:true, 'validate-email':true}" /> + </div> + </div> + <?php $_dob = $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Dob') ?> + <?php $_taxvat = $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Taxvat') ?> + <?php $_gender = $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Gender') ?> + <?php if ($_dob->isEnabled()): ?> + <?php echo $_dob->setDate($this->getCustomer()->getDob())->toHtml() ?> + <?php endif ?> + <?php if ($_taxvat->isEnabled()): ?> + <?php echo $_taxvat->setTaxvat($this->getCustomer()->getTaxvat())->toHtml() ?> + <?php endif ?> + <?php if ($_gender->isEnabled()): ?> + <?php echo $_gender->setGender($this->getCustomer()->getGender())->toHtml() ?> + <?php endif ?> + <div class="field choice"> + <input type="checkbox" name="change_password" id="change-password" value="1" title="<?php echo __('Change Password') ?>"<?php if($this->getCustomer()->getChangePassword()==1): ?> checked="checked"<?php endif; ?> class="checkbox" /> + <label class="label" for="change-password"><span><?php echo __('Change Password') ?></span></label> + </div> +</fieldset> + +<fieldset class="fieldset password" style="display:none;"> + <legend class="legend"><span><?php echo __('Change Password') ?></span></legend><br /> + <div class="field password current required"> + <label class="label" for="current-password"><span><?php echo __('Current Password') ?></span></label> + <div class="control"> + <input type="password" class="input-text" name="current_password" id="current-password" /> + </div> + </div> + <div class="field new password required"> + <label class="label" for="password"><span><?php echo __('New Password') ?></span></label> + <div class="control"> + <input type="password" class="input-text" name="password" id="password" /> + </div> + </div> + <div class="field confirm password required"> + <label class="label" for="confirmation"><span><?php echo __('Confirm New Password') ?></span></label> + <div class="control"> + <input type="password" class="input-text" name="confirmation" id="confirmation" /> + </div> + </div> +</fieldset> +<div class="actions"> + <div class="primary"> + <button type="submit" class="action save" title="<?php echo __('Save') ?>"><span><?php echo __('Save') ?></span></button> + </div> + <div class="secondary"> + <a class="action back" href="<?php echo $this->escapeUrl($this->getBackUrl()) ?>"><span><?php echo __('Go back') ?></span></a> + </div> +</div> +</form> +<script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", + "<?php echo $this->getViewFileUrl('Magento_Customer::set-password.js') ?>", + <?php if ($_dob->isEnabled()): ?> + "<?php echo $this->getViewFileUrl('mage/validation/dob-rule.js') ?>", + <?php endif ?> + function() { + $('#change-password').setPassword({ + currentPasswordId: '#current-password', + passwordId: '#password', + confirmationId: '#confirmation', + passwordContainer: 'fieldset.fieldset.password', + showOnDefault: <?php echo $this->getCustomer()->getChangePassword() ? 'true' : 'false' ?> + }); + var dataForm = $('#form-validate'), ignore; + <?php if ($_dob->isEnabled()): ?> + ignore = 'input[id$="full"]'; + <?php endif ?> + dataForm.validation({ + <?php if ($_dob->isEnabled()): ?> + errorPlacement: function(error, element) { + if (element.prop('id').search('full') !== -1) { + var dobElement = $(element).parents('.customer-dob'), + errorClass = error.prop('class'); + error.insertAfter(element.parent()); + dobElement.find('.validate-custom').addClass(errorClass) + .after('<div class="' + errorClass + '"></div>'); + } + else { + error.insertAfter(element); + } + }, + ignore: ':hidden:not(' + ignore + ')' + <?php else: ?> + ignore: ignore ? ':hidden:not(' + ignore + ')' : ':hidden' + <?php endif ?> + }); + }); + })(jQuery); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/form/forgotpassword.phtml b/app/design/frontend/magento_plushe/Magento_Customer/form/forgotpassword.phtml new file mode 100644 index 00000000000..8e253400da2 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/form/forgotpassword.phtml @@ -0,0 +1,57 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<form class="form password forget" action="<?php echo $this->getUrl('*/*/forgotpasswordpost') ?>" method="post" id="form-validate"> + <fieldset class="fieldset" data-hasrequired="<?php echo __('* Required Fields') ?>"> + <p class="field note"><?php echo __('Please enter your email address below. You will receive a link to reset your password.'); ?></p> + <div class="field email required"> + <label for="email_address" class="label"><span><?php echo __('Email Address') ?></span></label> + <div class="control"> + <input type="text" name="email" alt="email" id="email_address" class="input-text" value="<?php echo $this->escapeHtml($this->getEmailValue()) ?>" data-validate="{required:true, 'validate-email':true}" /> + </div> + </div> + <?php echo $this->getChildHtml('form_additional_info'); ?> + </fieldset> + <div class="actions"> + <div class="primary"> + <button type="submit" class="action submit"><span><?php echo __('Submit') ?></span></button> + </div> + <div class="secondary"> + <a class="action back" href="<?php echo $this->helper('Magento\Customer\Helper\Data')->getLoginUrl() ?>"><span><?php echo __('Go back') ?></span></a> + </div> + </div> +</form> +<script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", + function() { + $('#form-validate').validation(); + }); + })(jQuery); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/form/login.phtml b/app/design/frontend/magento_plushe/Magento_Customer/form/login.phtml new file mode 100644 index 00000000000..2c6b40d8dbb --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/form/login.phtml @@ -0,0 +1,82 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Customer login form template + * + * @see \Magento\Customer\Block\Form\Login + */ +?> +<?php /* +<div class="account-login<?php if (!$this->helper('Magento\Customer\Helper\Data')->isRegistrationAllowed()) echo ' login-only' ?>"> + <div class="page-title"> + <h1><?php if ($this->helper('Magento\Customer\Helper\Data')->isRegistrationAllowed()): ?> + <?php echo __('Login or Create an Account') ?> + <?php else: ?> + <?php echo __('Login'); ?> + <?php endif; ?></h1> + </div> + */ +?> +<div class="block customer login"> + <div class="title"><strong><?php echo __('Registered Customers') ?></strong></div> + <div class="content"> + <form class="form login" action="<?php echo $this->getPostActionUrl() ?>" method="post" id="login-form"> + <fieldset class="fieldset login" data-hasrequired="<?php echo __('* Required Fields') ?>"> + <p class="field note"><?php echo __('If you have an account with us, log in using your email address.') ?></p> + <div class="field email required"> + <label class="label" for="email"><span><?php echo __('Email Address') ?></span></label> + <div class="control"> + <input name="login[username]" value="<?php echo $this->escapeHtml($this->getUsername()) ?>" id="email" type="text" class="input-text" title="<?php echo __('Email Address') ?>" data-validate="{required:true, 'validate-email':true}" /> + </div> + </div> + <div class="field password required"> + <label for="pass" class="label"><span><?php echo __('Password') ?></span></label> + <div class="control"> + <input name="login[password]" type="password" class="input-text" id="pass" title="<?php echo __('Password') ?>" data-validate="{required:true, 'validate-password':true}" /> + </div> + </div> + <?php echo $this->getChildHtml('form_additional_info'); ?> + <div class="actions"> + <div class="primary"><button type="submit" class="action login" name="send" id="send2"><span><?php echo __('Login') ?></span></button></div> + <div class="secondary"><a class="action remind" href="<?php echo $this->getForgotPasswordUrl() ?>"><span><?php echo __('Forgot Your Password?') ?></span></a></div> + </div> + </fieldset> + </form> + </div> + <script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", + function() { + $('#login-form').validation(); + }); + })(jQuery); + </script> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/form/newsletter.phtml b/app/design/frontend/magento_plushe/Magento_Customer/form/newsletter.phtml new file mode 100644 index 00000000000..cd4a812be37 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/form/newsletter.phtml @@ -0,0 +1,45 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php echo $this->getChildHtml('form_before')?> +<form class="form newsletter manage" action="<?php echo $this->getAction() ?>" method="post" id="form-validate"> + <fieldset class="fieldset"> + <?php echo $this->getBlockHtml('formkey')?> + <legend class="legend"><span><?php echo __('Subscription option') ?></span></legend><br /> + <div class="field choice"> + <input type="checkbox" name="is_subscribed" id="subscription" value="1" title="<?php echo __('General Subscription') ?>"<?php if($this->getIsSubscribed()): ?> checked="checked"<?php endif; ?> class="checkbox" /> + <label for="subscription" class="label"><span><?php echo __('General Subscription') ?></span></label> + </div> + <?php /* Extensions placeholder */ ?> + <?php echo $this->getChildHtml('customer.form.newsletter.extra')?> + </ul> + </fieldset> + <div class="actions"> + <div class="primary"><button type="submit" title="<?php echo __('Save') ?>" class="action save"><span><?php echo __('Save') ?></span></button></div> + <div class="secondary"><a class="action back" href="<?php echo $this->escapeUrl($this->getBackUrl()) ?>"><span><?php echo __('Back') ?></span></a></div> + </div> +</form> +<?php /* Extensions placeholder */ ?> +<?php echo $this->getChildHtml('customer.form.newsletter.extra2')?> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Customer/form/register.phtml b/app/design/frontend/magento_plushe/Magento_Customer/form/register.phtml new file mode 100644 index 00000000000..be555e0be84 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/form/register.phtml @@ -0,0 +1,234 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Create account form template + * + * @see \Magento\Customer\Block\Form\Register + */ +?> + + <?php echo $this->getChildHtml('form_fields_before')?> + <?php /* Extensions placeholder */ ?> + <?php echo $this->getChildHtml('customer.form.register.extra')?> + <form class="form create account" action="<?php echo $this->getPostActionUrl() ?>" method="post" id="form-validate" enctype="multipart/form-data"> + <fieldset class="fieldset create info"> + <legend class="legend"><span><?php echo __('Personal Information') ?></span></legend><br /> + <input type="hidden" name="success_url" value="<?php echo $this->getSuccessUrl() ?>" /> + <input type="hidden" name="error_url" value="<?php echo $this->getErrorUrl() ?>" /> + + <?php echo $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Name')->setObject($this->getFormData())->setForceUseCustomerAttributes(true)->toHtml() ?> + + <div class="field required"> + <label for="email_address" class="label"><span><?php echo __('Email Address') ?></span></label> + <div class="control"> + <input type="text" name="email" id="email_address" value="<?php echo $this->escapeHtml($this->getFormData()->getEmail()) ?>" title="<?php echo __('Email Address') ?>" class="input-text" data-validate="{required:true, 'validate-email':true}" /> + </div> + </div> + + <?php if ($this->isNewsletterEnabled()): ?> + <div class="field choice newsletter"> + <input type="checkbox" name="is_subscribed" title="<?php echo __('Sign Up for Newsletter') ?>" value="1" id="is_subscribed"<?php if($this->getFormData()->getIsSubscribed()): ?> checked="checked"<?php endif; ?> class="checkbox" /> + <label for="is_subscribed" class="label"><span><?php echo __('Sign Up for Newsletter') ?></span></label> + </div> + <?php /* Extensions placeholder */ ?> + <?php echo $this->getChildHtml('customer.form.register.newsletter')?> + <?php endif ?> + + <?php $_dob = $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Dob') ?> + <?php if ($_dob->isEnabled()): ?> + <?php echo $_dob->setDate($this->getFormData()->getDob())->toHtml() ?> + <?php endif ?> + + <?php $_taxvat = $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Taxvat') ?> + <?php if ($_taxvat->isEnabled()): ?> + <?php echo $_taxvat->setTaxvat($this->getFormData()->getTaxvat())->toHtml() ?> + <?php endif ?> + + <?php $_gender = $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Gender') ?> + <?php if ($_gender->isEnabled()): ?> + <?php echo $_gender->setGender($this->getFormData()->getGender())->toHtml() ?> + <?php endif ?> + + </fieldset> + + <?php if($this->getShowAddressFields()): ?> + <fieldset class="fieldset address"> + <legend class="legend"><span><?php echo __('Address Information') ?></span></legend><br /> + <input type="hidden" name="create_address" value="1" /> + <div class="field company"> + <label for="company" class="label"><span><?php echo __('Company') ?></span></label> + <div class="control"> + <input type="text" name="company" id="company" value="<?php echo $this->escapeHtml($this->getFormData()->getCompany()) ?>" title="<?php echo __('Company') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('company') ?>" /> + </div> + </div> + <div class="field telephone"> + <label for="telephone" class="label"><span><?php echo __('Telephone') ?></span></label> + <div class="control"> + <input type="text" name="telephone" id="telephone" value="<?php echo $this->escapeHtml($this->getFormData()->getTelephone()) ?>" title="<?php echo __('Telephone') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('telephone') ?>" /> + </div> + </div> + + <?php $_streetValidationClass = $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('street'); ?> + + <div class="field street required"> + <label for="street_1" class="label"><span><?php echo __('Street Address') ?></span></label> + <div class="control"> + <input type="text" name="street[]" value="<?php echo $this->escapeHtml($this->getFormData()->getStreet(0)) ?>" title="<?php echo __('Street Address') ?>" id="street_1" class="input-text <?php echo $_streetValidationClass ?>" /> + <div class="nested"> + <?php $_streetValidationClass = trim(str_replace('required-entry', '', $_streetValidationClass)); ?> + <?php for ($_i = 2, $_n = $this->helper('Magento\Customer\Helper\Address')->getStreetLines(); $_i <= $_n; $_i++): ?> + <div class="field additional no-label"> + <div class="control"> + <input type="text" name="street[]" value="<?php echo $this->escapeHtml($this->getFormData()->getStreet($_i - 1)) ?>" title="<?php echo __('Street Address %1', $_i) ?>" id="street_<?php echo $_i ?>" class="input-text <?php echo $_streetValidationClass ?>" /> + </div> + </div> + <?php endfor; ?> + </div> + </div> + </div> + + <div class="field required"> + <label for="city" class="label"><span><?php echo __('City') ?></span></label> + <div class="control"> + <input type="text" name="city" value="<?php echo $this->escapeHtml($this->getFormData()->getCity()) ?>" title="<?php echo __('City') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('city') ?>" id="city" /> + </div> + </div> + + <div class="field region required"> + <label for="region_id" class="label"><span><?php echo __('State/Province') ?></span></label> + <div class="control"> + <select id="region_id" name="region_id" title="<?php echo __('State/Province') ?>" class="validate-select" style="display:none;"> + <option value=""><?php echo __('Please select region, state or province') ?></option> + </select> + <input type="text" id="region" name="region" value="<?php echo $this->escapeHtml($this->getRegion()) ?>" title="<?php echo __('State/Province') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('region') ?>" style="display:none;" /> + </div> + </div> + + <div class="field zip required"> + <label for="zip" class="label"><span><?php echo __('Zip/Postal Code') ?></span></label> + <div class="control"> + <input type="text" name="postcode" value="<?php echo $this->escapeHtml($this->getFormData()->getPostcode()) ?>" title="<?php echo __('Zip/Postal Code') ?>" id="zip" class="input-text validate-zip-international <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('postcode') ?>" /> + </div> + </div> + + <div class="field country required"> + <label for="country" class="label"><span><?php echo __('Country') ?></span></label> + <div class="control"> + <?php echo $this->getCountryHtmlSelect() ?> + </div> + </div> + <?php $addressAttributes = $this->getChildBlock('customer_form_address_user_attributes');?> + <?php if ($addressAttributes): ?> + <?php $addressAttributes->setEntity($this->getAddress());?> + <?php $addressAttributes->setFieldIdFormat('address:%1$s')->setFieldNameFormat('address[%1$s]');?> + <?php $this->restoreSessionData($addressAttributes->getForm(), 'address');?> + <?php echo $addressAttributes->setShowContainer(false)->toHtml()?> + <?php endif;?> + <input type="hidden" name="default_billing" value="1" /> + <input type="hidden" name="default_shipping" value="1" /> + </fieldset> + + <?php endif; ?> + <fieldset class="fieldset create account" data-hasrequired="<?php echo __('* Required Fields') ?>"> + <legend class="legend"><span><?php echo __('Login Information') ?></span></legend><br /> + + <div class="field password required"> + <label for="password" class="label"><span><?php echo __('Password') ?></span></label> + <div class="control"> + <input type="password" name="password" id="password" title="<?php echo __('Password') ?>" class="input-text" data-validate="{required:true, 'validate-password':true}" /> + </div> + </div> + <div class="field confirmation required"> + <label for="confirmation" class="label"><span><?php echo __('Confirm Password') ?></span></label> + <div class="control"> + <input type="password" name="confirmation" title="<?php echo __('Confirm Password') ?>" id="confirmation" class="input-text" data-validate="{required:true, equalTo:'#password'}" /> + </div> + </div> + <?php echo $this->getChildHtml('form_additional_info'); ?> + </fieldset> + <div class="actions"> + <div class="primary"> + <button type="submit" class="action submit" title="<?php echo __('Submit') ?>"><span><?php echo __('Submit') ?></span></button> + </div> + <div class="secondary"> + <a class="action back" href="<?php echo $this->escapeUrl($this->getBackUrl()) ?>"><span><?php echo __('Back') ?></span></a> + </div> + </div> + </form> + <script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", + <?php if ($this->getShowAddressFields()): ?> + "<?php echo $this->getViewFileUrl('Magento_Checkout::js/region-updater.js') ?>", + <?php endif ?> + <?php if ($_dob->isEnabled()): ?> + "<?php echo $this->getViewFileUrl('mage/validation/dob-rule.js') ?>", + <?php endif ?> + function() { + var dataForm = $('#form-validate'), ignore; + <?php if ($_dob->isEnabled()): ?> + ignore = 'input[id$="full"]'; + <?php endif ?> + dataForm.validation({ + <?php if ($_dob->isEnabled()): ?> + errorPlacement: function(error, element) { + if (element.prop('id').search('full') !== -1) { + var dobElement = $(element).parents('.customer-dob'), + errorClass = error.prop('class'); + error.insertAfter(element.parent()); + dobElement.find('.validate-custom').addClass(errorClass) + .after('<div class="' + errorClass + '"></div>'); + } + else { + error.insertAfter(element); + } + }, + ignore: ':hidden:not(' + ignore + ')' + <?php else: ?> + ignore: ignore ? ':hidden:not(' + ignore + ')' : ':hidden' + <?php endif ?> + }).find('input:text').attr('autocomplete', 'off'); + <?php if ($this->getShowAddressFields()): ?> + $('#country').regionUpdater({ + optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, + regionListId: '#region_id', + regionInputId: '#region', + postcodeId: '#zip', + form: dataForm, + regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, + defaultRegion: "<?php echo $this->getFormData()->getRegionId() ?>", + countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> + }); + <?php endif; ?> + }); + })(jQuery); + </script> + diff --git a/app/design/frontend/magento_plushe/Magento_Customer/form/resetforgottenpassword.phtml b/app/design/frontend/magento_plushe/Magento_Customer/form/resetforgottenpassword.phtml new file mode 100644 index 00000000000..5cb725070f6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/form/resetforgottenpassword.phtml @@ -0,0 +1,59 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<form action="<?php echo $this->getUrl('*/*/resetpasswordpost', array('_query' => array('id' => $this->getCustomerId(), 'token' => $this->getResetPasswordLinkToken()))); ?>" method="post" id="form-validate" class="form password reset"> + <fieldset class="fieldset" data-hasrequired="<?php echo __('* Required Fields'); ?>"> + <div class="field password required"> + <label class="label" for="password"><span><?php echo __('New Password'); ?></span></label> + <div class="control"> + <input type="password" class="input-text" name="password" id="password" data-validate="{required:true, 'validate-password':true}"/> + </div> + </div> + <div class="field confirmation required"> + <label class="label" for="confirmation"><span><?php echo __('Confirm New Password'); ?></span></label> + <div class="control"> + <input type="password" class="input-text" name="confirmation" id="confirmation" data-validate="{required:true,equalTo:'#password'}"/> + </div> + </div> + </fieldset> + <div class="actions"> + <div class="primary"> + <button type="submit" title="<?php echo __('Reset a Password'); ?>" class="action submit"><span><?php echo __('Reset a Password'); ?></span></button> + </div> + </div> +</form> +<script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", + function() { + $('#form-validate').validation(); + }); + })(jQuery); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/layout/customer_account.xml b/app/design/frontend/magento_plushe/Magento_Customer/layout/customer_account.xml new file mode 100644 index 00000000000..c8cdb22c451 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/layout/customer_account.xml @@ -0,0 +1,35 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <update handle="page_two_columns_left"/> + <referenceBlock name="root"> + <action method="addBodyClass"> + <argument name="class" xsi:type="string">account</argument> + </action> + </referenceBlock> + <remove name="catalog.compare.sidebar"/> + <remove name="tags_popular"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/layout/default.xml b/app/design/frontend/magento_plushe/Magento_Customer/layout/default.xml new file mode 100644 index 00000000000..78ca4af2db4 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/layout/default.xml @@ -0,0 +1,38 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="header.links"> + <block class="Magento\Customer\Block\Account\Customer" name="customer" template="account/customer.phtml" /> + <block class="Magento\Customer\Block\Account\RegisterLink" after="authorization-link-login" name="register-link"> + <arguments> + <argument name="label" xsi:type="string">register</argument> + </arguments> + </block> + <block class="Magento\Customer\Block\Account\AuthorizationLink" name="authorization-link-login"/> + </referenceBlock> + <move element="top.links" destination="customer"/> + <move element="authorization-link" destination="top.links" after="-"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_create.xml b/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_create.xml new file mode 100644 index 00000000000..7dd7c664bdd --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_create.xml @@ -0,0 +1,42 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Customer Account Registration Form" type="page" parent="customer_account"> + <referenceBlock name="root"> + <action method="setTemplate"> + <argument name="template" xsi:type="string">1column.phtml</argument> + </action> + </referenceBlock> + <container name="customer.form.register.fields.before" label="Form Fields Before" htmlTag="div" htmlClass="rewards"/> + <referenceContainer name="content"> + <block class="Magento\Customer\Block\Form\Register" name="customer_form_register" template="form/register.phtml"> + <container name="form.additional.info" label="invisible" as="form_additional_info"/> + <action method="append"> + <argument name="element" xsi:type="string">customer.form.register.fields.before</argument> + <argument name="alias" xsi:type="string">form_fields_before</argument> + </action> + </block> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_edit.xml b/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_edit.xml new file mode 100644 index 00000000000..df916091a3c --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_edit.xml @@ -0,0 +1,36 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Customer Account Edit Form" type="page" parent="customer_account"> + <update handle="customer_account"/> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="title" xsi:type="string">Edit Account Info</argument> + </action> + </referenceBlock> + <referenceBlock name="my.account.wrapper"> + <block class="Magento\Customer\Block\Form\Edit" name="customer_edit" template="form/edit.phtml"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_forgotpassword.xml b/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_forgotpassword.xml new file mode 100644 index 00000000000..128f5326091 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_forgotpassword.xml @@ -0,0 +1,45 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Customer Forgot Password Form" type="page" parent="customer_account"> + <referenceBlock name="head"> + <action method="setTitle"> + <argument translate="true" name="title" xsi:type="string">Forgot Your Password</argument> + </action> + </referenceBlock> + <referenceBlock name="root"> + <action method="setTemplate"> + <argument name="template" xsi:type="string">1column.phtml</argument> + </action> + <action method="setHeaderTitle"> + <argument translate="true" name="title" xsi:type="string">Password forgotten</argument> + </action> + </referenceBlock> + <referenceContainer name="content"> + <block class="Magento\Customer\Block\Account\Forgotpassword" name="forgotPassword" template="form/forgotpassword.phtml"> + <container name="form.additional.info" label="invisible" as="form_additional_info"/> + </block> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_index.xml b/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_index.xml new file mode 100644 index 00000000000..3aa28cf3207 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_index.xml @@ -0,0 +1,40 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Customer My Account Dashboard" type="page" parent="customer_account"> + <update handle="customer_account"/> + <update handle="page_two_columns_left"/> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument translate="true" name="title" xsi:type="string">My Dashboard</argument> + </action> + </referenceBlock> + <referenceBlock name="my.account.wrapper"> + <block class="Magento\Customer\Block\Account\Dashboard\Hello" name="customer_account_dashboard_hello" as="hello" template="account/dashboard/hello.phtml"/> + <block class="Magento\Core\Block\Template" name="customer_account_dashboard_top" as="top"/> + <block class="Magento\Customer\Block\Account\Dashboard\Info" name="customer_account_dashboard_info" as="info" template="account/dashboard/info.phtml"/> + <block class="Magento\Customer\Block\Account\Dashboard\Address" name="customer_account_dashboard_address" as="address" template="account/dashboard/address.phtml"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_login.xml b/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_login.xml new file mode 100644 index 00000000000..50e86321f02 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_account_login.xml @@ -0,0 +1,41 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Customer Account Login Form" type="page" parent="customer_account"> + <referenceBlock name="root"> + <action method="setTemplate"> + <argument name="template" xsi:type="string">1column.phtml</argument> + </action> + </referenceBlock> + <referenceContainer name="content"> + <!-- customer.form.login.extra --> + <container name="customer.login.container" label="Customer Login Container" htmlTag="div" htmlClass="login container"> + <block class="Magento\Customer\Block\Form\Login" name="customer_form_login" template="form/login.phtml"> + <container name="form.additional.info" label="invisible" as="form_additional_info"/> + </block> + <block class="Magento\Customer\Block\Form\Login" name="customer.new" template="newcustomer.phtml"/> + </container> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_address_index.xml b/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_address_index.xml new file mode 100644 index 00000000000..c864da39dd2 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/layout/override/customer_address_index.xml @@ -0,0 +1,34 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Customer My Account Address Book" type="page" parent="customer_account_index"> + <update handle="customer_account"/> + <referenceBlock name="page.main.title"> + <block class="Magento\Customer\Block\Address\Book" name="address.book.button" template="address/button.phtml"/> + </referenceBlock> + <referenceBlock name="my.account.wrapper"> + <block class="Magento\Customer\Block\Address\Book" name="address_book" template="address/book.phtml"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/newcustomer.phtml b/app/design/frontend/magento_plushe/Magento_Customer/newcustomer.phtml new file mode 100644 index 00000000000..52620acc2d5 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/newcustomer.phtml @@ -0,0 +1,44 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * New Customer block template + * + * @see \Magento\Customer\Block\Form\Login + */ +?> +<?php if ($this->helper('Magento\Customer\Helper\Data')->isRegistrationAllowed()): ?> +<div class="block new customer"> + <div class="title"><strong><?php echo __('New Customers') ?></strong></div> + <div class="content"> + <p><?php echo __('By creating an account with our store, you will be able to move through the checkout process faster, store multiple shipping addresses, view and track your orders in your account and more.') ?></p> + <div class="actions"> + <a href="<?php echo $this->getCreateAccountUrl() ?>" class="action create"><span><?php echo __('Register') ?></span></a> + </div> + </div> +</div> +<?php endif; ?> + diff --git a/app/design/frontend/magento_plushe/Magento_Customer/widget/dob.phtml b/app/design/frontend/magento_plushe/Magento_Customer/widget/dob.phtml new file mode 100644 index 00000000000..8bede142247 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/widget/dob.phtml @@ -0,0 +1,84 @@ +<?php +/** + * 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 design + * @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) + */ + +/** +USAGE: + +Simple: + +<?php echo $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Dob') + ->setDate($this->getCustomer()->getDob()) + ->toHtml() ?> + +For checkout/onepage/billing.phtml: + +<?php echo $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Dob') + ->setDate($this->getCustomer()->getDob()) + ->setFieldIdFormat('billing:%s') + ->setFieldNameFormat('billing[%s]') + ->toHtml() ?> + +NOTE: Regarding styles - if we leave it this way, we'll move it to boxes.css + Alternatively we could calculate widths automatically using block input parameters. +*/ + +/** + * @see \Magento\Customer\Block\Widget\Dob + */ +?> +<div class="field dob<?php if ($this->isRequired()) echo ' required' ?>"> + <label class="label" for="<?php echo $this->getFieldId('month')?>"><span><?php echo __('Date of Birth') ?></span></label> + <div class="control customer-dob"> + <div class="fields group group-3"> + <?php + $this->setDateInput('d', + '<div class="field dob-day day"> + <label class="label" for="' . $this->getFieldId('day') . '"><span>' . __('DD') . '</span></label> + <div class="control"><input type="text" id="' . $this->getFieldId('day') . '" name="' . $this->getFieldName('day') . '" value="' . $this->getDay() . '" title="' . __('Day') . '" class="input-text validate-custom" ' . $this->getFieldParams() . ' /></div> + </div>' + ); + + $this->setDateInput('m', + '<div class="field dob-month month"> + <label class="label" for="' . $this->getFieldId('month') . '"><span>' . __('MM') . '</span></label> + <div class="control"><input type="text" id="' . $this->getFieldId('month') . '" name="' . $this->getFieldName('month') . '" value="' . $this->getMonth() . '" title="' . __('Month') . '" class="input-text validate-custom" ' . $this->getFieldParams() . ' /></div> + </div>' + ); + + $this->setDateInput('y', + '<div class="field dob-year year"> + <label class="label" for="' . $this->getFieldId('year') . '"><span>' . __('YYYY') . '</span></label> + <div class="control"><input type="text" id="' . $this->getFieldId('year') . '" name="' . $this->getFieldName('year') . '" value="' . $this->getYear() . '" title="' . __('Year') . '" class="input-text validate-custom" ' . $this->getFieldParams() . ' /></div> + </div>' + ); + ?> + <?php echo $this->getSortedDateInputs() ?> + </div> + <span class="dob-full" style="display:none;"> + <input type="hidden" id="<?php echo $this->getFieldId('full')?>" name="<?php echo $this->getFieldName('dob')?>" data-validate="{'validate-dob': ['.dob-day', '.dob-month', '.dob-year', <?php echo $this->isRequired() ? 'true' : 'false' ?>]<?php if ($this->getMinDateRange() && $this->getMaxDateRange()):?>, 'validate-date-between':['<?php echo $this->getMinDateRange()?>', '<?php echo $this->getMaxDateRange()?>']<?php endif;?>}"/> + </span> + <div class="validation-advice" id="<?php echo $this->getFieldId('date-advice')?>" style="opacity:0.999999; display:none;"></div> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/widget/gender.phtml b/app/design/frontend/magento_plushe/Magento_Customer/widget/gender.phtml new file mode 100644 index 00000000000..13010e23213 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/widget/gender.phtml @@ -0,0 +1,37 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="field gender<?php if ($this->isRequired()) echo ' required' ?>"> + <label class="label" for="<?php echo $this->getFieldId('gender')?>"><span><?php echo __('Gender') ?></span></label> + <div class="control"> + <select id="<?php echo $this->getFieldId('gender')?>" name="<?php echo $this->getFieldName('gender')?>" title="<?php echo __('Gender') ?>"<?php if ($this->isRequired()):?> class="validate-select" data-validate="{required:true}"<?php endif; ?> <?php echo $this->getFieldParams() ?>> + <?php $options = $this->getGenderOptions(); ?> + <?php $value = $this->getGender();?> + <?php foreach ($options as $option):?> + <option value="<?php echo $option['value'] ?>"<?php if ($option['value'] == $value) echo ' selected="selected"' ?>><?php echo $option['label'] ?></option> + <?php endforeach;?> + </select> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Customer/widget/name.phtml b/app/design/frontend/magento_plushe/Magento_Customer/widget/name.phtml new file mode 100644 index 00000000000..cc30b8872c9 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/widget/name.phtml @@ -0,0 +1,112 @@ +<?php +/** + * 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 design + * @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) + */ + +/** +USAGE: + +Simple: + +<?php echo $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Name') + ->setObject($this->getAddress()) + ->toHtml() ?> + +For checkout/onepage/shipping.phtml: + +<?php echo $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Name') + ->setObject($this->getAddress()) + ->setFieldIdFormat('shipping:%s') + ->setFieldNameFormat('shipping[%s]') + ->setFieldParams('onchange="shipping.setSameAsBilling(false);"') + ->toHtml() ?> +*/ +/* @var $this \Magento\Customer\Block\Widget\Name */ +$prefix = $this->showPrefix(); +$middle = $this->showMiddlename(); +$suffix = $this->showSuffix(); +?> +<?php if ($prefix || $middle || $suffix && !$this->getNoWrap()): ?> +<div class="field required fullname <?php echo $this->getContainerClassName()?>"> + <label for="<?php echo $this->getFieldId('firstname')?>" class="label"><span><?php echo __('Name')?></span></label> + <div class="control"> + <div class="fields group group-<?php echo 2 + intval($prefix) + intval($middle) + intval($suffix)?>"> +<?php endif; ?> +<?php if ($prefix): ?> + <div class="field name-prefix<?php if ($this->isPrefixRequired()) echo ' required' ?>"> + <label class="label" for="<?php echo $this->getFieldId('prefix')?>"><span><?php echo $this->getStoreLabel('prefix') ?></span></label> + <div class="control"> + <?php if ($this->getPrefixOptions() === false): ?> + <input type="text" id="<?php echo $this->getFieldId('prefix')?>" name="<?php echo $this->getFieldName('prefix')?>" value="<?php echo $this->escapeHtml($this->getObject()->getPrefix()) ?>" title="<?php echo $this->getStoreLabel('prefix') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('prefix') ?>" <?php echo $this->getFieldParams() ?> <?php if ($this->isPrefixRequired()) echo ' data-validate="{required:true}"' ?> /> + <?php else: ?> + <select id="<?php echo $this->getFieldId('prefix')?>" name="<?php echo $this->getFieldName('prefix')?>" title="<?php echo $this->getStoreLabel('prefix') ?>" class="<?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('prefix') ?>" <?php echo $this->getFieldParams() ?> <?php if ($this->isPrefixRequired()) echo ' data-validate="{required:true}"' ?> > + <?php foreach ($this->getPrefixOptions() as $_option): ?> + <option value="<?php echo $_option?>"<?php if ($this->getObject()->getPrefix()==$_option):?> selected="selected"<?php endif; ?>><?php echo __($_option)?></option> + <?php endforeach; ?> + </select> + <?php endif; ?> + </div> + </div> +<?php endif; ?> + <div class="field name-firstname required"> + <label class="label" for="<?php echo $this->getFieldId('firstname')?>"><span><?php echo $this->getStoreLabel('firstname') ?></span></label> + <div class="control"> + <input type="text" id="<?php echo $this->getFieldId('firstname')?>" name="<?php echo $this->getFieldName('firstname')?>" value="<?php echo $this->escapeHtml($this->getObject()->getFirstname()) ?>" title="<?php echo $this->getStoreLabel('firstname') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('firstname') ?>" <?php echo $this->getFieldParams() ?> <?php if ($this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('firstname') == 'required-entry') echo ' data-validate="{required:true}"' ?> /> + </div> + </div> +<?php if ($middle): ?> +<?php $isMiddlenameRequired = $this->isMiddlenameRequired(); ?> + <div class="field name-middlename<?php echo $isMiddlenameRequired ? ' required' : '' ?>"> + <label class="label" for="<?php echo $this->getFieldId('middlename')?>"><span><?php echo $this->getStoreLabel('middlename') ?></span></label> + <div class="control"> + <input type="text" id="<?php echo $this->getFieldId('middlename')?>" name="<?php echo $this->getFieldName('middlename')?>" value="<?php echo $this->escapeHtml($this->getObject()->getMiddlename()) ?>" title="<?php echo $this->getStoreLabel('middlename') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('middlename') ?>" <?php echo $this->getFieldParams() ?> <?php echo $isMiddlenameRequired ? ' data-validate="{required:true}"' : '' ?> /> + </div> + </div> +<?php endif; ?> + <div class="field name-lastname required"> + <label class="label" for="<?php echo $this->getFieldId('lastname')?>"><span><?php echo $this->getStoreLabel('lastname') ?></span></label> + <div class="control"> + <input type="text" id="<?php echo $this->getFieldId('lastname')?>" name="<?php echo $this->getFieldName('lastname')?>" value="<?php echo $this->escapeHtml($this->getObject()->getLastname()) ?>" title="<?php echo $this->getStoreLabel('lastname') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('lastname') ?>" <?php echo $this->getFieldParams() ?> <?php if ($this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('lastname') == 'required-entry') echo ' data-validate="{required:true}"' ?> /> + </div> + </div> +<?php if ($suffix): ?> + <div class="field name-suffix<?php if ($this->isSuffixRequired()) echo ' required' ?>"> + <label class="label" for="<?php echo $this->getFieldId('suffix')?>"><span><?php echo $this->getStoreLabel('suffix') ?></span></label> + <div class="control"> + <?php if ($this->getSuffixOptions() === false): ?> + <input type="text" id="<?php echo $this->getFieldId('suffix')?>" name="<?php echo $this->getFieldName('suffix')?>" value="<?php echo $this->escapeHtml($this->getObject()->getSuffix()) ?>" title="<?php echo $this->getStoreLabel('suffix') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('suffix') ?>" <?php echo $this->getFieldParams() ?> <?php if ($this->isSuffixRequired()) echo ' data-validate="{required:true}"' ?> /> + <?php else: ?> + <select id="<?php echo $this->getFieldId('suffix')?>" name="<?php echo $this->getFieldName('suffix')?>" title="<?php echo $this->getStoreLabel('suffix') ?>" class="<?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('suffix') ?>" <?php echo $this->getFieldParams() ?> <?php if ($this->isSuffixRequired()) echo ' data-validate="{required:true}"' ?>> + <?php foreach ($this->getSuffixOptions() as $_option): ?> + <option value="<?php echo $_option?>"<?php if ($this->getObject()->getSuffix()==$_option):?> selected="selected"<?php endif; ?>><?php echo __($_option)?></option> + <?php endforeach; ?> + </select> + <?php endif; ?> + </div> + </div> +<?php endif; ?> +<?php if ($prefix || $middle || $suffix && !$this->getNoWrap()): ?> + </div> + </div> +</div> +<?php endif; ?> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Customer/widget/taxvat.phtml b/app/design/frontend/magento_plushe/Magento_Customer/widget/taxvat.phtml new file mode 100644 index 00000000000..57fc40a725d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Customer/widget/taxvat.phtml @@ -0,0 +1,31 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="field taxvat<?php if ($this->isRequired()) echo ' required'; ?>"> + <label class="label" for="<?php echo $this->getFieldId('taxvat')?>"><span><?php echo __('Tax/VAT number') ?></span></label> + <div class="control"> + <input type="text" id="<?php echo $this->getFieldId('taxvat')?>" name="<?php echo $this->getFieldName('taxvat')?>" value="<?php echo $this->escapeHtml($this->getTaxvat()) ?>" title="<?php echo __('Tax/VAT number') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('taxvat') ?>" <?php echo $this->getFieldParams() ?> <?php if ($this->isRequired()) echo ' data-validate="{required:true}"' ?> /> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_DesignEditor/controls/image_sizing.xml b/app/design/frontend/magento_plushe/Magento_DesignEditor/controls/image_sizing.xml new file mode 100644 index 00000000000..2d4d9e45b79 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_DesignEditor/controls/image_sizing.xml @@ -0,0 +1,787 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/** + * 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_DesignEditor + * @subpackage integration_tests + * @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) + */ + --> +<controls> + <control name="product_image_border" title="Product image white borders"> + <type>white-border</type> + <components> + <control name="product_image_border:white-border"> + <type>white-border</type> + <var>Magento_Catalog::product_image_white_borders</var> + </control> + </components> + </control> + + <control name="review_page_product_image" title="Review Page Product Image"> + <type>image-sizing</type> + <components> + <control name="review_page_product_image-type"> + <type>image-type</type> + <var>Magento_Catalog::review_page_product_image:type</var> + </control> + <control name="review_page_product_image-width"> + <type>image-width</type> + <var>Magento_Catalog::review_page_product_image:width</var> + </control> + <control name="review_page_product_image-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::review_page_product_image:ratio</var> + </control> + <control name="review_page_product_image-height"> + <type>image-height</type> + <var>Magento_Catalog::review_page_product_image:height</var> + </control> + </components> + </control> + + <control name="customer_account_product_review_page" title="Customer Account: Product Review Page"> + <type>image-sizing</type> + <components> + <control name="customer_account_product_review_page-type"> + <type>image-type</type> + <var>Magento_Catalog::customer_account_product_review_page:type</var> + </control> + <control name="customer_account_product_review_page-width"> + <type>image-width</type> + <var>Magento_Catalog::customer_account_product_review_page:width</var> + </control> + <control name="customer_account_product_review_page-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::customer_account_product_review_page:ratio</var> + </control> + <control name="customer_account_product_review_page-height"> + <type>image-height</type> + <var>Magento_Catalog::customer_account_product_review_page:height</var> + </control> + </components> + </control> + + <control name="category_page_list" title="Category Page - List View"> + <type>image-sizing</type> + <components> + <control name="category_page_list-type"> + <type>image-type</type> + <var>Magento_Catalog::category_page_list:type</var> + </control> + <control name="category_page_list-width"> + <type>image-width</type> + <var>Magento_Catalog::category_page_list:width</var> + </control> + <control name="category_page_list-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::category_page_list:ratio</var> + </control> + <control name="category_page_list-height"> + <type>image-height</type> + <var>Magento_Catalog::category_page_list:height</var> + </control> + </components> + </control> + + <control name="category_page_grid" title="Category Page - Grid View"> + <type>image-sizing</type> + <components> + <control name="category_page_grid-type"> + <type>image-type</type> + <var>Magento_Catalog::category_page_grid:type</var> + </control> + <control name="category_page_grid-width"> + <type>image-width</type> + <var>Magento_Catalog::category_page_grid:width</var> + </control> + <control name="category_page_grid-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::category_page_grid:ratio</var> + </control> + <control name="category_page_grid-height"> + <type>image-height</type> + <var>Magento_Catalog::category_page_grid:height</var> + </control> + </components> + </control> + + <control name="product_comparison_list" title="Product Comparison List"> + <type>image-sizing</type> + <components> + <control name="product_comparison_list-type"> + <type>image-type</type> + <var>Magento_Catalog::product_comparison_list:type</var> + </control> + <control name="product_comparison_list-width"> + <type>image-width</type> + <var>Magento_Catalog::product_comparison_list:width</var> + </control> + <control name="product_comparison_list-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::product_comparison_list:ratio</var> + </control> + <control name="product_comparison_list-height"> + <type>image-height</type> + <var>Magento_Catalog::product_comparison_list:height</var> + </control> + </components> + </control> + + <control name="related_products_list" title="Related Products List"> + <type>image-sizing</type> + <components> + <control name="related_products_list-type"> + <type>image-type</type> + <var>Magento_Catalog::related_products_list:type</var> + </control> + <control name="related_products_list-width"> + <type>image-width</type> + <var>Magento_Catalog::related_products_list:width</var> + </control> + <control name="related_products_list-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::related_products_list:ratio</var> + </control> + <control name="related_products_list-height"> + <type>image-height</type> + <var>Magento_Catalog::related_products_list:height</var> + </control> + </components> + </control> + + <control name="upsell_products_list" title="Up-sell Products List"> + <type>image-sizing</type> + <components> + <control name="upsell_products_list-type"> + <type>image-type</type> + <var>Magento_Catalog::upsell_products_list:type</var> + </control> + <control name="upsell_products_list-width"> + <type>image-width</type> + <var>Magento_Catalog::upsell_products_list:width</var> + </control> + <control name="upsell_products_list-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::upsell_products_list:ratio</var> + </control> + <control name="upsell_products_list-height"> + <type>image-height</type> + <var>Magento_Catalog::upsell_products_list:height</var> + </control> + </components> + </control> + + <control name="product_page_main_image" title="Product Page Main Image"> + <type>image-sizing</type> + <components> + <control name="product_page_main_image-type"> + <type>image-type</type> + <var>Magento_Catalog::product_page_main_image:type</var> + </control> + <control name="product_page_main_image-width"> + <type>image-width</type> + <var>Magento_Catalog::product_page_main_image:width</var> + </control> + <control name="product_page_main_image-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::product_page_main_image:ratio</var> + </control> + <control name="product_page_main_image-height"> + <type>image-height</type> + <var>Magento_Catalog::product_page_main_image:height</var> + </control> + </components> + </control> + + <control name="product_page_main_image_default" title="Product Page Main Image (Default)"> + <type>image-sizing</type> + <components> + <control name="product_page_main_image_default-type"> + <type>image-type</type> + <var>Magento_Catalog::product_page_main_image_default:type</var> + </control> + <control name="product_page_main_image_default-width"> + <type>image-width</type> + <var>Magento_Catalog::product_page_main_image_default:width</var> + </control> + <control name="product_page_main_image_default-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::product_page_main_image_default:ratio</var> + </control> + <control name="product_page_main_image_default-height"> + <type>image-height</type> + <var>Magento_Catalog::product_page_main_image_default:height</var> + </control> + </components> + </control> + + <control name="product_page_more_views" title="Product Page - More Views"> + <type>image-sizing</type> + <components> + <control name="product_page_more_views-type"> + <type>image-type</type> + <var>Magento_Catalog::product_page_more_views:type</var> + </control> + <control name="product_page_more_views-width"> + <type>image-width</type> + <var>Magento_Catalog::product_page_more_views:width</var> + </control> + <control name="product_page_more_views-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::product_page_more_views:ratio</var> + </control> + <control name="product_page_more_views-height"> + <type>image-height</type> + <var>Magento_Catalog::product_page_more_views:height</var> + </control> + </components> + </control> + + <control name="side_column_widget_product_thumbnail" title="Side Column Widget Product Thumbnail"> + <type>image-sizing</type> + <components> + <control name="side_column_widget_product_thumbnail-type"> + <type>image-type</type> + <var>Magento_Catalog::side_column_widget_product_thumbnail:type</var> + </control> + <control name="side_column_widget_product_thumbnail-width"> + <type>image-width</type> + <var>Magento_Catalog::side_column_widget_product_thumbnail:width</var> + </control> + <control name="side_column_widget_product_thumbnail-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::side_column_widget_product_thumbnail:ratio</var> + </control> + <control name="side_column_widget_product_thumbnail-height"> + <type>image-height</type> + <var>Magento_Catalog::side_column_widget_product_thumbnail:height</var> + </control> + </components> + </control> + + <control name="new_products_content_widget_list" title="New Products Content Widget - List View"> + <type>image-sizing</type> + <components> + <control name="new_products_content_widget_list-type"> + <type>image-type</type> + <var>Magento_Catalog::new_products_content_widget_list:type</var> + </control> + <control name="new_products_content_widget_list-width"> + <type>image-width</type> + <var>Magento_Catalog::new_products_content_widget_list:width</var> + </control> + <control name="new_products_content_widget_list-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::new_products_content_widget_list:ratio</var> + </control> + <control name="new_products_content_widget_list-height"> + <type>image-height</type> + <var>Magento_Catalog::new_products_content_widget_list:height</var> + </control> + </components> + </control> + + <control name="new_products_content_widget_grid" title="New Products Content Widget - Grid View"> + <type>image-sizing</type> + <components> + <control name="new_products_content_widget_grid-type"> + <type>image-type</type> + <var>Magento_Catalog::new_products_content_widget_grid:type</var> + </control> + <control name="new_products_content_widget_grid-width"> + <type>image-width</type> + <var>Magento_Catalog::new_products_content_widget_grid:width</var> + </control> + <control name="new_products_content_widget_grid-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::new_products_content_widget_grid:ratio</var> + </control> + <control name="new_products_content_widget_grid-height"> + <type>image-height</type> + <var>Magento_Catalog::new_products_content_widget_grid:height</var> + </control> + </components> + </control> + + <control name="recently_compared_products_images_names_widget" title="Recently Compared Products Images and Names Widget"> + <type>image-sizing</type> + <components> + <control name="recently_compared_products_images_names_widget-type"> + <type>image-type</type> + <var>Magento_Catalog::recently_compared_products_images_names_widget:type</var> + </control> + <control name="recently_compared_products_images_names_widget-width"> + <type>image-width</type> + <var>Magento_Catalog::recently_compared_products_images_names_widget:width</var> + </control> + <control name="recently_compared_products_images_names_widget-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::recently_compared_products_images_names_widget:ratio</var> + </control> + <control name="recently_compared_products_images_names_widget-height"> + <type>image-height</type> + <var>Magento_Catalog::recently_compared_products_images_names_widget:height</var> + </control> + </components> + </control> + + <control name="recently_viewed_products_images_names_widget" title="Recently Viewed Products Images and Names Widget"> + <type>image-sizing</type> + <components> + <control name="recently_viewed_products_images_names_widget-type"> + <type>image-type</type> + <var>Magento_Catalog::recently_viewed_products_images_names_widget:type</var> + </control> + <control name="recently_viewed_products_images_names_widget-width"> + <type>image-width</type> + <var>Magento_Catalog::recently_viewed_products_images_names_widget:width</var> + </control> + <control name="recently_viewed_products_images_names_widget-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::recently_viewed_products_images_names_widget:ratio</var> + </control> + <control name="recently_viewed_products_images_names_widget-height"> + <type>image-height</type> + <var>Magento_Catalog::recently_viewed_products_images_names_widget:height</var> + </control> + </components> + </control> + + <control name="recently_compared_products_images_only_widget" title="Recently Compared Products Images Only Widget"> + <type>image-sizing</type> + <components> + <control name="recently_compared_products_images_only_widget-type"> + <type>image-type</type> + <var>Magento_Catalog::recently_compared_products_images_only_widget:type</var> + </control> + <control name="recently_compared_products_images_only_widget-width"> + <type>image-width</type> + <var>Magento_Catalog::recently_compared_products_images_only_widget:width</var> + </control> + <control name="recently_compared_products_images_only_widget-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::recently_compared_products_images_only_widget:ratio</var> + </control> + <control name="recently_compared_products_images_only_widget-height"> + <type>image-height</type> + <var>Magento_Catalog::recently_compared_products_images_only_widget:height</var> + </control> + </components> + </control> + + <control name="recently_viewed_products_images_only_widget" title="Recently Viewed Products Images Only Widget"> + <type>image-sizing</type> + <components> + <control name="recently_viewed_products_images_only_widget-type"> + <type>image-type</type> + <var>Magento_Catalog::recently_viewed_products_images_only_widget:type</var> + </control> + <control name="recently_viewed_products_images_only_widget-width"> + <type>image-width</type> + <var>Magento_Catalog::recently_viewed_products_images_only_widget:width</var> + </control> + <control name="recently_viewed_products_images_only_widget-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::recently_viewed_products_images_only_widget:ratio</var> + </control> + <control name="recently_viewed_products_images_only_widget-height"> + <type>image-height</type> + <var>Magento_Catalog::recently_viewed_products_images_only_widget:height</var> + </control> + </components> + </control> + + <control name="bundled_product_customization_page" title="Bundle Product - Customization Page"> + <type>image-sizing</type> + <components> + <control name="bundled_product_customization_page-type"> + <type>image-type</type> + <var>Magento_Catalog::bundled_product_customization_page:type</var> + </control> + <control name="bundled_product_customization_page-width"> + <type>image-width</type> + <var>Magento_Catalog::bundled_product_customization_page:width</var> + </control> + <control name="bundled_product_customization_page-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::bundled_product_customization_page:ratio</var> + </control> + <control name="bundled_product_customization_page-height"> + <type>image-height</type> + <var>Magento_Catalog::bundled_product_customization_page:height</var> + </control> + </components> + </control> + + <control name="recently_compared_products_grid_content_widget" title="Recently Compared Products Grid View Content Widget"> + <type>image-sizing</type> + <components> + <control name="recently_compared_products_grid_content_widget-type"> + <type>image-type</type> + <var>Magento_Catalog::recently_compared_products_grid_content_widget:type</var> + </control> + <control name="recently_compared_products_grid_content_widget-width"> + <type>image-width</type> + <var>Magento_Catalog::recently_compared_products_grid_content_widget:width</var> + </control> + <control name="recently_compared_products_grid_content_widget-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::recently_compared_products_grid_content_widget:ratio</var> + </control> + <control name="recently_compared_products_grid_content_widget-height"> + <type>image-height</type> + <var>Magento_Catalog::recently_compared_products_grid_content_widget:height</var> + </control> + </components> + </control> + + <control name="recently_compared_products_list_content_widget" title="Recently Compared Products List View Content Widget"> + <type>image-sizing</type> + <components> + <control name="recently_compared_products_list_content_widget-type"> + <type>image-type</type> + <var>Magento_Catalog::recently_compared_products_list_content_widget:type</var> + </control> + <control name="recently_compared_products_list_content_widget-width"> + <type>image-width</type> + <var>Magento_Catalog::recently_compared_products_list_content_widget:width</var> + </control> + <control name="recently_compared_products_list_content_widget-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::recently_compared_products_list_content_widget:ratio</var> + </control> + <control name="recently_compared_products_list_content_widget-height"> + <type>image-height</type> + <var>Magento_Catalog::recently_compared_products_list_content_widget:height</var> + </control> + </components> + </control> + + <control name="recently_viewed_products_grid_content_widget" title="Recently Viewed Products Grid View Content Widget"> + <type>image-sizing</type> + <components> + <control name="recently_viewed_products_grid_content_widget-type"> + <type>image-type</type> + <var>Magento_Catalog::recently_viewed_products_grid_content_widget:type</var> + </control> + <control name="recently_viewed_products_grid_content_widget-width"> + <type>image-width</type> + <var>Magento_Catalog::recently_viewed_products_grid_content_widget:width</var> + </control> + <control name="recently_viewed_products_grid_content_widget-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::recently_viewed_products_grid_content_widget:ratio</var> + </control> + <control name="recently_viewed_products_grid_content_widget-height"> + <type>image-height</type> + <var>Magento_Catalog::recently_viewed_products_grid_content_widget:height</var> + </control> + </components> + </control> + + <control name="recently_viewed_products_list_content_widget" title="Recently Viewed Products List View Content Widget"> + <type>image-sizing</type> + <components> + <control name="recently_viewed_products_list_content_widget-type"> + <type>image-type</type> + <var>Magento_Catalog::recently_viewed_products_list_content_widget:type</var> + </control> + <control name="recently_viewed_products_list_content_widget-width"> + <type>image-width</type> + <var>Magento_Catalog::recently_viewed_products_list_content_widget:width</var> + </control> + <control name="recently_viewed_products_list_content_widget-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::recently_viewed_products_list_content_widget:ratio</var> + </control> + <control name="recently_viewed_products_list_content_widget-height"> + <type>image-height</type> + <var>Magento_Catalog::recently_viewed_products_list_content_widget:height</var> + </control> + </components> + </control> + + <control name="customer_shared_wishlist" title="Customer's Shared Wishlist"> + <type>image-sizing</type> + <components> + <control name="customer_shared_wishlist-type"> + <type>image-type</type> + <var>Magento_Catalog::customer_shared_wishlist:type</var> + </control> + <control name="customer_shared_wishlist-width"> + <type>image-width</type> + <var>Magento_Catalog::customer_shared_wishlist:width</var> + </control> + <control name="customer_shared_wishlist-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::customer_shared_wishlist:ratio</var> + </control> + <control name="customer_shared_wishlist-height"> + <type>image-height</type> + <var>Magento_Catalog::customer_shared_wishlist:height</var> + </control> + </components> + </control> + + <control name="wishlist_thumbnail" title="Wishlist Thumbnail"> + <type>image-sizing</type> + <components> + <control name="wishlist_thumbnail-type"> + <type>image-type</type> + <var>Magento_Catalog::wishlist_thumbnail:type</var> + </control> + <control name="wishlist_thumbnail-width"> + <type>image-width</type> + <var>Magento_Catalog::wishlist_thumbnail:width</var> + </control> + <control name="wishlist_thumbnail-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::wishlist_thumbnail:ratio</var> + </control> + <control name="wishlist_thumbnail-height"> + <type>image-height</type> + <var>Magento_Catalog::wishlist_thumbnail:height</var> + </control> + </components> + </control> + + <control name="wishlist_sidebar_block" title="Wishlist Sidebar Block"> + <type>image-sizing</type> + <components> + <control name="wishlist_sidebar_block-type"> + <type>image-type</type> + <var>Magento_Catalog::wishlist_sidebar_block:type</var> + </control> + <control name="wishlist_sidebar_block-width"> + <type>image-width</type> + <var>Magento_Catalog::wishlist_sidebar_block:width</var> + </control> + <control name="wishlist_sidebar_block-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::wishlist_sidebar_block:ratio</var> + </control> + <control name="wishlist_sidebar_block-height"> + <type>image-height</type> + <var>Magento_Catalog::wishlist_sidebar_block:height</var> + </control> + </components> + </control> + + <control name="shared_wishlist_email" title="Shared Wishlist Email"> + <type>image-sizing</type> + <components> + <control name="shared_wishlist_email-type"> + <type>image-type</type> + <var>Magento_Catalog::shared_wishlist_email:type</var> + </control> + <control name="shared_wishlist_email-width"> + <type>image-width</type> + <var>Magento_Catalog::shared_wishlist_email:width</var> + </control> + <control name="shared_wishlist_email-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::shared_wishlist_email:ratio</var> + </control> + <control name="shared_wishlist_email-height"> + <type>image-height</type> + <var>Magento_Catalog::shared_wishlist_email:height</var> + </control> + </components> + </control> + + <control name="customer_account_my_tags_tag_view" title="Customer Account: My Tags - Tag View"> + <type>image-sizing</type> + <components> + <control name="customer_account_my_tags_tag_view-type"> + <type>image-type</type> + <var>Magento_Catalog::customer_account_my_tags_tag_view:type</var> + </control> + <control name="customer_account_my_tags_tag_view-width"> + <type>image-width</type> + <var>Magento_Catalog::customer_account_my_tags_tag_view:width</var> + </control> + <control name="customer_account_my_tags_tag_view-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::customer_account_my_tags_tag_view:ratio</var> + </control> + <control name="customer_account_my_tags_tag_view-height"> + <type>image-height</type> + <var>Magento_Catalog::customer_account_my_tags_tag_view:height</var> + </control> + </components> + </control> + + <control name="cart_cross_sell_products" title="Cart Cross-sell Products"> + <type>image-sizing</type> + <components> + <control name="cart_cross_sell_products-type"> + <type>image-type</type> + <var>Magento_Catalog::cart_cross_sell_products:type</var> + </control> + <control name="cart_cross_sell_products-width"> + <type>image-width</type> + <var>Magento_Catalog::cart_cross_sell_products:width</var> + </control> + <control name="cart_cross_sell_products-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::cart_cross_sell_products:ratio</var> + </control> + <control name="cart_cross_sell_products-height"> + <type>image-height</type> + <var>Magento_Catalog::cart_cross_sell_products:height</var> + </control> + </components> + </control> + + <control name="gift_messages_checkout_thumbnail" title="Gift Messages on Checkout (Thumbnail)"> + <type>image-sizing</type> + <components> + <control name="gift_messages_checkout_thumbnail-type"> + <type>image-type</type> + <var>Magento_Catalog::gift_messages_checkout_thumbnail:type</var> + </control> + <control name="gift_messages_checkout_thumbnail-width"> + <type>image-width</type> + <var>Magento_Catalog::gift_messages_checkout_thumbnail:width</var> + </control> + <control name="gift_messages_checkout_thumbnail-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::gift_messages_checkout_thumbnail:ratio</var> + </control> + <control name="gift_messages_checkout_thumbnail-height"> + <type>image-height</type> + <var>Magento_Catalog::gift_messages_checkout_thumbnail:height</var> + </control> + </components> + </control> + + <control name="gift_messages_checkout_small_image" title="Gift Messages on Checkout (Small Image)"> + <type>image-sizing</type> + <components> + <control name="gift_messages_checkout_small_image-type"> + <type>image-type</type> + <var>Magento_Catalog::gift_messages_checkout_small_image:type</var> + </control> + <control name="gift_messages_checkout_small_image-width"> + <type>image-width</type> + <var>Magento_Catalog::gift_messages_checkout_small_image:width</var> + </control> + <control name="gift_messages_checkout_small_image-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::gift_messages_checkout_small_image:ratio</var> + </control> + <control name="gift_messages_checkout_small_image-height"> + <type>image-height</type> + <var>Magento_Catalog::gift_messages_checkout_small_image:height</var> + </control> + </components> + </control> + + <control name="mini_cart_product_thumbnail" title="Mini Cart Product Thumbnail"> + <type>image-sizing</type> + <components> + <control name="mini_cart_product_thumbnail-type"> + <type>image-type</type> + <var>Magento_Catalog::mini_cart_product_thumbnail:type</var> + </control> + <control name="mini_cart_product_thumbnail-width"> + <type>image-width</type> + <var>Magento_Catalog::mini_cart_product_thumbnail:width</var> + </control> + <control name="mini_cart_product_thumbnail-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::mini_cart_product_thumbnail:ratio</var> + </control> + <control name="mini_cart_product_thumbnail-height"> + <type>image-height</type> + <var>Magento_Catalog::mini_cart_product_thumbnail:height</var> + </control> + </components> + </control> + + <control name="new_products_images_only_widget" title="New Products Images Only Widget"> + <type>image-sizing</type> + <components> + <control name="new_products_images_only_widget-type"> + <type>image-type</type> + <var>Magento_Catalog::new_products_images_only_widget:type</var> + </control> + <control name="new_products_images_only_widget-width"> + <type>image-width</type> + <var>Magento_Catalog::new_products_images_only_widget:width</var> + </control> + <control name="new_products_images_only_widget-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::new_products_images_only_widget:ratio</var> + </control> + <control name="new_products_images_only_widget-height"> + <type>image-height</type> + <var>Magento_Catalog::new_products_images_only_widget:height</var> + </control> + </components> + </control> + + <control name="cart_page_product_thumbnail" title="Cart Page - Product Thumbnail"> + <type>image-sizing</type> + <components> + <control name="cart_page_product_thumbnail-type"> + <type>image-type</type> + <var>Magento_Catalog::cart_page_product_thumbnail:type</var> + </control> + <control name="cart_page_product_thumbnail-width"> + <type>image-width</type> + <var>Magento_Catalog::cart_page_product_thumbnail:width</var> + </control> + <control name="cart_page_product_thumbnail-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::cart_page_product_thumbnail:ratio</var> + </control> + <control name="cart_page_product_thumbnail-height"> + <type>image-height</type> + <var>Magento_Catalog::cart_page_product_thumbnail:height</var> + </control> + </components> + </control> + + <control name="product_stock_alert_email_product_image" title="Product Stock Alert Email Product Image"> + <type>image-sizing</type> + <components> + <control name="product_stock_alert_email_product_image-type"> + <type>image-type</type> + <var>Magento_Catalog::product_stock_alert_email_product_image:type</var> + </control> + <control name="product_stock_alert_email_product_image-width"> + <type>image-width</type> + <var>Magento_Catalog::product_stock_alert_email_product_image:width</var> + </control> + <control name="product_stock_alert_email_product_image-ratio"> + <type>image-ratio</type> + <var>Magento_Catalog::product_stock_alert_email_product_image:ratio</var> + </control> + <control name="product_stock_alert_email_product_image-height"> + <type>image-height</type> + <var>Magento_Catalog::product_stock_alert_email_product_image:height</var> + </control> + </components> + </control> +</controls> diff --git a/app/design/frontend/magento_plushe/Magento_DesignEditor/controls/quick_styles.xml b/app/design/frontend/magento_plushe/Magento_DesignEditor/controls/quick_styles.xml new file mode 100644 index 00000000000..d3956d3d849 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_DesignEditor/controls/quick_styles.xml @@ -0,0 +1,1118 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/** + * 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_DesignEditor + * @subpackage integration_tests + * @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) + */ + --> +<controls> + <control name="store-name" title="Store Name" tab="header" column="left"> + <type>logo</type> + <components> + <control name="store-name:font"> + <type>font</type> + <components> + <control name="store-name:font-picker"> + <type>font-picker</type> + <selector><![CDATA[.logo]]></selector> + <attribute>font-family</attribute> + <options> + <option>"marvel"</option> + <option>Tahoma, Geneva, sans-serif</option> + <option>Georgia, serif</option> + <option>Impact, Charcoal, sans-serif</option> + <option>‘Palatino Linotype’, ‘Book Antiqua’, Palatino, serif</option> + <option>Century Gothic, sans-serif</option> + <option>‘Lucida Sans Unicode’, ‘Lucida Grande’, sans-serif</option> + <option>‘Arial Black’, Gadget, sans-serif</option> + <option>‘Times New Roman’, Times, serif</option> + <option>‘Arial Narrow’, sans-serif</option> + <option>Verdana, Geneva, sans-serif</option> + <option>Copperplate / Copperplate Gothic Light, sans-serif</option> + <option>‘Lucida Console’, Monaco, monospace</option> + <option>‘Trebuchet MS’, Helvetica, sans-serif</option> + <option>‘Courier New’, Courier, monospace</option> + <option>Arial, Helvetica, sans-serif</option> + </options> + <var>Magento_DesignEditor::store-name:font-picker</var> + </control> + <control name="store-name:color-picker"> + <type>color-picker</type> + <selector><![CDATA[.logo span]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::store-name:color-picker</var> + </control> + </components> + </control> + <control name="store-name:logo-uploader"> + <type>logo-uploader</type> + <selector></selector> + <attribute></attribute> + <var>Magento_DesignEditor::store-name:logo-uploader</var> + </control> + </components> + </control> + <control name="header-background" title="Background" tab="header" column="left"> + <type>background</type> + <components> + <control name="header-background:color-picker"> + <type>color-picker</type> + <selector><![CDATA[.header]]></selector> + <attribute>background-color</attribute> + <var>Magento_DesignEditor::header-background:color-picker</var> + </control> + <control name="header-background:background-uploader"> + <type>background-uploader</type> + <components> + <control name="header-background:image-uploader"> + <type>image-uploader</type> + <selector><![CDATA[.header]]></selector> + <attribute>background-image</attribute> + <var>Magento_DesignEditor::header-background:image-uploader</var> + </control> + <control name="header-background:tile"> + <type>checkbox</type> + <selector><![CDATA[.header]]></selector> + <attribute>background-repeat</attribute> + <options> + <option>no-repeat</option> + <option>repeat</option> + <option>repeat-x</option> + <option>repeat-y</option> + <option>inherit</option> + </options> + <var>Magento_DesignEditor::header-background:tile</var> + </control> + </components> + </control> + </components> + </control> + + <control name="menu-background" title="Menu Background" tab="header" column="middle"> + <type>color-picker</type> + <selector><![CDATA[ + .navigation > ul > .level-top > .submenu, + .navigation > ul > .level-top.more > .submenu > ul, + .level-top.more.hover:after, + .switcher .options > ul + ]]></selector> + <attribute>background-color</attribute> + <var>Magento_DesignEditor::menu-background</var> + </control> + <control name="menu-stroke" title="Menu Stroke" tab="header" column="middle"> + <type>color-picker</type> + <selector> + .navigation > ul > .level-top > .submenu, + .switcher .options > ul + </selector> + <attribute>border-color</attribute> + <var>Magento_DesignEditor::menu-stroke</var> + </control> + <control name="menu-links" title="Menu Links" tab="header" column="middle"> + <type>color-picker</type> + <selector><![CDATA[ + .navigation > ul > .level-top > .submenu a, + .navigation > ul > .level-top > .submenu a span + ]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::menu-links</var> + </control> + <control name="menu-links-hover" title="Menu Links Hover" tab="header" column="middle"> + <type>color-picker</type> + <selector><![CDATA[ + .navigation > ul > .level-top > .submenu a:hover, + .navigation > ul > .level-top > .submenu a:hover span + ]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::menu-links-hover</var> + </control> + + <control name="header-links" title="Header Links" tab="header" column="right"> + <type>color-picker</type> + <selector><![CDATA[ + .navigation > ul > .level-top > a, + .navigation > ul > .level-top > a > span, + .action.showcart, + .header > .content .links a, + .switcher .options > ul a, + .action.switch + ]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::header-links</var> + </control> + <control name="header-links-hover" title="Header Links Hover" tab="header" column="right"> + <type>color-picker</type> + <selector><![CDATA[ + .navigation > ul > .level-top > a:hover, + .navigation > ul > .level-top > a:hover > span, + .navigation > ul > .level-top > a:active span, + .navigation > ul > .level-top > a:focus span, + .navigation > ul > .level-top.hover:hover > a span, + .navigation > ul > .level-top.hover.parent.hover > a span, + .navigation > ul > .level-top.hover.parent > a span, + .action.showcart:hover, + .action.showcart:active, + .action.showcart:focus, + .action.showcart.active, + .header > .content .links a:hover, + .switcher .options > ul a:hover, + .action.switch:focus, + .action.switch:hover, + .action.switch.active + ]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::header-links-hover</var> + </control> + <!-- + <control name="header-scroll-bar-background" title="Scroll Bar Background" tab="header" column="right"> + <type>color-picker</type> + <selector>.scroll</selector> + <attribute>background-color</attribute> + <var>Magento_DesignEditor::header-scroll-bar-background</var> + </control> + <control name="header-scroll-bar-handle" title="Scroll Bar Handle" tab="header" column="right"> + <type>color-picker</type> + <selector>.scroll .handle</selector> + <attribute>background-color</attribute> + <var>Magento_DesignEditor::header-scroll-bar-handle</var> + </control> +--> + <control name="search-field" title="Search Field" tab="header" column="right"> + <type>color-picker</type> + <selector> + .block.search input, + .block.search .action.search + </selector> + <attribute>background-color</attribute> + <var>Magento_DesignEditor::search-field</var> + </control> + <control name="search-field-text" title="Search Field Text, Search Icon" tab="header" column="right"> + <type>color-picker</type> + <selector> + .block.search input, + .block.search .action.search span, + .block.search input[type="password"]::-webkit-input-placeholder, + .block.search input[type="text"]::-webkit-input-placeholder + </selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::search-field-text</var> + </control> + <control name="search-field-stroke" title="Search Field Stroke" tab="header" column="right"> + <type>color-picker</type> + <selector> + .block.search input, + .block.search .action.search + </selector> + <attribute>border-color</attribute> + <var>Magento_DesignEditor::search-field-stroke</var> + </control> + + + <control name="page-background" title="Page Background" tab="backgrounds" column="left"> + <type>background</type> + <components> + <control name="page-background:color-picker"> + <type>color-picker</type> + <selector><![CDATA[ + .page.wrapper, + .product.data > .item.title:not(.disabled) > .switch:active, + .product.data > .item.title:not(.disabled) > .switch:focus, + .product.data > .item.title:not(.disabled) > .switch:hover, + .product.data > .item.title.active > .switch, + .footer + ]]></selector> + <attribute>background-color</attribute> + <var>Magento_DesignEditor::page-background:color-picker</var> + </control> + <control name="page-background:background-uploader"> + <type>background-uploader</type> + <components> + <control name="page-background:image-uploader"> + <type>image-uploader</type> + <selector><![CDATA[ + .page.wrapper, + .footer + ]]></selector> + <attribute>background-image</attribute> + <var>Magento_DesignEditor::page-background:image-uploader</var> + </control> + <control name="page-background:tile"> + <type>checkbox</type> + <selector><![CDATA[ + .page.wrapper, + .footer + ]]></selector> + <attribute>background-repeat</attribute> + <options> + <option>no-repeat</option> + <option>repeat</option> + <option>repeat-x</option> + <option>repeat-y</option> + <option>inherit</option> + </options> + <var>Magento_DesignEditor::page-background:tile</var> + </control> + </components> + </control> + </components> + </control> + + <control name="form-background" title="Form Background" tab="backgrounds" column="middle"> + <type>color-picker</type> + <selector><![CDATA[ + .login.container, + .block.add.review, + .opc.wrapper > .opc .section > .step, + .opc.wrapper > .opc .section.active > .step-title, + .items.data tbody:nth-child(even) tr, + .cart.summary, + .minicart.wrapper .block.minicart, + .prices.tier, + .form.send.friend .fieldset, + .form.address.edit .fieldset, + .form.edit.account .fieldset, + .form.search.advanced, + .form.orders.search, + .form.contact, + .form.password.forget .fieldset, + .form.create.account .fieldset, + .form.wishlist.share .fieldset, + .block.dashboard:not(.welcome):not(.orders) .content, + .block.reviews.list .item.review:nth-child(odd), + .fieldset.bundle.options > .field, + .block.bundle.summary, + .data.table.reviews tbody tr:nth-child(even) td, + .data.table.wishlist tbody tr:nth-child(even), + .data.table.tags tbody tr:nth-child(even) td, + .data.comparison tr:nth-child(odd) .cell.attribute + ]]></selector> + <attribute>background-color</attribute> + <var>Magento_DesignEditor::form-background</var> + </control> + <!-- + <control name="form-stroke" title="Form 1 Stroke" tab="backgrounds" column="middle"> + <type>color-picker</type> + <selector></selector> + <attribute>border-color</attribute> + <var>Magento_DesignEditor::form-stroke</var> + </control> + <control name="form2-background" title="Form 2 Background" tab="backgrounds" column="middle"> + <type>color-picker</type> + <selector></selector> + <attribute>background-color</attribute> + <var>Magento_DesignEditor::form2-background</var> + </control> + <control name="form2-stroke" title="Form 2 Stroke" tab="backgrounds" column="middle"> + <type>color-picker</type> + <selector></selector> + <attribute>border-color</attribute> + <var>Magento_DesignEditor::form2-stroke</var> + </control> + --> + <control name="form-field-stroke" title="Form Field Stroke" tab="backgrounds" column="middle"> + <type>color-picker</type> + <selector><![CDATA[input[type="password"], input[type="text"], select, textarea, .fieldset > .field .addon .addbefore, .fieldset > .field .addon .addafter, .product.main.info .product.options.wrapper .field .addon .addbefore, .product.main.info .product.options.wrapper .field .addon .addafter, .form.password.forget .fieldset > .field .addon .addbefore, .form.create.account .fieldset > .field .addon .addbefore, .form.password.forget .fieldset > .field .addon .addafter, .form.create.account .fieldset > .field .addon .addafter, .block.add.review .fieldset > .field:not(.ratings) .addon .addbefore, .block.add.review .fieldset > .field:not(.ratings) .addon .addafter]]></selector> + <attribute>border-color</attribute> + <var>Magento_DesignEditor::form-field-stroke</var> + </control> + <control name="form-field-stroke-clicked" title="Form Field Stroke Clicked" tab="backgrounds" column="right"> + <type>color-picker</type> + <selector> + input[type="password"]:focus, + input[type="text"]:focus, + select:focus, + textarea:focus + </selector> + <attribute>border-color</attribute> + <var>Magento_DesignEditor::form-field-stroke-clicked</var> + </control> + <control name="image-stroke-keylines" title="Image Stroke & Keylines" tab="backgrounds" column="right"> + <type>color-picker</type> + <selector><![CDATA[ + .opc.wrapper > .opc .section > .step:before, + .step.login.wrapper .block.guest:before, + .order.data.items tfoot tr:first-child td, + .items.data .item.actions td:before, + .cart.summary .summary.title, + .cart.summary .block, + .data-table td, + + .data.comparison .cell.product.info, + .data.comparison .addto.links, + .data.comparison .cell.label, + .data.comparison .cell.label.product, + .data.comparison .cell.label, + .data.comparison td:last-child, + + .block.widget.viewed, + .block.crosssell, + .block.upsell, + .block.related, + .block.widget.viewed .products.list .item.product .addto.links, + .block.crosssell .products.list .item.product .addto.links, + .block.upsell .products.list .item.product .addto.links, + .block.related .products.list .item.product .addto.links, + .product.info.detailed + .block.upsell, + .product.info.detailed + .block.related, + .toolbar.alternative .pages, + .toolbar.alternative .amount, + .toolbar.alternative .limiter, + .toolbar .options, + .product.info.main .page.title.product + .price-box, + .product.info.main .product.addto.links, + .block.bundle.summary > .title, + .block.bundle.summary .photo, + .block.bundle.summary .box.tocart, + .block.bundle.summary .subtitle, + .product.photo.thumbs .item.thumb .active img, + + .login.container .block.new:before, + .block.filter .filtered .item, + .block.add.review .fieldset > .legend, + .data.table.tags tbody td, + .data.table.reviews tbody td + ]]></selector> + <attribute>border-color</attribute> + <var>Magento_DesignEditor::image-stroke-keylines</var> + </control> + +<!-- <control name="scroll-bar-background" title="Scroll Bar Background" tab="backgrounds" column="right"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::scroll-bar-background</var> +</control> +<control name="scroll-bar-handle" title="Scroll Bar Handle" tab="backgrounds" column="right"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::scroll-bar-handle</var> +</control> --> + + <control name="radio-checkbox-icon" title="Radio Buttons/Checkboxes Icon" tab="buttons" column="left"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::radio-checkbox-icon</var> + </control> + <control name="radio-checkbox-background" title="Radio Buttons/Checkboxes Background" tab="buttons" column="left"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::radio-checkbox-background</var> + </control> + <control name="radio-checkbox-stroke" title="Radio Buttons/Checkboxes Stroke" tab="buttons" column="left"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::radio-checkbox-stroke</var> + </control> + + <control name="button-text" title="Buttons Text" tab="buttons" column="left"> + <type>color-picker</type> + <selector><![CDATA[ + .block.add.review .action.submit span, + .step.login.wrapper button.action:not(.reload) span, + .cart.summary .block .action span, + .action.checkout span, + .action.subscribe span, + .action.tocart span, + .action.primary.customize span, + .action.primary.tocart span, + .login.container .action.login span, + .login.container .action.create span, + + .form.send.friend .action.save span, + .form.address.edit .action.save span, + .form.edit.account .action.save span, + .form.search.advanced .action.save span, + .form.orders.search .action.save span, + .form.contact .action.save span, + .form.password.forget .action.save span, + .form.create.account .action.save span, + .form.wishlist.share .action.save span, + .form.password.reset .action.save span, + .form.add.tag .action.save span, + + .form.send.friend .action.submit span, + .form.address.edit .action.submit span, + .form.edit.account .action.submit span, + .form.search.advanced .action.submit span, + .form.orders.search .action.submit span, + .form.contact .action.submit span, + .form.password.forget .action.submit span, + .form.create.account .action.submit span, + .form.wishlist.share .action.submit span, + .form.password.reset .action.submit span, + .form.add.tag .action.submit span, + + .form.send.friend .action.add span, + .form.address.edit .action.add span, + .form.edit.account .action.add span, + .form.search.advanced .action.add span, + .form.orders.search .action.add span, + .form.contact .action.add span, + .form.password.forget .action.add span, + .form.create.account .action.add span, + .form.wishlist.share .action.add span, + .form.password.reset .action.add span, + .form.add.tag .action.add span, + + .form.newsletter.manage .action.save span, + + .form.search.advanced .action span, + .form.orders.search .action span, + .form.contact .action span, + + .banner.main .banner.action span, + .opc.wrapper .form:not(.login) .actions button.action span, + + .data.table.wishlist + .actions .primary .action.share span, + .data.table.wishlist + .actions .primary .action.update span + ]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::button-text</var> + </control> + <control name="button-background" title="Buttons" tab="buttons" column="left"> + <type>color-picker</type> + <selector><![CDATA[ + .block.add.review .action.submit, + .step.login.wrapper button.action:not(.reload), + .cart.summary .block .action, + .action.checkout, + .action.subscribe, + .action.tocart, + .action.primary.customize, + .action.primary.tocart, + .login.container .action.login, + .login.container .action.create, + + .form.send.friend .action.save, + .form.address.edit .action.save, + .form.edit.account .action.save, + .form.search.advanced .action.save, + .form.orders.search .action.save, + .form.contact .action.save, + .form.password.forget .action.save, + .form.create.account .action.save, + .form.wishlist.share .action.save, + .form.password.reset .action.save, + .form.add.tag .action.save, + + .form.send.friend .action.submit, + .form.address.edit .action.submit, + .form.edit.account .action.submit, + .form.search.advanced .action.submit, + .form.orders.search .action.submit, + .form.contact .action.submit, + .form.password.forget .action.submit, + .form.create.account .action.submit, + .form.wishlist.share .action.submit, + .form.password.reset .action.submit, + .form.add.tag .action.submit, + + .form.send.friend .action.add, + .form.address.edit .action.add, + .form.edit.account .action.add, + .form.search.advanced .action.add, + .form.orders.search .action.add, + .form.contact .action.add, + .form.password.forget .action.add, + .form.create.account .action.add, + .form.wishlist.share .action.add, + .form.password.reset .action.add, + .form.add.tag .action.add, + + .form.newsletter.manage .action.save, + + .form.search.advanced .action, + .form.orders.search .action, + .form.contact .action, + + .banner.main .banner.action, + .opc.wrapper .form:not(.login) .actions button.action, + + .data.table.wishlist + .actions .primary .action.share, + .data.table.wishlist + .actions .primary .action.update + ]]></selector> + <attribute>background-color</attribute> + <var>Magento_DesignEditor::button-background</var> + </control> + <control name="button-hover" title="Buttons Hover" tab="buttons" column="left"> + <type>color-picker</type> + <selector><![CDATA[ + .block.add.review .action.submit:hover, + .step.login.wrapper button.action:not(.reload):hover, + .cart.summary .block .action:hover, + .action.checkout:hover, + .action.subscribe:hover, + .action.tocart:hover, + .action.primary.customize:hover, + .action.primary.tocart:hover, + .login.container .action.login:hover, + .login.container .action.create:hover, + + .form.send.friend .action.save:hover, + .form.address.edit .action.save:hover, + .form.edit.account .action.save:hover, + .form.search.advanced .action.save:hover, + .form.orders.search .action.save:hover, + .form.contact .action.save:hover, + .form.password.forget .action.save:hover, + .form.create.account .action.save:hover, + .form.wishlist.share .action.save:hover, + .form.password.reset .action.save:hover, + .form.add.tag .action.save:hover, + + .form.send.friend .action.submit:hover, + .form.address.edit .action.submit:hover, + .form.edit.account .action.submit:hover, + .form.search.advanced .action.submit:hover, + .form.orders.search .action.submit:hover, + .form.contact .action.submit:hover, + .form.password.forget .action.submit:hover, + .form.create.account .action.submit:hover, + .form.wishlist.share .action.submit:hover, + .form.password.reset .action.submit:hover, + .form.add.tag .action.submit:hover, + + .form.send.friend .action.add:hover, + .form.address.edit .action.add:hover, + .form.edit.account .action.add:hover, + .form.search.advanced .action.add:hover, + .form.orders.search .action.add:hover, + .form.contact .action.add:hover, + .form.password.forget .action.add:hover, + .form.create.account .action.add:hover, + .form.wishlist.share .action.add:hover, + .form.password.reset .action.add:hover, + .form.add.tag .action.add:hover, + + .form.newsletter.manage .action.save:hover, + + .form.search.advanced .action:hover, + .form.orders.search .action:hover, + .form.contact .action:hover, + + .banner.main .banner.action:hover, + .opc.wrapper .form:not(.login) .actions button.action:hover, + + .data.table.wishlist + .actions .primary .action.share:hover, + .data.table.wishlist + .actions .primary .action.update:hover + ]]></selector> + <attribute>background-color</attribute> + <var>Magento_DesignEditor::button-hover</var> + </control> + <control name="icons" title="Icons" tab="buttons" column="middle"> + <type>color-picker</type> + <selector><![CDATA[ + .minicart.wrapper .action.previous span, + .minicart.wrapper .action.next span, + .action.delete span, + .toolbar .modes .mode span, + .toolbar .action.next span, + .toolbar .action.previous span, + .action.mailto span + ]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::icons</var> + </control> + <control name="icons-hover" title="Icons Hover" tab="buttons" column="middle"> + <type>color-picker</type> + <selector><![CDATA[ + .minicart.wrapper .action.previous:hover span, + .minicart.wrapper .action.next:hover span, + .action.delete:hover span, + .toolbar .modes .mode:hover span, + .toolbar .action.next:hover span, + .toolbar .action.previous:hover span, + .action.mailto:hover span + ]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::icons-hover</var> + </control> + <!-- + <control name="icons2" title="Icons 2" tab="buttons" column="middle"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::icons2</var> + </control> + + <control name="accents" title="Accent Color" tab="buttons" column="right"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::accents</var> + </control> + + <control name="size-swatches" title="Size Swatches" tab="buttons" column="right"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::size-swatches</var> + </control> + <control name="size-swatches-unavailable" title="Size Swatches (Unavailable Size)" tab="buttons" column="right"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::size-swatches-unavailable</var> + </control> + <control name="size-swatches-hover" title="Size Swatches Hover/Selected Stroke" tab="buttons" column="right"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::size-swatches-hover</var> + </control> + + + + <control name="tooltip-text" title="Tooltip 1 Text" tab="tips" column="left"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::tooltip-text</var> + </control> + <control name="tooltip-box" title="Tooltip 1 Box" tab="tips" column="left"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::tooltip-box</var> + </control> + <control name="tooltip-stroke" title="Tooltip 1 Stroke" tab="tips" column="left"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::tooltip-stroke</var> + </control> + <control name="tooltip2-text" title="Tooltip 2 Text" tab="tips" column="left"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::tooltip2-text</var> + </control> + <control name="tooltip2-box" title="Tooltip 2 Box" tab="tips" column="left"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::tooltip2-box</var> + </control> + <control name="tooltip2-stroke" title="Tooltip 2 Stroke" tab="tips" column="left"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::tooltip2-stroke</var> + </control> + --> + + <control name="error-icon" title="Error Icon" tab="tips" column="left"> + <type>color-picker</type> + <selector><![CDATA[.error-msg > *:first-child:before]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::error-icon</var> + </control> + <control name="error-box" title="Error Box" tab="tips" column="left"> + <type>color-picker</type> + <selector><![CDATA[.error-msg]]></selector> + <attribute>background-color</attribute> + <var>Magento_DesignEditor::error-box</var> + </control> + + <control name="success-icon" title="Success Icon" tab="tips" column="middle"> + <type>color-picker</type> + <selector><![CDATA[.success-msg > *:first-child:before]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::success-icon</var> + </control> + <control name="success-box" title="Success Box" tab="tips" column="middle"> + <type>color-picker</type> + <selector><![CDATA[.success-msg]]></selector> + <attribute>background-color</attribute> + <var>Magento_DesignEditor::success-box</var> + </control> + + <control name="notice-icon" title="Notice Icon" tab="tips" column="right"> + <type>color-picker</type> + <selector><![CDATA[ + .notice-msg > *:first-child:before, + .note-msg > *:first-child:before + ]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::notice-icon</var> + </control> + <control name="notice-box" title="Notice Box" tab="tips" column="right"> + <type>color-picker</type> + <selector><![CDATA[ + .notice-msg, + .note-msg + ]]></selector> + <attribute>background-color</attribute> + <var>Magento_DesignEditor::notice-box</var> + </control> + + <control name="banner-text" title="Banner Text" tab="fonts" column="left"> + <type>font</type> + <components> + <control name="banner-text:font-picker"> + <type>font-picker</type> + <selector><![CDATA[.home.banners .banner.text]]></selector> + <attribute>font-family</attribute> + <options> + <option>"marvel", Arial, sans-serif</option> + <option>Tahoma, Geneva, sans-serif</option> + <option>Georgia, serif</option> + <option>Impact, Charcoal, sans-serif</option> + <option>‘Palatino Linotype’, ‘Book Antiqua’, Palatino, serif</option> + <option>Century Gothic, sans-serif</option> + <option>‘Lucida Sans Unicode’, ‘Lucida Grande’, sans-serif</option> + <option>‘Arial Black’, Gadget, sans-serif</option> + <option>‘Times New Roman’, Times, serif</option> + <option>‘Arial Narrow’, sans-serif</option> + <option>Verdana, Geneva, sans-serif</option> + <option>Copperplate / Copperplate Gothic Light, sans-serif</option> + <option>‘Lucida Console’, Monaco, monospace</option> + <option>‘Trebuchet MS’, Helvetica, sans-serif</option> + <option>‘Courier New’, Courier, monospace</option> + <option>Arial, Helvetica, sans-serif</option> + </options> + <var>Magento_DesignEditor::banner-text:font-picker</var> + </control> + <control name="banner-text:color-picker"> + <type>color-picker</type> + <selector><![CDATA[.home.banners .banner.text]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::banner-text:color-picker</var> + </control> + </components> + </control> + + <control name="menu" title="Menu & Header Links" tab="fonts" column="left"> + <type>font</type> + <components> + <control name="menu:font-picker"> + <type>font-picker</type> + <selector><![CDATA[ + .navigation > ul > .level-top > a, + .action.showcart .qty, + .switcher strong, + .product.name, + .toolbar .limiter select, + .toolbar .sorter select, + .navigation > ul > .level-top > .submenu > ul .level1 > a + ]]></selector> + <attribute>font-family</attribute> + <options> + <option>"sourcesanspro", Arial, sans-serif</option> + <option>Tahoma, Geneva, sans-serif</option> + <option>Georgia, serif</option> + <option>Impact, Charcoal, sans-serif</option> + <option>‘Palatino Linotype’, ‘Book Antiqua’, Palatino, serif</option> + <option>Century Gothic, sans-serif</option> + <option>‘Lucida Sans Unicode’, ‘Lucida Grande’, sans-serif</option> + <option>‘Arial Black’, Gadget, sans-serif</option> + <option>‘Times New Roman’, Times, serif</option> + <option>‘Arial Narrow’, sans-serif</option> + <option>Verdana, Geneva, sans-serif</option> + <option>Copperplate / Copperplate Gothic Light, sans-serif</option> + <option>‘Lucida Console’, Monaco, monospace</option> + <option>‘Trebuchet MS’, Helvetica, sans-serif</option> + <option>‘Courier New’, Courier, monospace</option> + <option>Arial, Helvetica, sans-serif</option> + </options> + <var>Magento_DesignEditor::menu:font-picker</var> + </control> + <control name="menu:color-picker"> + <type>color-picker</type> + <selector><![CDATA[ + .navigation > ul > .level-top > a, + .action.showcart .qty, + .switcher strong, + .product.name, + .toolbar .limiter select, + .toolbar .sorter select + ]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::menu:color-picker</var> + </control> + </components> + </control> + <control name="page-headings" title="Page Headings" tab="fonts" column="left"> + <type>font</type> + <components> + <control name="page-headings:font-picker"> + <type>font-picker</type> + <selector><![CDATA[ + .page.title .title, + .opc.wrapper > .opc .section > .step-title h2, + .column.main .block > .title + ]]></selector> + <attribute>font-family</attribute> + <options> + <option>"sourcesanspro", Arial, sans-serif</option> + <option>Tahoma, Geneva, sans-serif</option> + <option>Georgia, serif</option> + <option>Impact, Charcoal, sans-serif</option> + <option>‘Palatino Linotype’, ‘Book Antiqua’, Palatino, serif</option> + <option>Century Gothic, sans-serif</option> + <option>‘Lucida Sans Unicode’, ‘Lucida Grande’, sans-serif</option> + <option>‘Arial Black’, Gadget, sans-serif</option> + <option>‘Times New Roman’, Times, serif</option> + <option>‘Arial Narrow’, sans-serif</option> + <option>Verdana, Geneva, sans-serif</option> + <option>Copperplate / Copperplate Gothic Light, sans-serif</option> + <option>‘Lucida Console’, Monaco, monospace</option> + <option>‘Trebuchet MS’, Helvetica, sans-serif</option> + <option>‘Courier New’, Courier, monospace</option> + <option>Arial, Helvetica, sans-serif</option> + </options> + <var>Magento_DesignEditor::page-headings:font-picker</var> + </control> + <control name="page-headings:color-picker"> + <type>color-picker</type> + <selector><![CDATA[ + .page.title .title, + .opc.wrapper > .opc .section > .step-title h2, + .column.main .block > .title + ]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::page-headings:color-picker</var> + </control> + </components> + </control> + + <control name="body-text" title="Body Text" tab="fonts" column="middle"> + <type>font</type> + <components> + <control name="body-text:font-picker"> + <type>font-picker</type> + <selector><![CDATA[ + body, + .footer .links a, + .toolbar .limiter .label, + .toolbar .sorter .label, + .products.wrapper .products.list .item .price-box, + .reviews.summary .reviews.actions, + .block.add.review .fieldset > .legend, + .column.main .block > .title + ]]></selector> + <attribute>font-family</attribute> + <options> + <option>"sourcesanspro", Arial, sans-serif</option> + <option>Tahoma, Geneva, sans-serif</option> + <option>Georgia, serif</option> + <option>Impact, Charcoal, sans-serif</option> + <option>‘Palatino Linotype’, ‘Book Antiqua’, Palatino, serif</option> + <option>Century Gothic, sans-serif</option> + <option>‘Lucida Sans Unicode’, ‘Lucida Grande’, sans-serif</option> + <option>‘Arial Black’, Gadget, sans-serif</option> + <option>‘Times New Roman’, Times, serif</option> + <option>‘Arial Narrow’, sans-serif</option> + <option>Verdana, Geneva, sans-serif</option> + <option>Copperplate / Copperplate Gothic Light, sans-serif</option> + <option>‘Lucida Console’, Monaco, monospace</option> + <option>‘Trebuchet MS’, Helvetica, sans-serif</option> + <option>‘Courier New’, Courier, monospace</option> + <option>Arial, Helvetica, sans-serif</option> + </options> + <var>Magento_DesignEditor::body-text:font-picker</var> + </control> + <control name="body-text:color-picker"> + <type>color-picker</type> + <selector><![CDATA[ + body, + .footer .links a, + .toolbar .limiter .label, + .toolbar .sorter .label, + .products.wrapper .products.list .item .price-box, + .reviews.summary .reviews.actions, + .block.add.review .fieldset > .legend, + .column.main .block > .title + ]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::body-text:color-picker</var> + </control> + </components> + </control> + + <control name="buttons" title="Button Text" tab="fonts" column="middle"> + <type>font</type> + <components> + <control name="buttons:font-picker"> + <type>font-picker</type> + <selector><![CDATA[ + .block.add.review .action.submit span, + .step.login.wrapper button.action:not(.reload) span, + .cart.summary .block .action span, + .action.checkout span, + .action.subscribe span, + .action.tocart span, + .action.primary.customize span, + .action.primary.tocart span, + .login.container .action.login span, + .login.container .action.create span, + + .form.send.friend .action.save span, + .form.address.edit .action.save span, + .form.edit.account .action.save span, + .form.search.advanced .action.save span, + .form.orders.search .action.save span, + .form.contact .action.save span, + .form.password.forget .action.save span, + .form.create.account .action.save span, + .form.wishlist.share .action.save span, + .form.password.reset .action.save span, + .form.add.tag .action.save span, + + .form.send.friend .action.submit span, + .form.address.edit .action.submit span, + .form.edit.account .action.submit span, + .form.search.advanced .action.submit span, + .form.orders.search .action.submit span, + .form.contact .action.submit span, + .form.password.forget .action.submit span, + .form.create.account .action.submit span, + .form.wishlist.share .action.submit span, + .form.password.reset .action.submit span, + .form.add.tag .action.submit span, + + .form.send.friend .action.add span, + .form.address.edit .action.add span, + .form.edit.account .action.add span, + .form.search.advanced .action.add span, + .form.orders.search .action.add span, + .form.contact .action.add span, + .form.password.forget .action.add span, + .form.create.account .action.add span, + .form.wishlist.share .action.add span, + .form.password.reset .action.add span, + .form.add.tag .action.add span, + + .form.newsletter.manage .action.save span, + + .form.search.advanced .action span, + .form.orders.search .action span, + .form.contact .action span, + + .banner.main .banner.action span, + .opc.wrapper .form:not(.login) .actions button.action span, + + .data.table.wishlist + .actions .primary .action.share span, + .data.table.wishlist + .actions .primary .action.update span + ]]></selector> + <attribute>font-family</attribute> + <options> + <option>"marvel", Arial, sans-serif</option> + <option>Tahoma, Geneva, sans-serif</option> + <option>Georgia, serif</option> + <option>Impact, Charcoal, sans-serif</option> + <option>‘Palatino Linotype’, ‘Book Antiqua’, Palatino, serif</option> + <option>Century Gothic, sans-serif</option> + <option>‘Lucida Sans Unicode’, ‘Lucida Grande’, sans-serif</option> + <option>‘Arial Black’, Gadget, sans-serif</option> + <option>‘Times New Roman’, Times, serif</option> + <option>‘Arial Narrow’, sans-serif</option> + <option>Verdana, Geneva, sans-serif</option> + <option>Copperplate / Copperplate Gothic Light, sans-serif</option> + <option>‘Lucida Console’, Monaco, monospace</option> + <option>‘Trebuchet MS’, Helvetica, sans-serif</option> + <option>‘Courier New’, Courier, monospace</option> + <option>Arial, Helvetica, sans-serif</option> + </options> + <var>Magento_DesignEditor::buttons:font-picker</var> + </control> + <control name="buttons:color-picker"> + <type>color-picker</type> + <selector><![CDATA[ + .block.add.review .action.submit span, + .step.login.wrapper button.action span, + .cart.summary .block .action span, + .action.checkout span, + .action.subscribe span, + .action.tocart span, + .action.primary.customize span, + .action.primary.tocart span, + .login.container .action.login span, + .login.container .action.create span, + .form.password.forget .action.submit span, + .form.create.account .action.submit span, + .banner.main .banner.action span, + .opc.wrapper .form:not(.login) .actions button.action span + ]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::buttons:color-picker</var> + </control> + </components> + </control> + + <control name="text-links" title="Links" tab="fonts" column="right"> + <type>color-picker</type> + <selector><![CDATA[ + .product.info.main .product.addto.links .action > span, + .products.wrapper.grid .products.list .secondary .action > span, + .filter a + ]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::text-links</var> + </control> + <control name="text-links-hover" title="Links Hover" tab="fonts" column="right"> + <type>color-picker</type> + <selector><![CDATA[ + .product.info.main .product.addto.links .action:hover > span, + .products.wrapper.grid .products.list .secondary .action:hover > span, + .filter a:hover + ]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::text-links-hover</var> + </control> + <!-- + <control name="text-links-active" title="Text Links Active" tab="fonts" column="right"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::text-links-active</var> + </control> + <control name="text-links-product" title="Text Links Product Name" tab="fonts" column="right"> + <type>color-picker</type> + <selector>.menu a:hover</selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::text-links-product</var> + </control> + --> + <control name="small-links" title="Small Links" tab="fonts" column="right"> + <type>color-picker</type> + <selector><![CDATA[ + .minicart .product.options.wrapper .more + ]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::small-links</var> + </control> + <control name="small-links-hover" title="Small Links Hover" tab="fonts" column="right"> + <type>color-picker</type> + <selector><![CDATA[ + .minicart .product.options.wrapper .more:hover + ]]></selector> + <attribute>color</attribute> + <var>Magento_DesignEditor::small-links-hover</var> + </control> +</controls> diff --git a/app/design/frontend/magento_plushe/Magento_Directory/currency.phtml b/app/design/frontend/magento_plushe/Magento_Directory/currency.phtml new file mode 100644 index 00000000000..74171ad140c --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Directory/currency.phtml @@ -0,0 +1,54 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Currency switcher + * + * @see \Magento\Directory\Block\Currency + */ +?> +<?php if ($this->getCurrencyCount() > 1): ?> +<?php $currencies = $this->getCurrencies(); ?> +<?php $currentCurrencyCode = $this->getCurrentCurrencyCode(); ?> +<div class="switcher currency"> + <strong class="label"><span><?php echo __('Currency') ?></span></strong> + <div class="options"> + <strong class="language-<?php echo $this->escapeHtml($this->getCurrentCurrencyCode()) ?>"> + <span><?php echo $this->escapeHtml($currentCurrencyCode) ?> - <?php echo @$this->escapeHtml($currencies[$currentCurrencyCode]) ?></span> + </strong> + <button type="button" data-toggle="dropdown" class="action switch"><span><?php echo __('Change')?></span></button> + <ul data-target="dropdown"> + <?php foreach ($currencies as $_code => $_name): ?> + <?php if($_code != $currentCurrencyCode): ?> + <li class="currency-<?php echo $_code ?>"> + <a href="<?php echo $this->getSwitchCurrencyUrl($_code) ?>"><?php echo $_code ?> - <?php echo $_name ?></a> + </li> + <?php endif; ?> + <?php endforeach; ?> + </ul> + </div> +</div> +<?php endif; ?> diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/TemplateEngine/_files/simple.twig b/app/design/frontend/magento_plushe/Magento_Directory/layout/override/catalog_category_view.xml similarity index 90% rename from dev/tests/integration/testsuite/Magento/Core/Model/TemplateEngine/_files/simple.twig rename to app/design/frontend/magento_plushe/Magento_Directory/layout/override/catalog_category_view.xml index d2c6608ac1f..6c60196129d 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/TemplateEngine/_files/simple.twig +++ b/app/design/frontend/magento_plushe/Magento_Directory/layout/override/catalog_category_view.xml @@ -1,4 +1,5 @@ -{# +<?xml version="1.0"?> +<!-- /** * Magento * @@ -21,5 +22,5 @@ * @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><head><title>{{ simple.title }}</title></head><body></body></html> \ No newline at end of file +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> diff --git a/app/design/frontend/magento_plushe/Magento_Directory/layout/override/catalogsearch_advanced_index.xml b/app/design/frontend/magento_plushe/Magento_Directory/layout/override/catalogsearch_advanced_index.xml new file mode 100644 index 00000000000..6c60196129d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Directory/layout/override/catalogsearch_advanced_index.xml @@ -0,0 +1,26 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> diff --git a/app/design/frontend/magento_plushe/Magento_Directory/layout/override/catalogsearch_advanced_result.xml b/app/design/frontend/magento_plushe/Magento_Directory/layout/override/catalogsearch_advanced_result.xml new file mode 100644 index 00000000000..6c60196129d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Directory/layout/override/catalogsearch_advanced_result.xml @@ -0,0 +1,26 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> diff --git a/app/design/frontend/magento_plushe/Magento_Directory/layout/override/catalogsearch_result_index.xml b/app/design/frontend/magento_plushe/Magento_Directory/layout/override/catalogsearch_result_index.xml new file mode 100644 index 00000000000..6c60196129d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Directory/layout/override/catalogsearch_result_index.xml @@ -0,0 +1,26 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> diff --git a/app/design/frontend/magento_plushe/Magento_Directory/layout/override/default.xml b/app/design/frontend/magento_plushe/Magento_Directory/layout/override/default.xml new file mode 100644 index 00000000000..7eae7a3f7e9 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Directory/layout/override/default.xml @@ -0,0 +1,33 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceContainer name="header.panel"> + <block class="Magento\Directory\Block\Currency" name="currency" before="store_language" template="currency.phtml"/> + </referenceContainer> + <referenceBlock name="head"> + <block class="Magento\Core\Block\Template" name="optional_zip_countries" as="optional_zip_countries" template="Magento_Directory::js/optional_zip_countries.phtml"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Downloadable/catalog/product/links.phtml b/app/design/frontend/magento_plushe/Magento_Downloadable/catalog/product/links.phtml new file mode 100644 index 00000000000..d494ef4bb92 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Downloadable/catalog/product/links.phtml @@ -0,0 +1,68 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php /* @var $this \Magento\Downloadable\Block\Catalog\Product\Links */ ?> +<?php $_linksPurchasedSeparately = $this->getLinksPurchasedSeparately(); ?> +<?php if ($this->getProduct()->isSaleable() && $this->hasLinks()):?> + <?php $_links = $this->getLinks(); ?> + <?php $_isRequired = $this->getLinkSelectionRequired(); ?> + <div class="field downloads<?php if ($_isRequired) echo ' required' ?>"> + <label class="label"><span><?php echo $this->getLinksTitle() ?></span></label> + <div class="control" id="downloadable-links-list"> + <?php foreach ($_links as $_link): ?> + <div class="field choice"> + <?php if ($_linksPurchasedSeparately): ?> + <input type="checkbox" <?php if ($_isRequired): ?>data-validate="{'validate-one-checkbox-required-by-name':'downloadable-links-list'}" <?php endif; ?> + name="links[]" id="links_<?php echo $_link->getId() ?>" + value="<?php echo $_link->getId(); ?>" <?php echo $this->getLinkCheckedValue($_link); ?> /> + <?php endif; ?> + <label class="label" for="links_<?php echo $_link->getId() ?>"> + <span><?php echo $this->escapeHtml($_link->getTitle()); ?></span> + <?php if ($_link->getSampleFile() || $_link->getSampleUrl()): ?> + <a class="sample" href="<?php echo $this->getLinkSamlpeUrl($_link) ?>" <?php echo $this->getIsOpenInNewWindow() ? 'target="_blank"' : ''; ?>><?php echo __('sample') ?></a> + <?php endif; ?> + <?php if ($_linksPurchasedSeparately): ?> + <?php echo $this->getFormattedLinkPrice($_link); ?> + <?php endif; ?> + </label> + </div> + <?php endforeach; ?> + </div> + <?php if ($_isRequired): ?> + <span id="links-advice-container"></span> + <?php endif;?> + </div> + <script type="text/javascript"> + (function ($) { + head.js("<?php echo $this->getViewFileUrl('Magento_Downloadable::downloadable.js') ?>", function () { + $('#downloadable-links-list').downloadable({ + linkElement: 'input:checkbox', + config: <?php echo $this->getJsonConfig() ?> + }); + }); + })(jQuery); +</script> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Downloadable/catalog/product/samples.phtml b/app/design/frontend/magento_plushe/Magento_Downloadable/catalog/product/samples.phtml new file mode 100644 index 00000000000..a130635232b --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Downloadable/catalog/product/samples.phtml @@ -0,0 +1,44 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ + +/** + * Downloadable product links + * + * @see \Magento\Downloadable\Block\Catalog\Product\Samples + */ +?> + +<?php if ($this->hasSamples()): ?> + <dl class="downloadable samples"> + <dt><?php echo $this->getSamplesTitle() ?></dt> + <?php $_samples = $this->getSamples() ?> + <?php foreach ($_samples as $_sample): ?> + <dd> + <a href="<?php echo $this->getSampleUrl($_sample) ?>" <?php echo $this->getIsOpenInNewWindow()?'onclick="this.target=\'_blank\'"':''; ?>><?php echo $this->escapeHtml($_sample->getTitle()) ?></a> + </dd> + <?php endforeach; ?> + </dl> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Downloadable/catalog/product/type.phtml b/app/design/frontend/magento_plushe/Magento_Downloadable/catalog/product/type.phtml new file mode 100644 index 00000000000..36f5df0a2cf --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Downloadable/catalog/product/type.phtml @@ -0,0 +1,41 @@ +<?php +/** + * 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 design + * @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) + */ + +/** + * Downloadable product type + * + * @see \Magento\Downloadable\Block\Catalog\Product\View\Type + */ +?> +<?php $_product = $this->getProduct() ?> + +<?php if($_product->getIsSalable()): ?> + <p class="stock available" title="<?php echo __('Availability') ?>"><span><?php echo __('In stock') ?></span></p> +<?php else: ?> + <p class="stock unavailable" title="<?php echo __('Availability') ?>"><span><?php echo __('Out of stock') ?></span></p> +<?php endif; ?> +<?php echo $this->getChildHtml('product_type_data_extra') ?> +<?php echo $this->getPriceHtml($_product) ?> +<?php echo $this->getChildHtml('samples') ?> diff --git a/app/design/frontend/magento_plushe/Magento_Downloadable/checkout/cart/item/default.phtml b/app/design/frontend/magento_plushe/Magento_Downloadable/checkout/cart/item/default.phtml new file mode 100644 index 00000000000..3e5638117de --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Downloadable/checkout/cart/item/default.phtml @@ -0,0 +1,305 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +$_item = $this->getItem(); +$isVisibleProduct = $_item->getProduct()->isVisibleInSiteVisibility(); +$canApplyMsrp = $this->helper('Magento\Catalog\Helper\Data')->canApplyMsrp($_item->getProduct(), \Magento\Catalog\Model\Product\Attribute\Source\Msrp\Type::TYPE_BEFORE_ORDER_CONFIRM); +?> +<?php echo $this->getChildHtml('item_extra') ?> +<tbody class="cart item"> +<tr class="item info"> + <td class="col item"> + <?php if ($this->hasProductUrl()):?><a href="<?php echo $this->getProductUrl() ?>" title="<?php echo $this->escapeHtml($this->getProductName()) ?>" class="product photo"><?php endif;?> + <?php echo $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image')->init($_item->getProduct(), 'cart_page_product_thumbnail')->toHtml(); ?> + <?php if ($this->hasProductUrl()):?></a><?php endif;?> + <div class="product details"> + <strong class="product name"> + <?php if ($this->hasProductUrl()):?> + <a href="<?php echo $this->getProductUrl() ?>"><?php echo $this->escapeHtml($this->getProductName()) ?></a> + <?php else: ?> + <?php echo $this->escapeHtml($this->getProductName()) ?> + <?php endif; ?> + </strong> + <?php if ($_options = $this->getOptionList()):?> + <dl class="cart item options"> + <?php foreach ($_options as $_option) : ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>><?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <div class="truncated_full_value"> + <dl class="item-options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + </div> + <?php endif; ?> + </dd> + <?php endforeach; ?> + </dl> + <?php endif;?> + <!-- downloadable --> + <?php if ($links = $this->getLinks()): ?> + <dl class="cart item options"> + <dt><?php echo $this->getLinksTitle() ?></dt> + <?php foreach ($links as $link): ?> + <dd><?php echo $this->escapeHtml($link->getTitle()) ?></dd> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <?php echo $this->getChildHtml('item_extra'); ?> + <!-- EOF downloadable --> + <?php if ($messages = $this->getMessages()): ?> + <?php foreach ($messages as $message): ?> + <p class="cart item message <?php echo $message['type'] ?>">* <?php echo $this->escapeHtml($message['text']) ?></p> + <?php endforeach; ?> + <?php endif; ?> + <?php $addInfoBlock = $this->getProductAdditionalInformationBlock(); ?> + <?php if ($addInfoBlock): ?> + <?php echo $addInfoBlock->setItem($_item)->toHtml() ?> + <?php endif;?> + </div> + </td> + + <?php if ($canApplyMsrp): ?> + <td class="col msrp a-right"<?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> colspan="2"<?php endif; ?>> + <span class="cart-price"> + <span class="cart-msrp-unit"><?php echo __('See price before order confirmation.'); ?></span> + <?php $helpLinkId = 'cart-msrp-help-' . $_item->getId(); ?> + <a id="<?php echo $helpLinkId ?>" href="#" class="map-help-link"><?php echo __("What's this?"); ?></a> + <script type="text/javascript"> + Catalog.Map.addHelpLink($('<?php echo $helpLinkId ?>'), "<?php echo __("What's this?") ?>"); + </script> + </span> + </td> + <?php else: ?> + + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceExclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="col price excl tax"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()) ?> + <?php endif; ?> + + </span> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="eunit-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="weee"><?php echo __('Total'); ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceInclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="col price incl tax"> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($_item); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl-$_item->getWeeeTaxDisposition()) ?> + <?php endif; ?> + + </span> + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="unit-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="weee"><?php echo __('Total incl. tax'); ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> + <?php endif; ?> + <td class="col qty"> + <div class="control qty"> + <input name="cart[<?php echo $_item->getId() ?>][qty]" value="<?php echo $this->getQty() ?>" type="text" size="4" title="<?php echo __('Qty') ?>" class="input-text qty" maxlength="12" data-validate="{required:true,'validate-greater-than-zero':true}"/> + </div> + </td> + <?php if (($this->helper('Magento\Tax\Helper\Data')->displayCartPriceExclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()) && !$_item->getNoSubtotal()): ?> + <td class="col subtotal excl tax"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($canApplyMsrp): ?> + <span class="cart-msrp-subtotal">--</span> + <?php else: ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()) ?> + <?php endif; ?> + <?php endif; ?> + + </span> + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="esubtotal-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="weee"><?php echo __('Total'); ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> + <?php if (($this->helper('Magento\Tax\Helper\Data')->displayCartPriceInclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()) && !$_item->getNoSubtotal()): ?> + <td class="col subtotal incl tax"> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($_item); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($canApplyMsrp): ?> + <span class="cart-msrp-subtotal">--</span> + <?php else: ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedRowAmount()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl-$_item->getWeeeTaxRowDisposition()) ?> + <?php endif; ?> + <?php endif; ?> + + </span> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="subtotal-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="weee"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span> + <?php endforeach; ?> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="weee"><?php echo __('Total incl. tax'); ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedRowAmount()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> +</tr> +<tr class="item actions"> + <td colspan="100"> + <div class="actions"> + + <?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllowInCart()) : ?> + <?php if ($isVisibleProduct): ?> + <a href="<?php echo $this->helper('Magento\Wishlist\Helper\Data')->getMoveFromCartUrl($_item->getId()); ?>" class="use-ajax action towishlist"> + <span><?php echo __('Move to Wishlist'); ?></span> + </a> + <?php endif ?> + <?php endif ?> + + <?php if ($isVisibleProduct): ?> + <a class="action edit" href="<?php echo $this->getConfigureUrl() ?>" title="<?php echo __('Edit item parameters') ?>"><span><?php echo __('Edit') ?></span></a> + <?php endif ?> + + <a href="<?php echo $this->getDeleteUrl()?>" title="<?php echo __('Remove item')?>" class="action delete"><span><?php echo __('Remove item')?></span></a> + </div> + </td> +</tr> +</tbody> diff --git a/app/design/frontend/magento_plushe/Magento_Downloadable/checkout/multishipping/item/default.phtml b/app/design/frontend/magento_plushe/Magento_Downloadable/checkout/multishipping/item/default.phtml new file mode 100644 index 00000000000..ebf63dc44e1 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Downloadable/checkout/multishipping/item/default.phtml @@ -0,0 +1,57 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="product details"> + <strong class="product name"><a href="<?php echo $this->getProductUrl() ?>"><?php echo $this->escapeHtml($this->getProductName()) ?></a></strong> + <?php if ($_options = $this->getOptionList()): ?> + <dl class="item options"> + <?php foreach ($_options as $_option) : ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>><?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <dl class="item options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + <?php endif; ?> + </dd> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <!-- downloadable --> + <?php if ($links = $this->getLinks()): ?> + <dl class="item options"> + <dt><?php echo $this->getLinksTitle() ?></dt> + <?php foreach ($links as $link): ?> + <dd><?php echo $this->escapeHtml($link->getTitle()); ?></dd> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <!-- EOF downloadable --> + <?php if ($addtInfoBlock = $this->getProductAdditionalInformationBlock()): ?> + <?php echo $addtInfoBlock->setItem($this->getItem())->toHtml() ?> + <?php endif; ?> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Downloadable/checkout/onepage/review/item.phtml b/app/design/frontend/magento_plushe/Magento_Downloadable/checkout/onepage/review/item.phtml new file mode 100644 index 00000000000..dbd0f629fc2 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Downloadable/checkout/onepage/review/item.phtml @@ -0,0 +1,247 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_item = $this->getItem()?> +<tr> + <td class="col item"><strong class="product name"><?php echo $this->escapeHtml($this->getProductName()) ?></strong> + <?php if ($_options = $this->getOptionList()):?> + <dl class="review item options"> + <?php foreach ($_options as $_option) : ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>><?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <div class="truncated_full_value"> + <dl class="item-options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + </div> + <?php endif; ?> + </dd> + <?php endforeach; ?> + </dl> + <?php endif;?> + <?php if ($links = $this->getLinks()): ?> + <dl class="review item options"> + <dt><?php echo $this->getLinksTitle() ?></dt> + <?php foreach ($links as $link): ?> + <dd><?php echo $this->escapeHtml($link->getTitle()) ?></dd> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <!-- EOF downloadable --> + <?php if ($addtInfoBlock = $this->getProductAdditionalInformationBlock()):?> + <?php echo $addtInfoBlock->setItem($_item)->toHtml() ?> + <?php endif;?> + </td> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceExclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="col price excl tax"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()) ?> + <?php endif; ?> + + </span> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="eunit-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></small></span><br /> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceInclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="col price incl tax"> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($_item); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl-$_item->getWeeeTaxDisposition()) ?> + <?php endif; ?> + + </span> + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="unit-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></small></span><br /> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> + <td class="col qty"><span class="qty"><?php echo $_item->getQty() ?></span></td> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceExclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="col subtotal excl tax"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()) ?> + <?php endif; ?> + + </span> + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="esubtotal-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></small></span><br /> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceInclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="col subtotal incl tax"> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($_item); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedRowAmount()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl-$_item->getWeeeTaxRowDisposition()) ?> + <?php endif; ?> + + </span> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="subtotal-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></small></span><br /> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedRowAmount()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> +</tr> diff --git a/app/design/frontend/magento_plushe/Magento_Downloadable/checkout/onepage/review/item_down.phtml b/app/design/frontend/magento_plushe/Magento_Downloadable/checkout/onepage/review/item_down.phtml new file mode 100644 index 00000000000..cdbdcffdae0 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Downloadable/checkout/onepage/review/item_down.phtml @@ -0,0 +1,246 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php $_item = $this->getItem()?> +<tr> + <td><h3 class="product-name"><?php echo $this->escapeHtml($this->getProductName()) ?></h3> + <!-- item custom options --> + <?php if ($_options = $this->getOptionList()):?> + <dl class="item-options"> + <?php foreach ($_options as $_option) : ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>><?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <div class="truncated_full_value"> + <dl class="item-options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + </div> + <?php endif; ?> + </dd> + <?php endforeach; ?> + </dl> + <?php endif;?> + <?php if ($links = $this->getLinks()): ?> + <dl class="item-options"> + <dt><?php echo $this->getLinksTitle() ?></dt> + <?php foreach ($links as $link): ?> + <dd><?php echo $this->escapeHtml($link->getTitle()) ?></dd> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <!-- EOF downloadable --> + </td> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceExclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="a-right"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <div class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()) ?> + <?php endif; ?> + + </div> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="eunit-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></small></span><br /> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceInclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($_item); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <div class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl-$_item->getWeeeTaxDisposition()) ?> + <?php endif; ?> + + </div> + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="unit-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></small></span><br /> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['amount_incl_tax'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> + <td class="a-center"><?php echo $_item->getQty() ?></td> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceExclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td class="a-right"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <div class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()) ?> + <?php endif; ?> + + </div> + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="esubtotal-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></small></span><br /> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartPriceInclTax() || $this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <td> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($_item); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <?php else: ?> + <div class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedRowAmount()); ?> + <?php else: ?> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl-$_item->getWeeeTaxRowDisposition()) ?> + <?php endif; ?> + + </div> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item)): ?> + + <div class="cart-tax-info" id="subtotal-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></small></span><br /> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($_item) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span><br /> + <?php endforeach; ?> + </small> + <?php endif; ?> + </div> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?> + <div class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $_item->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_incl+$_item->getWeeeTaxAppliedRowAmount()); ?></span> + </div> + <?php endif; ?> + <?php endif; ?> + </td> + <?php endif; ?> +</tr> diff --git a/app/design/frontend/magento_plushe/Magento_Downloadable/customer/products/list.phtml b/app/design/frontend/magento_plushe/Magento_Downloadable/customer/products/list.phtml new file mode 100644 index 00000000000..7f2054f7409 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Downloadable/customer/products/list.phtml @@ -0,0 +1,75 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * @see \Magento\Downloadable\Block\Customer\Products\ListProducts + */ +?> +<?php $_items = $this->getItems(); ?> +<div class="downloadable products toolbar"> + <?php echo $this->getChildHtml('pager'); ?> +</div> +<?php if(count($_items)): ?> + <table id="my-downloadable-products-table" class="data table downloadable products"> + <thead> + <tr> + <th class="col id"><?php echo __('Order #') ?></th> + <th class="col date"><?php echo __('Date') ?></th> + <th class="col title"><?php echo __('Title') ?></th> + <th class="col status"><?php echo __('Status') ?></th> + <th class="col remaining"><?php echo __('Remaining Downloads') ?></th> + </tr> + </thead> + <tbody> + <?php foreach ($_items as $_item): ?> + <tr> + <td class="col id"> + <a href="<?php echo $this->getOrderViewUrl($_item->getPurchased()->getOrderId()) ?>" title="<?php echo __('View Order') ?>"> + <?php echo $_item->getPurchased()->getOrderIncrementId() ?> + </a> + </td> + <td class="col date"><?php echo $this->formatDate($_item->getPurchased()->getCreatedAt()) ?></td> + <td class="col title"> + <?php echo $this->escapeHtml($_item->getPurchased()->getProductName()) ?> - <a href="<?php echo $this->getDownloadUrl($_item) ?>" title="<?php echo __('Start Download') ?>" <?php echo $this->getIsOpenInNewWindow()?'onclick="this.target=\'_blank\'"':''; ?>><?php echo $this->escapeHtml($_item->getLinkTitle()) ?></a> + </td> + <td class="col status"><?php echo __(ucfirst($_item->getStatus())) ?></td> + <td class="col remaining"><?php echo $this->getRemainingDownloads($_item) ?></td> + </tr> + <?php endforeach; ?> + </tbody> + </table> +<?php else: ?> + <p class="empty"><?php echo __('You have not purchased any downloadable products yet.'); ?></p> +<?php endif; ?> +<div class="downloadable products toolbar"> + <?php echo $this->getChildHtml('pager'); ?> +</div> + +<div class="actions"> + <div class="secondary"> + <a href="<?php echo $this->escapeUrl($this->getBackUrl()) ?>" class="action back"><span><?php echo __('Back') ?></span></a> + </div> +</div> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Downloadable/layout/override/catalog_product_view_type_downloadable.xml b/app/design/frontend/magento_plushe/Magento_Downloadable/layout/override/catalog_product_view_type_downloadable.xml new file mode 100644 index 00000000000..d1f574903d6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Downloadable/layout/override/catalog_product_view_type_downloadable.xml @@ -0,0 +1,36 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Catalog Product View (Downloadable)" type="page" parent="catalog_product_view"> + <referenceContainer name="product.info.type"> + <block class="Magento\Downloadable\Block\Catalog\Product\View\Type" name="product.info.downloadable" as="product_type_data" template="catalog/product/type.phtml"> + <block class="Magento\Downloadable\Block\Catalog\Product\Samples" name="product.info.downloadable.samples" as="samples" template="catalog/product/samples.phtml"/> + <block class="Magento\CatalogInventory\Block\Stockqty\DefaultStockqty" name="product.info.downloadable.extra" as="product_type_data_extra" template="stockqty/default.phtml"/> + </block> + </referenceContainer> + <referenceBlock name="product.info.options.wrapper"> + <block class="Magento\Downloadable\Block\Catalog\Product\Links" name="product.info.downloadable.options" as="type_downloadable_options" before="-" template="catalog/product/links.phtml"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Downloadable/layout/override/checkout_cart_index.xml b/app/design/frontend/magento_plushe/Magento_Downloadable/layout/override/checkout_cart_index.xml new file mode 100644 index 00000000000..b8f5e192134 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Downloadable/layout/override/checkout_cart_index.xml @@ -0,0 +1,30 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="checkout.cart.form"> + <block class="Magento\Downloadable\Block\Checkout\Cart\Item\Renderer" as="downloadable" template="checkout/cart/item/default.phtml"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Downloadable/sales/order/creditmemo/items/renderer/downloadable.phtml b/app/design/frontend/magento_plushe/Magento_Downloadable/sales/order/creditmemo/items/renderer/downloadable.phtml new file mode 100644 index 00000000000..65f32a6e195 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Downloadable/sales/order/creditmemo/items/renderer/downloadable.phtml @@ -0,0 +1,315 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php $_item = $this->getItem() ?> +<?php $_order = $this->getItem()->getOrderItem()->getOrder() ?> +<tr class="border" id="order-item-row-<?php echo $_item->getId() ?>"> + <td class="col name"> + <strong class="product name"><?php echo $this->escapeHtml($_item->getName()) ?></strong> + <?php if($_options = $this->getItemOptions()): ?> + <dl class="item options"> + <?php foreach ($_options as $_option) : ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <?php if (!$this->getPrintStatus()): ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>><?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <div class="truncated_full_value"> + <dl class="item options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + </div> + <?php endif; ?> + </dd> + <?php else: ?> + <dd><?php echo $this->escapeHtml( (isset($_option['print_value']) ? $_option['print_value'] : $_option['value']) ) ?></dd> + <?php endif; ?> + <?php endforeach; ?> + </dl> + <?php endif; ?> + + <!-- downloadable --> + <?php if ($links = $this->getLinks()): ?> + <dl class="item options"> + <dt><?php echo $this->getLinksTitle() ?></dt> + <?php foreach ($links->getPurchasedItems() as $link): ?> + <dd><?php echo $this->escapeHtml($link->getLinkTitle()); ?></dd> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <!-- EOF downloadable --> + + <?php $addInfoBlock = $this->getProductAdditionalInformationBlock(); ?> + <?php if ($addInfoBlock) :?> + <?php echo $addInfoBlock->setItem($_item->getOrderItem())->toHtml(); ?> + <?php endif; ?> + <?php echo $this->escapeHtml($_item->getDescription()) ?> + <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $_item->getOrderItem()) && $_item->getGiftMessageId()): ?> + <a href="#" id="order-item-gift-message-link-<?php echo $_item->getId() ?>" class="gift-message-link" aria-controls="order-item-gift-message-<?php echo $_item->getId()?>" data-item-id="<?php echo $_item->getId()?>"><?php echo __('Gift Message') ?></a> + <?php endif; ?> + </td> + <td class="col sku"><?php echo $this->escapeHtml($this->helper('Magento\Core\Helper\String')->splitInjection($this->getSku())) ?></td> + <td class="col price"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()) ?> + <?php endif; ?> + + </span> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxDisposition()) ?> + <?php endif; ?> + + </span> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="unit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <?php endif; ?> + </td> + <td class="col qty"><?php echo $_item->getQty()*1 ?></td> + <td class="col subtotal"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()) ?> + <?php endif; ?> + + </span> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedRowAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxRowDisposition()) ?> + <?php endif; ?> + + </span> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedRowAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + + + + </span> + <?php endif; ?> + </td> + <td class="col discount"><?php echo $_order->formatPrice(-$_item->getDiscountAmount()) ?></td> + <td class="cot total"> + <?php echo $_order->formatPrice($_item->getRowTotal()-$_item->getDiscountAmount()+$_item->getTaxAmount()+$_item->getWeeeTaxAppliedRowAmount()) ?> + </td> +</tr> diff --git a/app/design/frontend/magento_plushe/Magento_Downloadable/sales/order/invoice/items/renderer/downloadable.phtml b/app/design/frontend/magento_plushe/Magento_Downloadable/sales/order/invoice/items/renderer/downloadable.phtml new file mode 100644 index 00000000000..cc6e3bad165 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Downloadable/sales/order/invoice/items/renderer/downloadable.phtml @@ -0,0 +1,305 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_item = $this->getItem() ?> +<?php $_order = $this->getItem()->getOrderItem()->getOrder() ?> +<tr id="order-item-row-<?php echo $_item->getId() ?>"> + <td class="col name"> + <strong class="product name"><?php echo $this->escapeHtml($_item->getName()) ?></strong> + <?php if($_options = $this->getItemOptions()): ?> + <dl class="item options"> + <?php foreach ($_options as $_option) : ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <?php if (!$this->getPrintStatus()): ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>> + <?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <div class="truncated_full_value"> + <dl class="item options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + </div> + <?php endif; ?> + </dd> + <?php else: ?> + <dd><?php echo $this->escapeHtml( (isset($_option['print_value']) ? $_option['print_value'] : $_option['value']) ) ?></dd> + <?php endif; ?> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <!-- downloadable --> + <?php if ($links = $this->getLinks()): ?> + <dl class="item options"> + <dt><?php echo $this->getLinksTitle() ?></dt> + <?php foreach ($links->getPurchasedItems() as $link): ?> + <dd><?php echo $this->escapeHtml($link->getLinkTitle()); ?></dd> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <!-- EOF downloadable --> + <?php $addInfoBlock = $this->getProductAdditionalInformationBlock(); ?> + <?php if ($addInfoBlock) :?> + <?php echo $addInfoBlock->setItem($_item->getOrderItem())->toHtml(); ?> + <?php endif; ?> + <?php echo $this->escapeHtml($_item->getDescription()) ?> + <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $_item->getOrderItem()) && $_item->getGiftMessageId()): ?> + <a href="#" id="order-item-gift-message-link-<?php echo $_item->getId() ?>" class="gift-message-link" aria-controls="order-item-gift-message-<?php echo $_item->getId()?>" data-item-id="<?php echo $_item->getId()?>"><?php echo __('Gift Message') ?></a> + <?php endif; ?> + </td> + <td class="col sku"><?php echo $this->escapeHtml($this->helper('Magento\Core\Helper\String')->splitInjection($this->getSku())) ?></td> + <td class="col price"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()) ?> + <?php endif; ?> + + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxDisposition()) ?> + <?php endif; ?> + + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="unit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <?php endif; ?> + </td> + <td class="col qty"> + <span class="qty summary"><?php echo $_item->getQty()*1 ?></span> + </td> + <td class="col subtotal"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()) ?> + <?php endif; ?> + + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedRowAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxRowDisposition()) ?> + <?php endif; ?> + + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedRowAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + + </span> + <?php endif; ?> + </td> +</tr> diff --git a/app/design/frontend/magento_plushe/Magento_Downloadable/sales/order/items/renderer/downloadable.phtml b/app/design/frontend/magento_plushe/Magento_Downloadable/sales/order/items/renderer/downloadable.phtml new file mode 100644 index 00000000000..5b73ec009c1 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Downloadable/sales/order/items/renderer/downloadable.phtml @@ -0,0 +1,327 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_item = $this->getItem() ?> +<tr id="order-item-row-<?php echo $_item->getId() ?>"> + <td class="col name"> + <strong class="product name"><?php echo $this->escapeHtml($_item->getName()) ?></strong> + <?php if($_options = $this->getItemOptions()): ?> + <dl class="item options"> + <?php foreach ($_options as $_option) : ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <?php if (!$this->getPrintStatus()): ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>> + <?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <div class="truncated_full_value"> + <dl class="item options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + </div> + <?php endif; ?> + </dd> + <?php else: ?> + <dd> + <?php echo nl2br($this->escapeHtml( (isset($_option['print_value']) ? $_option['print_value'] : $_option['value']) )) ?> + </dd> + <?php endif; ?> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <!-- downloadable --> + <?php if ($links = $this->getLinks()): ?> + <dl class="item-options"> + <dt><?php echo $this->getLinksTitle() ?></dt> + <?php foreach ($links->getPurchasedItems() as $link): ?> + <dd><?php echo $this->escapeHtml($link->getLinkTitle()); ?></dd> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <!-- EOF downloadable --> + <?php $addtInfoBlock = $this->getProductAdditionalInformationBlock(); ?> + <?php if ($addtInfoBlock) :?> + <?php echo $addtInfoBlock->setItem($_item)->toHtml(); ?> + <?php endif; ?> + <?php echo $this->escapeHtml($_item->getDescription()) ?> + <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $_item) && $_item->getGiftMessageId()): ?> + <a href="#" + id="order-item-gift-message-link-<?php echo $_item->getId() ?>" + class="action show" + aria-controls="order-item-gift-message-<?php echo $_item->getId()?>" + data-item-id="<?php echo $_item->getId()?>"> + <?php echo __('Gift Message') ?> + </a> + <?php endif; ?> + </td> + <td class="col sku"><?php echo $this->escapeHtml($this->helper('Magento\Core\Helper\String')->splitInjection($this->getSku())) ?></td> + <td class="col price"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()) ?> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxDisposition()) ?> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="unit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <?php endif; ?> + </td> + <td class="col qty"> + <span class="qty summary"> + <?php if ($this->getItem()->getQtyOrdered() > 0): ?> + <?php echo __('Ordered'); ?>: <strong><?php echo $this->getItem()->getQtyOrdered()*1 ?></strong><br /> + <?php endif; ?> + <?php if ($this->getItem()->getQtyShipped() > 0): ?> + <?php echo __('Shipped'); ?>: <strong><?php echo $this->getItem()->getQtyShipped()*1 ?></strong><br /> + <?php endif; ?> + <?php if ($this->getItem()->getQtyCanceled() > 0): ?> + <?php echo __('Canceled'); ?>: <strong><?php echo $this->getItem()->getQtyCanceled()*1 ?></strong><br /> + <?php endif; ?> + <?php if ($this->getItem()->getQtyRefunded() > 0): ?> + <?php echo __('Refunded'); ?>: <strong><?php echo $this->getItem()->getQtyRefunded()*1 ?></strong><br /> + <?php endif; ?> + </span> + </td> + <td class="col subtotal"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()) ?> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedRowAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxRowDisposition()) ?> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedRowAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + + </span> + <?php endif; ?> + </td> + <!-- + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <th class="a-right"><?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()) ?></th> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <th class="a-right"><?php echo $this->getOrder()->formatPrice($this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($this->getItem())); ?></th> + <?php endif; ?> + --> +</tr> diff --git a/app/design/frontend/magento_plushe/Magento_GiftMessage/inline.phtml b/app/design/frontend/magento_plushe/Magento_GiftMessage/inline.phtml new file mode 100644 index 00000000000..dfb98bdc890 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_GiftMessage/inline.phtml @@ -0,0 +1,301 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_giftMessage = false; ?> +<?php if(!$this->getDontDisplayContainer()): ?> +<script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('js/extra-options.js') ?>", function() { + jQuery('#checkoutSteps').extraOptions({additionalUrl: '<?php echo $this->getAdditionalUrl(); ?>'}); + }); +</script> +<?php endif ?> + +<?php switch ($this->getType()): ?> +<?php case 'onepage_checkout': ?> + <fieldset class="fieldset gift message"> + <legend class="legend"><span><?php echo __('Do you have any gift items in your order?'); ?></span></legend><br> + + <div class="field choice" id="add-gift-options-<?php echo $this->getEntity()->getId() ?>"> + <input type="checkbox" name="allow_gift_options" id="allow_gift_options" value="1" data-selector='{"id":"#allow-gift-options-container"}'<?php if($this->getItemsHasMesssages() || $this->getEntityHasMessage()): ?> checked="checked"<?php endif; ?> class="checkbox" /> + <label for="allow_gift_options" class="label"><span><?php echo __('Add gift options') ?></span></label> + </div> + + <dl class="block items" id="allow-gift-options-container"> + <dt id="add-gift-options-for-order-<?php echo $this->getEntity()->getId() ?>" class="order"> + <div class="title"><span><?php echo __('Gift Options for the Entire Order'); ?></span></div> + <div class="field choice"> + <input type="checkbox" name="allow_gift_messages_for_order" id="allow_gift_options_for_order" value="1" data-selector='{"id":"#allow-gift-options-for-order-container"}'<?php if($this->getEntityHasMessage()): ?> checked="checked"<?php endif; ?> class="checkbox" /> + <label for="allow_gift_options_for_order" class="label"><span><?php echo __('Add gift options for the Entire Order') ?></span></label> + </div> + </dt> + + <dd id="allow-gift-options-for-order-container" class="options order"> + <div class="options-order-container" id="options-order-container-<?php echo $this->getEntity()->getId() ?>"></div> + <input type="hidden" name="giftoptions[<?php echo $this->getEntity()->getId() ?>][type]" value="quote" /> + <?php if ($this->isMessagesAvailable()): ?> + <a href="#" class="activate message" data-mage-init='{toggleAdvanced: {selectorsToggleClass:"no-display", toggleContainers:"#allow-gift-messages-for-order-container"}}'><?php echo __('Gift Message') ?></a> + <div id="allow-gift-messages-for-order-container" class="no-display"> + <fieldset class="fieldset"> + <input type="hidden" name="giftmessage[<?php echo $this->getEntity()->getId() ?>][type]" value="quote" /> + <p><?php echo __('If you don\'t want to leave a gift message for the entire order, leave this box blank.') ?></p> + <div class="field from"> + <label for="gift-message-whole-from" class="label"><span><?php echo __('From') ?></span></label> + <div class="control"> + <input type="text" name="giftmessage[<?php echo $this->getEntity()->getId() ?>][from]" id="gift-message-whole-from" title="<?php echo __('From') ?>" value="<?php echo $this->getEscaped($this->getMessage()->getSender(), $this->getDefaultFrom()) ?>" class="input-text"> + </div> + </div> + <div class="field to"> + <label for="gift-message-whole-to" class="label"><span><?php echo __('To') ?></span></label> + <div class="control"> + <input type="text" name="giftmessage[<?php echo $this->getEntity()->getId() ?>][to]" id="gift-message-whole-to" title="<?php echo __('To') ?>" value="<?php echo $this->getEscaped($this->getMessage()->getRecipient(), $this->getDefaultTo()) ?>" class="input-text"> + </div> + </div> + <div class="field text"> + <label for="gift-message-whole-message" class="label"><span><?php echo __('Message') ?></span></label> + <div class="control"> + <textarea id="gift-message-whole-message" class="input-text" name="giftmessage[<?php echo $this->getEntity()->getId() ?>][message]" title="<?php echo __('Message') ?>" rows="5" cols="10"><?php echo $this->getEscaped($this->getMessage()->getMessage()) ?></textarea> + </div> + </div> + </fieldset> + <script type="text/javascript"> + jQuery('#add-gift-options-<?php echo $this->getEntity()->getId() ?>') + .add('#add-gift-options-for-order-<?php echo $this->getEntity()->getId() ?>').removeClass('no-display'); + </script> + </div> + <?php endif ?> + </dd> + <?php if ($this->isItemsAvailable()): ?> + <dt id="add-gift-options-for-items-<?php echo $this->getEntity()->getId() ?>" class="individual"> + <div class="title"><span><?php echo __('Gift Options for Individual Items'); ?></span></div> + <div class="field choice"> + <input type="checkbox" name="allow_gift_options_for_items" id="allow_gift_options_for_items" value="1" data-selector='{"id":"#allow-gift-options-for-items-container"}'<?php if($this->getItemsHasMesssages()): ?> checked="checked"<?php endif; ?> class="checkbox" /> + <label for="allow_gift_options_for_items" class="label"><span><?php echo __('Add gift options for Individual Items') ?></span></label> + </div> + </dt> + + <dd id="allow-gift-options-for-items-container" class="options individual"> + <ol> + <?php foreach($this->getItems() as $_index=>$_item): ?> + <?php $_product=$_item->getProduct() ?> + <li class="item"> + <input type="hidden" name="giftoptions[<?php echo $_item->getId() ?>][type]" value="quote_item" /> + <p class="number"><?php echo __('Item %1 of %2', $_index+1, $this->countItems()) ?></p> + <div class="product"> + <div class="img photo container"> + <img src="<?php echo $this->getThumbnailUrl($_product); ?>" width="<?php echo $this->getThumbnailSize()?>" height="<?php echo $this->getThumbnailSize()?>" alt="<?php echo $this->escapeHtml($_product->getName()) ?>"title="<?php echo $this->escapeHtml($_product->getName()) ?>" /> + </div> + <strong class="product name"><?php echo $this->escapeHtml($_product->getName()) ?></strong> + </div> + <div class="item options"> + <div class="options-items-container" id="options-items-container-<?php echo $this->getEntity()->getId() ?>-<?php echo $_item->getId() ?>"></div> + <?php if ($this->isItemMessagesAvailable($_item)): ?> + <a href="#" class="activate message" data-mage-init='{toggleAdvanced: {selectorsToggleClass:"no-display", toggleContainers:"#gift-messages-for-item-container-<?php echo $_item->getId() ?>"}}'><?php echo __('Gift Message') ?></a> + <div id="gift-messages-for-item-container-<?php echo $_item->getId() ?>" class="block message no-display"> + <fieldset class="fieldset"> + <p><?php echo __('You can leave a box blank if you don\'t wish to add a gift message for the item.') ?></p> + <input type="hidden" name="giftmessage[<?php echo $_item->getId() ?>][type]" value="quote_item" > + <div class="field from"> + <label for="gift-message-<?php echo $_item->getId() ?>-from" class="label"><span><?php echo __('From') ?></span></label> + <div class="control"> + <input type="text" name="giftmessage[<?php echo $_item->getId() ?>][from]" id="gift-message-<?php echo $_item->getId() ?>-from" title="<?php echo __('From') ?>" value="<?php echo $this->getEscaped($this->getMessage($_item)->getSender(), $this->getDefaultFrom()) ?>" class="input-text"> + </div> + </div> + <div class="field to"> + <label for="gift-message-<?php echo $_item->getId() ?>-to" class="label"><span><?php echo __('To') ?></span></label> + <div class="control"> + <input type="text" name="giftmessage[<?php echo $_item->getId() ?>][to]" id="gift-message-<?php echo $_item->getId() ?>-to" title="<?php echo __('To') ?>" value="<?php echo $this->getEscaped($this->getMessage($_item)->getRecipient(), $this->getDefaultTo()) ?>" class="input-text"> + </div> + </div> + <div class="field text"> + <label for="gift-message-<?php echo $_item->getId() ?>-message" class="label"><span><?php echo __('Message') ?></span></label> + <div class="control"> + <textarea id="gift-message-<?php echo $_item->getId() ?>-message" class="input-text giftmessage-area" name="giftmessage[<?php echo $_item->getId() ?>][message]" title="<?php echo __('Message') ?>" rows="5" cols="40"><?php echo $this->getEscaped($this->getMessage($_item)->getMessage()) ?></textarea> + </div> + </div> + </fieldset> + </div> + <?php endif; ?> + </div> + </li> + <?php endforeach; ?> + </ol> + </dd> + <script type="text/javascript"> + jQuery('#add-gift-options-<?php echo $this->getEntity()->getId() ?>') + .add('#add-gift-options-for-items-<?php echo $this->getEntity()->getId() ?>').removeClass('no-display'); + </script> + <?php endif; ?> + <dt class="extra-options-container" id="extra-options-container-<?php echo $this->getEntity()->getId() ?>"></dt> + </dl> + </fieldset> + <script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('Magento_GiftMessage::gift-options.js')?>", function() { + jQuery('#allow_gift_options') + .add('#allow_gift_options_for_order') + .add('#allow_gift_options_for_items').giftOptions(); + }); + </script> +<?php break; ?> +<?php case 'multishipping_adress_checkbox': ?> +<?php break; ?> + +<?php case 'multishipping_address': ?> + <fieldset id="add-gift-options-<?php echo $this->getEntity()->getId() ?>" class="fieldset gift message"> + <legend class="legend"><span><?php echo __('Do you have any gift items in your order?'); ?></span></legend><br> + + <div class="field choice" id="add-gift-options-<?php echo $this->getEntity()->getId() ?>"> + <input type="checkbox" name="allow_gift_options_<?php echo $this->getEntity()->getId() ?>" id="allow_gift_options_<?php echo $this->getEntity()->getId() ?>" value="1" data-selector='{"id":"#allow-gift-options-container-<?php echo $this->getEntity()->getId() ?>"}'<?php if($this->getItemsHasMesssages() || $this->getEntityHasMessage()): ?> checked="checked"<?php endif; ?> class="checkbox" /> + <label for="allow_gift_options_<?php echo $this->getEntity()->getId() ?>" class="label"><span><?php echo __('Add gift options') ?></span></label> + </div> + + <dl class="block items" id="allow-gift-options-container-<?php echo $this->getEntity()->getId() ?>"> + <dt id="add-gift-options-for-order-<?php echo $this->getEntity()->getId() ?>" class="order"> + <div class="title"><span><?php echo __('Gift Options for this address.'); ?></span></div> + <div class="field choice"> + <input type="checkbox" name="allow_gift_options_for_order_<?php echo $this->getEntity()->getId() ?>" id="allow_gift_options_for_order_<?php echo $this->getEntity()->getId() ?>" value="1" data-selector='{"id":"#allow-gift-options-for-order-container-<?php echo $this->getEntity()->getId() ?>"}'<?php if($this->getEntityHasMessage()): ?> checked="checked"<?php endif; ?> class="checkbox" /> + <label for="allow_gift_options_for_order_<?php echo $this->getEntity()->getId() ?>" class="label"><span><?php echo __('Add gift options for the Entire Order') ?></span></label> + </div> + </dt> + + <dd id="allow-gift-options-for-order-container-<?php echo $this->getEntity()->getId() ?>" class="options order"> + <div class="options-order-container" id="options-order-container-<?php echo $this->getEntity()->getId() ?>"></div> + <input type="hidden" name="giftoptions[<?php echo $this->getEntity()->getId() ?>][type]" value="quote_address" /> + <?php if ($this->isMessagesAvailable()): ?> + <?php $_giftMessage = true; ?> + <a href="#" class="activate message" data-mage-init='{toggleAdvanced: {selectorsToggleClass:"no-display", toggleContainers:"#gift-messages-for-order-container-<?php echo $this->getEntity()->getId() ?>"}}'><?php echo __('Gift Message') ?></a> + <div id="gift-messages-for-order-container-<?php echo $this->getEntity()->getId() ?>" class="block message no-display"> + <fieldset class="fieldset"> + <p><?php echo __('You can leave this box blank if you do not wish to add a gift message for this address.') ?></p> + <input type="hidden" name="giftmessage[<?php echo $this->getEntity()->getId() ?>][type]" value="quote_address" /> + <div class="field from"> + <label for="gift-message-<?php echo $this->getEntity()->getId() ?>-from" class="label"><span><?php echo __('From') ?></span></label> + <div class="control"> + <input type="text" name="giftmessage[<?php echo $this->getEntity()->getId() ?>][from]" id="gift-message-<?php echo $this->getEntity()->getId() ?>-from" title="<?php echo __('From') ?>" value="<?php echo $this->getEscaped($this->getMessage()->getSender(), $this->getDefaultFrom()) ?>" class="input-text"> + </div> + </div> + <div class="field to"> + <label for="gift-message-<?php echo $this->getEntity()->getId() ?>-to" class="label"><span><?php echo __('To') ?></span></label> + <div class="control"> + <input type="text" name="giftmessage[<?php echo $this->getEntity()->getId() ?>][to]" id="gift-message-<?php echo $this->getEntity()->getId() ?>-to" title="<?php echo __('To') ?>" value="<?php echo $this->getEscaped($this->getMessage()->getRecipient(), $this->getDefaultTo()) ?>" class="input-text"> + </div> + </div> + <div class="field text"> + <label for="gift-message-<?php echo $this->getEntity()->getId() ?>-message" class="label"><span><?php echo __('Message') ?></span></label> + <div class="control"> + <textarea id="gift-message-<?php echo $this->getEntity()->getId() ?>-message" class="input-text" name="giftmessage[<?php echo $this->getEntity()->getId() ?>][message]" title="<?php echo __('Message') ?>" rows="5" cols="40"><?php echo $this->getEscaped($this->getMessage()->getMessage()) ?></textarea> + </div> + </div> + </fieldset> + </div> + <?php endif; ?> + </dd> + + <?php if ($this->isItemsAvailable()): ?> + <dt id="add-gift-options-for-items-<?php echo $this->getEntity()->getId() ?>" class="individual"> + <div class="title"><span><?php echo __('Gift Options for Individual Items'); ?></span></div> + <div class="field choice"> + <input type="checkbox" name="allow_gift_options_for_items_<?php echo $this->getEntity()->getId() ?>" id="allow_gift_options_for_items_<?php echo $this->getEntity()->getId() ?>" value="1" data-selector='{"id":"#allow-gift-options-for-items-container-<?php echo $this->getEntity()->getId() ?>"}'<?php if($this->getItemsHasMesssages()): ?> checked="checked"<?php endif; ?> class="checkbox" /> + <label for="allow_gift_options_for_items_<?php echo $this->getEntity()->getId() ?>" class="label"><span><?php echo __('Add gift options for Individual Items') ?></span></label> + </div> + </dt> + + <dd id="allow-gift-options-for-items-container-<?php echo $this->getEntity()->getId() ?>" class="options individual"> + <ol> + <?php foreach($this->getItems() as $_index=>$_item): ?> + <?php $_product=$_item->getProduct() ?> + <li class="item"> + <p class="number"><?php echo __('Item %1 of %2', $_index+1, $this->countItems()) ?></p> + <div class="product"> + <div class="img photo container"> + <img src="<?php echo $this->getThumbnailUrl($_product); ?>" width="<?php echo $this->getThumbnailSize()?>" height="<?php echo $this->getThumbnailSize()?>" alt="<?php echo $this->escapeHtml($_product->getName()) ?>" title="<?php echo $this->escapeHtml($_product->getName()) ?>" /> + </div> + <strong class="product name"><?php echo $this->escapeHtml($_product->getName()) ?></strong> + </div> + <div class="item options"> + <div class="options-items-container" id="options-items-container-<?php echo $this->getEntity()->getId() ?>-<?php echo $_item->getId() ?>"></div> + <input type="hidden" name="giftoptions[<?php echo $_item->getId() ?>][type]" value="quote_address_item" /> + <input type="hidden" name="giftoptions[<?php echo $_item->getId() ?>][address]" value="<?php echo $this->getEntity()->getId()?>" /> + + <?php if ($this->isItemMessagesAvailable($_item)): ?> + <?php $_giftMessage = true; ?> + <a href="#" class="activate message" data-mage-init='{toggleAdvanced: {selectorsToggleClass:"no-display", toggleContainers:"#gift-messages-for-item-container-<?php echo $_item->getId() ?>"}}'><?php echo __('Gift Message') ?></a> + <div id="gift-messages-for-item-container-<?php echo $_item->getId() ?>" class="block message no-display"> + <fieldset class="fieldset"> + <p><?php echo __('You can leave this box blank if you do not wish to add a gift message for the item.') ?></p> + <input type="hidden" name="giftmessage[<?php echo $_item->getId() ?>][type]" value="quote_address_item" /> + <input type="hidden" name="giftmessage[<?php echo $_item->getId() ?>][address]" value="<?php echo $this->getEntity()->getId()?>" /> + <div class="field from"> + <label for="gift-message-<?php echo $_item->getId() ?>-from" class="label"><span><?php echo __('From') ?></span></label> + <div class="control"> + <input type="text" name="giftmessage[<?php echo $_item->getId() ?>][from]" id="gift-message-<?php echo $_item->getId() ?>-from" title="<?php echo __('From') ?>" value="<?php echo $this->getEscaped($this->getMessage($_item)->getSender(), $this->getDefaultFrom()) ?>" class="input-text"> + </div> + </div> + <div class="field to"> + <label for="gift-message-<?php echo $_item->getId() ?>-to" class="label"><span><?php echo __('To') ?></span></label> + <div class="control"> + <input type="text" name="giftmessage[<?php echo $_item->getId() ?>][to]" id="gift-message-<?php echo $_item->getId() ?>-to" title="<?php echo __('To') ?>" value="<?php echo $this->getEscaped($this->getMessage($_item)->getRecipient(), $this->getDefaultTo()) ?>" class="input-text"> + </div> + </div> + <div class="field text"> + <label for="gift-message-<?php echo $_item->getId() ?>-message" class="label"><span><?php echo __('Message') ?></span></label> + <div class="control"> + <textarea id="gift-message-<?php echo $_item->getId() ?>-message" class="input-text giftmessage-area" name="giftmessage[<?php echo $_item->getId() ?>][message]" title="<?php echo __('Message') ?>" rows="5" cols="10"><?php echo $this->getEscaped($this->getMessage($_item)->getMessage()) ?></textarea> + </div> + </div> + </fieldset> + </div> + <?php endif; ?> + </div> + </li> + <?php endforeach; ?> + </ol> + </dd> + <?php endif; ?> + <dt class="extra-options-container" id="extra-options-container-<?php echo $this->getEntity()->getId() ?>"></dt> + </dl> + </fieldset> + <script type="text/javascript"> + (function($) { + $(function() { + head.js("<?php echo $this->getViewFileUrl('Magento_GiftMessage::gift-options.js')?>", function() { + $('#allow_gift_options_<?php echo $this->getEntity()->getId() ?>') + .add('#allow_gift_options_for_order_<?php echo $this->getEntity()->getId() ?>') + .add('#allow_gift_options_for_items_<?php echo $this->getEntity()->getId() ?>').giftOptions(); + }); + }); + })(jQuery); + </script> + <?php break; ?> +<?php endswitch ?> +<?php if ($_giftMessage): ?> +<script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", function() { + jQuery("#shipping_method_form").validation(); + }); +</script> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Newsletter/layout/override/default.xml b/app/design/frontend/magento_plushe/Magento_Newsletter/layout/override/default.xml new file mode 100644 index 00000000000..fcd852ac5f7 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Newsletter/layout/override/default.xml @@ -0,0 +1,30 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceContainer name="footer"> + <block class="Magento\Newsletter\Block\Subscribe" name="form.subscribe" as="subscribe" before="-" template="subscribe.phtml"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Newsletter/layout/override/newsletter_manage_index.xml b/app/design/frontend/magento_plushe/Magento_Newsletter/layout/override/newsletter_manage_index.xml new file mode 100644 index 00000000000..cbcc9786b9c --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Newsletter/layout/override/newsletter_manage_index.xml @@ -0,0 +1,33 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Customer My Account Newsletter Subscriptions" type="page" parent="customer_account_index"> + <update handle="customer_account"/> + <referenceBlock name="my.account.wrapper"> + <block class="Magento\Customer\Block\Newsletter" name="customer_newsletter"> + <container name="customer.newsletter.form.before" as="form_before" label="Newsletter Subscription Form Before" htmlTag="div" htmlClass="rewards"/> + </block> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Newsletter/subscribe.phtml b/app/design/frontend/magento_plushe/Magento_Newsletter/subscribe.phtml new file mode 100644 index 00000000000..c3e45339281 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Newsletter/subscribe.phtml @@ -0,0 +1,62 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="block newsletter"> + <div class="title"><strong>Newsletter</strong></div> + <div class="content"> + <form action="<?php echo $this->getFormActionUrl() ?>" method="post" id="newsletter-validate-detail"> + <div class="field newsletter"> + <label class="label" for="newsletter"><?php echo __('Sign Up for Our Newsletter:') ?></label> + <div class="control"> + <input name="email" type="text" id="newsletter" + placeholder="<?php echo __('Enter your email address') ?>" + data-validate="{required:true, 'validate-email':true}"/> + </div> + <div class="actions"> + <button class="action subscribe" title="<?php echo __('Subscribe') ?>" type="submit"> + <span><?php echo __('Subscribe') ?></span> + </button> + </div> + </div> + </form> + </div> +</div> + +<script type="text/javascript"> + //<![CDATA[ + (function($) { + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", + "<?php echo $this->getViewFileUrl('Magento_Newsletter::newsletter.js')?>", function() { + $('#newsletter').newsletter({ + formSelector: '#newsletter-validate-detail', + placeholder: '<?php echo __('Enter your email address') ?>' + }); + }); + })(jQuery); + //]]> +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Page/1column.phtml b/app/design/frontend/magento_plushe/Magento_Page/1column.phtml new file mode 100644 index 00000000000..11954afe5a7 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/1column.phtml @@ -0,0 +1,60 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Template for \Magento\Page\Block\Html + */ +$bodyCss = $this->getBodyClass() ? $this->getBodyClass() : ''; +?> +<!doctype html> +<html lang="<?php echo $this->getLang() ?>" class="no-js"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width"> + <?php echo $this->getChildHtml('head') ?> +</head> +<body class="col1-layout<?php echo $bodyCss ?>"> + <?php echo $this->getChildHtml('after_body_start') ?> + <div class="page wrapper"> + <?php echo $this->getChildHtml('global_notices') ?> + <?php echo $this->getChildHtml('header-container') ?> + <?php echo $this->getChildHtml('page_top') ?> + <section class="page main"> + <?php echo $this->getChildHtml('columns_top') ?> + <div class="columns"> + <?php echo $this->getChildHtml('main') ?> + </div> + </section> + <?php echo $this->getChildHtml('page_bottom') ?> + + <?php echo $this->getChildHtml('footer') ?> + + <?php echo $this->getChildHtml('before_body_end') ?> + </div> + <?php echo $this->getAbsoluteFooter() ?> +</body> +</html> diff --git a/app/design/frontend/magento_plushe/Magento_Page/2columns-left.phtml b/app/design/frontend/magento_plushe/Magento_Page/2columns-left.phtml new file mode 100644 index 00000000000..1f1cdf3674f --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/2columns-left.phtml @@ -0,0 +1,66 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Template for \Magento\Page\Block\Html + */ +$bodyCss = $this->getBodyClass() ? $this->getBodyClass() : ''; +?> +<!doctype html> +<html lang="<?php echo $this->getLang() ?>" class="no-js"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width"> + <?php echo $this->getChildHtml('head') ?> +</head> +<body class="col2-left-layout<?php echo $bodyCss ?>"> + <?php echo $this->getChildHtml('after_body_start') ?> + <div class="page wrapper"> + <?php echo $this->getChildHtml('global_notices') ?> + <?php echo $this->getChildHtml('header-container') ?> + <?php echo $this->getChildHtml('page_top') ?> + <section class="page main"> + <?php echo $this->getChildHtml('columns_top') ?> + <div class="columns"> + <?php + echo $this->getChildHtml('main'); + // Inside of <php> to avoid spaces between tags + echo '<div class="column left sidebar">'; + echo $this->getChildHtml('left'); + echo '</div>'; + ?> + </div> + </section> + <?php echo $this->getChildHtml('page_bottom') ?> + + <?php echo $this->getChildHtml('footer') ?> + + <?php echo $this->getChildHtml('before_body_end') ?> + </div> + <?php echo $this->getAbsoluteFooter() ?> +</body> +</html> diff --git a/app/design/frontend/magento_plushe/Magento_Page/2columns-right.phtml b/app/design/frontend/magento_plushe/Magento_Page/2columns-right.phtml new file mode 100644 index 00000000000..59de2698952 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/2columns-right.phtml @@ -0,0 +1,66 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Template for \Magento\Page\Block\Html + */ +$bodyCss = $this->getBodyClass() ? $this->getBodyClass() : ''; +?> +<!doctype html> +<html lang="<?php echo $this->getLang() ?>" class="no-js"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width"> + <?php echo $this->getChildHtml('head') ?> +</head> +<body class="col2-right-layout<?php echo $bodyCss ?>"> + <?php echo $this->getChildHtml('after_body_start') ?> + <div class="page wrapper"> + <?php echo $this->getChildHtml('global_notices') ?> + <?php echo $this->getChildHtml('header-container') ?> + <?php echo $this->getChildHtml('page_top') ?> + <section class="page main"> + <?php echo $this->getChildHtml('columns_top') ?> + <div class="columns"> + <?php + echo $this->getChildHtml('main'); + // Inside of <php> to avoid spaces between tags + echo '<div class="column right sidebar">'; + echo $this->getChildHtml('right'); + echo '</div>'; + ?> + </div> + </section> + <?php echo $this->getChildHtml('page_bottom') ?> + + <?php echo $this->getChildHtml('footer') ?> + + <?php echo $this->getChildHtml('before_body_end') ?> + </div> + <?php echo $this->getAbsoluteFooter() ?> +</body> +</html> diff --git a/app/design/frontend/magento_plushe/Magento_Page/3columns.phtml b/app/design/frontend/magento_plushe/Magento_Page/3columns.phtml new file mode 100644 index 00000000000..b87d7e01b3e --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/3columns.phtml @@ -0,0 +1,69 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Template for \Magento\Page\Block\Html + */ +$bodyCss = $this->getBodyClass() ? $this->getBodyClass() : ''; +?> +<!doctype html> +<html lang="<?php echo $this->getLang() ?>" class="no-js"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width"> + <?php echo $this->getChildHtml('head') ?> +</head> +<body class="col3-layout<?php echo $bodyCss ?>"> + <?php echo $this->getChildHtml('after_body_start') ?> + <div class="page wrapper"> + <?php echo $this->getChildHtml('global_notices') ?> + <?php echo $this->getChildHtml('header-container') ?> + <?php echo $this->getChildHtml('page_top') ?> + <section class="page main"> + <?php echo $this->getChildHtml('columns_top') ?> + <div class="columns"> + <?php + echo $this->getChildHtml('main'); + // Inside of <php> to avoid spaces between tags + echo '<div class="column left sidebar">'; + echo $this->getChildHtml('left'); + echo '</div>'; + echo '<div class="column right sidebar">'; + echo $this->getChildHtml('right'); + echo '</div>'; + ?> + </div> + </section> + <?php echo $this->getChildHtml('page_bottom') ?> + + <?php echo $this->getChildHtml('footer') ?> + + <?php echo $this->getChildHtml('before_body_end') ?> + </div> + <?php echo $this->getAbsoluteFooter() ?> +</body> +</html> diff --git a/app/design/frontend/magento_plushe/Magento_Page/blank.phtml b/app/design/frontend/magento_plushe/Magento_Page/blank.phtml new file mode 100644 index 00000000000..947fc6c18a9 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/blank.phtml @@ -0,0 +1,31 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Blank page Template for \Magento\Page\Block\Html + */ +?> +<?php echo $this->getChildHtml('content'); ?> diff --git a/app/design/frontend/magento_plushe/Magento_Page/empty.phtml b/app/design/frontend/magento_plushe/Magento_Page/empty.phtml new file mode 100644 index 00000000000..b61be5ca1b9 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/empty.phtml @@ -0,0 +1,55 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Template for \Magento\Page\Block\Html + */ +$bodyCss = $this->getBodyClass() ? $this->getBodyClass() : ''; +?> +<!doctype html> +<html lang="<?php echo $this->getLang() ?>" class="no-js"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width"> + <?php echo $this->getChildHtml('head') ?> +</head> +<body class="page-empty<?php echo $bodyCss ?>"> + <?php echo $this->getChildHtml('after_body_start') ?> + <div class="page wrapper"> + <?php echo $this->getChildHtml('global_notices') ?> + <section class="page main"> + <?php echo $this->getChildHtml('columns_top') ?> + <div class="columns"> + <?php echo $this->getChildHtml('main') ?> + </div> + </section> + <?php echo $this->getChildHtml('page_bottom') ?> + <?php echo $this->getChildHtml('before_body_end') ?> + </div> + <?php echo $this->getAbsoluteFooter() ?> +</body> +</html> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Page/html/block.phtml b/app/design/frontend/magento_plushe/Magento_Page/html/block.phtml new file mode 100644 index 00000000000..e0d3181c353 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/html/block.phtml @@ -0,0 +1,31 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="block <?php echo $this->getBlockCss(); ?>"> + <div class="title"><strong><?php echo $this->getBlockTitle(); ?></strong></div> + <div class="content"> + <?php echo $this->getChildHtml(); ?> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Page/html/breadcrumbs.phtml b/app/design/frontend/magento_plushe/Magento_Page/html/breadcrumbs.phtml new file mode 100644 index 00000000000..5bfd6768190 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/html/breadcrumbs.phtml @@ -0,0 +1,42 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if($crumbs && is_array($crumbs)): ?> +<div class="breadcrumbs"> + <ul class="items"> + <?php foreach($crumbs as $_crumbName=>$_crumbInfo): ?> + <li class="item <?php echo $_crumbName ?>"> + <?php if($_crumbInfo['link']): ?> + <a href="<?php echo $_crumbInfo['link'] ?>" title="<?php echo $this->escapeHtml($_crumbInfo['title']) ?>"><?php echo $this->escapeHtml($_crumbInfo['label']) ?></a> + <?php elseif($_crumbInfo['last']): ?> + <strong><?php echo $this->escapeHtml($_crumbInfo['label']) ?></strong> + <?php else: ?> + <?php echo $this->escapeHtml($_crumbInfo['label']) ?> + <?php endif; ?> + </li> + <?php endforeach; ?> + </ul> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Page/html/copyright.phtml b/app/design/frontend/magento_plushe/Magento_Page/html/copyright.phtml new file mode 100644 index 00000000000..614ecf30ea4 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/html/copyright.phtml @@ -0,0 +1,28 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<small class="copyright"> + <span><?php echo $this->getCopyright() ?></span> +</small> diff --git a/app/design/frontend/magento_plushe/Magento_Page/html/head.phtml b/app/design/frontend/magento_plushe/Magento_Page/html/head.phtml new file mode 100644 index 00000000000..9254ba1971d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/html/head.phtml @@ -0,0 +1,36 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<meta http-equiv="Content-Type" content="<?php echo $this->getContentType() ?>"/> +<title><?php echo $this->getTitle() ?></title> +<meta name="description" content="<?php echo $this->escapeHtml($this->getDescription())?>"/> +<meta name="keywords" content="<?php echo $this->escapeHtml($this->getKeywords())?>"/> +<meta name="robots" content="<?php echo $this->escapeHtml($this->getRobots())?>"/> +<link rel="icon" href="<?php echo $this->getFaviconFile(); ?>" type="image/x-icon"/> +<link rel="shortcut icon" href="<?php echo $this->getFaviconFile(); ?>" type="image/x-icon"/> +<?php echo $this->getCssJsHtml() ?> +<?php echo $this->getChildHtml() ?> +<?php echo $this->getIncludes() ?> +<?php echo $this->helper('Magento\Core\Helper\Js')->getTranslatorScript() ?> diff --git a/app/design/frontend/magento_plushe/Magento_Page/html/header.phtml b/app/design/frontend/magento_plushe/Magento_Page/html/header.phtml new file mode 100644 index 00000000000..d7747717eee --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/html/header.phtml @@ -0,0 +1,52 @@ +<?php +/** + * 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 design + * @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) + */ +/** + * @var \Magento\Page\Block\Html\Header $this + */ +?> + +<?php switch($this->getShowPart()): + case 'logo': ?> + <?php $storeName = $this->getThemeName() ? $this->getThemeName() : $this->getLogoAlt();?> + <?php if ($this->getIsHomePage()):?> + <strong class="logo"> + <img src="<?php echo $this->getLogoSrc() ?>" alt="<?php echo $this->getLogoAlt() ?>" /> + </strong> + <?php else:?> + <a class="logo" href="<?php echo $this->getUrl(''); ?>" title="<?php echo $storeName ?>"> + <img src="<?php echo $this->getLogoSrc() ?>" alt="<?php echo $storeName ?>" /> + </a> + <?php endif?> + <?php break; ?> + + <?php case 'welcome': ?> + <p class="welcome"><?php echo $this->getWelcome() ?></p> + <?php break; ?> + + <?php case 'other': ?> + <?php echo $this->getChildHtml(); ?> + <?php break; ?> + +<?php endswitch; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Page/html/notices.phtml b/app/design/frontend/magento_plushe/Magento_Page/html/notices.phtml new file mode 100644 index 00000000000..7814e18e1c7 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/html/notices.phtml @@ -0,0 +1,90 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * @var $this \Magento\Page\Block\Html\Notices + */ +?> +<?php if ($this->displayNoscriptNotice()): ?> + <noscript> + <div class="notice global site noscript"> + <div class="content"> + <p> + <strong><?php echo __('JavaScript seems to be disabled in your browser.'); ?></strong><br /> + <?php echo __('Enable JavaScript in your browser to get the best experience on our website!'); ?> + </p> + </div> + </div> + </noscript> +<?php endif; ?> +<?php if ($this->displayDemoNotice()): ?> + <div class="notice global site demo"> + <div class="content"><p><?php echo __('This is just a demo store. You can browse and place orders, but nothing will be processed.') ?></p></div> + </div> + <?php $noticePosion = true; ?> +<?php endif; ?> +<?php if ($this->helper('Magento\Core\Helper\Cookie')->isUserNotAllowSaveCookie()): ?> + <div class="notice global site cookie" id="notice-cookie-block" style="display: none"> + <div class="content"> + <p><?php echo __('This store uses cookies to make shopping more enjoyable. Learn how cookies work in our <a href="%1">privacy policy</a>.', $this->getPrivacyPolicyLink()) ?></p> + <div class="actions"><button id="btn-cookie-allow" class="action allow"><span><?php echo __('Allow Cookies');?></span></button></div> + </div> + </div> + <script type="text/javascript"> + // <![CDATA[ + (function($) { + head.js("<?php echo $this->getViewFileUrl('mage/cookies.js')?>", + "<?php echo $this->getViewFileUrl('Magento_Page::js/notices.js')?>", function() { + $('#notice-cookie-block').cookieBlock({ + cookieAllowButtonSelector: '#btn-cookie-allow', + cookieName: '<?php echo \Magento\Core\Helper\Cookie::IS_USER_ALLOWED_SAVE_COOKIE ?>', + cookieValue: '<?php echo $this->helper('Magento\Core\Helper\Cookie')->getAcceptedSaveCookiesWebsiteIds() ?>', + cookieLifetime: <?php echo $this->helper('Magento\Core\Helper\Cookie')->getCookieRestrictionLifetime()?>, + noCookiesUrl: '<?php echo $this->getUrl('cms/index/noCookies') ?>' + }); + }); + })(jQuery); + // ]]> + </script> + <?php $noticePosion = true; ?> +<?php endif; ?> +<?php if (isset($noticePosion)): ?> + <script type="text/javascript"> + // <![CDATA[ + (function($) { + $(document).ready(function() { + var notices = $('.notice.global.site'), + top = 0; + for (var i=0; i < notices.length; i++) { + $(notices[i]).css('top',top); + top += $(notices[i]).outerHeight(); + $('body').css('paddingTop', top ); + }; + }); + })(jQuery); + // ]]> + </script> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Page/html/pager.phtml b/app/design/frontend/magento_plushe/Magento_Page/html/pager.phtml new file mode 100644 index 00000000000..689cd83158f --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/html/pager.phtml @@ -0,0 +1,119 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Pager template + * + * @see \Magento\Page\Block\Html\Pager + */ +?> +<?php if($this->getCollection()->getSize()): ?> + + <?php if($this->getUseContainer()): ?> + <div class="pager"> + <?php endif ?> + + <?php if($this->getShowAmounts()): ?> + <p class="amount"> + <?php if($this->getLastPageNum()>1): ?> + <?php echo __('Items %1 to %2 of %3 total', $this->getFirstNum(), $this->getLastNum(), $this->getTotalNum()) ?> + <?php elseif ($this->getLastPageNum() == 1): ?> + <?php echo __('%1 Item', $this->getTotalNum()) ?> + <?php else: ?> + <?php echo __('%1 Item(s)', $this->getTotalNum()) ?> + <?php endif; ?> + </p> + <?php endif ?> + + <?php if($this->getShowPerPage()): ?> + <div class="limiter"> + <strong class="label"><?php echo __('Show') ?></strong> + <select id="limiter" data-mage-redirect="{'event':'change'}"> + <?php foreach ($this->getAvailableLimit() as $_key => $_limit): ?> + <option value="<?php echo $this->getLimitUrl($_key) ?>"<?php if ($this->isLimitCurrent($_key)): ?> + selected="selected"<?php endif ?>> + <?php echo $_limit ?> + </option> + <?php endforeach; ?> + </select> + <span class="text"><?php echo __('per page') ?></span> + </div> + <?php endif ?> + + <?php if($this->getLastPageNum()>1): ?> + <div class="pages"> + <strong class="label"><?php echo __('Page') ?></strong> + <ol class="items"> + <?php if (!$this->isFirstPage()): ?> + <li class="item"> + <?php $text = $this->getAnchorTextForPrevious() ? $this->getAnchorTextForPrevious() : '';?> + <a class="<?php echo $text ? 'link ' : 'action '?> previous" href="<?php echo $this->getPreviousPageUrl() ?>" title="<?php echo $text ? $text : __('Previous') ?>"> + <span><?php echo $text ? $text : __('Previous') ?></span> + </a> + </li> + <?php endif;?> + + <?php if ($this->canShowFirst()): ?> + <li class="item"><a class="first" href="<?php echo $this->getFirstPageUrl() ?>"><span>1</span></a></li> + <?php endif;?> + + <?php if ($this->canShowPreviousJump()): ?> + <li class="item"><a class="previous jump" title="" href="<?php echo $this->getPreviousJumpUrl() ?>"><span>...</span></a></li> + <?php endif;?> + + <?php foreach ($this->getFramePages() as $_page): ?> + <?php if ($this->isPageCurrent($_page)): ?> + <li class="item current"><strong><span><?php echo $_page ?></span></strong></li> + <?php else: ?> + <li class="item"><a href="<?php echo $this->getPageUrl($_page) ?>"><span><?php echo $_page ?></span></a></li> + <?php endif;?> + <?php endforeach;?> + + <?php if ($this->canShowNextJump()): ?> + <li class="item"><a class="next jump" title="" href="<?php echo $this->getNextJumpUrl() ?>"><span>...</span></a></li> + <?php endif;?> + + <?php if ($this->canShowLast()): ?> + <li class="item"><a class="last" href="<?php echo $this->getLastPageUrl() ?>"><span><?php echo $this->getLastPageNum() ?></span></a></li> + <?php endif;?> + + <?php if (!$this->isLastPage()): ?> + <li class="item"> + <?php $text = $this->getAnchorTextForNext() ? $this->getAnchorTextForNext() : '';?> + <a class="<?php echo $text ? 'link ' : 'action '?> next" href="<?php echo $this->getNextPageUrl() ?>" title="<?php echo $text ? $text : __('Next') ?>"> + <span><?php echo $text ? $text : __('Next') ?></span> + </a> + </li> + <?php endif;?> + </ol> + </div> + <?php endif; ?> + + <?php if($this->getUseContainer()): ?> + </div> + <?php endif ?> + +<?php endif ?> diff --git a/app/design/frontend/magento_plushe/Magento_Page/html/title.phtml b/app/design/frontend/magento_plushe/Magento_Page/html/title.phtml new file mode 100644 index 00000000000..103a2c8d32f --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/html/title.phtml @@ -0,0 +1,42 @@ +<?php +/** + * 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 design + * @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) + */ + +/** + * @var $this \Magento\Page\Block\Html\Title + */ +$cssClass = $this->getCssClass() ? ' ' . $this->getCssClass() : ''; +$prefix = $this->getPrefix() ? '<span class="prefix">' . $this->getPrefix() . '</span>' : ''; +$suffix = $this->getSuffix() ? '<span class="suffix">' . $this->getSuffix() . '</span>' : ''; +$title = ''; +if (trim($this->getPageTitle())) { + $title = $prefix . '<span class="base">' . $this->getPageTitle() . '</span>' . $suffix; +} +?> +<?php if ($title): ?> +<div class="page title<?php echo $cssClass; ?>"> + <h1 class="title"><?php echo $title ?></h1> + <?php echo $this->getChildHtml(); ?> +</div> +<?php endif; ?> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Page/html/topmenu.phtml b/app/design/frontend/magento_plushe/Magento_Page/html/topmenu.phtml new file mode 100644 index 00000000000..9c10e155293 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/html/topmenu.phtml @@ -0,0 +1,42 @@ +<?php +/** + * 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 Mage + * @package Magento_Page + * @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) + */ +?> +<?php +/** + * Top menu for store + * + * @see \Magento\Page\Block\Html\Topmenu + */ +?> +<?php $columnsLimit = $this->getColumnsLimit() ? : 0; ?> +<?php $_menu = $this->getHtml('level-top','submenu', $columnsLimit) ?> +<?php if ($_menu): ?> +<nav class="navigation" role="navigation"> + <ul> + <?php echo $_menu; ?> + </ul> +</nav> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Page/layout/default.xml b/app/design/frontend/magento_plushe/Magento_Page/layout/default.xml new file mode 100644 index 00000000000..e686483e6cc --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/layout/default.xml @@ -0,0 +1,100 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="logo"> + <arguments> + <argument name="theme_name" xsi:type="string">plushe</argument> + </arguments> + </referenceBlock> + <referenceBlock name="head"> + <block class="Magento\Page\Block\Html\Head\Css" name="css-styles-css"> + <arguments> + <argument name="file" xsi:type="string">css/styles.css</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="js-matchmedia-js"> + <arguments> + <argument name="file" xsi:type="string">js/matchMedia.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="js-head-js"> + <arguments> + <argument name="file" xsi:type="string">js/head.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="js-jquery-dropdowns-js"> + <arguments> + <argument name="file" xsi:type="string">js/jquery.dropdowns.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="js-tabs-js"> + <arguments> + <argument name="file" xsi:type="string">js/tabs.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="js-navigation-menu-js"> + <arguments> + <argument name="file" xsi:type="string">js/navigation-menu.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="js-theme-js"> + <arguments> + <argument name="file" xsi:type="string">js/theme.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="js-selectivizr-js"> + <arguments> + <argument name="file" xsi:type="string">js/selectivizr.js</argument> + <argument name="properties" xsi:type="array"> + <item name="ie_condition" xsi:type="string">lt IE 9</item> + </argument> + </arguments> + </block> + </referenceBlock> + <referenceContainer name="header"> + <block class="Magento\Page\Block\Links" name="header.links" after="minicart"> + <arguments> + <argument name="css_class" xsi:type="string">links</argument> + </arguments> + </block> + </referenceContainer> + + <referenceBlock name="top.links"> + <arguments> + <argument name="css_class" xsi:type="string">links</argument> + </arguments> + </referenceBlock> + <referenceBlock name="footer_links"> + <arguments> + <argument name="css_class" xsi:type="string">links</argument> + </arguments> + </referenceBlock> + <referenceBlock name="catalog.topnav"> + <arguments> + <argument name="columns_limit" xsi:type="string">1</argument> + </arguments> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Page/layout/override/default.xml b/app/design/frontend/magento_plushe/Magento_Page/layout/override/default.xml new file mode 100644 index 00000000000..f005e0a0a0a --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/layout/override/default.xml @@ -0,0 +1,168 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="All Pages" type="page"> + <block class="Magento\Page\Block\Html" name="root" output="1" template="3columns.phtml"> + <block class="Magento\Page\Block\Html\Head" name="head" as="head"> + <block class="Magento\Page\Block\Js\Cookie" name="js_cookies" template="js/cookie.phtml"/> + </block> + <container name="after_body_start" as="after_body_start" label="Page Top"/> + <container name="header-container" label="Page Header Container" as="header-container" htmlTag="header" htmlClass="header"> + <container name="header.panel" label="Page Header Panel" htmlTag="div" htmlClass="panel"> + <block class="Magento\Page\Block\Switcher" name="store_language" as="store_language" template="switch/languages.phtml"/> + </container> + <container name="header" label="Page Header" as="header" htmlTag="div" htmlClass="content"> + <block class="Magento\Page\Block\Html\Header" name="logo"> + <arguments> + <argument name="show_part" xsi:type="string">logo</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Links" name="top.links"/> + </container> + </container> + <container name="page_top" as="page_top" label="After Page Header"> + <block class="Magento\Page\Block\Html\Topmenu" name="catalog.topnav" template="html/topmenu.phtml"/> + <container name="top.container" as="topContainer" label="Page Header" htmlTag="div" htmlClass="top-container"/> + <block class="Magento\Page\Block\Html\Breadcrumbs" name="breadcrumbs" as="breadcrumbs"/> + </container> + <!-- + <container name="page_main" as="page_main" label="Page main" htmlTag="div" htmlClass="columns"> + <container name="main" as="main" label="Main Content Container" htmlTag="div" htmlClass="column main"> + <container name="content-top" label="Main Content Top" /> + <container name="content" label="Main Content Area" /> + <container name="content-aside" label="Main Content Aside" /> + <container name="content-bottom" label="Main Content Bottom" /> + </container> + </container> + --> + <container name="columns.top" label="Before Main Columns" as="columns_top"> + <block class="Magento\Page\Block\Html\Title" name="page.main.title" template="html/title.phtml"/> + <container name="page.messages" label="invisible" htmlTag="div" htmlClass="page messages"> + <block class="Magento\Core\Block\Messages" name="global_messages" as="global_messages"/> + <block class="Magento\Core\Block\Messages" name="messages" as="messages"/> + </container> + </container> + <container name="main" as="main" label="Main Content Container" htmlTag="div" htmlClass="column main"> + <container name="content.top" label="Main Content Top"/> + <container name="content" label="Main Content Area"/> + <container name="content.aside" label="Main Content Aside"/> + <container name="content.bottom" label="Main Content Bottom"/> + </container> + <container name="left" as="left" label="Left Column"/> + <container name="right" as="right" label="Right Column"/> + <container name="page.bottom.container" as="page_bottom" label="Before Page Footer Container" htmlTag="div" htmlClass="page bottom"> + <container name="page.bottom" label="Before Page Footer" htmlTag="div" htmlClass="content"/> + </container> + <container name="footer-container" as="footer" label="Page Footer Container" htmlTag="footer" htmlClass="footer"> + <container name="footer" as="footer" label="Page Footer" htmlTag="div" htmlClass="content"> + <block class="Magento\Page\Block\Switcher" name="store_switcher" as="store_switcher" template="switch/stores.phtml"/> + <block class="Magento\Page\Block\Links" name="footer_links"/> + <block class="Magento\Page\Block\Html\Footer" name="copyright" template="html/copyright.phtml"/> + <!--<block class="Magento\Page\Block\Html\Footer" name="report.bugs" template="html/reportbugs.phtml" />--> + </container> + </container> + <container name="before_body_end" as="before_body_end" label="Page Bottom"> + <block class="Magento\Page\Block\Html\Notices" name="global_notices" template="html/notices.phtml"/> + </container> + </block> + <referenceBlock name="head"> + <block class="Magento\Page\Block\Html\Head\Css" name="mage-calendar-css"> + <arguments> + <argument name="file" xsi:type="string">mage/calendar.css</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="jquery-jquery-js"> + <arguments> + <argument name="file" xsi:type="string">jquery/jquery.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="mage-jquery-no-conflict-js"> + <arguments> + <argument name="file" xsi:type="string">mage/jquery-no-conflict.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="head-load-min-js"> + <arguments> + <argument name="file" xsi:type="string">head.load.min.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="mage-mage-js"> + <arguments> + <argument name="file" xsi:type="string">mage/mage.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="mage-decorate-js"> + <arguments> + <argument name="file" xsi:type="string">mage/decorate.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="mage-translate-js"> + <arguments> + <argument name="file" xsi:type="string">mage/translate.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="mage-cookies-js"> + <arguments> + <argument name="file" xsi:type="string">mage/cookies.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="jquery-jquery-ui-js"> + <arguments> + <argument name="file" xsi:type="string">jquery/jquery-ui.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="jquery-jquery-tmpl-min-js"> + <arguments> + <argument name="file" xsi:type="string">jquery/jquery.tmpl.min.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="mage-bootstrap-js"> + <arguments> + <argument name="file" xsi:type="string">mage/bootstrap.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="magento-page-js-truncate-js"> + <arguments> + <argument name="file" xsi:type="string">Magento_Page::js/truncate.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="mage-common-js"> + <arguments> + <argument name="file" xsi:type="string">mage/common.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="mage-toggle-js"> + <arguments> + <argument name="file" xsi:type="string">mage/toggle.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="mage-popup-window-js"> + <arguments> + <argument name="file" xsi:type="string">mage/popup-window.js</argument> + </arguments> + </block> + <block class="Magento\Core\Block\Template" name="head.components" as="components" template="Magento_Page::js/components.phtml"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Page/layout/override/print.xml b/app/design/frontend/magento_plushe/Magento_Page/layout/override/print.xml new file mode 100644 index 00000000000..befe0f664c0 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/layout/override/print.xml @@ -0,0 +1,39 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="All Pages (Print Version)" type="page"> + <block class="Magento\Page\Block\Html" name="root" output="1" template="print.phtml"> + <block class="Magento\Page\Block\Html\Head" name="head" as="head"/> + <container name="after_body_start" as="after_body_start" label="Page Top"/> + <container name="content" as="content" label="Main Content Area"/> + </block> + <referenceBlock name="head"> + <block class="Magento\Page\Block\Html\Head\Css" name="css-print-css"> + <arguments> + <argument name="file" xsi:type="string">css/print.css</argument> + </arguments> + </block> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Page/link/current.phtml b/app/design/frontend/magento_plushe/Magento_Page/link/current.phtml new file mode 100644 index 00000000000..d8e6268840b --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/link/current.phtml @@ -0,0 +1,40 @@ +<?php +/** + * 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) + */ +/** + * @var $this \Magento\Page\Block\Link\Current + */ +?> +<?php if ($this->isCurrent()):?> +<li class="nav item current"> + <strong><?php echo $this->escapeHtml(__($this->getLabel()))?></strong> +</li> +<?php else:?> +<li class="nav item"> + <a href="<?php echo $this->escapeHtml($this->getHref())?>" + <?php if ($title = $this->getTitle()):?> title="<?php echo $this->escapeHtml(__($title))?>"<?php endif;?> + > + <?php echo $this->escapeHtml(__($this->getLabel()))?> + </a> +</li> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Page/page.phtml b/app/design/frontend/magento_plushe/Magento_Page/page.phtml new file mode 100644 index 00000000000..8a143569665 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/page.phtml @@ -0,0 +1,57 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Template for \Magento\Page\Block\Html + */ +$bodyCss = $this->getBodyClass() ? $this->getBodyClass() : ''; +?> +<!doctype html> +<html lang="<?php echo $this->getLang() ?>" class="no-js"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width"> + <?php echo $this->getChildHtml('head') ?> +</head> +<body class="<?php echo $bodyCss ?>"> + <?php echo $this->getChildHtml('after_body_start') ?> + <div class="page wrapper"> + <?php echo $this->getChildHtml('global_notices') ?> + <?php echo $this->getChildHtml('header-container') ?> + <?php echo $this->getChildHtml('page_top') ?> + <section class="page main"> + <?php echo $this->getChildHtml('page_main') ?> + </section> + <?php echo $this->getChildHtml('page_bottom') ?> + + <?php echo $this->getChildHtml('footer') ?> + + <?php echo $this->getChildHtml('before_body_end') ?> + </div> + <?php echo $this->getAbsoluteFooter() ?> +</body> +</html> diff --git a/app/design/frontend/magento_plushe/Magento_Page/popup.phtml b/app/design/frontend/magento_plushe/Magento_Page/popup.phtml new file mode 100644 index 00000000000..816610ffdd6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/popup.phtml @@ -0,0 +1,48 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Template for \Magento\Page\Block\Html + */ +$bodyCss = $this->getBodyClass() ? $this->getBodyClass() : ''; +?> +<!doctype html> +<html lang="<?php echo $this->getLang() ?>" class="no-js"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width"> + <?php echo $this->getChildHtml('head') ?> +</head> +<body class="page popup<?php echo $bodyCss ?>"> + <?php echo $this->getChildHtml('after_body_start') ?> + <div class="page wrapper"> + <?php echo $this->getChildHtml('main') ?> + </div> + <?php echo $this->getChildHtml('before_body_end') ?> + <?php echo $this->getAbsoluteFooter() ?> +</body> +</html> diff --git a/app/design/frontend/magento_plushe/Magento_Page/print.phtml b/app/design/frontend/magento_plushe/Magento_Page/print.phtml new file mode 100644 index 00000000000..19e15f9c166 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/print.phtml @@ -0,0 +1,57 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php +/** + * Template for \Magento\Page\Block\Html + */ +?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->getLang() ?>" lang="<?php echo $this->getLang() ?>"> +<head> +<?php echo $this->getChildHtml('head') ?> +</head> +<body class="page print<?php echo $this->getBodyClass()?$this->getBodyClass():'' ?>"> +<?php echo $this->getChildHtml('after_body_start') ?> +<div class="page print wrapper"> + <header class="header print"> + <img src="<?php echo $this->getPrintLogoUrl() ? $this->getPrintLogoUrl() : $this->getViewFileUrl('images/logo.gif') ?>" class="logo" alt="" /> + <?php if ($this->getPrintLogoText()):?> + <address><?php echo nl2br($this->escapeHtml($this->getPrintLogoText())) ?></address> + <?php endif;?> + </header> + <div class="page print main"> + <?php echo $this->getChildHtml('content') ?> + </div> + <footer class="page print footer"> + <div class="actions"> + <button type="button" title="<?php echo __('Close Window') ?>" class="action close" onclick="window.close();"><span><?php echo __('Close Window') ?></span></button> + </div> + </footer> + <?php echo $this->getAbsoluteFooter() ?> +</div> +</body> +</html> diff --git a/app/design/frontend/magento_plushe/Magento_Page/switch/languages.phtml b/app/design/frontend/magento_plushe/Magento_Page/switch/languages.phtml new file mode 100644 index 00000000000..3b6a76e6cb6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/switch/languages.phtml @@ -0,0 +1,54 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Language switcher template + * + * @see \Magento\Page\Block\Switch + */ +?> + +<?php if(count($this->getStores())>1): ?> +<div class="switcher language"> + <strong class="label"><span><?php echo __('Language') ?></span></strong> + <div class="options"> + <strong class="view-<?php echo $this->escapeHtml($this->getCurrentStoreCode()) ?>"> + <span><?php echo $this->escapeHtml($this->getStoreName()) ?></span> + </strong> + <button type="button" data-toggle="dropdown" class="action switch"><span><?php echo __('Change')?></span></button> + <ul data-target="dropdown"> + <?php foreach ($this->getStores() as $_lang): ?> + <?php if($_lang->getId()!=$this->getCurrentStoreId()): ?> + <li class="view-<?php echo $this->escapeHtml($_lang->getCode()); ?>"> + <a href="<?php echo $_lang->getCurrentUrl() ?>"><?php echo $this->escapeHtml($_lang->getName()) ?></a> + </li> + <?php endif; ?> + <?php endforeach; ?> + </ul> + </div> +</div> +<?php endif; ?> + diff --git a/app/design/frontend/magento_plushe/Magento_Page/switch/stores.phtml b/app/design/frontend/magento_plushe/Magento_Page/switch/stores.phtml new file mode 100644 index 00000000000..cb4d6d80c79 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Page/switch/stores.phtml @@ -0,0 +1,59 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Store switcher template + * + * @see \Magento\Core\Block\Store\Switcher + */ +?> +<?php if(count($this->getGroups())>1): ?> +<div class="switcher-store"> + <label><?php echo __('Select Store') ?>:</label> + <ul id="select-store"> + <?php foreach ($this->getGroups() as $_group): ?> + <?php /* $_selected = ($_group->getId()==$this->getCurrentGroupId()) ? ' class="current"' : '' */ ?> + <?php if ($_group->getId()==$this->getCurrentGroupId()): ?> + <li class="current"><strong><?php echo $this->escapeHtml($_group->getName()) ?></strong></li> + <?php else: ?> + <li><a href="<?php echo $_group->getHomeUrl() ?>"><?php echo $this->escapeHtml($_group->getName()) ?></a></li> + <?php endif; ?> + <?php endforeach; ?> + </ul> +</div> +<?php endif; ?> + +<?php /* if(count($this->getGroups())>1): ?> +<div class="switcher-store"> + <label for="select-store"><?php echo __('Select Store') ?>:</label> + <select id="select-store" onchange="location.href=this.value"> + <?php foreach ($this->getGroups() as $_group): ?> + <?php $_selected = ($_group->getId()==$this->getCurrentGroupId()) ? ' selected="selected"' : '' ?> + <option value="<?php echo $_group->getHomeUrl() ?>"<?php echo $_selected ?>><?php echo $this->escapeHtml($_group->getName()) ?></option> + <?php endforeach; ?> + </select> +</div> +<?php endif; */ ?> diff --git a/app/design/frontend/magento_plushe/Magento_PageCache/layout/default.xml b/app/design/frontend/magento_plushe/Magento_PageCache/layout/default.xml new file mode 100644 index 00000000000..f3514857ff8 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_PageCache/layout/default.xml @@ -0,0 +1,28 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <move element="external.pagecache.cookie" destination="content.bottom" after="-"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Paypal/express/review.phtml b/app/design/frontend/magento_plushe/Magento_Paypal/express/review.phtml new file mode 100644 index 00000000000..ed52fbe4f8b --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Paypal/express/review.phtml @@ -0,0 +1,111 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +/** @var $this \Magento\Paypal\Block\Express\Review */ + +$billingBlock = $this->getChildBlock('billing')->setFieldNamePrefix('billing')->setHideEmailAddress(true); +$shippingAddress = $this->getShippingAddress(); +?> +<hgroup class="page title"> + <h1 class="title"><span class="base"><?php echo __('Review Order') ?></span></h1> +</hgroup> +<?php echo $this->getMessagesBlock()->toHtml() ?> +<div class="paypal review view"> + <div class="paypal subtitle caption"><strong>Please confirm your addresses</strong></div> + + <form method="post" id="order-review-form" action="<?php echo $this->getPlaceOrderUrl() ?>" class="form paypal review"> + <?php if(!$billingBlock->isCustomerLoggedIn()): ?> + <fieldset class="fieldset customer email"> + <legend class="legend"><span><?php echo __('Customer Information') ?></span></legend> + <br> + <div id="customer-info-form" class="field email required"> + <label for="customer:email" class="label"><?php echo __('Email Address') ?></label> + <div class="control"> + <input type="text" name="customer-email" id="customer:email" value="<?php echo $this->escapeHtml($billingBlock->getAddress()->getEmail()) ?>" title="<?php echo __('Email Address') ?>" class="input-text" /> + </div> + </div> + </fieldset> + <?php endif ?> + + <fieldset class="fieldset billing address" id="billing-address"> + <legend class="legend"><span><?php echo __('Billing Address') ?></span></legend> + <br> + <?php if ($shippingAddress): ?> + <?php echo $billingBlock->setShowAsShippingCheckbox(true)->toHtml(); ?> + <?php else: ?> + <?php echo $billingBlock->toHtml(); ?> + <?php endif; ?> + </fieldset> + + <?php if ($shippingAddress): ?> + <fieldset class="fieldset shipping address" id="shipping-address"> + <legend class="legend"><span><?php echo __('Shipping Address') ?></span></legend> + <br> + <?php echo $this->getChildBlock('shipping')->setFieldNamePrefix('shipping')->setHideEmailAddress(true)->toHtml(); ?> + </fieldset> + + <fieldset class="fieldset shipping method"> + <legend class="legend"><span><?php echo __('Shipping Method') ?></span></legend> + <br> + <?php echo $this->getChildBlock('shipping_method')->toHtml(); ?> + </fieldset> + <?php endif; ?> + + <div class="paypal review items"> + <div class="paypal subtitle caption"> + <strong><?php echo __('Items in Your Shopping Cart') ?></strong> + <a href="<?php echo $this->getUrl('checkout/cart') ?>" class="action edit"><?php echo __('Edit Shopping Cart') ?></a> + </div> + + <div id="details-reload"> + <?php echo $this->getChildHtml('details') ?> + </div> + </div> + + <?php echo $this->getChildHtml('agreements'); ?> + <div class="actions" id="review-buttons-container"> + <button type="button" id="review-button" value="<?php echo __('Place Order') ?>" class="action checkout"><span><?php echo __('Place Order') ?></span></button> + <button type="button" id="review-submit" value="<?php echo __('Place Order') ?>" class="action checkout"><span><?php echo __('Place Order') ?></span></button> + <button type="button" id="update-order" class="action update"><span><?php echo __('Update Order Data') ?></span></button> + <span class="please-wait load indicator" id="review-please-wait" style="display:none;"> + <span><?php echo __('Submitting order information...') ?></span> + </span> + </div> + </form> +</div> +<script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", + "<?php echo $this->getViewFileUrl('Magento_Paypal::order-review.js') ?>", + function() { + jQuery('#order-review-form').validation().orderReview({ + shippingMethodUpdateUrl: '<?php echo $this->escapeHtml($this->getUpdateShippingMethodsUrl()) ?>', + updateOrderSubmitUrl: '<?php echo $this->escapeHtml($this->getUpdateOrderSubmitUrl()) ?>', + isAjax: <?php echo $this->getUseAjax() ? 'true' : 'false' ?> + }); + }); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Paypal/express/review/address.phtml b/app/design/frontend/magento_plushe/Magento_Paypal/express/review/address.phtml new file mode 100644 index 00000000000..2cf078fc786 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Paypal/express/review/address.phtml @@ -0,0 +1,143 @@ +<?php +/** + * 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 Mage + * @package Magento_Paypal + * @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) + */ +?> +<?php $prefix = $this->getFieldNamePrefix();?> + <input type="hidden" name="<?php echo $prefix ?>[address_id]" value="<?php echo $this->getAddress()->getId() ?>" id="<?php echo $prefix ?>:address_id" /> + <?php echo $this->getLayout()->createBlock('Magento\Customer\Block\Widget\Name')->setObject($this->getAddress()->getFirstname() ? $this->getAddress() : $this->getQuote()->getCustomer())->setForceUseCustomerRequiredAttributes(!$this->isCustomerLoggedIn())->setFieldIdFormat($prefix . ':%s')->setFieldNameFormat($prefix . '[%s]')->toHtml() ?> + + <div class="field company"> + <label for="<?php echo $prefix ?>:company" class="label"><span><?php echo __('Company') ?></span></label> + <div class="control"> + <input type="text" id="<?php echo $prefix ?>:company" name="<?php echo $prefix ?>[company]" value="<?php echo $this->escapeHtml($this->getAddress()->getCompany()) ?>" title="<?php echo __('Company') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('company') ?>" /> + </div> + </div> + + <?php if(!$this->isCustomerLoggedIn() && !$this->getHideEmailAddress()): ?> + <div class="field email required"> + <label for="<?php echo $prefix ?>:email" class="label"><span><?php echo __('Email Address') ?></span></label> + <div class="control"> + <input type="text" name="<?php echo $prefix ?>[email]" id="<?php echo $prefix ?>:email" value="<?php echo $this->escapeHtml($this->getAddress()->getEmail()) ?>" title="<?php echo __('Email Address') ?>" class="input-text validate-email required-entry" /> + </div> + </div> + <?php endif; ?> + + <?php $_streetValidationClass = $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('street'); ?> + <div class="field street required"> + <label for="<?php echo $prefix ?>:street1" class="label"><span><?php echo __('Address') ?></span></label> + <div class="control"> + <input type="text" title="<?php echo __('Street Address') ?>" name="<?php echo $prefix ?>[street][]" id="<?php echo $prefix ?>:street1" value="<?php echo $this->escapeHtml($this->getAddress()->getStreet(1)) ?>" class="input-text required-entry <?php echo $_streetValidationClass ?>" /> + <?php $_streetValidationClass = trim(str_replace('required-entry', '', $_streetValidationClass)); ?> + <?php for ($_i = 2, $_n = $this->helper('Magento\Customer\Helper\Address')->getStreetLines(); $_i <= $_n; $_i++): ?> + <div class="nested"> + <input type="text" title="<?php echo __('Street Address %1', $_i) ?>" name="<?php echo $prefix ?>[street][]" id="<?php echo $prefix ?>:street<?php echo $_i?>" value="<?php echo $this->escapeHtml($this->getAddress()->getStreet($_i)) ?>" class="input-text <?php echo $_streetValidationClass ?>" /> + </div> + <?php endfor; ?> + </div> + </div> + + <?php if ($this->helper('Magento\Customer\Helper\Address')->isVatAttributeVisible()) : ?> + <div class="field vat_id"> + <label for="<?php echo $prefix ?>:vat_id" class="label"><span><?php echo __('VAT Number') ?></span></label> + <div class="control"> + <input type="text" id="<?php echo $prefix ?>:vat_id" name="<?php echo $prefix ?>[vat_id]" value="<?php echo $this->escapeHtml($this->getAddress()->getVatId()) ?>" title="<?php echo __('VAT Number') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('vat_id') ?>" /> + </div> + </div> + <?php endif; ?> + + <div class="field city required"> + <label for="<?php echo $prefix ?>:city" class="label"><span><?php echo __('City') ?></span></label> + <div class="control"> + <input type="text" title="<?php echo __('City') ?>" name="<?php echo $prefix ?>[city]" value="<?php echo $this->escapeHtml($this->getAddress()->getCity()) ?>" class="input-text required-entry <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('city') ?>" id="<?php echo $prefix ?>:city" /> + </div> + </div> + + <div class="field regionid required"> + <label for="<?php echo $prefix ?>:region_id" class="label"><span><?php echo __('State/Province') ?></span></label> + <div class="control"> + <select id="<?php echo $prefix ?>:region_id" name="<?php echo $prefix ?>[region_id]" title="<?php echo __('State/Province') ?>" class="validate-select required-entry" style="display:none;"> + <option value=""><?php echo __('Please select region, state or province') ?></option> + </select> + <input type="text" id="<?php echo $prefix ?>:region" name="<?php echo $prefix ?>[region]" value="<?php echo $this->escapeHtml($this->getAddress()->getRegion()) ?>" title="<?php echo __('State/Province') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('region') ?>" style="display:none;" /> + </div> + </div> + + <div class="field postcode required"> + <label for="<?php echo $prefix ?>:postcode" class="label"><span><?php echo __('Zip/Postal Code') ?></span></label> + <div class="control"> + <input type="text" title="<?php echo __('Zip/Postal Code') ?>" name="<?php echo $prefix ?>[postcode]" id="<?php echo $prefix ?>:postcode" value="<?php echo $this->escapeHtml($this->getAddress()->getPostcode()) ?>" class="input-text validate-zip-international required-entry <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('postcode') ?>" /> + </div> + </div> + + <div class="field country_id required"> + <label for="<?php echo $prefix ?>:country_id" class="label"><span><?php echo __('Country') ?></span></label> + <div class="control"> + <?php echo $this->getCountryHtmlSelect($prefix) ?> + </div> + </div> + + <div class="field telephone required"> + <label for="<?php echo $prefix ?>:telephone" class="label"><span><?php echo __('Telephone') ?></span></label> + <div class="control"> + <input type="text" name="<?php echo $prefix ?>[telephone]" value="<?php echo $this->escapeHtml($this->getAddress()->getTelephone()) ?>" title="<?php echo __('Telephone') ?>" class="input-text required-entry <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('telephone') ?>" id="<?php echo $prefix ?>:telephone" /> + </div> + </div> + + <div class="field fax"> + <label for="<?php echo $prefix ?>:fax" class="label"><span><?php echo __('Fax') ?></span></label> + <div class="control"> + <input type="text" name="<?php echo $prefix ?>[fax]" value="<?php echo $this->escapeHtml($this->getAddress()->getFax()) ?>" title="<?php echo __('Fax') ?>" class="input-text <?php echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('fax') ?>" id="<?php echo $prefix ?>:fax" /> + </div> + </div> + + <?php echo $this->getChildHtml('form.additional.info'); ?> + <?php if ($this->getShowAsShippingCheckbox()): ?> + <div class="field choice as_shipping"> + <input type="checkbox" name="<?php echo $prefix ?>[as_shipping]" class="checkbox" value="1" title="<?php echo __('Same as shipping') ?>" id="<?php echo $prefix ?>:as_shipping" <?php if ($this->getAddress()->getSameAsBilling()):?>checked="checked"<?php endif;?>/> + <label for="<?php echo $prefix ?>:as_shipping" class="label"><span><?php echo __('Same as shipping') ?></span></label> + </div> + <?php endif; ?> + +<script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('Magento_Checkout::js/region-updater.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js') ?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js') ?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js') ?>", + function() { + $('#<?php echo $prefix ?>\\:country_id').regionUpdater({ + optionalRegionAllowed: <?php echo ($this->getConfig('general/region/display_all')? 'true' : 'false'); ?>, + regionListId: '#<?php echo $prefix ?>\\:region_id', + regionInputId: '#<?php echo $prefix ?>\\:region', + postcodeId: '#<?php echo $prefix ?>\\:postcode', + regionJson: <?php echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, + defaultRegion: "<?php echo $this->getAddress()->getRegionId() ?>", + countriesWithOptionalZip: <?php echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> + }); + }); + })(jQuery); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Paypal/express/review/details.phtml b/app/design/frontend/magento_plushe/Magento_Paypal/express/review/details.phtml new file mode 100644 index 00000000000..51706067751 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Paypal/express/review/details.phtml @@ -0,0 +1,55 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ + +/** + * @see \Magento\Paypal\Block\Express\Review\Details + */ +?> +<table id="details-table" class="data table paypal review items"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): $colspan = $rowspan = 2; else: $colspan = $rowspan = 1; endif; ?> + <thead> + <tr> + <th rowspan="<?php echo $rowspan ?>" class="col name"><?php echo __('Product Name') ?></th> + <th colspan="<?php echo $colspan ?>" class="col price"><?php echo __('Price') ?></th> + <th rowspan="<?php echo $rowspan ?>" class="col qty"><?php echo __('Qty') ?></th> + <th colspan="<?php echo $colspan ?>" class="col subtotal"><?php echo __('Subtotal') ?></th> + </tr> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayCartBothPrices()): ?> + <tr> + <th class="col price excl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(false) ?></th> + <th class="col price incl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(true) ?></th> + <th class="col subtotal excl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(false) ?></th> + <th class="col subtotal incl tax"><?php echo $this->helper('Magento\Tax\Helper\Data')->getIncExcTaxLabel(true) ?></th> + </tr> + <?php endif; ?> + </thead> +<?php echo $this->getChildHtml('totals'); ?> + <tbody> + <?php foreach($this->getItems() as $_item): ?> + <?php echo $this->getItemHtml($_item) ?> + <?php endforeach ?> + </tbody> +</table> diff --git a/app/design/frontend/magento_plushe/Magento_Paypal/express/review/shipping/method.phtml b/app/design/frontend/magento_plushe/Magento_Paypal/express/review/shipping/method.phtml new file mode 100644 index 00000000000..a3f9482b40a --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Paypal/express/review/shipping/method.phtml @@ -0,0 +1,56 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +/** @var $this \Magento\Paypal\Block\Express\Review */ +?> +<div id="shipping-method-container"> + <?php if ($this->getCanEditShippingMethod() || !$this->getCurrentShippingRate()): ?> + <?php if ($groups = $this->getShippingRateGroups()): ?> + <?php $currentRate = $this->getCurrentShippingRate(); ?> + <select name="shipping_method" id="shipping_method" class="required-entry"> + <?php if (!$currentRate): ?> + <option value=""><?php echo __('Please select a shipping method...') ?></option> + <?php endif; ?> + <?php foreach ($groups as $code => $rates): ?> + <optgroup label="<?php echo $this->escapeHtml($this->getCarrierName($code)) ?>" style="font-style:normal;"> + <?php foreach ($rates as $rate): ?> + <option + value="<?php echo $this->renderShippingRateValue($rate) ?>"<?php echo ($currentRate === $rate) ? ' selected="selected"' : ''; ?>> + <?php echo $this->renderShippingRateOption($rate) ?> + </option> + <?php endforeach; ?> + </optgroup> + <?php endforeach; ?> + </select> + <?php else: ?> + <p><strong><?php echo __('Sorry, no quotes are available for this order at this time.') ?></strong></p> + <?php endif; ?> + <?php else: ?> + <p><strong><?php echo $this->renderShippingRateOption($this->getCurrentShippingRate()) ?></strong></p> + <?php endif; ?> +</div> +<div style="display:none" id="shipping_method_update"> + <p><?php echo __('Please update order data to get shipping methods and rates') ?></p> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Paypal/express/shortcut.phtml b/app/design/frontend/magento_plushe/Magento_Paypal/express/shortcut.phtml new file mode 100644 index 00000000000..4f4a98cca34 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Paypal/express/shortcut.phtml @@ -0,0 +1,70 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * @var $this \Magento\Paypal\Block\Express\Shortcut + */ +?> +<?php +$labelPosition = ''; +if ($this->isOrPositionBefore()) { +$labelPosition = ' before'; +} elseif ($this->isOrPositionAfter()) { +$labelPosition = ' after'; +} +?> + +<div data-label="or" class="paypal checkout <?php echo $labelPosition ?> paypal-logo"> + <?php $shortcutHtmlId = $this->getShortcutHtmlId() ?> + <input type="image" data-action="checkout-form-submit" data-checkout-url="<?php echo $this->getCheckoutUrl()?>" + src="<?php echo $this->getImageUrl()?>" + alt="<?php echo __('Checkout with PayPal');?>" + title="<?php echo __('Checkout with PayPal');?>"/> + <?php if ($this->getConfirmationUrl() || $this->getIsInCatalogProduct()): ?> + <?php if ($this->getIsInCatalogProduct()): ?> + <input type="hidden" id="pp-checkout-url" name="return_url" value=""/> + <?php endif; ?> + + <?php + $confirmationUrl = $this->getConfirmationUrl(); + $isInCatalogProduct = $this->getIsInCatalogProduct(); +endif; ?> + <script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('Magento_Paypal::js/paypal-checkout.js') ?>", + function() { + $('.paypal-logo').paypalCheckout({ + confirmMessage: "<?php echo $this->helper('Magento\Core\Helper\Data')->jsQuoteEscape($this->getConfirmationMessage())?>", + confirmUrl: "<?php echo !empty($confirmationUrl) ? $confirmationUrl : false ?>", + isCatalogProduct: "<?php echo !empty($isInCatalogProduct) ? $isInCatalogProduct : false ?>", + paypalCheckoutSelector: '#pp-checkout-url', + productAddToCartForm: '#product_addtocart_form' + }); + }); + })(jQuery); + </script> +</div> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Paypal/layout/override/catalog_product_view.xml b/app/design/frontend/magento_plushe/Magento_Paypal/layout/override/catalog_product_view.xml new file mode 100644 index 00000000000..5f06f13a7ce --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Paypal/layout/override/catalog_product_view.xml @@ -0,0 +1,42 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="product.info.addtocart"> + <container name="product.info.addtocart.paypal.wrapper" label="PayPal Express Checkout Shortcut Wrapper"> + <block class="Magento\Paypal\Block\Express\Shortcut" name="product.info.addtocart.paypal" template="express/shortcut.phtml"> + <action method="setIsInCatalogProduct"> + <argument name="value" xsi:type="string">1</argument> + </action> + </block> + </container> + </referenceBlock> + <update handle="SHORTCUT_popup"/> + <referenceContainer name="right"> + <block class="Magento\Paypal\Block\Logo" name="paypal.partner.right.logo" template="partner/logo.phtml"> + <!--action method="setLogoType"><value>wePrefer_150x60</value></action--> + </block> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Paypal/layout/override/default.xml b/app/design/frontend/magento_plushe/Magento_Paypal/layout/override/default.xml new file mode 100644 index 00000000000..78c6f1d1ccc --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Paypal/layout/override/default.xml @@ -0,0 +1,33 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceContainer name="topCart.extra_actions"> + <block class="Magento\Paypal\Block\Express\Shortcut" name="paypal.partner.top_cart.shortcut" template="express/shortcut.phtml"/> + </referenceContainer> + <referenceContainer name="cart_sidebar.extra_actions"> + <block class="Magento\Paypal\Block\Express\Shortcut" name="paypal.partner.cart_sidebar.shortcut" template="express/shortcut.phtml"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Persistent/layout/override/checkout_onepage_index.xml b/app/design/frontend/magento_plushe/Magento_Persistent/layout/override/checkout_onepage_index.xml new file mode 100644 index 00000000000..1147945ddc7 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Persistent/layout/override/checkout_onepage_index.xml @@ -0,0 +1,35 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceContainer name="form.login.additional.info"> + <block class="Magento\Persistent\Block\Form\Remember" name="persistent.remember.me" template="remember_me.phtml" before="-"/> + <block class="Magento\Core\Block\Template" name="persistent.remember.me.tooltip" template="Magento_Persistent::remember_me_tooltip.phtml"/> + </referenceContainer> + <referenceContainer name="form.billing.additional.info"> + <block class="Magento\Persistent\Block\Form\Remember" name="persistent.remember.me.billing" template="remember_me.phtml" before="-"/> + <block class="Magento\Core\Block\Template" name="persistent.remember.me.tooltip.billing" template="Magento_Persistent::remember_me_tooltip.phtml"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Persistent/layout/override/customer_account_create.xml b/app/design/frontend/magento_plushe/Magento_Persistent/layout/override/customer_account_create.xml new file mode 100644 index 00000000000..8ac15eae415 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Persistent/layout/override/customer_account_create.xml @@ -0,0 +1,31 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceContainer name="form.additional.info"> + <block class="Magento\Persistent\Block\Form\Remember" name="persistent.remember.me" template="remember_me.phtml" before="-"/> + <block class="Magento\Core\Block\Template" name="persistent.remember.me.tooltip" template="Magento_Persistent::remember_me_tooltip.phtml"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Persistent/layout/override/customer_account_login.xml b/app/design/frontend/magento_plushe/Magento_Persistent/layout/override/customer_account_login.xml new file mode 100644 index 00000000000..8ac15eae415 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Persistent/layout/override/customer_account_login.xml @@ -0,0 +1,31 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceContainer name="form.additional.info"> + <block class="Magento\Persistent\Block\Form\Remember" name="persistent.remember.me" template="remember_me.phtml" before="-"/> + <block class="Magento\Core\Block\Template" name="persistent.remember.me.tooltip" template="Magento_Persistent::remember_me_tooltip.phtml"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Persistent/remember_me.phtml b/app/design/frontend/magento_plushe/Magento_Persistent/remember_me.phtml new file mode 100644 index 00000000000..9ce5ee378a6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Persistent/remember_me.phtml @@ -0,0 +1,41 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Customer "Remember Me" template + * + * @var $this \Magento\Persistent\Block\Form\Remember + */ +?> +<div id="remember-me-box" class="field choice persistent"> + <?php $rememberMeId = 'remember_me' . $this->helper('Magento\Core\Helper\Data')->getRandomString(10); ?> + <input type="checkbox" name="persistent_remember_me" class="checkbox" id="<?php echo $rememberMeId; ?>"<?php if ($this->isRememberMeChecked()): ?> checked="checked"<?php endif; ?> title="<?php echo __('Remember Me') ?>" /> + <label for="<?php echo $rememberMeId; ?>" class="label"><span><?php echo __('Remember Me') ?></span></label> + <a class="link-tip" href="#"><?php echo __('What\'s this?') ?></a> +</div> +<?php if ($this->helper('Magento\Checkout\Helper\Data')->isContextCheckout()): ?> + <input name="context" type="hidden" value="checkout" /> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Persistent/remember_me_tooltip.phtml b/app/design/frontend/magento_plushe/Magento_Persistent/remember_me_tooltip.phtml new file mode 100644 index 00000000000..100a5cee1c5 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Persistent/remember_me_tooltip.phtml @@ -0,0 +1,58 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * "Remember Me" popup template (when click on "What's this?") + * + */ +/** @var $this \Magento\Core\Block\Template */ +?> +<div id="window-overlay" class="window-overlay" style="display:none;"></div> +<div id="remember-me-popup" class="remember-me-popup" style="display:none;"> + <div class="remember-me-popup-head"> + <h3>What's this?</h3> + <a href="#" class="remember-me-popup-close" title="<?php echo __('Close') ?>"><?php echo __('Close') ?></a> + </div> + <div class="remember-me-popup-body"> + <p>Checking "Remember Me" will let you access your shopping cart on this computer when you are logged out</p> + <div class="remember-me-popup-close-button a-right"> + <a href="#" class="remember-me-popup-close button" title="<?php echo __('Close') ?>"><span><?php echo __('Close') ?></span></a> + </div> + </div> +</div> +<script type="text/javascript"> + (function($) { + head.js( + "<?php echo $this->getViewFileUrl('Magento_Persistent::remember-me-popup.js') ?>", + function() { + $('#remember-me-box').rememberMePopup({ + windowOverlay: '#window-overlay', + popupBlock: '#remember-me-popup', + closeBtn: '.remember-me-popup-close' + }); + }); + })(jQuery); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Rating/detailed.phtml b/app/design/frontend/magento_plushe/Magento_Rating/detailed.phtml new file mode 100644 index 00000000000..e0321a26195 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Rating/detailed.phtml @@ -0,0 +1,45 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if(!empty($collection) && $collection->getSize()): ?> + <table class="ratings-table data-table review-summary-table"> + <col width="1" /> + <col /> + <tbody> + <?php foreach ($collection as $_rating): ?> + <?php if($_rating->getSummary()): ?> + <tr> + <th class="label"><?php echo __($this->escapeHtml($_rating->getRatingCode())) ?></th> + <td class="value"> + <div class="rating-box"> + <div class="rating" style="width:<?php echo ceil($_rating->getSummary()) ?>%;"></div> + </div> + </td> + </tr> + <?php endif; ?> + <?php endforeach; ?> + </tbody> + </table> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Reports/layout/catalog_product_view.xml b/app/design/frontend/magento_plushe/Magento_Reports/layout/catalog_product_view.xml new file mode 100644 index 00000000000..1c2c346263d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Reports/layout/catalog_product_view.xml @@ -0,0 +1,36 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceContainer name="content.bottom"> + <block class="Magento\Reports\Block\Product\Widget\Viewed" name="product.viewed.products" template="Magento_Catalog::product/list/items.phtml"> + <arguments> + <argument name="type" xsi:type="string">widget-viewed</argument> + <argument name="view_mode" xsi:type="string">grid</argument> + <argument name="image_type" xsi:type="string">recently_viewed_products_grid_content_widget</argument> + </arguments> + </block> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Reports/layout/override/default.xml b/app/design/frontend/magento_plushe/Magento_Reports/layout/override/default.xml new file mode 100644 index 00000000000..46e55c7076c --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Reports/layout/override/default.xml @@ -0,0 +1,31 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceContainer name="right"> + <block class="Magento\Reports\Block\Product\Viewed" name="right.reports.product.viewed" template="product_viewed.phtml"/> + <block class="Magento\Reports\Block\Product\Compared" name="right.reports.product.compared" template="product_compared.phtml"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Reports/layout/override/print.xml b/app/design/frontend/magento_plushe/Magento_Reports/layout/override/print.xml new file mode 100644 index 00000000000..6c60196129d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Reports/layout/override/print.xml @@ -0,0 +1,26 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> diff --git a/app/design/frontend/magento_plushe/Magento_Reports/product_compared.phtml b/app/design/frontend/magento_plushe/Magento_Reports/product_compared.phtml new file mode 100644 index 00000000000..0925c4376f1 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Reports/product_compared.phtml @@ -0,0 +1,44 @@ +<?php +/** + * 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 design + * @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) + */ +/* @var $this \Magento\Reports\Block\Product\Compared */ +?> +<?php if ($_products = $this->getRecentlyComparedProducts()): ?> +<div class="block compared links"> + <div class="title"> + <strong><?php echo __('Recently Compared Products') ?></strong> + </div> + <div class="content"> + <ol class="items compared"> + <?php foreach ($_products as $_item): ?> + <li class="item"> + <strong class="product name"> + <a href="<?php echo $this->getProductUrl($_item) ?>"><?php echo $this->helper('Magento\Catalog\Helper\Output')->productAttribute($_item, $_item->getName() , 'name') ?></a> + </strong> + </li> + <?php endforeach; ?> + </ol> + </div> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Reports/product_viewed.phtml b/app/design/frontend/magento_plushe/Magento_Reports/product_viewed.phtml new file mode 100644 index 00000000000..006415faeaa --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Reports/product_viewed.phtml @@ -0,0 +1,44 @@ +<?php +/** + * 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 design + * @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) + */ +/* @var $this \Magento\Reports\Block\Product\Viewed */ +?> +<?php if ($_products = $this->getRecentlyViewedProducts()): ?> +<div class="block viewed links"> + <div class="title"> + <strong><?php echo __('Recently Viewed Products') ?></strong> + </div> + <div class="content"> + <ol class="items viewed"> + <?php foreach ($_products as $_item): ?> + <li class="item"> + <strong class="product name"> + <a href="<?php echo $this->getProductUrl($_item) ?>"><?php echo $this->helper('Magento\Catalog\Helper\Output')->productAttribute($_item, $_item->getName(), 'name') ?></a> + </strong> + </li> + <?php endforeach; ?> + </ol> + </div> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Reports/widget/compared/column/compared_default_list.phtml b/app/design/frontend/magento_plushe/Magento_Reports/widget/compared/column/compared_default_list.phtml new file mode 100644 index 00000000000..ad0e07081a8 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Reports/widget/compared/column/compared_default_list.phtml @@ -0,0 +1,58 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if ($_products = $this->getRecentlyComparedProducts()): ?> +<div class="widget widget-compared"> + <div class="block block-products"> + <div class="block-title"> + <strong><span><?php echo __('Recently Compared') ?></span></strong> + </div> + <div class="block-content"> + <?php $suffix = $this->getNameInLayout(); ?> + <ol class="mini-products-list" id="widget-compared-<?php echo $suffix; ?>"> + <?php foreach ($_products as $_product): ?> + <li class="item"> + <a class="product-image" href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>"><img src="<?php echo $this->getThumbnailSidebarUrl($_product) ?>" width="<?php echo $this->getThumbnailSidebarSize()?>" height="<?php echo $this->getThumbnailSidebarSize()?>" alt="<?php echo $this->stripTags($_product->getName(), null, true) ?>" /></a> + <div class="product-details"> + <p class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>)"><?php echo $this->helper('Magento\Catalog\Helper\Output')->productAttribute($_product, $_product->getName() , 'name') ?></a></p> + <?php echo $this->getPriceHtml($_product, true, '-widget-compared-'.$suffix) ?> + <?php if($_product->isSaleable()): ?> + <a href="<?php echo $this->getAddToCartUrl($_product) ?>" class="link-cart"><?php echo __('Add to Cart') ?></a> + <?php else: ?> + <?php if ($_product->getIsSalable()): ?> + <p class="availability in-stock"><span><?php echo __('In stock') ?></span></p> + <?php else: ?> + <p class="availability out-of-stock"><span><?php echo __('Out of stock') ?></span></p> + <?php endif; ?> + <?php endif; ?> + </div> + </li> + <?php endforeach; ?> + </ol> + <script type="text/javascript">(function($) {$('#widget-compared-<?php echo $suffix; ?>').decorate('list', false)})(jQuery)</script> + </div> + </div> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Reports/widget/compared/content/compared_grid.phtml b/app/design/frontend/magento_plushe/Magento_Reports/widget/compared/content/compared_grid.phtml new file mode 100644 index 00000000000..5e5bfa290ce --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Reports/widget/compared/content/compared_grid.phtml @@ -0,0 +1,125 @@ +<?php +/** + * 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 design + * @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) + */ +?> + +<?php + if ($exist = $this->getRecentlyComparedProducts()) { + $type = 'widget-compared'; + $mode = 'grid'; + + $type = $type . '-' . $mode; + + $class = 'widget compared' . ' ' . $mode; + + $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); + $image = 'recently_compared_products_grid_content_widget'; + $title = __('Recently Compared'); + $items = $exist; + + $showWishlist = true; + $showCompare = true; + $showCart = true; + $rating = 'short'; + $description = ($mode == 'list') ? true : false; + } +?> + +<?php if ($exist):?> +<div class="block <?php echo $class; ?>"> + <div class="title"> + <strong><?php echo $title; ?></strong> + </div> + <div class="content"> + <?php echo $this->getPagerHtml() ?> + <?php echo '<!-- ' . $image . '-->' ?> + <ol class="products list items <?php echo $type; ?>"> + <?php $iterator = 1; ?> + <?php foreach($items as $_item): ?> + <?php echo ($iterator++==1) ? '<li class="item product">' : '</li><li class="item product">' ?> + <div class="product"> + + <a href="<?php echo $this->getProductUrl($_item) ?>" class="product photo"> + <?php echo $imageBlock->init($_item, $image)->toHtml() ?> + </a> + + <div class="product details"> + + <strong class="product name"><a title="<?php echo $this->escapeHtml($_item->getName()) ?>" href="<?php echo $this->getProductUrl($_item) ?>"> + <?php echo $this->escapeHtml($_item->getName()) ?></a> + </strong> + + <?php echo $this->getPriceHtml($_item, true, '-' . $type) ?> + + <?php if ($_item->getRatingSummary() && $rating): ?> + <?php echo $this->getReviewsSummaryHtml($_item,$rating) ?> + <?php endif; ?> + + <?php if($showWishlist || $showCompare || $showCart): ?> + <div class="product actions"> + + <?php if($showCart): ?> + <div class="primary"> + <?php if($_item->isSaleable()): ?> + <button class="action tocart" data-mage-redirect="{event: 'click', url: '<?php echo $this->getAddToCartUrl($_item) ?>'}" type="button" title="<?php echo __('Add to Cart') ?>"> + <span><?php echo __('Add to Cart') ?></span> + </button> + <?php else: ?> + <?php if ($_item->getIsSalable()): ?> + <p class="stock available"><span><?php echo __('In stock') ?></span></p> + <?php else: ?> + <p class="stock unavailable"><span><?php echo __('Out of stock') ?></span></p> + <?php endif; ?> + <?php endif; ?> + </div> + <?php endif; ?> + + <?php if($showWishlist || $showCompare): ?> + <div class="secondary addto links"> + <?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllow() && $showWishlist): ?> + <a href="<?php echo $this->getAddToWishlistUrl($_item) ?>" class="action towishlist" title="<?php echo __('Add to Wishlist') ?>"> + <span><?php echo __('Add to Wishlist') ?></span> + </a> + <?php endif; ?> + <?php if($this->getAddToCompareUrl($_item) && $showCompare): ?> + <a href="<?php echo $this->getAddToCompareUrl($_item) ?>" class="action tocompare" title="<?php echo __('Add to Compare') ?>"> + <span><?php echo __('Add to Compare') ?></span> + </a> + <?php endif; ?> + </div> + <?php endif; ?> + </div> + <?php endif; ?> + + </div> + </div> + <?php echo ($iterator==count($items)+1) ? '</li>' : '' ?> + <?php endforeach ?> + </ol> + <script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/mage-attributes-processing.js') ?>"); + </script> + </div> +</div> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Reports/widget/compared/content/compared_list.phtml b/app/design/frontend/magento_plushe/Magento_Reports/widget/compared/content/compared_list.phtml new file mode 100644 index 00000000000..a9149fb99a0 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Reports/widget/compared/content/compared_list.phtml @@ -0,0 +1,125 @@ +<?php +/** + * 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 design + * @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) + */ +?> + +<?php + if ($exist = $this->getRecentlyComparedProducts()) { + $type = 'widget-compared'; + $mode = 'list'; + + $type = $type . '-' . $mode; + + $class = 'widget compared' . ' ' . $mode; + + $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); + $image = 'recently_compared_products_list_content_widget'; + $title = __('Recently Compared'); + $items = $exist; + + $showWishlist = true; + $showCompare = true; + $showCart = true; + $rating = 'short'; + $description = ($mode == 'list') ? true : false; + } +?> + +<?php if ($exist):?> +<div class="block <?php echo $class; ?>"> + <div class="title"> + <strong><?php echo $title; ?></strong> + </div> + <div class="content"> + <?php echo $this->getPagerHtml() ?> + <?php echo '<!-- ' . $image . '-->' ?> + <ol class="products list items <?php echo $type; ?>"> + <?php $iterator = 1; ?> + <?php foreach($items as $_item): ?> + <?php echo ($iterator++==1) ? '<li class="item product">' : '</li><li class="item product">' ?> + <div class="product"> + + <a href="<?php echo $this->getProductUrl($_item) ?>" class="product photo"> + <?php echo $imageBlock->init($_item, $image)->toHtml() ?> + </a> + + <div class="product details"> + + <strong class="product name"><a title="<?php echo $this->escapeHtml($_item->getName()) ?>" href="<?php echo $this->getProductUrl($_item) ?>"> + <?php echo $this->escapeHtml($_item->getName()) ?></a> + </strong> + + <?php echo $this->getPriceHtml($_item, true, '-' . $type) ?> + + <?php if ($_item->getRatingSummary() && $rating): ?> + <?php echo $this->getReviewsSummaryHtml($_item,$rating) ?> + <?php endif; ?> + + <?php if($showWishlist || $showCompare || $showCart): ?> + <div class="product actions"> + + <?php if($showCart): ?> + <div class="primary"> + <?php if($_item->isSaleable()): ?> + <button class="action tocart" data-mage-redirect="{event: 'click', url: '<?php echo $this->getAddToCartUrl($_item) ?>'}" type="button" title="<?php echo __('Add to Cart') ?>"> + <span><?php echo __('Add to Cart') ?></span> + </button> + <?php else: ?> + <?php if ($_item->getIsSalable()): ?> + <p class="stock available"><span><?php echo __('In stock') ?></span></p> + <?php else: ?> + <p class="stock unavailable"><span><?php echo __('Out of stock') ?></span></p> + <?php endif; ?> + <?php endif; ?> + </div> + <?php endif; ?> + + <?php if($showWishlist || $showCompare): ?> + <div class="secondary addto links"> + <?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllow() && $showWishlist): ?> + <a href="<?php echo $this->getAddToWishlistUrl($_item) ?>" class="action towishlist" title="<?php echo __('Add to Wishlist') ?>"> + <span><?php echo __('Add to Wishlist') ?></span> + </a> + <?php endif; ?> + <?php if($this->getAddToCompareUrl($_item) && $showCompare): ?> + <a href="<?php echo $this->getAddToCompareUrl($_item) ?>" class="action tocompare" title="<?php echo __('Add to Compare') ?>"> + <span><?php echo __('Add to Compare') ?></span> + </a> + <?php endif; ?> + </div> + <?php endif; ?> + </div> + <?php endif; ?> + + </div> + </div> + <?php echo ($iterator==count($items)+1) ? '</li>' : '' ?> + <?php endforeach ?> + </ol> + <script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/mage-attributes-processing.js') ?>"); + </script> + </div> +</div> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Reports/widget/viewed/column/viewed_default_list.phtml b/app/design/frontend/magento_plushe/Magento_Reports/widget/viewed/column/viewed_default_list.phtml new file mode 100644 index 00000000000..c8344e639f7 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Reports/widget/viewed/column/viewed_default_list.phtml @@ -0,0 +1,63 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * @see \Magento\Reports\Block\Product\Viewed + */ +?> +<?php if ($_products = $this->getRecentlyViewedProducts()): ?> +<div class="widget widget-viewed"> + <div class="block block-products"> + <div class="block-title"> + <strong><span><?php echo __('Recently Viewed') ?></span></strong> + </div> + <div class="block-content"> + <?php $suffix = $this->getNameInLayout(); ?> + <ol class="mini-products-list" id="widget-viewed-<?php echo $suffix; ?>"> + <?php foreach ($_products as $_product): ?> + <li class="item"> + <a class="product-image" href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>"><img src="<?php echo $this->getThumbnailSidebarUrl($_product) ?>" width="<?php echo $this->getThumbnailSidebarSize()?>" height="<?php echo $this->getThumbnailSidebarSize()?>" alt="<?php echo $this->stripTags($_product->getName(), null, true) ?>" /></a> + <div class="product-details"> + <p class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>"><?php echo $this->helper('Magento\Catalog\Helper\Output')->productAttribute($_product, $_product->getName() , 'name') ?></a></p> + <?php echo $this->getPriceHtml($_product, true, '-widget-viewed-'.$suffix) ?> + <?php if($_product->isSaleable()): ?> + <a href="<?php echo $this->getAddToCartUrl($_product) ?>" class="link-cart"><?php echo __('Add to Cart') ?></a> + <?php else: ?> + <?php if ($_product->getIsSalable()): ?> + <p class="availability in-stock"><span><?php echo __('In stock') ?></span></p> + <?php else: ?> + <p class="availability out-of-stock"><span><?php echo __('Out of stock') ?></span></p> + <?php endif; ?> + <?php endif; ?> + </div> + </li> + <?php endforeach; ?> + </ol> + <script type="text/javascript">(function($) {$('#widget-viewed-<?php echo $suffix; ?>').decorate('list', false)})(jQuery)</script> + </div> + </div> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Reports/widget/viewed/content/viewed_grid.phtml b/app/design/frontend/magento_plushe/Magento_Reports/widget/viewed/content/viewed_grid.phtml new file mode 100644 index 00000000000..678aba0dd82 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Reports/widget/viewed/content/viewed_grid.phtml @@ -0,0 +1,129 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * @see \Magento\Reports\Block\Product\Viewed + */ +?> +<?php + if ($exist = $this->getRecentlyViewedProducts()) { + $type = 'widget-viewed'; + $mode = 'grid'; + + $type = $type . '-' . $mode; + + $class = 'widget viewed' . ' ' . $mode; + + $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); + $image = 'recently_viewed_products_grid_content_widget'; + $title = __('Recently Viewed'); + $items = $exist; + + $showWishlist = true; + $showCompare = true; + $showCart = true; + $rating = 'short'; + $description = ($mode == 'list') ? true : false; + } +?> + +<?php if ($exist):?> +<div class="block <?php echo $class; ?>"> + <div class="title"> + <strong><?php echo $title; ?></strong> + </div> + <div class="content"> + <?php echo $this->getPagerHtml() ?> + <?php echo '<!-- ' . $image . '-->' ?> + <ol class="products list items <?php echo $type; ?>"> + <?php $iterator = 1; ?> + <?php foreach($items as $_item): ?> + <?php echo ($iterator++==1) ? '<li class="item product">' : '</li><li class="item product">' ?> + <div class="product"> + + <a href="<?php echo $this->getProductUrl($_item) ?>" class="product photo"> + <?php echo $imageBlock->init($_item, $image)->toHtml() ?> + </a> + + <div class="product details"> + + <strong class="product name"><a title="<?php echo $this->escapeHtml($_item->getName()) ?>" href="<?php echo $this->getProductUrl($_item) ?>"> + <?php echo $this->escapeHtml($_item->getName()) ?></a> + </strong> + + <?php echo $this->getPriceHtml($_item, true, '-' . $type) ?> + + <?php if ($_item->getRatingSummary() && $rating): ?> + <?php echo $this->getReviewsSummaryHtml($_item,$rating) ?> + <?php endif; ?> + + <?php if($showWishlist || $showCompare || $showCart): ?> + <div class="product actions"> + + <?php if($showCart): ?> + <div class="primary"> + <?php if($_item->isSaleable()): ?> + <button class="action tocart" data-mage-redirect="{event: 'click', url: '<?php echo $this->getAddToCartUrl($_item) ?>'}" type="button" title="<?php echo __('Add to Cart') ?>"> + <span><?php echo __('Add to Cart') ?></span> + </button> + <?php else: ?> + <?php if ($_item->getIsSalable()): ?> + <p class="stock available"><span><?php echo __('In stock') ?></span></p> + <?php else: ?> + <p class="stock unavailable"><span><?php echo __('Out of stock') ?></span></p> + <?php endif; ?> + <?php endif; ?> + </div> + <?php endif; ?> + + <?php if($showWishlist || $showCompare): ?> + <div class="secondary addto links"> + <?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllow() && $showWishlist): ?> + <a href="<?php echo $this->getAddToWishlistUrl($_item) ?>" class="action towishlist" data-action="add-to-wishlist" title="<?php echo __('Add to Wishlist') ?>"> + <span><?php echo __('Add to Wishlist') ?></span> + </a> + <?php endif; ?> + <?php if($this->getAddToCompareUrl($_item) && $showCompare): ?> + <a href="<?php echo $this->getAddToCompareUrl($_item) ?>" class="action tocompare" title="<?php echo __('Add to Compare') ?>"> + <span><?php echo __('Add to Compare') ?></span> + </a> + <?php endif; ?> + </div> + <?php endif; ?> + </div> + <?php endif; ?> + + </div> + </div> + <?php echo ($iterator==count($items)+1) ? '</li>' : '' ?> + <?php endforeach ?> + </ol> + <script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/mage-attributes-processing.js') ?>"); + </script> + </div> +</div> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Reports/widget/viewed/content/viewed_list.phtml b/app/design/frontend/magento_plushe/Magento_Reports/widget/viewed/content/viewed_list.phtml new file mode 100644 index 00000000000..b30e980f338 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Reports/widget/viewed/content/viewed_list.phtml @@ -0,0 +1,128 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * @see \Magento\Reports\Block\Product\Viewed + */ +?> +<?php + if ($exist = $this->getRecentlyViewedProducts()) { + $type = 'widget-viewed'; + $mode = 'list'; + + $type = $type . '-' . $mode; + + $class = 'widget viewed' . ' ' . $mode; + + $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); + $image = 'recently_viewed_products_list_content_widget'; + $title = __('Recently Viewed'); + $items = $exist; + + $showWishlist = true; + $showCompare = true; + $showCart = true; + $rating = 'short'; + $description = ($mode == 'list') ? true : false; + } +?> + +<?php if ($exist):?> +<div class="block <?php echo $class; ?>"> + <div class="title"> + <strong><?php echo $title; ?></strong> + </div> + <div class="content"> + <?php echo $this->getPagerHtml() ?> + <?php echo '<!-- ' . $image . '-->' ?> + <ol class="products list items <?php echo $type; ?>"> + <?php $iterator = 1; ?> + <?php foreach($items as $_item): ?> + <?php echo ($iterator++==1) ? '<li class="item product">' : '</li><li class="item product">' ?> + <div class="product"> + <a href="<?php echo $this->getProductUrl($_item) ?>" class="product photo"> + <?php echo $imageBlock->init($_item, $image)->toHtml() ?> + </a> + + <div class="product details"> + + <strong class="product name"><a title="<?php echo $this->escapeHtml($_item->getName()) ?>" href="<?php echo $this->getProductUrl($_item) ?>"> + <?php echo $this->escapeHtml($_item->getName()) ?></a> + </strong> + + <?php echo $this->getPriceHtml($_item, true, '-' . $type) ?> + + <?php if ($_item->getRatingSummary() && $rating): ?> + <?php echo $this->getReviewsSummaryHtml($_item,$rating) ?> + <?php endif; ?> + + <?php if($showWishlist || $showCompare || $showCart): ?> + <div class="product actions"> + + <?php if($showCart): ?> + <div class="primary"> + <?php if($_item->isSaleable()): ?> + <button class="action tocart" data-mage-redirect="{event: 'click', url: '<?php echo $this->getAddToCartUrl($_item) ?>'}" type="button" title="<?php echo __('Add to Cart') ?>"> + <span><?php echo __('Add to Cart') ?></span> + </button> + <?php else: ?> + <?php if ($_item->getIsSalable()): ?> + <p class="stock available"><span><?php echo __('In stock') ?></span></p> + <?php else: ?> + <p class="stock unavailable"><span><?php echo __('Out of stock') ?></span></p> + <?php endif; ?> + <?php endif; ?> + </div> + <?php endif; ?> + + <?php if($showWishlist || $showCompare): ?> + <div class="secondary addto links"> + <?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllow() && $showWishlist): ?> + <a href="<?php echo $this->getAddToWishlistUrl($_item) ?>" class="action towishlist" data-action="add-to-wishlist" title="<?php echo __('Add to Wishlist') ?>"> + <span><?php echo __('Add to Wishlist') ?></span> + </a> + <?php endif; ?> + <?php if($this->getAddToCompareUrl($_item) && $showCompare): ?> + <a href="<?php echo $this->getAddToCompareUrl($_item) ?>" class="action tocompare" title="<?php echo __('Add to Compare') ?>"> + <span><?php echo __('Add to Compare') ?></span> + </a> + <?php endif; ?> + </div> + <?php endif; ?> + </div> + <?php endif; ?> + + </div> + </div> + <?php echo ($iterator==count($items)+1) ? '</li>' : '' ?> + <?php endforeach ?> + </ol> + <script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('Magento_Catalog::js/mage-attributes-processing.js') ?>"); + </script> + </div> +</div> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Review/customer/list.phtml b/app/design/frontend/magento_plushe/Magento_Review/customer/list.phtml new file mode 100644 index 00000000000..a1bfcc3a450 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Review/customer/list.phtml @@ -0,0 +1,82 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if( $this->getCollection() && $this->count()): ?> + <div class="toolbar reviews"> + <?php echo $this->getToolbarHtml() ?> + </div> + <table class="data table reviews" id="my-reviews-table"> + <thead> + <tr> + <th class="col date"><?php echo __('Created') ?></th> + <th class="col item"><?php echo __('Product Name') ?></th> + <th class="col summary"><?php echo __('Summary') ?></th> + <th class="col description"><?php echo __('Description') ?></th> + <th class="col actions"> </th> + </tr> + </thead> + <tbody> + <?php foreach ($this->getCollection() as $_review): ?> + <tr> + <td class="col date"><?php echo $this->dateFormat($_review->getReviewCreatedAt()); ?></td> + <td class="col item"> + <strong class="product name"> + <a href="<?php echo $this->getProductLink() ?>id/<?php echo $_review->getEntityPkValue() ?>"><?php echo $this->escapeHtml($_review->getName()) ?></a> + </strong> + </td> + <td class="col summary"> + <?php if($_review->getSum()): ?> + <div class="rating"> + <span style="width:<?php echo ( $_review->getSum() / $_review->getCount() ) ?>%;"></span> + </div> + <?php endif; ?> + </td> + <td class="col description"> + <div class="text"> + <?php echo $this->helper('Magento\Review\Helper\Data')->getDetailHtml($_review->getDetail()) ?> + </div> + </td> + <td class="col actions"> + <a href="<?php echo $this->getReviewLink() ?>id/<?php echo $_review->getReviewId() ?>" class="action more"> + <span><?php echo __('View Details') ?></span> + </a> + </td> + </tr> + <?php endforeach; ?> + </tbody> + </table> + <div class="toolbar reviews bottom"> + <?php echo $this->getToolbarHtml() ?> + </div> +<?php else: ?> + <p class="empty"><?php echo __('You have submitted no reviews.') ?></p> +<?php endif; ?> +<div class="actions"> + <div class="secondary"> + <a class="action back" href="<?php echo $this->escapeUrl($this->getBackUrl()) ?>"> + <span><?php echo __('Back') ?></span> + </a> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Review/customer/recent.phtml b/app/design/frontend/magento_plushe/Magento_Review/customer/recent.phtml new file mode 100644 index 00000000000..3b25d298b0e --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Review/customer/recent.phtml @@ -0,0 +1,50 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if( $this->getCollection() && $this->count()): ?> +<div class="block reviews dashboard"> + <div class="title"> + <strong><?php echo __('My Recent Reviews') ?></strong> + <a class="action view" href="<?php echo $this->getAllReviewsUrl() ?>"><span><?php echo __('View All Reviews') ?></span></a> + </div> + <div class="content"> + <ol class="items"> + <?php foreach ($this->getCollection() as $_review): ?> + <li class="item"> + <strong class="product name"><a href="<?php echo $this->getReviewUrl($_review->getReviewId()) ?>"><?php echo $this->escapeHtml($_review->getName()) ?></a></strong> + <?php if($_review->getSum()): ?> + <?php $rating = $_review->getSum() / $_review->getCount() ?> + <div class="rating" title="<?php echo $rating; ?>%"> + <span style="width:<?php echo $rating; ?>%"> + <?php echo $rating; ?> + </span> + </div> + <?php endif; ?> + </li> + <?php endforeach; ?> + </ol> + </div> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Review/customer/view.phtml b/app/design/frontend/magento_plushe/Magento_Review/customer/view.phtml new file mode 100644 index 00000000000..d4816e5e5e7 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Review/customer/view.phtml @@ -0,0 +1,78 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if($this->getProductData()->getId()): ?> +<?php $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); ?> +<div class="customer review view"> + <h2 class="product name"><?php echo $this->escapeHtml($this->getProductData()->getName()) ?></h2> + <div class="product details"> + <a class="product photo" href="<?php echo $this->getProductData()->getProductUrl() ?>"> + <!-- customer_account_product_review_page --> + <?php echo $imageBlock->init($this->getProductData(), 'customer_account_product_review_page')->toHtml() ?> + </a> + <?php if( $this->getRating() && $this->getRating()->getSize()): ?> + <p><?php echo __('Average Customer Rating:') ?></p> + <?php echo $this->getReviewsSummaryHtml($this->getProductData()) ?> + <?php endif; ?> + </div> + <div class="review details"> + + <?php if( $this->getRating() && $this->getRating()->getSize()): ?> + <div class="ratings summary"> + <strong><?php echo ($this->isReviewOwner()) ? __('Your Rating:') : __('Rating:'); ?></strong> + + <?php foreach ($this->getRating() as $_rating): ?> + <?php if($_rating->getPercent()): ?> + <?php $rating = ceil($_rating->getPercent()) ?> + <div class="reviews summary item"> + <div class="label"><?php echo $this->escapeHtml($_rating->getRatingCode()) ?></div> + <div class="rating" title="<?php echo $rating; ?>%"> + <span style="width:<?php echo $rating; ?>%"> + <?php echo $rating; ?> + </span> + </div> + </div> + <?php endif; ?> + <?php endforeach; ?> + </div> + <?php endif; ?> + + <div class="review title"><?php echo $this->escapeHtml($this->getReviewData()->getTitle()) ?></div> + <p class="review date"> + <?php if ($this->isReviewOwner()): ?> + <?php echo __('Your Review (submitted on %1):', '<time class="date">' . $this->dateFormat($this->getReviewData()->getCreatedAt()) . '</time>') ?> + <?php else :?> + <?php echo __('Review (submitted on %1):', '<time class="date">' . $this->dateFormat($this->getReviewData()->getCreatedAt()) . '</time>') ?> + <?php endif;?> + </p> + <div class="review content"><?php echo nl2br($this->escapeHtml($this->getReviewData()->getDetail())) ?></div> + </div> +</div> +<div class="actions"> + <div class="secondary"> + <a class="action back" href="<?php echo $this->getBackUrl() ?>"><span><?php echo __('Back to My Reviews') ?></span></a> + </div> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Review/form.phtml b/app/design/frontend/magento_plushe/Magento_Review/form.phtml new file mode 100644 index 00000000000..16724df55f4 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Review/form.phtml @@ -0,0 +1,110 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="block add review"> + <div class="title"><strong><?php echo __('Write Your Own Review') ?></strong></div> +<div class="content"> +<?php if ($this->getAllowWriteReviewFlag()): ?> +<form action="<?php echo $this->getAction() ?>" method="post" id="review-form"> + <?php echo $this->getChildHtml('form_fields_before')?> + <fieldset class="fieldset" data-hasrequired="<?php __('* Required Fields'); ?>"> + <legend class="legend"><span><?php echo __("You're reviewing:"); ?></span><strong><?php echo $this->escapeHtml($this->getProductInfo()->getName()) ?></strong></legend><br /> + <?php if ($this->getRatings() && $this->getRatings()->getSize()): ?> + <span id="input-message-box"></span> + <div class="field ratings required"> + <label class="label"><span><?php echo __('How do you rate this product?') ?></span></label> + <div class="control"> + <div class="nested" id="product-review-table"> + <?php foreach ($this->getRatings() as $_rating): ?> + <div class="field rating"> + <label class="label"><span><?php echo $this->escapeHtml($_rating->getRatingCode()) ?></span></label> + <div class="control"> + <?php $options = $_rating->getOptions();?> + <?php $iterator = 1; foreach ($options as $_option): ?> + <input type="radio" name="ratings[<?php echo $_rating->getId() ?>]" id="<?php echo $this->escapeHtml($_rating->getRatingCode()) ?>_<?php echo $_option->getValue() ?>" value="<?php echo $_option->getId() ?>" class="radio" data-validate="{required:true, messages:{required:'Please select one of each of the ratings above.'}}" /> + <label class="rating-<?php echo $iterator; ?>" for="<?php echo $this->escapeHtml($_rating->getRatingCode()) ?>_<?php echo $_option->getValue() ?>" title="<?php echo __('%1 %2', $iterator, $iterator > 1 ? 'stars' : 'star') ?>"> + <span><?php echo __('%1 %2', $iterator, $iterator > 1 ? 'stars' : 'star') ?></span> + </label> + <?php $iterator++; ?> + <?php endforeach; ?> + </div> + </div> + <?php endforeach; ?> + </div> + <input type="hidden" name="validate_rating" class="validate-rating" value="" /> + </div> + </div> + <?php endif ?> + <div class="field nickname required"> + <label for="nickname_field" class="label"><span><?php echo __('Nickname') ?></span></label> + <div class="control"> + <input type="text" name="nickname" id="nickname_field" class="input-text" data-validate="{required:true}" value="<?php echo $this->escapeHtml($data->getNickname()) ?>" /> + </div> + </div> + <div class="field summary required"> + <label for="summary_field" class="label"><span><?php echo __('Summary of Your Review') ?></span></label> + <div class="control"> + <input type="text" name="title" id="summary_field" class="input-text" data-validate="{required:true}" value="<?php echo $this->escapeHtml($data->getTitle()) ?>" /> + </div> + </div> + <div class="field text required"> + <label for="review_field" class="label"><span><?php echo __('Review') ?></span></label> + <div class="control"> + <textarea name="detail" id="review_field" cols="5" rows="3" data-validate="{required:true}"><?php echo $this->escapeHtml($data->getDetail()) ?></textarea> + </div> + </div> + </fieldset> + <div class="actions form"> + <button type="submit" class="action submit"><span><?php echo __('Submit Review') ?></span></button> + <!-- <button type="button" class="action cancel"><span><?php echo __('Cancel') ?></span></button> --> + </div> +</form> +<script> + (function($) { + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", + function() { + $('#review-form').validation({ + errorPlacement: function (error, element) { + if (element.parents('#product-review-table').length) { + $('#product-review-table').siblings(this.errorElement + '.' + this.errorClass).remove(); + $('#product-review-table').after(error); + } else { + element.after(error); + } + } + }); + }); + })(jQuery); +</script> +<?php else: ?> + <p class="review notlogged" id="review-form"> + <?php echo __('Only registered users can write reviews. Please, <a href="%1">log in</a> or <a href="%2">register</a>', $this->getLoginLink(), $this->helper('Magento\Customer\Helper\Data')->getRegisterUrl()) ?> + </p> +<?php endif ?> +</div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Review/helper/summary.phtml b/app/design/frontend/magento_plushe/Magento_Review/helper/summary.phtml new file mode 100644 index 00000000000..a6ebbe00232 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Review/helper/summary.phtml @@ -0,0 +1,66 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $url = $this->getReviewsUrl(); ?> +<?php $urlForm = $this->getReviewsUrl() . '#review-form'; ?> +<?php //$url = $this->getProduct()->getProductUrl() . '#info-product_reviews' ?> +<?php //$urlForm = $this->getProduct()->getProductUrl() . '#info-product_reviews' ?> +<?php if ($this->getReviewsCount()): ?> +<?php $rating = $this->getRatingSummary(); ?> +<div class="product reviews summary<?php echo !$rating ? ' no-rating' :''?>"> + <?php if ($rating):?> + <div class="rating" title="<?php echo $rating; ?>%"> + <span style="width:<?php echo $rating; ?>%"> + <?php echo $rating; ?> + </span> + </div> + <?php endif;?> + <div class="reviews actions"> + <?php /* <a class="action view" href="#" onclick="var t = opener ? opener.window : window; t.location.href='<?php echo $this->getReviewsUrl() ?>'; return false;"> */ ?> + <a class="action view" href="<?php echo $url ?>"><?php echo $this->getReviewsCount() ?><span><?php echo __('Review(s)') ?></span></a> + <a class="action add" href="<?php echo $urlForm ?>"><?php echo __('Add Your Review') ?></a> + </div> +</div> +<?php elseif ($this->getDisplayIfEmpty()): ?> +<div class="product reviews summary no-reviews"> + <a class="action add" href="<?php echo $urlForm; ?>"> + <?php echo __('Be the first to review this product') ?> + </a> +</div> +<?php endif; ?> +<script type="text/javascript"> + (function($) { + $(document).ready(function() { + $('.reviews.summary .action').click(function(evt){ + if($('#product_reviews').length > 0) { + evt.preventDefault(); + $('[data-sections]').terms({start:'product_reviews'}); + } else { + return + } + }) + }); + })(jQuery); +</script> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Review/helper/summary_short.phtml b/app/design/frontend/magento_plushe/Magento_Review/helper/summary_short.phtml new file mode 100644 index 00000000000..c2c7fde574c --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Review/helper/summary_short.phtml @@ -0,0 +1,65 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $url = $this->getReviewsUrl(); ?> +<?php $urlForm = $this->getReviewsUrl() . '#review-form'; ?> +<?php //$url = $this->getProduct()->getProductUrl() . '#info-product_reviews' ?> +<?php //$urlForm = $this->getProduct()->getProductUrl() . '#info-product_reviews' ?> +<?php if ($this->getReviewsCount()): ?> +<?php $rating = $this->getRatingSummary(); ?> +<div class="product reviews summary short<?php echo !$rating ? ' no-rating' :''?>"> + <?php if ($rating):?> + <div class="rating" title="<?php echo $rating; ?>%"> + <span style="width:<?php echo $rating; ?>%"> + <?php echo $rating; ?> + </span> + </div> + <?php endif;?> + <div class="reviews actions"> + <?php /* <a class="action view" href="#" onclick="var t = opener ? opener.window : window; t.location.href='<?php echo $this->getReviewsUrl() ?>'; return false;"> */ ?> + <a class="action view" href="<?php echo $urlForm ?>"><?php echo $this->getReviewsCount() ?><span><?php echo __('Review(s)') ?></span></a> + </div> +</div> +<?php elseif ($this->getDisplayIfEmpty()): ?> +<div class="product reviews summary short no-reviews"> + <a class="action add" href="<?php echo $urlForm; ?>"> + <?php echo __('Be the first to review this product') ?> + </a> +</div> +<?php endif; ?> +<script type="text/javascript"> + (function($) { + $(document).ready(function() { + $('.reviews.summary .action').click(function(evt){ + if($('#product_reviews').length > 0) { + evt.preventDefault(); + $('[data-sections]').terms({start:'product_reviews'}); + } else { + return + } + }) + }); + })(jQuery); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Review/layout/catalog_product_view.xml b/app/design/frontend/magento_plushe/Magento_Review/layout/catalog_product_view.xml new file mode 100644 index 00000000000..c3e14735591 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Review/layout/catalog_product_view.xml @@ -0,0 +1,43 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="product.info.details"> + <block class="Magento\Catalog\Block\Product\View\Additional" name="product.info.reviews.tab" as="product_reviews"> + <arguments> + <argument name="title" translate="true" xsi:type="string">Reviews</argument> + </arguments> + <action method="addToParentGroup"> + <argument name="group" xsi:type="string">detailed_info</argument> + </action> + <block class="Magento\Review\Block\Form" name="product.review.form" as="review_form"> + <container name="product.review.form.fields.before" as="form_fields_before" label="Review Form Fields Before" htmlTag="div" htmlClass="rewards"/> + </block> + <!-- <block class="Magento\Page\Block\Html\Pager" name="product_review_list.toolbar"/> --> + <!-- <block class="Magento\Core\Block\Template" name="product_review_list.count" template="Magento_Review::product/view/count.phtml"/> --> + <block class="Magento\Review\Block\Product\View\ListView" name="product.info.product_additional_data" as="product_additional_data" template="product/view/list.phtml"/> + </block> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Review/layout/override/customer_account_index.xml b/app/design/frontend/magento_plushe/Magento_Review/layout/override/customer_account_index.xml new file mode 100644 index 00000000000..8df4eb25e23 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Review/layout/override/customer_account_index.xml @@ -0,0 +1,30 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="my.account.wrapper"> + <block class="Magento\Review\Block\Customer\Recent" name="customer_account_dashboard_info1" template="customer/recent.phtml" after="customer_account_dashboard_address"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Review/layout/override/review_product_view.xml b/app/design/frontend/magento_plushe/Magento_Review/layout/override/review_product_view.xml new file mode 100644 index 00000000000..5c720fb8ad5 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Review/layout/override/review_product_view.xml @@ -0,0 +1,35 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Catalog Product Review View" type="page" parent="review_product_list"> + <referenceBlock name="root"> + <action method="setTemplate"> + <argument name="template" xsi:type="string">1column.phtml</argument> + </action> + </referenceBlock> + <referenceContainer name="content"> + <block class="Magento\Review\Block\View" name="review_view"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Review/layout/review_product_list.xml b/app/design/frontend/magento_plushe/Magento_Review/layout/review_product_list.xml new file mode 100644 index 00000000000..4a54296ac11 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Review/layout/review_product_list.xml @@ -0,0 +1,33 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="root"> + <action method="setTemplate"> + <argument name="template" xsi:type="string">blank.phtml</argument> + </action> + <block class="Magento\Review\Block\Product\View" as="content" name="product.redirect" template="redirect.phtml"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Review/layout/review_product_view.xml b/app/design/frontend/magento_plushe/Magento_Review/layout/review_product_view.xml new file mode 100644 index 00000000000..58a124e9c15 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Review/layout/review_product_view.xml @@ -0,0 +1,28 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <update handle="page_one_column"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Review/product/view/list.phtml b/app/design/frontend/magento_plushe/Magento_Review/product/view/list.phtml new file mode 100644 index 00000000000..fc4b25f7e03 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Review/product/view/list.phtml @@ -0,0 +1,74 @@ +<?php +/** + * 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 design + * @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) + */ +?> + +<?php + $_items = $this->getReviewsCollection()->getItems(); + $format = $this->getDateFormat() ?: 'short'; +?> +<?php if (count($_items)):?> +<div class="block reviews list" id="customer-reviews"> + <div class="title"> + <strong><?php echo __('Customer Reviews') ?></strong> + </div> + <div class="content"> + <?php echo $this->getChildHtml('toolbar') ?> + <ol class="reviews items"> + <?php foreach ($_items as $_review):?> + <li class="item review"> + <div class="reviews summary"> + <?php foreach ($_review->getRatingVotes() as $_vote): ?> + <span class="label"><?php echo $this->escapeHtml($_vote->getRatingCode()) ?></span> + <div class="rating" title="<?php echo $_vote->getPercent() ?>%"> + <span style="width:<?php echo $_vote->getPercent() ?>%"> + <?php echo $_vote->getPercent() ?> + </span> + </div> + <?php endforeach; ?> + </div> + <div class="review details"> + <p class="author"> + <span><?php echo __('Review by')?></span> + <strong class="nickname"><?php echo $this->escapeHtml($_review->getNickname()) ?></strong> + </p> + <p class="review date"> + <span><?php echo __('Posted on') ?></span> + <time class="date"><?php echo $this->formatDate($_review->getCreatedAt(), $format) ?></time> + </p> + </div> + <div class="review title"><?php echo $this->escapeHtml($_review->getTitle()) ?></div> + <?php /* + <a href="<?php echo $this->getReviewUrl($_review->getId()) ?>"></a> + */?> + <div class="review content"> + <?php echo nl2br($this->escapeHtml($_review->getDetail())) ?> + </div> + </li> + <?php endforeach; ?> + </ol> + <?php echo $this->getChildHtml('toolbar') ?> + </div> +</div> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Review/redirect.phtml b/app/design/frontend/magento_plushe/Magento_Review/redirect.phtml new file mode 100644 index 00000000000..63372095a6e --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Review/redirect.phtml @@ -0,0 +1,32 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/* if(isset($GET['limit'])) { + $limit = $GET['limit'] + }*/ + header("Location:{$this->getProduct()->getProductUrl()}#info-product_reviews"); + exit; +?> diff --git a/app/design/frontend/magento_plushe/Magento_Review/view.phtml b/app/design/frontend/magento_plushe/Magento_Review/view.phtml new file mode 100644 index 00000000000..e75d946912a --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Review/view.phtml @@ -0,0 +1,64 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if($this->getProductData()->getId()): ?> +<div class="product-review"> + <div class="page-title"> + <h1><?php echo __('Review Details') ?></h1> + </div> + <div class="product-img-box"> + <a href="<?php echo $this->getProductData()->getProductUrl() ?>"><img src="<?php echo $this->getBaseImageUrl($this->getProductData()); ?>" height="<?php echo $this->getBaseImageSize()?>" width="<?php echo $this->getBaseImageSize()?>" alt="<?php echo $this->escapeHtml($this->getProductData()->getName()) ?>" class="product-image" /></a> + <?php if( $this->getRating() && $this->getRating()->getSize()): ?> + <p><?php echo __('Average Customer Rating') ?>:</p> + <?php echo $this->getReviewsSummaryHtml($this->getProductData()) ?> + <?php endif; ?> + </div> + <div class="details"> + <h3 class="product-name"><?php echo $this->escapeHtml($this->getProductData()->getName()) ?></h3> + <?php if( $this->getRating() && $this->getRating()->getSize()): ?> + <h4><?php echo __('Product Rating:') ?></h4> + + <table class="data-table review-summary-table"> + <?php foreach ($this->getRating() as $_rating): ?> + <?php if($_rating->getPercent()): ?> + <tr> + <td class="label"><?php echo __($this->escapeHtml($_rating->getRatingCode())) ?></td> + <td class="value"> + <div class="rating-box"> + <div class="rating" style="width:<?php echo ceil($_rating->getPercent()) ?>%;"></div> + </div></td> + </tr> + <?php endif; ?> + <?php endforeach; ?> + </table> + <?php endif; ?> + <p class="date"><?php echo __('Product Review (submitted on %1):', $this->dateFormat($this->getReviewData()->getCreatedAt())) ?></p> + <p><?php echo nl2br($this->escapeHtml($this->getReviewData()->getDetail())) ?></p> + </div> + <div class="buttons-set"> + <p class="back-link"><a href="<?php echo $this->getBackUrl() ?>"><small>« </small><?php echo __('Back to Product Reviews') ?></a></p> + </div> +</div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/billing/agreement/view.phtml b/app/design/frontend/magento_plushe/Magento_Sales/billing/agreement/view.phtml new file mode 100644 index 00000000000..f352e60e34c --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/billing/agreement/view.phtml @@ -0,0 +1,101 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php /* @var $this \Magento\Sales\Block\Billing\Agreement\View */ ?> +<div class="block billing agreements"> + <div class="title"> + <strong><?php echo __('Billing Agreement # %1', $this->escapeHtml($this->getReferenceId())) ?></strong> + <?php if ($this->getCanCancel()): ?> + <button type="button" title="<?php echo __('Cancel') ?>" class="secondary action cancel" onclick="if( confirm('<?php echo __('Are you sure you want to do this?') ?>') ) { window.location.href = '<?php echo $this->getCancelUrl() ?>'; } return false;"> + <span><?php echo __('Cancel') ?></span> + </button> + <?php endif; ?> + </div> + <div class="content"> + <h2 class="subtitle caption"><?php echo __('Agreement Information') ?></h2> + <table class="data table"> + <thead> + <tr> + <th class="col id"><?php echo __('Reference ID:'); ?></th> + <th class="col status"><?php echo __('Status:'); ?></th> + <th class="col created"><?php echo __('Created:'); ?></th> + <?php if($this->getAgreementUpdatedAt()): ?> + <th class="col updated"><?php echo __('Updated:'); ?></th> + <?php endif; ?> + <th class="col payment"><?php echo __('Payment Method:'); ?></th> + </tr> + </thead> + <tbody> + <tr> + <td class="col id"><?php echo $this->escapeHtml($this->getReferenceId()); ?></td> + <td class="col status"><?php echo $this->getAgreementStatus() ?></td> + <td class="col created"><?php echo $this->escapeHtml($this->getAgreementCreatedAt()) ?></td> + <?php if($this->getAgreementUpdatedAt()): ?> + <td class="col updated"><?php echo $this->escapeHtml($this->getAgreementUpdatedAt()); ?></td> + <?php endif; ?> + <td class="col payment"><?php echo $this->getPaymentMethodTitle() ?></td> + </tr> + </tbody> + </table> + + <?php $relatedOrders = $this->getRelatedOrders() ?> + <?php if(count($relatedOrders) > 0): ?> + <?php echo $this->getChildHtml('pager'); ?> + <h2 class="subtitle caption"><?php echo __('Related Orders') ?></h2> + <table class="data table" id="related-orders-table"> + <thead> + <tr> + <th class="col id"><?php echo __('Order #') ?></th> + <th class="col date"><?php echo __('Date') ?></th> + <th class="col shipto"><?php echo __('Ship To') ?></th> + <th class="col total"><?php echo __('Order Total') ?></th> + <th class="col status"><?php echo __('Order Status') ?></th> + <th class="col actions"> </th> + </tr> + </thead> + <tbody> + <?php foreach ($relatedOrders as $order): ?> + <tr> + <th class="col id"><?php echo $this->getOrderItemValue($order, 'order_increment_id') ?></th> + <th class="col date"><?php echo $this->getOrderItemValue($order, 'created_at') ?></th> + <th class="col shipto"><?php echo $this->getOrderItemValue($order, 'shipping_address') ?></th> + <th class="col total"><?php echo $this->getOrderItemValue($order, 'order_total') ?></th> + <th class="col status"><?php echo $this->getOrderItemValue($order, 'status_label') ?></th> + <th class="col actions"> + <a href="<?php echo $this->getOrderItemValue($order, 'view_url') ?>"><?php echo __('View Order') ?></a> + </th> + </tr> + <?php endforeach; ?> + </tbody> + </table> + <?php endif; ?> + + <div class="actions"> + <div class="secondary"> + <a href="<?php echo $this->getBackUrl() ?>" class="action back"><?php echo __('Back to Billing Agreements') ?></a> + </div> + </div> + </div> +</div> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Sales/billing/agreements.phtml b/app/design/frontend/magento_plushe/Magento_Sales/billing/agreements.phtml new file mode 100644 index 00000000000..e8d240d9002 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/billing/agreements.phtml @@ -0,0 +1,91 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php /* @var $this \Magento\Sales\Block\Billing\Agreements */ ?> +<div class="block billing agreements"> + <?php $billingAgreements = $this->getBillingAgreements(); ?> + <?php if (count($billingAgreements) > 0): ?> + <?php echo $this->getChildHtml('pager'); ?> + <table id="billing-agreements" class="data table billing agreements"> + <thead> + <tr> + <th class="col id"><?php echo __('Reference ID'); ?></th> + <th class="col status"><?php echo __('Status'); ?></th> + <th class="col created"><?php echo __('Created At'); ?></th> + <th class="col updated"><?php echo __('Updated At'); ?></th> + <th class="col payment"><?php echo __('Payment Method'); ?></th> + <th class="col actions"> </th> + </tr> + </thead> + <tbody> + <?php foreach($billingAgreements as $item): ?> + <tr> + <td class="col id"><?php echo $this->getItemValue($item, 'reference_id') ?></td> + <td class="col status"><?php echo $this->getItemValue($item, 'status') ?></td> + <td class="col created"><?php echo $this->getItemValue($item, 'created_at') ?></td> + <td class="col updated"><?php echo $this->getItemValue($item, 'updated_at') ?></td> + <td class="col payment"><?php echo $this->getItemValue($item, 'payment_method_label') ?></td> + <td class="col actions"> + <a href="<?php echo $this->getItemValue($item, 'edit_url') ?>"><?php echo __('View') ?></a> + </td> + </tr> + <?php endforeach; ?> + </tbody> + </table> + <?php else: ?> + <p class="no agreements"><?php echo __('There are no billing agreements yet.')?></p> + <?php endif; ?> + + <?php $paymentMethods = $this->getWizardPaymentMethodOptions() ?> + <?php if ($paymentMethods): ?> + <h2 class="subtitle caption"><?php echo __('New Billing Agreement') ?></h2> + + <form action="<?php echo $this->getCreateUrl() ?>" method="post" class="form new agreement"> + <fieldset class="fieldset"> + <p class="note"><?php echo __('You will be redirected to the payment system website.') ?></p> + + <div class="field payment method"> + <div class="control"> + <select id="payment_method" name="payment_method"> + <option value=""><?php echo __('-- Please Select --') ?></option> + <?php foreach ($paymentMethods as $code => $title): ?> + <option value="<?php echo $code ?>"><?php echo $title ?></option> + <?php endforeach; ?> + </select> + </div> + </div> + <button type="submit" class="primary action create"> + <span><?php echo __('Create...') ?></span> + </button> + </fieldset> + </form> + <?php endif; ?> + + <div class="actions"> + <div class="secondary"> + <a href="<?php echo $this->escapeHtml($this->getBackUrl()) ?>" class="action back"><span><?php echo __('Back') ?></span></a> + </div> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/guest/form.phtml b/app/design/frontend/magento_plushe/Magento_Sales/guest/form.phtml new file mode 100644 index 00000000000..7965d508ecf --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/guest/form.phtml @@ -0,0 +1,75 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<form class="form orders search" id="oar-widget-orders-and-returns-form" action="<?php echo $this->getActionUrl() ?>" method="post" class="search-form" name="guest_post"> + <fieldset class="fieldset"> + <legend class="legend"><span><?php echo __('Order Information') ?></span></legend><br /> + <div class="field required"> + <label class="label" for="oar-order-id"><span><?php echo __('Order ID') ?></span></label> + <div class="control"> + <input type="text" class="input-text" id="oar-order-id" name="oar_order_id" data-validate="{required:true}"/> + </div> + </div> + <div class="field required"> + <label class="label" for="oar-billing-lastname"><span><?php echo __('Billing Last Name') ?></span></label> + <div class="control"> + <input type="text" class="input-text" id="oar-billing-lastname" name="oar_billing_lastname" data-validate="{required:true}"/> + </div> + </div> + <div class="field required"> + <label class="label" for="quick-search-type-id"><span><?php echo __('Find Order By:') ?></span></label> + <div class="control"> + <select name="oar_type" id="quick-search-type-id" class="select"> + <option value="email"><?php echo __('Email Address'); ?></option> + <option value="zip"><?php echo __('ZIP Code'); ?></option> + </select> + </div> + </div> + <div id="oar-email" class="field required"> + <label class="label" for="oar_email"><span><?php echo __('Email Address') ?></span></label> + <div class="control"> + <input type="text" class="input-text" id="oar_email" name="oar_email" data-validate="{required:true, 'validate-email':true}"/> + </div> + </div> + <div id="oar-zip" class="field required"> + <label class="label" for="oar_zip"><span><?php echo __('Billing ZIP Code') ?></span></label> + <div class="control"> + <input type="text" class="input-text" id="oar_zip" name="oar_zip" data-validate="{required:true}"/> + </div> + </div> + </fieldset> + <div class="actions"> + <button type="submit" title="<?php echo __('Continue') ?>" class="action submit"><span><?php echo __('Continue') ?></span></button> + </div> +</form> +<script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", + "<?php echo $this->getViewFileUrl('Magento_Sales::orders-returns.js');?>", function() { + jQuery('#oar-widget-orders-and-returns-form').ordersReturns().validation(); + }); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/layout/override/customer_account_index.xml b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/customer_account_index.xml new file mode 100644 index 00000000000..20442ea3140 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/customer_account_index.xml @@ -0,0 +1,30 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="my.account.wrapper"> + <block class="Magento\Sales\Block\Order\Recent" name="customer_account_dashboard_top" after="customer_account_dashboard_hello" template="order/recent.phtml"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/layout/override/default.xml b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/default.xml new file mode 100644 index 00000000000..f62b5835f3f --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/default.xml @@ -0,0 +1,38 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceContainer name="right"> + <block class="Magento\Sales\Block\Reorder\Sidebar" name="sale.reorder.sidebar" as="reorder" template="reorder/sidebar.phtml"/> + </referenceContainer> + <referenceBlock name="footer_links"> + <block class="Magento\Sales\Block\Guest\Link" name="sales-guest-form-link"> + <arguments> + <argument name="label" xsi:type="string">Orders and Returns</argument> + <argument name="href" xsi:type="string">sales/guest/form</argument> + </arguments> + </block> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_guest_view.xml b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_guest_view.xml new file mode 100644 index 00000000000..0e6bfb02a39 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_guest_view.xml @@ -0,0 +1,51 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Guest Order View" type="page" parent="default"> + <referenceBlock name="root"> + <action method="setTemplate"> + <argument name="template" xsi:type="string">1column.phtml</argument> + </action> + </referenceBlock> + <referenceContainer name="content"> + <block class="Magento\Sales\Block\Order\Info" as="info" name="sales.order.info"> + <block class="Magento\Sales\Block\Order\Info\Buttons" as="buttons" name="sales.order.info.buttons"/> + </block> + <block class="Magento\Sales\Block\Order\View" name="sales.order.view" after="sales.order.info"> + <block class="Magento\Sales\Block\Order\Items" name="order_items" template="order/items.phtml"> + <block class="Magento\Sales\Block\Order\Item\Renderer\DefaultRenderer" as="default" template="order/items/renderer/default.phtml"/> + <block class="Magento\Sales\Block\Order\Item\Renderer\Grouped" as="grouped" template="order/items/renderer/default.phtml"/> + <block class="Magento\Sales\Block\Order\Totals" name="order_totals" template="order/totals.phtml"> + <arguments> + <argument name="label_properties" xsi:type="string">colspan="4" class="mark"</argument> + <argument name="value_properties" xsi:type="string">class="amount"</argument> + </arguments> + <block class="Magento\Tax\Block\Sales\Order\Tax" name="tax" template="order/tax.phtml"/> + </block> + </block> + </block> + </referenceContainer> + <update handle="sales_order_info_links"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_creditmemo.xml b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_creditmemo.xml new file mode 100644 index 00000000000..194a0cd2434 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_creditmemo.xml @@ -0,0 +1,49 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Customer My Account Order Creditmemo View" type="page" parent="sales_order_view"> + <update handle="customer_account"/> + <referenceBlock name="my.account.wrapper"> + <block class="Magento\Sales\Block\Order\Info" as="info" name="sales.order.info"> + <block class="Magento\Sales\Block\Order\Info\Buttons" as="buttons" name="sales.order.info.buttons"/> + </block> + <block class="Magento\Sales\Block\Order\Creditmemo" name="sales.order.creditmemo" after="sales.order.info"> + <block class="Magento\Sales\Block\Order\Creditmemo\Items" name="creditmemo_items" template="order/creditmemo/items.phtml"> + <block class="Magento\Sales\Block\Order\Item\Renderer\DefaultRenderer" as="default" template="order/creditmemo/items/renderer/default.phtml"/> + <block class="Magento\Sales\Block\Order\Item\Renderer\Grouped" as="grouped" template="order/creditmemo/items/renderer/default.phtml"/> + <block class="Magento\Sales\Block\Order\Creditmemo\Totals" name="creditmemo_totals" template="order/totals.phtml"> + <arguments> + <argument name="label_properties" xsi:type="string">colspan="6" class="mark"</argument> + <argument name="value_properties" xsi:type="string">class="amount"</argument> + </arguments> + <block class="Magento\Tax\Block\Sales\Order\Tax" name="tax" template="order/tax.phtml"/> + </block> + <block class="Magento\Sales\Block\Order\Comments" name="creditmemo_comments" template="order/comments.phtml"/> + </block> + </block> + </referenceBlock> + <update handle="sales_order_info_links"/> + <container name="additional.product.info" label="Additional Product Info"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_info_links.xml b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_info_links.xml new file mode 100644 index 00000000000..20aa47ee1d7 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_info_links.xml @@ -0,0 +1,61 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <referenceBlock name="sales.order.info"> + <block class="Magento\Page\Block\Links" as="links" name="sales.order.info.links"> + <arguments> + <argument name="css_class" xsi:type="string">items</argument> + </arguments> + <block class="Magento\Sales\Block\Order\Link" name="sales.order.info.links.billing-agreements"> + <arguments> + <argument name="path" xsi:type="string">sales/order/view</argument> + <argument name="label" xsi:type="string">Order Information</argument> + </arguments> + </block> + <block class="Magento\Sales\Block\Order\Link" name="sales.order.info.links.invoice"> + <arguments> + <argument name="key" xsi:type="string">Invoices</argument> + <argument name="path" xsi:type="string">sales/order/invoice</argument> + <argument name="label" xsi:type="string">Invoices</argument> + </arguments> + </block> + <block class="Magento\Sales\Block\Order\Link" name="sales.order.info.links.shipment"> + <arguments> + <argument name="key" xsi:type="string">Shipments</argument> + <argument name="path" xsi:type="string">sales/order/shipment</argument> + <argument name="label" xsi:type="string">Order Shipments</argument> + </arguments> + </block> + <block class="Magento\Sales\Block\Order\Link" name="sales.order.info.links.creditmemo"> + <arguments> + <argument name="key" xsi:type="string">Creditmemos</argument> + <argument name="path" xsi:type="string">sales/order/creditmemo</argument> + <argument name="label" xsi:type="string">Refunds</argument> + </arguments> + </block> + </block> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_invoice.xml b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_invoice.xml new file mode 100644 index 00000000000..f40d14e2ee5 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_invoice.xml @@ -0,0 +1,49 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Customer My Account Order Invoice View" type="page" parent="sales_order_view"> + <update handle="customer_account"/> + <referenceBlock name="my.account.wrapper"> + <block class="Magento\Sales\Block\Order\Info" as="info" name="sales.order.info"> + <block class="Magento\Sales\Block\Order\Info\Buttons" as="buttons" name="sales.order.info.buttons"/> + </block> + <block class="Magento\Sales\Block\Order\Invoice" name="sales.order.invoice" after="sales.order.info"> + <block class="Magento\Sales\Block\Order\Invoice\Items" name="invoice_items" template="order/invoice/items.phtml"> + <block class="Magento\Sales\Block\Order\Item\Renderer\DefaultRenderer" as="default" template="order/invoice/items/renderer/default.phtml"/> + <block class="Magento\Sales\Block\Order\Item\Renderer\Grouped" as="grouped" template="order/invoice/items/renderer/default.phtml"/> + <block class="Magento\Sales\Block\Order\Invoice\Totals" name="invoice_totals" template="order/totals.phtml"> + <arguments> + <argument name="label_properties" xsi:type="string">colspan="4" class="mark"</argument> + <argument name="value_properties" xsi:type="string">class="amount"</argument> + </arguments> + <block class="Magento\Tax\Block\Sales\Order\Tax" name="tax" template="order/tax.phtml"/> + </block> + <block class="Magento\Sales\Block\Order\Comments" name="invoice_comments" template="order/comments.phtml"/> + </block> + </block> + </referenceBlock> + <update handle="sales_order_info_links"/> + <container name="additional.product.info" label="Additional Product Info"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_printorder.xml b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_printorder.xml new file mode 100644 index 00000000000..7f7eff98c8d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_printorder.xml @@ -0,0 +1,45 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Sales Order Print View" type="page" parent="print"> + <referenceContainer name="content"> + <block class="Magento\Sales\Block\Order\PrintShipment" name="sales.order.print" template="order/print.phtml"> + <block class="Magento\Sales\Block\Order\Item\Renderer\DefaultRenderer" as="default" template="order/items/renderer/default.phtml"/> + <block class="Magento\Sales\Block\Order\Item\Renderer\Grouped" as="grouped" template="order/items/renderer/default.phtml"/> + <block class="Magento\Sales\Block\Order\Totals" name="order_totals" template="order/totals.phtml"> + <arguments> + <argument name="label_properties" xsi:type="string">colspan="4" class="mark"</argument> + <argument name="value_properties" xsi:type="string">class="amount"</argument> + </arguments> + <block class="Magento\Tax\Block\Sales\Order\Tax" name="tax" template="order/tax.phtml"> + <arguments> + <argument name="is_plane_mode" xsi:type="string">1</argument> + </arguments> + </block> + </block> + </block> + </referenceContainer> + <container name="additional.product.info" label="Additional Product Info"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_printordercreditmemo.xml b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_printordercreditmemo.xml new file mode 100644 index 00000000000..71bc0ee17df --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_printordercreditmemo.xml @@ -0,0 +1,41 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Sales Creditmemo Print View" type="page" parent="sales_order_print"> + <referenceContainer name="content"> + <block class="Magento\Sales\Block\Order\PrintOrder\Creditmemo" name="sales.order.print.creditmemo" template="order/print/creditmemo.phtml"> + <block class="Magento\Sales\Block\Order\Item\Renderer\DefaultRenderer" as="default" template="order/creditmemo/items/renderer/default.phtml"/> + <block class="Magento\Sales\Block\Order\Item\Renderer\Grouped" as="grouped" template="order/creditmemo/items/renderer/default.phtml"/> + <block class="Magento\Sales\Block\Order\Creditmemo\Totals" name="creditmemo_totals" template="order/totals.phtml"> + <arguments> + <argument name="label_properties" xsi:type="string">colspan="6" class="mark"</argument> + <argument name="value_properties" xsi:type="string">class="amount"</argument> + </arguments> + <block class="Magento\Tax\Block\Sales\Order\Tax" name="tax" template="order/tax.phtml"/> + </block> + </block> + </referenceContainer> + <container name="additional.product.info" label="Additional Product Info"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_printorderinvoice.xml b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_printorderinvoice.xml new file mode 100644 index 00000000000..cca9e34aee1 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_printorderinvoice.xml @@ -0,0 +1,41 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Sales Invoice Print View" type="page" parent="sales_order_print"> + <referenceContainer name="content"> + <block class="Magento\Sales\Block\Order\PrintOrder\Invoice" name="sales.order.print.invoice" template="order/print/invoice.phtml"> + <block class="Magento\Sales\Block\Order\Item\Renderer\DefaultRenderer" as="default" template="order/invoice/items/renderer/default.phtml"/> + <block class="Magento\Sales\Block\Order\Item\Renderer\Grouped" as="grouped" template="order/invoice/items/renderer/default.phtml"/> + <block class="Magento\Sales\Block\Order\Invoice\Totals" name="invoice_totals" template="order/totals.phtml"> + <arguments> + <argument name="label_properties" xsi:type="string">colspan="4" class="mark"</argument> + <argument name="value_properties" xsi:type="string">class="amount"</argument> + </arguments> + <block class="Magento\Tax\Block\Sales\Order\Tax" name="tax" template="order/tax.phtml"/> + </block> + </block> + </referenceContainer> + <container name="additional.product.info" label="Additional Product Info"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_view.xml b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_view.xml new file mode 100644 index 00000000000..8ea32e55ea7 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/layout/override/sales_order_view.xml @@ -0,0 +1,48 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Customer My Account Order View" type="page" parent="default"> + <update handle="customer_account"/> + <referenceBlock name="my.account.wrapper"> + <block class="Magento\Sales\Block\Order\Info" as="info" name="sales.order.info"> + <block class="Magento\Sales\Block\Order\Info\Buttons" as="buttons" name="sales.order.info.buttons"/> + </block> + <block class="Magento\Sales\Block\Order\View" name="sales.order.view" after="sales.order.info"> + <block class="Magento\Sales\Block\Order\Items" name="order_items" template="order/items.phtml"> + <block class="Magento\Sales\Block\Order\Item\Renderer\DefaultRenderer" as="default" template="order/items/renderer/default.phtml"/> + <block class="Magento\Sales\Block\Order\Item\Renderer\Grouped" as="grouped" template="order/items/renderer/default.phtml"/> + <block class="Magento\Sales\Block\Order\Totals" name="order_totals" template="order/totals.phtml"> + <arguments> + <argument name="label_properties" xsi:type="string">colspan="4" class="mark"</argument> + <argument name="value_properties" xsi:type="string">class="amount"</argument> + </arguments> + <block class="Magento\Tax\Block\Sales\Order\Tax" name="tax" template="order/tax.phtml"/> + </block> + </block> + </block> + </referenceBlock> + <update handle="sales_order_info_links"/> + <container name="additional.product.info" label="Additional Product Info"/> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/comments.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/comments.phtml new file mode 100644 index 00000000000..bd9d1a61b54 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/comments.phtml @@ -0,0 +1,42 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * @var $this \Magento\Sales\Block\Order\Comments + * @see \Magento\Sales\Block\Order\Comments + */ +?> +<?php if ($this->hasComments()):?> + <div class="order additional details comments"> + <h3 class="subtitle"><?php echo $this->getTitle() ?></h3> + <dl class="order comments"> + <?php foreach ($this->getComments() as $_commentItem): ?> + <dt class="comment date"><?php echo $this->formatDate($_commentItem->getCreatedAtStoreDate(), 'medium', true) ?></dt> + <dd class="comment text"><?php echo $this->escapeHtml($_commentItem->getComment()) ?></dd> + <?php endforeach; ?> + </dl> + </div> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/creditmemo.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/creditmemo.phtml new file mode 100644 index 00000000000..247b9c52366 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/creditmemo.phtml @@ -0,0 +1,35 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="order details items creditmemo"> + <?php echo $this->getChildHtml('creditmemo_items') ?> + <div class="actions"> + <div class="secondary"> + <a href="<?php echo $this->getBackUrl() ?>" class="action back"> + <span><?php echo $this->getBackTitle() ?></span> + </a> + </div> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/creditmemo/items.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/creditmemo/items.phtml new file mode 100644 index 00000000000..5c3d8d85590 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/creditmemo/items.phtml @@ -0,0 +1,72 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_order = $this->getOrder() ?> +<div class="order toolbar"> + <div class="actions"> + <a href="<?php echo $this->getPrintAllCreditmemosUrl($_order) ?>" + onclick="this.target='_blank'" + class="action print"> + <span><?php echo __('Print All Refunds') ?></span> + </a> + </div> +</div> +<?php foreach ($_order->getCreditmemosCollection() as $_creditmemo): ?> +<div class="order title"> + <strong><?php echo __('Refund #') ?><?php echo $_creditmemo->getIncrementId(); ?> </strong> + <a href="<?php echo $this->getPrintCreditmemoUrl($_creditmemo) ?>" + onclick="this.target='_blank'" + class="action print"> + <span><?php echo __('Print Refund') ?></span> + </a> +</div> + +<div class="order subtitle caption"><strong><?php echo __('Items Refunded') ?></strong></div> +<table class="data table order items creditmemo" id="my-refund-table-<?php echo $_creditmemo->getId(); ?>"> + <thead> + <tr> + <th class="col name"><?php echo __('Product Name') ?></th> + <th class="col sku"><?php echo __('SKU') ?></th> + <th class="col price"><?php echo __('Price') ?></th> + <th class="col qty"><?php echo __('Qty') ?></th> + <th class="col subtotal"><?php echo __('Subtotal') ?></th> + <th class="col discount"><?php echo __('Discount Amount') ?></th> + <th class="col total"><?php echo __('Row Total') ?></th> + </tr> + </thead> + <tfoot> + <?php echo $this->getTotalsHtml($_creditmemo);?> + </tfoot> + <?php $_items = $_creditmemo->getAllItems(); ?> + <?php $_count = count($_items) ?> + <?php foreach ($_items as $_item): ?> + <?php if ($_item->getOrderItem()->getParentItem()) continue; ?> + <tbody> + <?php echo $this->getItemHtml($_item) ?> + </tbody> + <?php endforeach; ?> +</table> +<?php echo $this->getCommentsHtml($_creditmemo)?> +<?php endforeach; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/creditmemo/items/renderer/default.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/creditmemo/items/renderer/default.phtml new file mode 100644 index 00000000000..65f32a6e195 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/creditmemo/items/renderer/default.phtml @@ -0,0 +1,315 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php $_item = $this->getItem() ?> +<?php $_order = $this->getItem()->getOrderItem()->getOrder() ?> +<tr class="border" id="order-item-row-<?php echo $_item->getId() ?>"> + <td class="col name"> + <strong class="product name"><?php echo $this->escapeHtml($_item->getName()) ?></strong> + <?php if($_options = $this->getItemOptions()): ?> + <dl class="item options"> + <?php foreach ($_options as $_option) : ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <?php if (!$this->getPrintStatus()): ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>><?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <div class="truncated_full_value"> + <dl class="item options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + </div> + <?php endif; ?> + </dd> + <?php else: ?> + <dd><?php echo $this->escapeHtml( (isset($_option['print_value']) ? $_option['print_value'] : $_option['value']) ) ?></dd> + <?php endif; ?> + <?php endforeach; ?> + </dl> + <?php endif; ?> + + <!-- downloadable --> + <?php if ($links = $this->getLinks()): ?> + <dl class="item options"> + <dt><?php echo $this->getLinksTitle() ?></dt> + <?php foreach ($links->getPurchasedItems() as $link): ?> + <dd><?php echo $this->escapeHtml($link->getLinkTitle()); ?></dd> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <!-- EOF downloadable --> + + <?php $addInfoBlock = $this->getProductAdditionalInformationBlock(); ?> + <?php if ($addInfoBlock) :?> + <?php echo $addInfoBlock->setItem($_item->getOrderItem())->toHtml(); ?> + <?php endif; ?> + <?php echo $this->escapeHtml($_item->getDescription()) ?> + <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $_item->getOrderItem()) && $_item->getGiftMessageId()): ?> + <a href="#" id="order-item-gift-message-link-<?php echo $_item->getId() ?>" class="gift-message-link" aria-controls="order-item-gift-message-<?php echo $_item->getId()?>" data-item-id="<?php echo $_item->getId()?>"><?php echo __('Gift Message') ?></a> + <?php endif; ?> + </td> + <td class="col sku"><?php echo $this->escapeHtml($this->helper('Magento\Core\Helper\String')->splitInjection($this->getSku())) ?></td> + <td class="col price"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()) ?> + <?php endif; ?> + + </span> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxDisposition()) ?> + <?php endif; ?> + + </span> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="unit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <?php endif; ?> + </td> + <td class="col qty"><?php echo $_item->getQty()*1 ?></td> + <td class="col subtotal"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()) ?> + <?php endif; ?> + + </span> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedRowAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxRowDisposition()) ?> + <?php endif; ?> + + </span> + + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedRowAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + + + + </span> + <?php endif; ?> + </td> + <td class="col discount"><?php echo $_order->formatPrice(-$_item->getDiscountAmount()) ?></td> + <td class="cot total"> + <?php echo $_order->formatPrice($_item->getRowTotal()-$_item->getDiscountAmount()+$_item->getTaxAmount()+$_item->getWeeeTaxAppliedRowAmount()) ?> + </td> +</tr> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/history.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/history.phtml new file mode 100644 index 00000000000..e5bc8f2590c --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/history.phtml @@ -0,0 +1,66 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_orders = $this->getOrders(); ?> +<?php echo $this->getChildHtml('info');?> +<div class="order toolbar"><?php echo $this->getPagerHtml(); ?></div> +<?php if($_orders->getSize()): ?> +<table class="data table orders history" id="my-orders-table"> + <thead> + <tr> + <th class="col id"><?php echo __('Order #') ?></th> + <th class="col date"><?php echo __('Date') ?></th> + <th class="col shipping"><?php echo __('Ship To') ?></th> + <th class="col total"><?php echo __('Order Total') ?></th> + <th class="col status"><?php echo __('Status') ?></th> + <th class="col actions"> </th> + </tr> + </thead> + <tbody> + <?php foreach ($_orders as $_order): ?> + <tr> + <td class="col id"><?php echo $_order->getRealOrderId() ?></td> + <td class="col date"><?php echo $this->formatDate($_order->getCreatedAtStoreDate()) ?></td> + <td class="col shipping"><?php echo $_order->getShippingAddress() ? $this->escapeHtml($_order->getShippingAddress()->getName()) : ' ' ?></td> + <td class="col total"><?php echo $_order->formatPrice($_order->getGrandTotal()) ?></td> + <td class="col status"><em><?php echo $_order->getStatusLabel() ?></em></td> + <td class="col actions"> + <a href="<?php echo $this->getViewUrl($_order) ?>" class="action view"> + <span><?php echo __('View Order') ?></span> + </a> + <?php if ($this->helper('Magento\Sales\Helper\Reorder')->canReorder($_order)) : ?> + <a href="<?php echo $this->getReorderUrl($_order) ?>" class="action order"> + <span><?php echo __('Reorder') ?></span> + </a> + <?php endif ?> + </td> + </tr> + <?php endforeach; ?> + </tbody> +</table> +<div class="order toolbar bottom"><?php echo $this->getPagerHtml(); ?></div> +<?php else: ?> + <p><?php echo __('You have placed no orders.'); ?></p> +<?php endif ?> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/info.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/info.phtml new file mode 100644 index 00000000000..d5491807095 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/info.phtml @@ -0,0 +1,77 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php /** @var $this \Magento\Sales\Block\Order\Info */ ?> +<?php $_order = $this->getOrder() ?> +<div class="order details view"> + <strong class="order status"><?php echo $_order->getStatusLabel() ?></strong> + <div class="order toolbar"> + <?php echo $this->getChildHtml('buttons') ?> + <?php echo $this->getStatusHistoryRssUrl($_order) ?> + </div> + <dl class="order info"> + <dt><?php echo __('About This Order:') ?></dt> + <dd> + <?php echo $this->getChildHtml('links') ?> + </dd> + </dl> + <p class="order date"><?php echo __('<span class="label">Order Date:</span> %1', '<date>' . $this->formatDate($_order->getCreatedAtStoreDate(), 'long') . '</date>' ) ?></p> +<?php if (!$_order->getIsVirtual()): ?> + <div class="block order shipping address"> + <div class="title"><strong><?php echo __('Shipping Address') ?></strong></div> + <div class="content"> + <address><?php echo $_order->getShippingAddress()->format('html') ?></address> + </div> + </div> + + <div class="block order shipping method"> + <div class="title"><strong><?php echo __('Shipping Method') ?></strong></div> + <div class="content"> + <?php if ($_order->getShippingDescription()): ?> + <?php echo $this->escapeHtml($_order->getShippingDescription()) ?> + <?php else: ?> + <?php echo __('No shipping information available'); ?> + <?php endif; ?> + </div> + </div> + +<?php endif; ?> + <div class="block order billing address"> + <div class="title"> + <strong><?php echo __('Billing Address') ?></strong> + </div> + <div class="content"> + <address><?php echo $_order->getBillingAddress()->format('html') ?></address> + </div> + </div> + <div class="block order billing method"> + <div class="title"> + <strong><?php echo __('Payment Method') ?></strong> + </div> + <div class="content"> + <?php echo $this->getPaymentInfoHtml() ?> + </div> + </div> +</div> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/info/buttons.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/info/buttons.phtml new file mode 100644 index 00000000000..345c5e73577 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/info/buttons.phtml @@ -0,0 +1,45 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="actions"> + <?php $_order = $this->getOrder() ?> + <?php if ($this->helper('Magento\Sales\Helper\Reorder')->canReorder($_order)) : ?> + <a class="action reorder" href="<?php echo $this->getReorderUrl($_order) ?>"> + <span><?php echo __('Reorder') ?></span> + </a> + <?php endif ?> + <a class="action print" + href="<?php echo $this->getPrintUrl($_order) ?>" + onclick="this.target='_blank';"> + <span><?php echo __('Print Order') ?></span> + </a> + <?php if($this->helper('Magento\Rss\Helper\Order')->isStatusNotificationAllow()): ?> + <a href="<?php echo $this->helper('Magento\Rss\Helper\Order')->getStatusHistoryRssUrl($_order) ?>" + class="action rss"> + <span><?php echo __('Subscribe to Order Status') ?></span> + </a> + <?php endif; ?> + <?php echo $this->getChildHtml(); ?> +</div> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/invoice.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/invoice.phtml new file mode 100644 index 00000000000..fff36854de1 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/invoice.phtml @@ -0,0 +1,35 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="order details items invoice"> + <?php echo $this->getChildHtml('invoice_items') ?> + <div class="actions"> + <div class="secondary"> + <a href="<?php echo $this->getBackUrl() ?>" class="action back"> + <span><?php echo $this->getBackTitle() ?></span> + </a> + </div> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/invoice/items.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/invoice/items.phtml new file mode 100644 index 00000000000..b9be6d9379d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/invoice/items.phtml @@ -0,0 +1,69 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_order = $this->getOrder() ?> +<div class="order toolbar"> + <div class="actions"> + <a href="<?php echo $this->getPrintAllInvoicesUrl($_order) ?>" + target="_blank" + class="action print"> + <span><?php echo __('Print All Invoices') ?></span> + </a> + </div> +</div> +<?php foreach ($_order->getInvoiceCollection() as $_invoice): ?> +<div class="order title"> + <strong><?php echo __('Invoice #') ?><?php echo $_invoice->getIncrementId(); ?></strong> + <a href="<?php echo $this->getPrintInvoiceUrl($_invoice) ?>" + onclick="this.target='_blank'" + class="action print"> + <span><?php echo __('Print Invoice') ?></span> + </a> +</div> +<div class="order subtitle caption"><strong><?php echo __('Items Invoiced') ?></strong></div> +<table class="data table order items invoice" id="my-invoice-table-<?php echo $_invoice->getId(); ?>"> + <thead> + <tr> + <th class="col name"><?php echo __('Product Name') ?></th> + <th class="col sku"><?php echo __('SKU') ?></th> + <th class="col price"><?php echo __('Price') ?></th> + <th class="col qty"><?php echo __('Qty Invoiced') ?></th> + <th class="col subtotal"><?php echo __('Subtotal') ?></th> + </tr> + </thead> + <tfoot> + <?php echo $this->getInvoiceTotalsHtml($_invoice)?> + </tfoot> + <?php $_items = $_invoice->getAllItems(); ?> + <?php $_count = count($_items) ?> + <?php foreach ($_items as $_item): ?> + <?php if ($_item->getOrderItem()->getParentItem()) continue; ?> + <tbody> + <?php echo $this->getItemHtml($_item) ?> + </tbody> + <?php endforeach; ?> +</table> +<?php echo $this->getInvoiceCommentsHtml($_invoice)?> +<?php endforeach; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/invoice/items/renderer/default.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/invoice/items/renderer/default.phtml new file mode 100644 index 00000000000..2cfb7fdce17 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/invoice/items/renderer/default.phtml @@ -0,0 +1,295 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_item = $this->getItem() ?> +<?php $_order = $this->getItem()->getOrderItem()->getOrder() ?> +<tr id="order-item-row-<?php echo $_item->getId() ?>"> + <td class="col name"> + <strong class="product name"><?php echo $this->escapeHtml($_item->getName()) ?></strong> + <?php if($_options = $this->getItemOptions()): ?> + <dl class="item options"> + <?php foreach ($_options as $_option) : ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <?php if (!$this->getPrintStatus()): ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>> + <?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <div class="truncated_full_value"> + <dl class="item options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + </div> + <?php endif; ?> + </dd> + <?php else: ?> + <dd><?php echo $this->escapeHtml( (isset($_option['print_value']) ? $_option['print_value'] : $_option['value']) ) ?></dd> + <?php endif; ?> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <?php $addInfoBlock = $this->getProductAdditionalInformationBlock(); ?> + <?php if ($addInfoBlock) :?> + <?php echo $addInfoBlock->setItem($_item->getOrderItem())->toHtml(); ?> + <?php endif; ?> + <?php echo $this->escapeHtml($_item->getDescription()) ?> + <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $_item->getOrderItem()) && $_item->getGiftMessageId()): ?> + <a href="#" id="order-item-gift-message-link-<?php echo $_item->getId() ?>" class="gift-message-link" aria-controls="order-item-gift-message-<?php echo $_item->getId()?>" data-item-id="<?php echo $_item->getId()?>"><?php echo __('Gift Message') ?></a> + <?php endif; ?> + </td> + <td class="col sku"><?php echo $this->escapeHtml($this->helper('Magento\Core\Helper\String')->splitInjection($this->getSku())) ?></td> + <td class="col price"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()) ?> + <?php endif; ?> + + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxDisposition()) ?> + <?php endif; ?> + + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="unit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <?php endif; ?> + </td> + <td class="col qty"> + <span class="qty summary"><?php echo $_item->getQty()*1 ?></span> + </td> + <td class="col subtotal"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()) ?> + <?php endif; ?> + + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedRowAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxRowDisposition()) ?> + <?php endif; ?> + + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedRowAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + + </span> + <?php endif; ?> + </td> +</tr> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/items.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/items.phtml new file mode 100644 index 00000000000..0ab62e2dc07 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/items.phtml @@ -0,0 +1,79 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_order = $this->getOrder() ?> +<?php $_giftMessage; ?> +<table class="data table order items" id="my-orders-table" summary="<?php echo __('Items Ordered') ?>"> + <thead> + <tr> + <th class="col name"><?php echo __('Product Name') ?></th> + <th class="col sku"><?php echo __('SKU') ?></th> + <th class="col price"><?php echo __('Price') ?></th> + <th class="col qty"><?php echo __('Qty') ?></th> + <th class="col subtotal"><?php echo __('Subtotal') ?></th> + </tr> + </thead> + <tfoot> + <?php echo $this->getChildHtml('order_totals') ?> + </tfoot> + <?php $_items = $_order->getItemsCollection(); ?> + <?php $_index = 0; ?> + <?php $_count = $_items->count(); ?> + <?php $_giftMessage = ''?> + <?php foreach ($_items as $_item): ?> + <?php if ($_item->getParentItem()) continue; ?> + <tbody> + <?php echo $this->getItemHtml($_item) ?> + <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $_item) && $_item->getGiftMessageId()): ?> + <tr id="order-item-gift-message-<?php echo $_item->getId() ?>" role="region" aria-expanded="false" tabindex="-1" style="display:none;"> + <?php $_giftMessage = $this->helper('Magento\GiftMessage\Helper\Message')->getGiftMessageForEntity($_item); ?> + <td class="col message" colspan="7"> + <div class="gift message details"> + <a href="#" + title="<?php echo __('Close') ?>" + aria-controls="order-item-gift-message-<?php echo $_item->getId()?>" + data-item-id="<?php echo $_item->getId()?>" + class="action close"> + <?php echo __('Close') ?> + </a> + <dl class="gift message"> + <dt class="gift sender"><strong class="label"><?php echo __('From:') ?></strong> <?php echo $this->escapeHtml($_giftMessage->getSender()) ?></dt> + <dt class="gift recipient"><strong class="label"><?php echo __('To:') ?></strong> <?php echo $this->escapeHtml($_giftMessage->getRecipient()) ?></dt> + <dd class="message text"><?php echo $this->helper('Magento\GiftMessage\Helper\Message')->getEscapedGiftMessage($_item) ?></dd> + </dl> + </div> + </td> + </tr> + <?php endif ?> + </tbody> + <?php endforeach; ?> +</table> +<?php if ($_giftMessage): ?> + <script type="text/javascript"> + head.js("<?php echo $this->getViewFileUrl('Magento_Sales::gift-message.js')?>", function() { + jQuery('a.action.show').add('a.action.close').giftMessage(); + }); + </script> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/items/renderer/default.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/items/renderer/default.phtml new file mode 100644 index 00000000000..f0c35ef35a6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/items/renderer/default.phtml @@ -0,0 +1,317 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_item = $this->getItem() ?> +<tr id="order-item-row-<?php echo $_item->getId() ?>"> + <td class="col name"> + <strong class="product name"><?php echo $this->escapeHtml($_item->getName()) ?></strong> + <?php if($_options = $this->getItemOptions()): ?> + <dl class="item options"> + <?php foreach ($_options as $_option) : ?> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <?php if (!$this->getPrintStatus()): ?> + <?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?> + <dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated" data-mage-init="{truncateOptions:[]}"<?php endif; ?>> + <?php echo $_formatedOptionValue['value'] ?> + <?php if (isset($_formatedOptionValue['full_view'])): ?> + <div class="truncated_full_value"> + <dl class="item options"> + <dt><?php echo $this->escapeHtml($_option['label']) ?></dt> + <dd><?php echo $_formatedOptionValue['full_view'] ?></dd> + </dl> + </div> + <?php endif; ?> + </dd> + <?php else: ?> + <dd> + <?php echo nl2br($this->escapeHtml( (isset($_option['print_value']) ? $_option['print_value'] : $_option['value']) )) ?> + </dd> + <?php endif; ?> + <?php endforeach; ?> + </dl> + <?php endif; ?> + <?php $addtInfoBlock = $this->getProductAdditionalInformationBlock(); ?> + <?php if ($addtInfoBlock) :?> + <?php echo $addtInfoBlock->setItem($_item)->toHtml(); ?> + <?php endif; ?> + <?php echo $this->escapeHtml($_item->getDescription()) ?> + <?php if ($this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order_item', $_item) && $_item->getGiftMessageId()): ?> + <a href="#" + id="order-item-gift-message-link-<?php echo $_item->getId() ?>" + class="action show" + aria-controls="order-item-gift-message-<?php echo $_item->getId()?>" + data-item-id="<?php echo $_item->getId()?>"> + <?php echo __('Gift Message') ?> + </a> + <?php endif; ?> + </td> + <td class="col sku"><?php echo $this->escapeHtml($this->helper('Magento\Core\Helper\String')->splitInjection($this->getSku())) ?></td> + <td class="col price"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()) ?> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getPrice()+$this->getItem()->getWeeeTaxAppliedAmount()+$this->getItem()->getWeeeTaxDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getPriceInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxDisposition()) ?> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="unit-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $this->getItem()->getId(); ?>"}' + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <?php endif; ?> + </td> + <td class="col qty"> + <span class="qty summary"> + <?php if ($this->getItem()->getQtyOrdered() > 0): ?> + <?php echo __('Ordered'); ?>: <strong><?php echo $this->getItem()->getQtyOrdered()*1 ?></strong><br /> + <?php endif; ?> + <?php if ($this->getItem()->getQtyShipped() > 0): ?> + <?php echo __('Shipped'); ?>: <strong><?php echo $this->getItem()->getQtyShipped()*1 ?></strong><br /> + <?php endif; ?> + <?php if ($this->getItem()->getQtyCanceled() > 0): ?> + <?php echo __('Canceled'); ?>: <strong><?php echo $this->getItem()->getQtyCanceled()*1 ?></strong><br /> + <?php endif; ?> + <?php if ($this->getItem()->getQtyRefunded() > 0): ?> + <?php echo __('Refunded'); ?>: <strong><?php echo $this->getItem()->getQtyRefunded()*1 ?></strong><br /> + <?php endif; ?> + </span> + </td> + <td class="col subtotal"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <span class="price-excl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Excl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()) ?> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()+$this->getItem()->getWeeeTaxAppliedRowAmount()+$this->getItem()->getWeeeTaxRowDisposition()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + </span> + <br /> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <span class="price-incl-tax"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices()): ?> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-price"> + <?php endif; ?> + <span class="label"><?php echo __('Incl. Tax'); ?>:</span> + <?php if (!$this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + </span> + <?php endif; ?> + <?php endif; ?> + <?php $_incl = $this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($this->getItem()); ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <?php else: ?> + <span class="cart-price"> + <?php endif; ?> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), array(0, 1, 4), 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedRowAmount()); ?> + <?php else: ?> + <?php echo $this->getOrder()->formatPrice($_incl-$this->getItem()->getWeeeTaxRowDisposition()) ?> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem())): ?> + + <span class="cart-tax-info" id="subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>" style="display:none;"> + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 1, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount']); ?></span> + <?php endforeach; ?> + </small> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></small></span> + <?php endforeach; ?> + <?php elseif ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 4, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <small> + <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($this->getItem()) as $tax): ?> + <span class="nobr"><?php echo $tax['title']; ?>: <?php echo $this->getOrder()->formatPrice($tax['row_amount_incl_tax']); ?></span> + <?php endforeach; ?> + </small> + <?php endif; ?> + </span> + + <?php if ($this->helper('Magento\Weee\Helper\Data')->typeOfDisplay($this->getItem(), 2, 'sales') && (float)$this->getItem()->getWeeeTaxAppliedAmount()): ?> + <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $this->getItem()->getId(); ?>"}'> + <span class="nobr"><?php echo __('Total incl. tax'); ?>:<br /> <?php echo $this->getOrder()->formatPrice($_incl+$this->getItem()->getWeeeTaxAppliedRowAmount()); ?></span> + </span> + <?php endif; ?> + <?php endif; ?> + + </span> + <?php endif; ?> + </td> + <!-- + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceExclTax()): ?> + <th class="a-right"><?php echo $this->getOrder()->formatPrice($this->getItem()->getRowTotal()) ?></th> + <?php endif; ?> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displaySalesBothPrices() || $this->helper('Magento\Tax\Helper\Data')->displaySalesPriceInclTax()): ?> + <th class="a-right"><?php echo $this->getOrder()->formatPrice($this->helper('Magento\Checkout\Helper\Data')->getSubtotalInclTax($this->getItem())); ?></th> + <?php endif; ?> + --> +</tr> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/print.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/print.phtml new file mode 100644 index 00000000000..90b9eaacd63 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/print.phtml @@ -0,0 +1,98 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php $_order = $this->getOrder() ?> +<div class="page title"> + <h1 class="title"><?php echo __('Order #%1', $_order->getRealOrderId()) ?></h1> +</div> +<p class="order-date"><?php echo __('Order Date: %1', $this->formatDate($_order->getCreatedAtStoreDate(), 'long')) ?></p> + +<div class="order details view"> + <div class="block order shipping address"> + <div class="title"> + <strong><?php echo __('Shipping Address') ?></strong> + </div> + <div class="content"> + <address><?php echo $_order->getShippingAddress()->format('html') ?></address> + </div> + </div> + <div class="block order billing address"> + <div class="title"> + <strong><?php echo __('Billing Address') ?></strong> + </div> + <div class="content"> + <address><?php echo $_order->getBillingAddress()->format('html') ?></address> + </div> + </div> + <?php if (!$_order->getIsVirtual()): ?> + <div class="block order shipping method"> + <div class="title"> + <strong><?php echo __('Shipping Method') ?></strong> + </div> + <?php echo $this->escapeHtml($_order->getShippingDescription()) ?> + </div> + <?php endif; ?> + <div class="block order shipping"> + <div class="title"> + <strong><?php echo __('Payment Method') ?></strong> + </div> + <div class="content"> + <?php echo $this->getPaymentInfoHtml() ?> + </div> + </div> +</div> + +<div class="order details items"> + <div class="order subtitle caption"> + <strong><?php echo __('Items Ordered') ?></strong> + </div> + <table class="data table order items" id="my-orders-table"> + <thead> + <tr> + <th class="col name"><?php echo __('Product Name') ?></th> + <th class="col sku"><?php echo __('SKU') ?></th> + <th class="col price"><?php echo __('Price') ?></th> + <th class="col qty"><?php echo __('Qty') ?></th> + <th class="a-right"><?php echo __('Subtotal') ?></th> + </tr> + </thead> + <tfoot> + <?php echo $this->getChildHtml('order_totals') ?> + </tfoot> + <?php $_items = $_order->getItemsCollection(); ?> + <?php $_count = $_items->count(); ?> + <?php foreach ($_items as $_item): ?> + <?php if ($_item->getParentItem()) continue; ?> + <tbody> + <?php echo $this->getItemHtml($_item) ?> + </tbody> + <?php endforeach; ?> + </table> +</div> +<script type="text/javascript">(function ($) { + $('#my-orders-table').decorate('table', {'tbody':['odd', 'even'], 'tbody tr':['first', 'last']}) +})(jQuery)</script> +<script type="text/javascript">window.print();</script> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/print/creditmemo.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/print/creditmemo.phtml new file mode 100644 index 00000000000..4d2a53c668e --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/print/creditmemo.phtml @@ -0,0 +1,117 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php $_order = $this->getOrder() ?> +<div class="page title"> + <h1 class="title"><?php echo __('Order #%1', $_order->getRealOrderId()) ?></h1> +</div> +<p class="order-date"><?php echo __('Order Date: %1', $this->formatDate($_order->getCreatedAtStoreDate(), 'long')) ?></p> +<?php $_creditmemo = $this->getCreditmemo() ?> +<?php if($_creditmemo): ?> + <?php $_creditmemos = array($_creditmemo); ?> +<?php else: ?> + <?php $_creditmemos = $_order->getCreditmemosCollection() ?> +<?php endif; ?> +<?php foreach ($_creditmemos as $_creditmemo): ?> + <div class="order details view"> + <div class="title"> + <strong><?php echo __('Refund #%1', $_creditmemo->getIncrementId()) ?></strong> + </div> + + <div class="block order shipping address"> + <?php if (!$_order->getIsVirtual()): ?> + <div class="title"> + <strong><?php echo __('Shipping Address') ?></strong> + </div> + <div class="content"> + <?php $_shipping = $_creditmemo->getShippingAddress() ?> + <address><?php echo $_shipping->format('html') ?></address> + </div> + </div> + + <div class="block order billing address"> + <?php endif; ?> + <div class="title"> + <strong><?php echo __('Billing Address') ?></strong> + </div> + <div class="content"> + <?php $_billing = $_creditmemo->getbillingAddress() ?> + <address><?php echo $_order->getBillingAddress()->format('html') ?></address> + </div> + </div> + + <?php if (!$_order->getIsVirtual()): ?> + <div class="block order shipping method"> + <div class="title"> + <strong><?php echo __('Shipping Method') ?></strong> + </div> + <div class="content"> + <?php echo $this->escapeHtml($_order->getShippingDescription()) ?> + </div> + </div> + <?php endif; ?> + <div class="block order payment method"> + <div class="title"> + <strong><?php echo __('Payment Method') ?></strong> + </div> + <div class="content"> + <?php echo $this->getPaymentInfoHtml() ?> + </div> + </div> + + </div> + <div class="order details items"> + <div class="order subtitle caption"> + <strong><?php echo __('Items Refunded') ?></strong> + </div> + <table class="data table order items" id="my-refund-table-<?php echo $_creditmemo->getId(); ?>"> + <thead> + <tr> + <th class="col name"><?php echo __('Product Name') ?></th> + <th class="col sku"><?php echo __('SKU') ?></th> + <th class="col price"><?php echo __('Price') ?></th> + <th class="col qty"><?php echo __('Qty') ?></th> + <th class="col subtotal"><?php echo __('Subtotal') ?></th> + <th class="col discount"><?php echo __('Discount Amount') ?></th> + <th class="col rowtotal"><?php echo __('Row Total') ?></th> + </tr> + </thead> + <tfoot> + <?php echo $this->getTotalsHtml($_creditmemo);?> + </tfoot> + <?php $_items = $_creditmemo->getAllItems(); ?> + <?php $_count = count($_items); ?> + <?php foreach ($_items as $_item): ?> + <?php if ($_item->getOrderItem()->getParentItem()) continue; ?> + <tbody> + <?php echo $this->getItemHtml($_item) ?> + </tbody> + <?php endforeach; ?> + </table> + </div> +<script type="text/javascript">(function($) {$('#my-refund-table-<?php echo $_creditmemo->getId(); ?>').decorate('table', {'tbody': ['odd','even'], 'tbody tr': ['first','last']})})(jQuery)</script> +<?php endforeach; ?> +<script type="text/javascript">window.print();</script> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/print/invoice.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/print/invoice.phtml new file mode 100644 index 00000000000..0c5043a86c6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/print/invoice.phtml @@ -0,0 +1,115 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php $_order = $this->getOrder() ?> +<div class="page title"> + <h1 class="title"><?php echo __('Order #%1', $_order->getRealOrderId()) ?></h1> +</div> +<p class="order date"><?php echo __('Order Date: %1', $this->formatDate($_order->getCreatedAtStoreDate(), 'long')) ?></p> +<?php $_invoice = $this->getInvoice() ?> +<?php if ($_invoice): ?> +<?php $_invoices = array($_invoice); ?> +<?php else: ?> +<?php $_invoices = $_order->getInvoiceCollection() ?> +<?php endif; ?> +<?php foreach ($_invoices as $_invoice): ?> +<div class="order details view"> + <div class="title"> + <strong><?php echo __('Invoice #%1', $_invoice->getIncrementId()) ?></strong> + </div> + + <div class="block order shipping address"> + <?php if (!$_order->getIsVirtual()): ?> + <div class="title"> + <strong><?php echo __('Shipping Address') ?></strong> + </div> + <div class="content"> + <?php $_shipping = $_invoice->getShippingAddress() ?> + <address><?php echo $_shipping->format('html') ?></address> + </div> + </div> + <div class="block order billing address"> + <?php endif; ?> + <div class="title"> + <strong><?php echo __('Billing Address') ?></strong> + </div> + <div class="content"> + <?php $_billing = $_invoice->getbillingAddress() ?> + <address><?php echo $_order->getBillingAddress()->format('html') ?></address> + </div> + </div> + <?php if (!$_order->getIsVirtual()): ?> + + <div class="block order shipping method"> + <div class="title"> + <strong><?php echo __('Shipping Method') ?></strong> + </div> + <div class="content"> + <?php echo $this->escapeHtml($_order->getShippingDescription()) ?> + </div> + </div> + <?php endif; ?> + <div class="block order payment method"> + <div class="title"> + <strong><?php echo __('Payment Method') ?></strong> + </div> + <div class="content"> + <?php echo $this->getPaymentInfoHtml() ?> + </div> + </div> +</div> +<div class="order details items"> + <div class="order subtitle caption"> + <strong><?php echo __('Items Invoiced') ?></strong> + </div> + <table class="data table order items" id="my-invoice-table-<?php echo $_invoice->getId(); ?>"> + <thead> + <tr> + <th class="col name"><?php echo __('Product Name') ?></th> + <th class="col sku"><?php echo __('SKU') ?></th> + <th class="col price"><?php echo __('Price') ?></th> + <th class="col qty"><span class="nobr"><?php echo __('Qty Invoiced') ?></span></th> + <th class="col subtotal"><?php echo __('Subtotal') ?></th> + </tr> + </thead> + <tfoot> + <?php echo $this->getInvoiceTotalsHtml($_invoice)?> + </tfoot> + <?php $_items = $_invoice->getItemsCollection(); ?> + <?php $_count = $_items->count(); ?> + <?php foreach ($_items as $_item): ?> + <?php if ($_item->getOrderItem()->getParentItem()) continue; ?> + <tbody> + <?php echo $this->getItemHtml($_item) ?> + </tbody> + <?php endforeach; ?> + </table> +</div> +<script type="text/javascript">(function ($) { + $('#my-invoice-table-<?php echo $_invoice->getId(); ?>').decorate('table', {'tbody':['odd', 'even'], 'tbody tr':['first', 'last']}) +})(jQuery)</script> +<?php endforeach; ?> +<script type="text/javascript">window.print();</script> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/print/shipment.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/print/shipment.phtml new file mode 100644 index 00000000000..dd0510a86cc --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/print/shipment.phtml @@ -0,0 +1,123 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php /* @var $this \Magento\Sales\Block\Order\PrintOrder\Shipment */ ?> +<?php $order = $this->getOrder(); ?> +<div class="page title"> + <h1 class="title"> + <?php echo __('Order #%1', $this->getObjectData($order, 'real_order_id')); ?> + </h1> +</div> +<p class="order-date"><?php echo __('Order Date: %1', $this->formatDate($this->getObjectData($order, 'created_at_store_date'), 'long')) ?></p> +<?php if (!$this->getObjectData($order, 'is_virtual')): ?> +<?php foreach ($this->getShipmentsCollection() as $shipment): ?> + <div class="order details view"> + <div class="title"> + <strong><?php echo __('Shipment #%1', $this->getObjectData($shipment, 'increment_id')); ?></strong> + </div> + + <div class="block order shipping address"> + <div class="title"> + <strong><?php echo __('Shipping Address') ?></strong> + </div> + <div class="content"> + <address><?php echo $this->getShipmentAddressFormattedHtml($shipment); ?></address> + </div> + </div> + + <div class="block order billing address"> + <div class="title"> + <strong><?php echo __('Billing Address') ?></strong> + </div> + <div class="content"> + <address><?php echo $this->getBillingAddressFormattedHtml($order); ?></address> + </div> + </div> + + <div class="block order shipping method"> + <div class="title"> + <strong><?php echo __('Shipping Method') ?></strong> + </div> + <?php echo $this->escapeHtml($this->getObjectData($order, 'shipping_description')); ?> + <?php $tracks = $this->getShipmentTracks($shipment); + if ($tracks): ?> + <table class="data table order tracking" id="my-shipment-tracking"> + <thead> + <tr> + <th class="label"><?php echo __('Title')?></th> + <th><?php echo __('Number')?></th> + </tr> + </thead> + <tbody> + <?php foreach ($tracks as $track): ?> + <tr> + <td class="label"><?php echo $this->escapeHtml($this->getObjectData($track, 'title')); ?></td> + <td><?php echo $this->escapeHtml($this->getObjectData($track, 'number')); ?></td> + </tr> + <?php endforeach; ?> + </tbody> + </table> + <script type="text/javascript">(function ($) { + $('#my-shipment-tracking').decorate('table') + })(jQuery)</script> + <?php endif; ?> + </div> + + <div class="block order payment method"> + <div class="title"> + <strong><?php echo __('Payment Method') ?></strong> + </div> + <div class="content"> + <?php echo $this->getPaymentInfoHtml() ?> + </div> + </div> + + </div> + <div class="order details items"> + <div class="order subtitle caption"> + <strong><?php echo __('Items Shipped') ?></strong> + </div> + <table class="data table order items" id="my-shipment-table-<?php echo $this->getObjectData($shipment, 'id') ?>"> + <thead> + <tr> + <th class="col name"><?php echo __('Product Name') ?></th> + <th class="col sku"><?php echo __('SKU') ?></th> + <th class="col price"><span class="nobr"><?php echo __('Qty Shipped') ?></span></th> + </tr> + </thead> + <?php foreach ($this->getShipmentItems($shipment) as $item): ?> + <tbody> + <?php echo $this->getItemHtml($item) ?> + </tbody> + <?php endforeach; ?> + </table> + </div> + <script type="text/javascript">(function ($) { + $('#my-shipment-table-<?php echo $this->getObjectData($shipment, 'id')?>').decorate('table', {'tbody':['odd', 'even'], 'tbody tr':['first', 'last']}) + })(jQuery)</script> + <?php endforeach; ?> +<?php endif; ?> +<script type="text/javascript">window.print();</script> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/recent.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/recent.phtml new file mode 100644 index 00000000000..35af465a6a1 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/recent.phtml @@ -0,0 +1,76 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="block dashboard orders"> +<?php $_orders = $this->getOrders(); ?> + <div class="order title"> + <strong><?php echo __('Recent Orders') ?></strong> + <?php if( sizeof($_orders->getItems()) > 0 ): ?> + <a class="action view" href="<?php echo $this->getUrl('sales/order/history') ?>"> + <span><?php echo __('View All') ?></span> + </a> + <?php endif; ?> + </div> + <div class="content"> + <?php echo $this->getChildHtml()?> + <?php if( sizeof($_orders->getItems()) > 0 ): ?> + <table class="data table orders recent" id="my-orders-table"> + <thead> + <tr> + <th class="col id"><?php echo __('Order #') ?></th> + <th class="col date"><?php echo __('Date') ?></th> + <th class="col shipping"><?php echo __('Ship To') ?></th> + <th class="col total"><?php echo __('Order Total') ?></th> + <th class="col status"><?php echo __('Status') ?></th> + <th class="col actions"> </th> + </tr> + </thead> + <tbody> + <?php foreach ($_orders as $_order): ?> + <tr> + <td class="col id"><?php echo $_order->getRealOrderId() ?></td> + <td class="col date"><?php echo $this->formatDate($_order->getCreatedAtStoreDate()) ?></td> + <td class="col shipping"><?php echo $_order->getShippingAddress() ? $this->escapeHtml($_order->getShippingAddress()->getName()) : ' ' ?></td> + <td class="col total"><?php echo $_order->formatPrice($_order->getGrandTotal()) ?></td> + <td class="col status"><em><?php echo $_order->getStatusLabel() ?></em></td> + <td class="col actions"> + <a href="<?php echo $this->getViewUrl($_order) ?>" class="action view"> + <span><?php echo __('View Order') ?></span> + </a> + <?php if ($this->helper('Magento\Sales\Helper\Reorder')->canReorder($_order)) : ?> + <a href="<?php echo $this->getReorderUrl($_order) ?>" class="action order"> + <span><?php echo __('Reorder') ?></span> + </a> + <?php endif ?> + </td> + </tr> + <?php endforeach; ?> + </tbody> + </table> + <?php else: ?> + <p class="empty"><?php echo __('You have placed no orders.'); ?></p> + <?php endif; ?> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/shipment.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/shipment.phtml new file mode 100644 index 00000000000..191012ded18 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/shipment.phtml @@ -0,0 +1,35 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="order items details shipments"> + <?php echo $this->getChildHtml('shipment_items') ?> + <div class="actions"> + <div class="secondary"> + <a href="<?php echo $this->getBackUrl() ?>" class="action back"> + <span><?php echo $this->getBackTitle() ?></span> + </a> + </div> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/shipment/items.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/shipment/items.phtml new file mode 100644 index 00000000000..23843a765be --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/shipment/items.phtml @@ -0,0 +1,105 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_order = $this->getOrder() ?> +<div class="order toolbar"> + <div class="actions"> + <?php if ($_order->getTracksCollection()->count()) : ?> + <a href="#" + data-mage-init="{popupWindow: {windowURL:'<?php echo $this->helper('Magento\Shipping\Helper\Data')->getTrackingPopupUrlBySalesModel($_order) ?>',windowName:'trackorder',width:800,height:600,top:0,left:0,resizable:1,scrollbars:1}}" title="<?php echo __('Track all shipment(s)') ?>" + class="action track"> + <span><?php echo __('Track all shipments') ?></span> + </a> + <?php endif; ?> + <a href="<?php echo $this->getPrintAllShipmentsUrl($_order) ?>" + onclick="this.target='_blank'" + class="action print"> + <span><?php echo __('Print All Shipments') ?></span> + </a> + </div> +</div> +<?php foreach ($_order->getShipmentsCollection() as $_shipment): ?> +<div class="order title"> + <strong><?php echo __('Shipment #') ?><?php echo $_shipment->getIncrementId(); ?></strong> + <a href="<?php echo $this->getPrintShipmentUrl($_shipment) ?>" + onclick="this.target='_blank'" + class="action print"> + <span><?php echo __('Print Shipment') ?></span + </a> + <a href="#" + data-mage-init="{popupWindow: {windowURL:'<?php echo $this->helper('Magento\Shipping\Helper\Data')->getTrackingPopupUrlBySalesModel($_shipment) ?>',windowName:'trackshipment',width:800,height:600,top:0,left:0,resizable:1,scrollbars:1}}" + title="<?php echo __('Track this shipment') ?>" + class="action track"> + <span><?php echo __('Track this shipment') ?></span> + </a> +</div> +<?php $tracks = $_shipment->getTracksCollection(); ?> +<?php if ($tracks->count()): ?> + <table class="data table order tracking" id="my-tracking-table-<?php echo $_shipment->getId(); ?>"> + <tbody> + <tr> + <th class="label"><?php echo __('Tracking Number(s):') ?></th> + <td> + <?php + $i = 1; + $_size = $tracks->count(); + foreach($tracks as $track): ?> + <?php if($track->isCustom()): ?> + <?php echo $this->escapeHtml($track->getNumber()) ?> + <?php else: ?> + <a href="#" + data-mage-init="{popupWindow: {windowURL:'<?php echo $this->helper('Magento\Shipping\Helper\Data')->getTrackingPopupUrlBySalesModel($track) ?>',windowName:'trackorder',width:800,height:600,left:0,top:0,resizable:1,scrollbars:1}}" + class="action track"> + <span><?php echo $this->escapeHtml($track->getNumber()) ?></span> + </a> + <?php endif; ?> + <?php if($i!=$_size): ?>, <?php endif; ?> + <?php $i++; + endforeach; ?> + </td> + </tr> + </tbody> + </table> +<?php endif; ?> +<div class="order subtitle caption"><strong><?php echo __('Items Shipped') ?></strong></div> +<table class="data table order items shipment" id="my-shipment-table-<?php echo $_shipment->getId(); ?>"> + <thead> + <tr> + <th class="col name"><?php echo __('Product Name') ?></th> + <th class="col sku"><?php echo __('SKU') ?></th> + <th class="col qty"><?php echo __('Qty Shipped') ?></th> + </tr> + </thead> + <?php $_items = $_shipment->getAllItems(); ?> + <?php $_count = count($_items) ?> + <?php foreach ($_items as $_item): ?> + <?php if ($_item->getOrderItem()->getParentItem()) continue; ?> + <tbody> + <?php echo $this->getItemHtml($_item) ?> + </tbody> + <?php endforeach; ?> +</table> +<?php echo $this->getCommentsHtml($_shipment)?> +<?php endforeach; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/order/view.phtml b/app/design/frontend/magento_plushe/Magento_Sales/order/view.phtml new file mode 100644 index 00000000000..5c6065afbe0 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/order/view.phtml @@ -0,0 +1,73 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="order details items"> + <?php $_order = $this->getOrder() ?> + + <div class="order subtitle caption"> + <strong><?php echo __('Items Ordered') ?></strong> + <?php if ($_order->getTracksCollection()->count()) : ?> + <a href="#" + data-mage-init="{popupWindow: {windowURL:'<?php echo $this->helper('Magento\Shipping\Helper\Data')->getTrackingPopupUrlBySalesModel($_order) ?>',windowName:'trackorder',top:0,left:0,width:800,height:600,resizable:1,scrollbars:1}}" + title="<?php echo __('Track your order') ?>" + class="action track"> + <span><?php echo __('Track your order') ?></span> + </a> + <?php endif; ?> + </div> + + <?php echo $this->getChildHtml('order_items') ?> + + <?php if($this->helper('Magento\GiftMessage\Helper\Message')->getIsMessagesAvailable('order', $_order) && $_order->getGiftMessageId()): ?> + <div class="order additional details gift"> + <div class="order subtitle caption"><strong><?php echo __('Gift Message for This Order') ?></strong></div> + <?php $_giftMessage=$this->helper('Magento\GiftMessage\Helper\Message')->getGiftMessageForEntity($_order); ?> + <dl class="gift message"> + <dt class="gift sender"><strong class="label"><?php echo __('From:') ?></strong> <?php echo $this->escapeHtml($_giftMessage->getSender()) ?></dt> + <dt class="gift recipient"><strong class="label"><?php echo __('To:') ?></strong> <?php echo $this->escapeHtml($_giftMessage->getRecipient()) ?></dt> + <dd class="message text"><?php echo $this->helper('Magento\GiftMessage\Helper\Message')->getEscapedGiftMessage($_order) ?></dd> + </dl> + </div> + <?php endif; ?> + <?php $_history = $this->getOrder()->getVisibleStatusHistory() ?> + <?php if (count($_history)): ?> + <div class="order additional details comments"> + <div class="order subtitle caption"><strong><?php echo __('About Your Order') ?></strong></div> + <dl class="order comments"> + <?php foreach ($_history as $_historyItem): ?> + <dt class="comment date"><?php echo $this->formatDate($_historyItem->getCreatedAtStoreDate(), 'medium', true) ?></dt> + <dd class="comment text"><?php echo $this->escapeHtml($_historyItem->getComment()) ?></dd> + <?php endforeach; ?> + </dl> + </div> + <?php endif; ?> + <div class="actions"> + <div class="secondary"> + <a class="action back" href="<?php echo $this->getBackUrl() ?>"> + <span><?php echo $this->getBackTitle() ?></span> + </a> + </div> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/recurring/profiles.phtml b/app/design/frontend/magento_plushe/Magento_Sales/recurring/profiles.phtml new file mode 100644 index 00000000000..ad0f270ca55 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/recurring/profiles.phtml @@ -0,0 +1,38 @@ +<?php +/** + * 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 design + * @package base_default + * @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) + */ +?> +<?php /* @var $this \Magento\Sales\Block\Recurring\Profiles */ ?> +<?php echo $this->getMessagesBlock()->getGroupedHtml() ?> + +<div class="block recurring profiles"> + <?php echo $this->getChildHtml('grid')?> + + <div class="actions"> + <div class="secondary"> + <a href="<?php echo $this->escapeUrl($this->getBackUrl()) ?>" class="action back"><span><?php echo __('Back') ?></span></a> + </div> + </div> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/reorder/sidebar.phtml b/app/design/frontend/magento_plushe/Magento_Sales/reorder/sidebar.phtml new file mode 100644 index 00000000000..92f812bc6d2 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/reorder/sidebar.phtml @@ -0,0 +1,85 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php +/** + * Last order sidebar + * + * @see \Magento\Sale\Block\Reorder\Sidebar + */ +?> +<?php $_items = $this->getItems()?> +<?php if($_items): ?> +<div class="block reorder"> + <div class="title"> + <strong><?php echo __('My Orders') ?></strong> + </div> + <div class="content"> + <form method="post" class="form reorder" action="<?php echo $this->getFormActionUrl() ?>" id="reorder-validate-detail"> + <strong class="subtitle"><?php echo __('Last Ordered Items') ?></strong> + <ol class="items" id="cart-sidebar-reorder"> + <?php $_showAddButtonFlag = false ?> + <?php foreach ($_items as $_item): ?> + <li class="item"> + <?php if ($this->isItemAvailableForReorder($_item)): ?> + <?php $_showAddButtonFlag = true ?> + <input type="checkbox" name="order_items[]" id="reorder-item-<?php echo $_item->getId() ?>" value="<?php echo $_item->getId() ?>" title="<?php echo __('Add to Cart') ?>" + class="checkbox" data-validate='{"validate-one-checkbox-required-by-name": true}'/> + <?php endif; ?> + <strong class="product name"><a href="<?php echo $_item->getProduct()->getProductUrl() ?>"><?php echo $this->escapeHtml($_item->getName()) ?></a></strong> + </li> + <?php endforeach; ?> + </ol> + <div id="cart-sidebar-reorder-advice-container"></div> + <div class="actions"> + <?php if ($_showAddButtonFlag): ?> + <div class="primary"> + <button type="submit" title="<?php echo __('Add to Cart') ?>" class="action tocart"> + <span><?php echo __('Add to Cart') ?></span> + </button> + </div> + <?php endif; ?> + <div class="secondary"><a class="action view" href="<?php echo $this->getUrl('customer/account') ?>"><span><?php echo __('View All'); ?></span></a></div> + </div> + </form> + </div> + <?php echo $this->getPagerHtml(); ?> + <script type="text/javascript"> + head.js( + "<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", + function() { + jQuery('#reorder-validate-detail').validation({ + errorPlacement: function(error, element) { + error.appendTo('#cart-sidebar-reorder-advice-container'); + } + }); + } + ); + </script> +</div> +<?php endif ?> diff --git a/app/design/frontend/magento_plushe/Magento_Sales/success.phtml b/app/design/frontend/magento_plushe/Magento_Sales/success.phtml new file mode 100644 index 00000000000..737dfe3fca9 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sales/success.phtml @@ -0,0 +1,63 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<div class="page-title"> + <h1><?php echo __('Your order has been received.') ?></h1> +</div> +<?php echo $this->getMessagesBlock()->getGroupedHtml() ?> +<h2 class="sub-title"><?php echo __('Thank you for your purchase!') ?></h2> + +<?php if ($this->getOrderId()):?> +<?php if ($this->getCanViewOrder()) :?> + <p><?php echo __('Your order # is: %1.', sprintf('<a href="%s">%s</a>', $this->escapeHtml($this->getViewOrderUrl()), $this->escapeHtml($this->getOrderId()))) ?></p> +<?php else :?> + <p><?php echo __('Your order # is: %1.', $this->escapeHtml($this->getOrderId())) ?></p> +<?php endif;?> + <p><?php echo __('You will receive an order confirmation email with details of your order and a link to track its progress.') ?></p> +<?php if ($this->getCanViewOrder() && $this->getCanPrintOrder()) :?> + <p> + <?php echo __('Click <a href="%1" onclick="this.target=\'_blank\'">here to print</a> a copy of your order confirmation.', $this->getPrintUrl()) ?> + <?php echo $this->getChildHtml() ?> + </p> +<?php endif;?> +<?php endif;?> + +<?php if ($this->getAgreementRefId()): ?> + <p><?php echo __('Your billing agreement # is: %1.', sprintf('<a href="%s">%s</a>', $this->escapeHtml($this->getAgreementUrl()), $this->escapeHtml($this->getAgreementRefId())))?></p> +<?php endif;?> + +<?php if ($profiles = $this->getRecurringProfiles()):?> +<p><?php echo __('Your recurring payment profiles:'); ?></p> +<ul class="disc"> +<?php foreach($profiles as $profile):?> +<?php $profileIdHtml = ($this->getCanViewProfiles() ? sprintf('<a href="%s">%s</a>', $this->escapeHtml($this->getProfileUrl($profile)), $this->escapeHtml($this->getObjectData($profile, 'reference_id'))) : $this->escapeHtml($this->getObjectData($profile, 'reference_id')));?> + <li><?php echo __('Payment profile # %1: "%2".', $profileIdHtml, $this->escapeHtml($this->getObjectData($profile, 'schedule_description')))?></li> +<?php endforeach;?> +</ul> +<?php endif;?> + +<div class="actions"> + <button type="button" class="a" title="<?php echo __('Continue Shopping') ?>" onclick="window.location='<?php echo $this->getUrl() ?>'"><span><span><?php echo __('Continue Shopping') ?></span></span></button> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Sendfriend/layout/override/sendfriend_product_send.xml b/app/design/frontend/magento_plushe/Magento_Sendfriend/layout/override/sendfriend_product_send.xml new file mode 100644 index 00000000000..9e24f817f9d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sendfriend/layout/override/sendfriend_product_send.xml @@ -0,0 +1,36 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Catalog Product Email to a Friend" type="page" parent="catalog_product_view"> + <update handle="page_one_column"/> + <referenceBlock name="page.main.title"> + <action method="setPageTitle"> + <argument name="title" translate="true" xsi:type="string">Email to a Friend</argument> + </action> + </referenceBlock> + <referenceContainer name="content"> + <block class="Magento\Sendfriend\Block\Send" name="sendfriend.send" template="send.phtml"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Sendfriend/send.phtml b/app/design/frontend/magento_plushe/Magento_Sendfriend/send.phtml new file mode 100644 index 00000000000..998017fe960 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Sendfriend/send.phtml @@ -0,0 +1,118 @@ +<?php +/** + * 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 design + * @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) + */ +/* @var $this \Magento\Sendfriend\Block\Send */ +/** + * Send to friend form + * + * @see \Magento\Sendfriend\Block\Send + */ +?> +<script id="add-recipient-tmpl" type="text/x-jQuery-tmpl"> + <a href="delete_email" id="btn-remove${_index_}" class="action delete" title="<?php echo $this->jsQuoteEscape(__('Remove Email')) ?>"><span><?php echo $this->jsQuoteEscape(__('Remove Email')) ?></span></a> + + <div class="field name required"> + <label for="recipients-name${_index_}" class="label"><span><?php echo __('Name:')?></span></label> + <div class="control"> + <input name="recipients[name][${_index_}]" type="text" title="<?php echo __('Name:')?>" class="input-text" id="recipients-name${_index_}" data-validate="{required:true}"/> + </div> + </div> + + <div class="field email required"> + <label for="recipients-email${_index_}" class="label"><span><?php echo __('Email Address:') ?></span></label> + <div class="control"> + <input name="recipients[email][${_index_}]" title="<?php echo __('Email Address:') ?>" id="recipients-email${_index_}" type="text" class="input-text" data-validate="{required:true, 'validate-email':true}"/> + </div> + </div> +</script> + +<form action="<?php echo $this->getSendUrl() ?>" method="post" id="product-sendtofriend-form" class="form send friend" data-hasRequired="<?php echo __('* Required Fields') ?>"> + <fieldset class="fieldset sender" id="sender_options"> + <?php echo $this->getBlockHtml('formkey')?> + <legend class="legend"><span><?php echo __('Sender:') ?></span></legend> + <br> + <div class="field sender required"> + <label for="sender-name" class="label"><span><?php echo __('Name:') ?></span></label> + <div class="control"> + <input name="sender[name]" value="<?php echo $this->escapeHtml($this->getUserName()) ?>" title="<?php echo __('Name') ?>" id="sender-name" type="text" class="input-text" data-validate="{required:true}"/> + </div> + </div> + + <div class="field email required"> + <label for="sender-email" class="label"><span><?php echo __('Email:') ?></span></label> + <div class="control"> + <input name="sender[email]" value="<?php echo $this->escapeHtml($this->getEmail()) ?>" title="<?php echo __('Email Address') ?>" id="sender-email" type="text" class="input-text" data-validate="{required:true, 'validate-email':true}"/> + </div> + </div> + + <div class="field text required"> + <label for="sender-message" class="label"><span><?php echo __('Message:') ?></span></label> + <div class="control"> + <textarea name="sender[message]" class="input-text" id="sender-message" cols="3" rows="3" data-validate="{required:true}"><?php echo $this->escapeHtml($this->getMessage())?></textarea> + </div> + </div> + </fieldset> + + <fieldset class="fieldset recipients" id="recipients-options"> + <?php echo $this->getBlockHtml('formkey')?> + <legend class="legend"><span><?php echo __('Recipient:') ?></span></legend><br /> + </fieldset> + <div class="actions"> + <div class="primary"> + <button type="submit" class="action submit"<?php if (!$this->canSend()):?> disabled="disabled"<?php endif ?>><span><?php echo __('Send Email') ?></span></button> + <div id="max-recipient-message" style="display:none;" class="notice-msg limit"> + <?php if ($this->getMaxRecipients()): ?> + <span><?php echo __('Maximum %1 email addresses allowed.', $this->getMaxRecipients()) ?></span> + <?php endif; ?> + </div> + <?php if (1 < $this->getMaxRecipients()): ?> + <button type="button" id="add-recipient-button" class="action add"><span><?php echo __('Add Recipient') ?></span></button> + <?php endif; ?> + </div> + <div class="secondary"> + <a class="action back" href="#" role="back"><span><?php echo __('Back') ?></span></a> + </div> + </div> +</form> +<script type="text/javascript"> + (function($) { + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", + "<?php echo $this->getViewFileUrl('Magento_Page::js/row-builder.js')?>", function() { + $('#product-sendtofriend-form').rowBuilder({ + rowTemplate: '#add-recipient-tmpl', + rowContainer: '#recipients-options', + rowParentElem: '<div></div>', + btnRemoveSelector: '.action.delete', + maxRows: '<?php echo $this->getMaxRecipients() ?>', + maxRowsMsg: '#max-recipient-message', + addRowBtn: '#add-recipient-button', + additionalRowClass: 'additional' + }).validation(); + $('a[role="back"]').on('click', function() { history.back(); return false; }); + }) + })(jQuery); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Shipping/tracking/popup.phtml b/app/design/frontend/magento_plushe/Magento_Shipping/tracking/popup.phtml new file mode 100644 index 00000000000..c3ca1b35676 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Shipping/tracking/popup.phtml @@ -0,0 +1,174 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php /** @var $this \Magento\Shipping\Block\Tracking\Popup */ ?> +<?php $_results = $this->getTrackingInfo(); ?> +<div class="page tracking"> + <div class="page title"> + <h1 class="title"> + <span class="base"><?php echo __('Tracking Information'); ?></span> + </h1> + </div> + <?php if(sizeof($_results)>0): ?> + <?php foreach($_results as $shipid => $_result): ?> + <?php if($shipid): ?> + <div class="order subtitle caption"><?php echo __('Shipment #').$shipid; ?></div> + <?php endif; ?> + <?php if(sizeof($_result)>0): ?> + <?php $rowCount = sizeof($_result); $counter = 1; ?> + <?php $_id = 0; foreach($_result as $track): ?> + <table class="data table order tracking" id="tracking-table-popup-<?php echo $_id ?>"> + <tbody> + <?php if(is_object($track)): ?> + <tr> + <th class="col label"><?php echo __('Tracking Number:'); ?></th> + <td class="col value"><?php echo $this->escapeHtml($track->getTracking()); ?></td> + </tr> + <?php if ($track->getCarrierTitle()): ?> + <tr> + <th class="col label"><?php echo __('Carrier:'); ?></th> + <td class="col value"><?php echo $this->escapeHtml($track->getCarrierTitle()); ?></td> + </tr> + <?php endif; ?> + <?php if($track->getErrorMessage()): ?> + <tr> + <th class="col label"><?php echo __('Error:'); ?></th> + <td class="col error"><?php echo __('Tracking information is currently not available. Please '); if ($this->getContactUsEnabled()) : ?><a href="<?php echo $this->getContactUs() ?>" title="<?php echo __('contact us') ?>" onclick="this.target='_blank'"><?php echo __('contact us') ?></a><?php echo __(' for more information or '); endif; echo __('email us at '); ?><a href="mailto:<?php echo $this->getStoreSupportEmail() ?>"><?php echo $this->getStoreSupportEmail() ?></a></td> + </tr> + <?php elseif($track->getTrackSummary()): ?> + <tr> + <th class="col label"><?php echo __('Info:'); ?></th> + <td class="col value"><?php echo $track->getTrackSummary(); ?></td> + </tr> + <?php elseif($track->getUrl()): ?> + <tr> + <th class="col label"><?php echo __('Track:'); ?></th> + <td class="col value"><a href="<?php echo $this->escapeHtml($track->getUrl()); ?>" onclick="this.target='_blank'"><?php echo $this->escapeHtml($track->getUrl()); ?></a></td> + </tr> + <?php else: ?> + <?php if ($track->getStatus()): ?> + <tr> + <th class="col label"><?php echo __('Status:'); ?></th> + <td class="col value"><?php echo $track->getStatus(); ?></td> + </tr> + <?php endif; ?> + + <?php if ($track->getDeliverydate()): ?> + <tr> + <th class="col label"><?php echo __('Delivered on:'); ?></th> + <td class="col value"><?php echo $this->formatDeliveryDateTime($track->getDeliverydate(),$track->getDeliverytime()); ?></td> + </tr> + <?php endif; ?> + + <?php if ($track->getSignedby()): ?> + <tr> + <th class="col label"><?php echo __('Signed by:'); ?></th> + <td class="col value"><?php echo $track->getSignedby(); ?></td> + </tr> + <?php endif; ?> + + <?php if ($track->getDeliveryLocation()): ?> + <tr> + <th class="col label"><?php echo __('Delivered to:'); ?></th> + <td class="col value"><?php echo $track->getDeliveryLocation(); ?></td> + </tr> + <?php endif; ?> + + <?php if ($track->getShippedDate()): ?> + <tr> + <th class="col label"><?php echo __('Shipped or billed on:'); ?></th> + <td class="col value"><?php echo $track->getShippedDate(); ?></td> + </tr> + <?php endif; ?> + + <?php if ($track->getService()): ?> + <tr> + <th class="col label"><?php echo __('Service Type:'); ?></th> + <td class="col value"><?php echo $track->getService(); ?></td> + </tr> + <?php endif; ?> + + <?php if ($track->getWeight()): ?> + <tr> + <th class="col label"><?php echo __('Weight:'); ?></th> + <td class="col value"><?php echo $track->getWeight(); ?></td> + </tr> + <?php endif; ?> + <?php endif; ?> + <?php elseif(isset($track['title']) && isset($track['number']) && $track['number']): ?> + <!--if the tracking is custom value--> + <tr> + <th class="col label"><?php echo ($track['title'] ? $this->escapeHtml($track['title']) : __('N/A')); ?>:</th> + <td class="col value"><?php echo (isset($track['number']) ? $this->escapeHtml($track['number']) : ''); ?></td> + </tr> + <?php endif; ?> + </tbody> + </table> + <?php if (is_object($track) && sizeof($track->getProgressdetail())>0): ?> + <table class="data table order tracking" id="track-history-table-<?php echo $track->getTracking(); ?>"> + <thead> + <tr> + <th class="col location"><?php echo __('Location') ?></th> + <th class="col date"><?php echo __('Date') ?></th> + <th class="col time"><?php echo __('Local Time') ?></th> + <th class="col description"><?php echo __('Description') ?></th> + </tr> + </thead> + <tbody> + <?php foreach($track->getProgressdetail() as $_detail): ?> + <?php $_detailDate = (isset($_detail['deliverydate']) ? $this->formatDeliveryDate($_detail['deliverydate']) : '') ?> + <?php $_detailTime = (isset($_detail['deliverytime']) ? $this->formatDeliveryTime($_detail['deliverytime'], $_detail['deliverydate']) : '') ?> + <tr> + <td class="col location"><?php echo (isset($_detail['deliverylocation']) ? $_detail['deliverylocation'] : ''); ?></td> + <td class="col date"><?php echo $_detailDate ?></td> + <td class="col time"><?php echo $_detailTime ?></td> + <td class="col description"><?php echo (isset($_detail['activity']) ? $_detail['activity'] : '') ?></td> + </tr> + <?php endforeach; ?> + </tbody> + </table> + <?php endif; ?> + <?php if($counter!=$rowCount): ?> + <?php endif; ?> + <?php $counter++; ?> + <!--end for each tracking information--> + <?php endforeach; ?> + <?php else: ?> + <p class="empty"><?php echo __('There is no tracking available for this shipment.'); ?></p> + <?php endif; ?> + + <?php endforeach; ?> + <?php else: ?> + <p class="empty"><?php echo __('There is no tracking available.'); ?></p> + <?php endif; ?> + <div class="actions"> + <button type="button" + title="<?php echo __('Close Window') ?>" + class="action close" + onclick="window.close(); window.opener.focus();"> + <span><?php echo __('Close Window') ?></span> + </button> + </div> +</div> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Tax/checkout/grandtotal.phtml b/app/design/frontend/magento_plushe/Magento_Tax/checkout/grandtotal.phtml new file mode 100644 index 00000000000..b522d286f76 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Tax/checkout/grandtotal.phtml @@ -0,0 +1,57 @@ +<?php +/** + * 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 design + * @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) + */ +/** + * @var $this \Magento\Tax\Block\Checkout\Grandtotal + * @see \Magento\Tax\Block\Checkout\Grandtotal + */ +?> +<?php if ($this->includeTax() && $this->getTotalExclTax()>=0):?> +<tr class="grand total excl"> + <td style="<?php echo $this->getStyle() ?>" class="mark" colspan="<?php echo $this->getColspan(); ?>"> + <strong><?php echo __('Grand Total Excl. Tax')?></strong> + </td> + <td style="<?php echo $this->getStyle() ?>" class="amount"> + <strong><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($this->getTotalExclTax()) ?></strong> + </td> +</tr> +<?php echo $this->renderTotals('taxes', $this->getColspan()); ?> +<tr class="grand total incl"> + <td style="<?php echo $this->getStyle() ?>" class="mark" colspan="<?php echo $this->getColspan(); ?>"> + <strong><?php echo __('Grand Total Incl. Tax')?></strong> + </td> + <td style="<?php echo $this->getStyle() ?>" class="amount"> + <strong><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($this->getTotal()->getValue()) ?></strong> + </td> +</tr> +<?php else:?> +<tr class="grand total"> + <td style="<?php echo $this->getStyle() ?>" class="mark" colspan="<?php echo $this->getColspan(); ?>"> + <strong><?php echo $this->getTotal()->getTitle() ?></strong> + </td> + <td style="<?php echo $this->getStyle() ?>" class="amount"> + <strong><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($this->getTotal()->getValue()) ?></strong> + </td> +</tr> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Tax/checkout/shipping.phtml b/app/design/frontend/magento_plushe/Magento_Tax/checkout/shipping.phtml new file mode 100644 index 00000000000..29a032f765e --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Tax/checkout/shipping.phtml @@ -0,0 +1,65 @@ +<?php +/** + * 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 design + * @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) + */ +/** + * @var $this \Magento\Tax\Block\Checkout\Shipping + * @see \Magento\Tax\Block\Checkout\Shipping + */ +?> +<?php if ($this->displayBoth()):?> +<tr class="total shipping excl"> + <td style="<?php echo $this->getStyle() ?>" class="mark" colspan="<?php echo $this->getColspan(); ?>"> + <?php echo $this->getExcludeTaxLabel() ?> + </td> + <td style="<?php echo $this->getStyle() ?>" class="amount"> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($this->getShippingExcludeTax()) ?> + </td> +</tr> +<tr class="total shipping incl"> + <td style="<?php echo $this->getStyle() ?>" class="mark" colspan="<?php echo $this->getColspan(); ?>"> + <?php echo $this->getIncludeTaxLabel() ?> + </td> + <td style="<?php echo $this->getStyle() ?>" class="amount"> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($this->getShippingIncludeTax()) ?> + </td> +</tr> +<?php elseif($this->displayIncludeTax()) : ?> +<tr class="total shipping incl"> + <td style="<?php echo $this->getStyle() ?>" class="mark" colspan="<?php echo $this->getColspan(); ?>"> + <?php echo $this->getTotal()->getTitle() ?> + </td> + <td style="<?php echo $this->getStyle() ?>" class="amount"> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($this->getShippingIncludeTax()) ?> + </td> +</tr> +<?php else:?> +<tr class="total shipping excl"> + <td style="<?php echo $this->getStyle() ?>" class="mark" colspan="<?php echo $this->getColspan(); ?>"> + <?php echo $this->escapeHtml($this->getTotal()->getTitle()) ?> + </td> + <td style="<?php echo $this->getStyle() ?>" class="amount"> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($this->getShippingExcludeTax()) ?> + </td> +</tr> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Tax/checkout/subtotal.phtml b/app/design/frontend/magento_plushe/Magento_Tax/checkout/subtotal.phtml new file mode 100644 index 00000000000..7eecfc2657a --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Tax/checkout/subtotal.phtml @@ -0,0 +1,56 @@ +<?php +/** + * 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 design + * @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) + */ +/** + * @var $this \Magento\Tax\Block\Checkout\Subtotal + * @see \Magento\Tax\Block\Checkout\Subtotal + */ +?> +<?php if ($this->displayBoth()):?> +<tr class="sub total excl"> + <td style="<?php echo $this->getStyle() ?>" class="mark" colspan="<?php echo $this->getColspan(); ?>"> + <?php echo __('Subtotal (Excl. Tax)') ?> + </td> + <td style="<?php echo $this->getStyle() ?>" class="amount"> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($this->getTotal()->getValueExclTax()) ?> + </td> +</tr> +<tr class="sub total incl"> + <td style="<?php echo $this->getStyle() ?>" class="mark" colspan="<?php echo $this->getColspan(); ?>"> + <?php echo __('Subtotal (Incl. Tax)') ?> + </td> + <td style="<?php echo $this->getStyle() ?>" class="amount"> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($this->getTotal()->getValueInclTax()) ?> + </td> +</tr> +<?php else : ?> +<tr class="sub total"> + <td style="<?php echo $this->getStyle() ?>" class="mark" colspan="<?php echo $this->getColspan(); ?>"> + <?php echo $this->getTotal()->getTitle() ?> + </td> + <td style="<?php echo $this->getStyle() ?>" class="amount"> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($this->getTotal()->getValue()) ?> + </td> +</tr> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Tax/checkout/tax.phtml b/app/design/frontend/magento_plushe/Magento_Tax/checkout/tax.phtml new file mode 100644 index 00000000000..7fe118b5710 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Tax/checkout/tax.phtml @@ -0,0 +1,80 @@ +<?php +/** + * 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 design + * @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) + */ +/** + * @var $this \Magento\Tax\Block\Checkout\Tax + * @see \Magento\Tax\Block\Checkout\Tax + */ +?> +<?php + $_value = $this->getTotal()->getValue(); + $_style = $this->getTotal()->getStyle(); +?> +<?php global $taxIter; $taxIter++; ?> +<?php if ($this->helper('Magento\Tax\Helper\Data')->displayFullSummary() && $_value!=0): ?> +<?php $isTop = 1; ?> + <?php foreach ($this->getTotal()->getFullInfo() as $info): ?> + <?php if (isset($info['hidden']) && $info['hidden']) continue; ?> + <?php $percent = $info['percent']; ?> + <?php $amount = $info['amount']; ?> + <?php $rates = $info['rates']; ?> + <?php $isFirst = 1; ?> + + <?php foreach ($rates as $rate): ?> + <tr class="summary-details-<?php echo $taxIter; ?> summary-details<?php if ($isTop): echo ' summary-details-first'; endif; ?>" style="display:none;"> + <td class="a-right" style="<?php echo $_style ?>" colspan="<?php echo $this->getColspan(); ?>"> + <?php echo $this->escapeHtml($rate['title']); ?> + <?php if (!is_null($rate['percent'])): ?> + (<?php echo (float)$rate['percent']; ?>%) + <?php endif; ?> + <br /> + </td> + <?php if ($isFirst): ?> + <td style="<?php echo $_style ?>" class="a-right" rowspan="<?php echo count($rates); ?>"> + <?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($amount); ?> + </td> + <?php endif; ?> + </tr> + <?php $isFirst = 0; ?> + <?php $isTop = 0; ?> + <?php endforeach; ?> + <?php endforeach; ?> +<?php endif;?> +<?php + $attributes = 'class="tax total"'; + if ($this->helper('Magento\Tax\Helper\Data')->displayFullSummary() && $_value!=0) { + $attributes = 'class="summary-total tax total" onclick="expandDetails(this, \'.summary-details-' . $taxIter . '\')"'; + } +?> + +<tr <?php echo $attributes; ?>> + <td style="<?php echo $_style ?>" class="mark" colspan="<?php echo $this->getColspan(); ?>"> + <?php if ($this->helper('Magento\Tax\Helper\Data')->displayFullSummary()): ?> + <div class="summary-collapse"><?php echo $this->getTotal()->getTitle() ?></div> + <?php else: ?> + <?php echo $this->getTotal()->getTitle() ?> + <?php endif;?> + </td> + <td style="<?php echo $_style ?>" class="amount"><?php echo $this->helper('Magento\Checkout\Helper\Data')->formatPrice($_value) ?></td> +</tr> diff --git a/app/design/frontend/magento_plushe/Magento_Widget/layout/override/default.xml b/app/design/frontend/magento_plushe/Magento_Widget/layout/override/default.xml new file mode 100644 index 00000000000..6c60196129d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Widget/layout/override/default.xml @@ -0,0 +1,26 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> diff --git a/app/design/frontend/magento_plushe/Magento_Widget/layout/override/print.xml b/app/design/frontend/magento_plushe/Magento_Widget/layout/override/print.xml new file mode 100644 index 00000000000..6c60196129d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Widget/layout/override/print.xml @@ -0,0 +1,26 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/button/share.phtml b/app/design/frontend/magento_plushe/Magento_Wishlist/button/share.phtml new file mode 100644 index 00000000000..0b79afbd5de --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/button/share.phtml @@ -0,0 +1,28 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php if($this->getWishlist()->getItemsCount() && $this->getWishlist()->getShared() < $this->getConfig()->getSharingEmailLimit()): ?> + <button type="submit" name="save_and_share" title="<?php echo __('Share Wish List') ?>" class="action share"><span><span><?php echo __('Share Wish List') ?></span></span></button> +<?php endif;?> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/button/tocart.phtml b/app/design/frontend/magento_plushe/Magento_Wishlist/button/tocart.phtml new file mode 100644 index 00000000000..e242ea90216 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/button/tocart.phtml @@ -0,0 +1,29 @@ +<?php +/** + * 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 design + * @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) + */ +?> + +<?php if($this->getWishlist()->getItemsCount() && $this->getWishlist()->isSalable()): ?> + <button type="button" title="<?php echo __('Add All to Cart') ?>" class="action tocart"><span><?php echo __('Add All to Cart') ?></span></button> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/button/update.phtml b/app/design/frontend/magento_plushe/Magento_Wishlist/button/update.phtml new file mode 100644 index 00000000000..1a5b92add28 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/button/update.phtml @@ -0,0 +1,29 @@ +<?php +/** + * 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 design + * @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) + */ +?> + +<?php if($this->getWishlist()->getItemsCount()): ?> + <button type="submit" name="do" title="<?php echo __('Update Wishlist') ?>" class="action update"><span><?php echo __('Update Wish List') ?></span></button> +<?php endif;?> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/item/column/cart.phtml b/app/design/frontend/magento_plushe/Magento_Wishlist/item/column/cart.phtml new file mode 100644 index 00000000000..a5681f4bdf3 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/item/column/cart.phtml @@ -0,0 +1,57 @@ +<?php +/** + * 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 design + * @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) + */ + +/* @var $this \Magento\Wishlist\Block\Customer\Wishlist\Item\Column\Cart */ +/* @var \Magento\Wishlist\Model\Item $item */ +$item = $this->getItem(); +$product = $item->getProduct(); +$options = $this->getChildBlock('customer.wishlist.item.options') + ->setItem($item) + ->getConfiguredOptions(); +?> + <?php echo $this->getPriceHtml($product, empty($options));?> + <div class="box tocart"> + <?php if ($item->canHaveQty() && $item->getProduct()->isVisibleInSiteVisibility()): ?> + <input type="text" class="input-text qty" data-validate="{required:true,'validate-greater-than-zero':true}" name="qty[<?php echo $item->getId() ?>]" + value="<?php echo $this->getAddToCartQty($item) * 1 ?>"/> + <?php endif; ?> + <?php if ($product->isSaleable()): ?> + <button type="button" title="<?php echo __('Add to Cart') ?>" data-item-id="<?php echo $item->getId()?>" class="action tocart"><span><span><?php echo __('Add to Cart') ?></span></span></button> + <?php else: ?> + <?php if ($product->getIsSalable()): ?> + <p class="available stock" title="<?php echo __('Availability') ?>"><span><?php echo __('In stock') ?></span></p> + <?php else: ?> + <p class="unavailable stock" title="<?php echo __('Availability') ?>"><span><?php echo __('Out of stock') ?></span></p> + <?php endif; ?> + <?php endif; ?> + </div> + <?php foreach ($this->getChildNames() as $childName): ?> + <?php echo $this->getLayout()->renderElement($childName, false); ?> + <?php endforeach;?> + <?php if ($product->isVisibleInSiteVisibility()): ?> + <p><a class="action edit" href="<?php echo $this->getItemConfigureUrl($item) ?>"><span><?php echo __('Edit') ?></span></a> + </p> + <?php endif ?> + diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/item/column/image.phtml b/app/design/frontend/magento_plushe/Magento_Wishlist/item/column/image.phtml new file mode 100644 index 00000000000..5d5bd9f71e7 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/item/column/image.phtml @@ -0,0 +1,33 @@ +<?php +/** + * 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 design + * @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) + */ + +/* @var \Magento\Wishlist\Model\Item $item */ +$item = $this->getItem(); +$product = $item->getProduct(); +$imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image'); +?> +<a class="product photo" href="<?php echo $this->getProductUrl($item) ?>" title="<?php echo $this->escapeHtml($product->getName()) ?>"> + <?php echo $imageBlock->init($product, 'wishlist_thumbnail')->toHtml() ?> +</a> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/item/column/info.phtml b/app/design/frontend/magento_plushe/Magento_Wishlist/item/column/info.phtml new file mode 100644 index 00000000000..275b996e650 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/item/column/info.phtml @@ -0,0 +1,40 @@ +<?php +/** + * 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 design + * @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) + */ + +/* @var \Magento\Wishlist\Model\Item $item */ +$item = $this->getItem(); +$product = $item->getProduct(); +?> +<strong class="product name"><a href="<?php echo $this->getProductUrl($item) ?>" title="<?php echo $this->escapeHtml($product->getName()) ?>"><?php echo $this->escapeHtml($product->getName()) ?></a></strong> +<div class="product description"><?php echo $this->escapeHtml($this->stripTags($product->getShortDescription()));?></div> +<textarea placeholder="<?php echo $this->helper('Magento\Wishlist\Helper\Data')->defaultCommentString()?>" name="description[<?php echo $item->getWishlistItemId() ?>]" rows="3" cols="5" title="<?php echo __('Comment') ?>"><?php echo ($this->escapeHtml($item->getDescription())) ?></textarea> +<?php $children = $this->getChildNames(); ?> +<?php if ($children): ?> + <div class="product manage"> + <?php foreach($children as $childName):?> + <?php echo $this->getLayout()->renderElement($childName, false);?> + <?php endforeach;?> + </div> +<?php endif; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/item/column/remove.phtml b/app/design/frontend/magento_plushe/Magento_Wishlist/item/column/remove.phtml new file mode 100644 index 00000000000..91dcd50b456 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/item/column/remove.phtml @@ -0,0 +1,28 @@ +<?php +/** + * 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 design + * @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) + */ + +?> +<a href="<?php echo $this->getItemRemoveUrl($this->getItem()); ?>" title="<?php echo __('Remove Item') ?>" + class="action delete"><span><?php echo __('Remove item');?></span></a> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/item/configure/addto.phtml b/app/design/frontend/magento_plushe/Magento_Wishlist/item/configure/addto.phtml new file mode 100644 index 00000000000..0b0f085bbc7 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/item/configure/addto.phtml @@ -0,0 +1,37 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php $_wishlistItem = $this->getWishlistItem(); ?> +<?php $_wishlistSubmitUrl = $this->helper('Magento\Wishlist\Helper\Data')->getUpdateUrl($_wishlistItem); ?> +<div class="product addto links" data-role="add-to-links"> +<?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllow()) : ?> + <a href="<?php echo $_wishlistSubmitUrl ?>" class="action towishlist updated"><span><?php echo __('Update Wish List') ?></span></a> +<?php endif; ?> +<?php $_product = $this->getProduct(); ?> +<?php $_compareUrl = $this->helper('Magento\Catalog\Helper\Product\Compare')->getAddUrl($_product); ?> +<?php if ($_compareUrl) : ?> + <a href="<?php echo $_compareUrl ?>" class="action tocompare"><span><?php echo __('Add to Compare') ?></span></a> +<?php endif; ?> +</div> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/item/list.phtml b/app/design/frontend/magento_plushe/Magento_Wishlist/item/list.phtml new file mode 100644 index 00000000000..96d64947ea1 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/item/list.phtml @@ -0,0 +1,53 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<?php + $columns = $this->getColumns(); +?> +<table class="table data wishlist" id="wishlist-table"> + <thead> + <tr> + <?php foreach ($columns as $column): ?> + <th class="col <?php echo $column->getColClass(); ?>"><?php echo $column->getTitle();?></th> + <?php endforeach; ?> + </tr> + </thead> + <tbody> + <?php if (count($this->getItems())): ?> + <?php foreach ($this->getItems() as $item): ?> + <tr id="item_<?php echo $item->getId();?>"> + <?php foreach ($columns as $column): ?> + <td class="col <?php echo $column->getColClass(); ?>"><?php $column->setItem($item); echo $column->toHtml($item);?></td> + <?php endforeach; ?> + </tr> + <?php endforeach ?> + <?php else: ?> + <td colspan="<?php echo count($columns);?>" class="empty"><?php echo __('This Wish List has no Items');?></td> + <?php endif; ?> + </tbody> +</table> +<?php foreach ($columns as $column): ?> + <?php echo $column->getAdditionalHtml();?> +<?php endforeach; ?> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure.xml b/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure.xml new file mode 100644 index 00000000000..8321608c8c1 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure.xml @@ -0,0 +1,39 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Configure Wishlist Item" type="page" parent="catalog_product_view"> + <update handle="catalog_product_view"/> + <referenceContainer name="product.info.main"> + <block class="Magento\Wishlist\Block\Item\Configure" name="product.info.addto" as="addto" template="Magento_Wishlist::item/configure/addto.phtml"/> + </referenceContainer> + <referenceBlock name="product.info.options.wrapper.bottom"> + <action method="unsetChild"> + <argument name="name" xsi:type="string">product.info.addtocart.additional</argument> + </action> + <action method="append"> + <argument name="element" xsi:type="string">product.info.addtocart.additional</argument> + </action> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure_type_bundle.xml b/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure_type_bundle.xml new file mode 100644 index 00000000000..33c45528fb4 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure_type_bundle.xml @@ -0,0 +1,113 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Configure Wishlist Item (Bundle)" type="page" parent="catalog_product_view"> + <referenceBlock name="head"> + <block class="Magento\Page\Block\Html\Head\Script" name="magento-bundle-bundle-js"> + <arguments> + <argument name="file" xsi:type="string">Magento_Bundle::bundle.js</argument> + </arguments> + </block> + <block class="Magento\Page\Block\Html\Head\Script" name="magento-bundle-js-product-summary-js"> + <arguments> + <argument name="file" xsi:type="string">Magento_Bundle::js/product-summary.js</argument> + </arguments> + </block> + </referenceBlock> + <referenceBlock name="root"> + <action method="addBodyClass"> + <argument name="value" xsi:type="string">type-bundle</argument> + </action> + </referenceBlock> + <referenceBlock name="product.info"> + <block class="Magento\Bundle\Block\Catalog\Product\View" name="bundle.summary" as="form_top" template="catalog/product/view/summary.phtml"> + <block class="Magento\Bundle\Block\Catalog\Product\Price" name="bundle.prices" as="bundle_prices" template="catalog/product/view/price.phtml"> + <action method="setMAPTemplate"> + <argument name="tmpl" xsi:type="string">catalog/product/price_msrp_item.phtml</argument> + </action> + </block> + <block class="Magento\Catalog\Block\Product\View" name="product.info.addtocart.bundle" as="addtocart" template="product/view/addtocart.phtml"/> + <block class="Magento\Catalog\Block\Product\View" name="product.info.addto.bundle" as="addto" template="product/view/addto.phtml"/> + </block> + </referenceBlock> + <referenceBlock name="product.info.options.wrapper"> + <block class="Magento\Catalog\Block\Product\View" name="bundle.product.view.options.notice" template="Magento_Bundle::catalog/product/view/options/notice.phtml"/> + <block class="Magento\Bundle\Block\Catalog\Product\View\Type\Bundle" name="product.info.bundle.options" as="type_bundle_options" template="catalog/product/view/type/bundle/options.phtml" before="-"> + <action method="addRenderer"> + <argument name="type" xsi:type="string">select</argument> + <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Option\Select</argument> + </action> + <action method="addRenderer"> + <argument name="type" xsi:type="string">multi</argument> + <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Option\Multi</argument> + </action> + <action method="addRenderer"> + <argument name="type" xsi:type="string">radio</argument> + <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Option\Radio</argument> + </action> + <action method="addRenderer"> + <argument name="type" xsi:type="string">checkbox</argument> + <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Option\Checkbox</argument> + </action> + </block> + </referenceBlock> + <referenceBlock name="product.info.options.wrapper.bottom"> + <remove name="product.tierprices"/> + <block class="Magento\Bundle\Block\Catalog\Product\View" name="bundle.tierprices" as="tierprices" before="-" template="Magento_Bundle::catalog/product/view/tierprices.phtml"/> + <block class="Magento\CatalogInventory\Block\Qtyincrements" name="product.info.qtyincrements" before="-" template="qtyincrements.phtml"/> + <block class="Magento\Bundle\Block\Catalog\Product\View" name="bundle.back.button" as="backButton" after="-" template="catalog/product/view/backbutton.phtml"/> + <action method="unsetChild"> + <argument name="block" xsi:type="string">product.info.addtocart</argument> + </action> + <action method="setHideRequiredNotice"> + <argument name="flag" xsi:type="string">1</argument> + </action> + <action method="unsetChild"> + <argument name="block" xsi:type="string">product.info.addto</argument> + </action> + </referenceBlock> + <referenceContainer name="content"> + <container name="bundle.options.container" label="invisible" htmlTag="div" htmlClass="bundle options container" after="product.info.media"/> + <move element="product.info" destination="bundle.options.container" before="-"/> + </referenceContainer> + <referenceContainer name="product.info.type"> + <block class="Magento\Bundle\Block\Catalog\Product\View\Type\Bundle" name="product.info.bundle" as="product_type_data" template="catalog/product/view/type/bundle.phtml"> + <action method="addPriceBlockType"> + <argument name="type" xsi:type="string">bundle</argument> + <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> + <argument name="template" xsi:type="string">catalog/product/price.phtml</argument> + </action> + </block> + <container name="product.info.bundle.extra" after="product.info.bundle" as="product_type_data_extra" label="Product Extra Info"/> + <block class="Magento\Bundle\Block\Catalog\Product\View" name="customize.button" as="customize_button" template="catalog/product/view/customize.phtml"/> + </referenceContainer> + <referenceBlock name="product.clone_prices"> + <action method="addPriceBlockType"> + <argument name="type" xsi:type="string">bundle</argument> + <argument name="block" xsi:type="string">Magento\Bundle\Block\Catalog\Product\Price</argument> + <argument name="template" xsi:type="string">catalog/product/view/price.phtml</argument> + </action> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure_type_configurable.xml b/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure_type_configurable.xml new file mode 100644 index 00000000000..9ed018ba6bc --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure_type_configurable.xml @@ -0,0 +1,39 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Configure Wishlist Item (Configurable)" type="page" parent="catalog_product_view"> + <referenceBlock name="root"> + <action method="addBodyClass"> + <argument name="value" xsi:type="string">type-configurable</argument> + </action> + </referenceBlock> + <referenceContainer name="product.info.type"> + <block class="Magento\Catalog\Block\Product\View\Type\Configurable" name="product.info.configurable" as="product_type_data" template="product/view/type/default.phtml"/> + <container name="product.info.configurable.extra" after="product.info.configurable" as="product_type_data_extra" label="Product Extra Info"/> + </referenceContainer> + <referenceBlock name="product.info.options.wrapper"> + <block class="Magento\Catalog\Block\Product\View\Type\Configurable" name="product.info.options.configurable" as="options_configurable" before="-" template="product/view/type/options/configurable.phtml"/> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure_type_grouped.xml b/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure_type_grouped.xml new file mode 100644 index 00000000000..6bceb727e4c --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure_type_grouped.xml @@ -0,0 +1,31 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Configure Wishlist Item (Grouped)" type="page" parent="catalog_product_view"> + <referenceContainer name="product.info.form.content"> + <block class="Magento\Catalog\Block\Product\View\Type\Grouped" name="product.info.grouped" before="product.info.addtocart" template="product/view/type/grouped.phtml"/> + <container name="product.info.grouped.extra" after="product.info.grouped" before="product.info.grouped" as="product_type_data_extra" label="Product Extra Info"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure_type_simple.xml b/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure_type_simple.xml new file mode 100644 index 00000000000..6c60196129d --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_configure_type_simple.xml @@ -0,0 +1,26 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_index.xml b/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_index.xml new file mode 100644 index 00000000000..26a3cfbd6a2 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_index_index.xml @@ -0,0 +1,65 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Customer My Account My Wish List" type="page" parent="customer_account_index"> + <update handle="customer_account"/> + <referenceBlock name="my.account.wrapper"> + <block class="Magento\Wishlist\Block\Customer\Wishlist" name="customer.wishlist" template="view.phtml"> + <action method="setTitle"> + <argument name="title" translate="true" xsi:type="string">My Wish List</argument> + </action> + <block class="Magento\Wishlist\Block\Customer\Wishlist\Items" name="customer.wishlist.items" as="items" template="item/list.phtml"> + <block class="Magento\Wishlist\Block\Customer\Wishlist\Item\Column\Image" name="customer.wishlist.item.image" before="-" template="item/column/image.phtml"> + <arguments> + <argument name="col_class" xsi:type="string">photo</argument> + </arguments> + </block> + <block class="Magento\Wishlist\Block\Customer\Wishlist\Item\Column\Comment" name="customer.wishlist.item.info" template="item/column/info.phtml"> + <arguments> + <argument name="col_class" xsi:type="string">item</argument> + <argument name="title" translate="true" xsi:type="string">Product Details and Comment</argument> + </arguments> + </block> + <block class="Magento\Wishlist\Block\Customer\Wishlist\Item\Column\Cart" name="customer.wishlist.item.cart" template="item/column/cart.phtml"> + <arguments> + <argument name="col_class" xsi:type="string">actions</argument> + <argument name="title" translate="true" xsi:type="string">Add to Cart</argument> + </arguments> + <block class="Magento\Wishlist\Block\Customer\Wishlist\Item\Options" name="customer.wishlist.item.options"/> + </block> + <block class="Magento\Wishlist\Block\Customer\Wishlist\Item\Column\Remove" name="customer.wishlist.item.remove" template="item/column/remove.phtml"> + <arguments> + <argument name="col_class" xsi:type="string">remove</argument> + </arguments> + </block> + </block> + <container name="customer.wishlist.buttons" as="control_buttons" label="Wishlist Control Buttons"> + <block class="Magento\Wishlist\Block\Customer\Wishlist\Button" name="customer.wishlist.button.share" template="button/share.phtml"/> + <block class="Magento\Wishlist\Block\Customer\Wishlist\Button" name="customer.wishlist.button.toCart" template="button/tocart.phtml"/> + <block class="Magento\Wishlist\Block\Customer\Wishlist\Button" name="customer.wishlist.button.update" template="button/update.phtml"/> + </container> + </block> + </referenceBlock> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_shared_index.xml b/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_shared_index.xml new file mode 100644 index 00000000000..1e6bd663cc6 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/layout/override/wishlist_shared_index.xml @@ -0,0 +1,30 @@ +<?xml version="1.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) + */ +--> +<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" label="Customer Shared Wishlist View" type="page" parent="wishlist_index_share"> + <referenceContainer name="content"> + <block class="Magento\Wishlist\Block\Share\Wishlist" name="customer.wishlist" template="shared.phtml"/> + </referenceContainer> +</layout> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/shared.phtml b/app/design/frontend/magento_plushe/Magento_Wishlist/shared.phtml new file mode 100644 index 00000000000..bb5f0b8f425 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/shared.phtml @@ -0,0 +1,79 @@ +<?php +/** + * 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 design + * @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) + */ +/* @var $this \Magento\Wishlist\Block\Share\Wishlist */ +?> + +<?php if ($this->hasWishlistItems()): ?> +<form class="form shared wishlist" action="<?php echo $this->getUrl('*/*/update') ?>" method="post"> + <table class="table data wishlist" id="wishlist-table"> + <thead> + <tr> + <th class="col product"><?php echo __('Product') ?></th> + <th class="col comment"><?php echo __('Comment') ?></th> + <th class="col actions"><?php echo __('Add to Cart') ?></th> + </tr> + </thead> + <tbody> + <?php foreach($this->getWishlistItems() as $item): ?> + <?php + $product = $item->getProduct(); + $isVisibleProduct = $product->isVisibleInSiteVisibility(); + ?> + <tr> + <td class="col product"> + <a class="product photo" href="<?php echo $this->getProductUrl($item) ?>" title="<?php echo $this->escapeHtml($product->getName()) ?>"> + <span class="img photo container"><img src="<?php echo $this->getImageUrl($product); ?>" alt="<?php echo $this->escapeHtml($item->getName()) ?>"></span> + </a> + <strong class="product name"><a href="<?php echo $this->getProductUrl($item) ?>"><?php echo $this->escapeHtml($product->getName()) ?></a></strong> + <?php echo $this->getPriceHtml($product) ?> + <?php echo $this->getDetailsHtml($item) ?> + </td> + <td class="col comment"><?php echo $this->getEscapedDescription($item) ?></td> + <td class="col actions"> + <?php if ($product->isSaleable()): ?> + <?php if ($isVisibleProduct): ?> + <button type="button" title="<?php echo __('Add to Cart') ?>" onclick="setLocation('<?php echo $this->getSharedItemAddToCartUrl($item) ?>')" class="action tocart"><span><?php echo __('Add to Cart') ?></span></button> + <?php endif ?> + <?php endif; ?> + <a href="<?php echo $this->getAddToWishlistUrl($item) ?>" onclick="setLocation(this.href); return false;" class="action towishlist" data-action="add-to-wishlist"><span><?php echo __('Add to Wishlist') ?></span></a> + </td> + </tr> + <?php endforeach ?> + </tbody> + </table> + <div class="actions"> + <?php if($this->isSaleable()):?> + <div class="primary"> + <button type="button" title="<?php echo __('Add All to Cart') ?>" onclick="setLocation('<?php echo $this->getUrl('*/*/allcart', array('_current'=>true)) ?>')" class="action tocart"><span><?php echo __('Add All to Cart') ?></span></button> + </div> + <?php endif;?> + <div class="secondary"> + <a href="<?php echo $this->escapeUrl($this->getBackUrl()) ?>" class="action back"><span><?php echo __('Back') ?></span></a> + </div> + </div> +</form> +<?php else: ?> + <p><?php echo __('Wish List is empty now.') ?></p> +<?php endif ?> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/sharing.phtml b/app/design/frontend/magento_plushe/Magento_Wishlist/sharing.phtml new file mode 100644 index 00000000000..70da9af4b1c --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/sharing.phtml @@ -0,0 +1,67 @@ +<?php +/** + * 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 design + * @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) + */ +?> +<form class="form wishlist share" action="<?php echo $this->getSendUrl() ?>" id="form-validate" method="post" data-hasrequired="<?php echo __('* Required Fields') ?>"> + <fieldset class="fieldset"> + <?php echo $this->getBlockHtml('formkey')?> + <legend class="legend"><span><?php echo __('Sharing Information') ?></span></legend><br /> + <div class="field emails required"> + <label class="label" for="email_address"><span><?php echo __('Email addresses, separated by commas') ?></span></label> + <div class="control"> + <textarea name="emails" cols="60" rows="5" id="email_address" data-validate="{required:true,'validate-emails':true}"><?php echo $this->getEnteredData('emails') ?></textarea> + </div> + </div> + <div class="field text"> + <label class="label" for="message"><span><?php echo __('Message') ?></span></label> + <div class="control"> + <textarea id="message" name="message" cols="60" rows="5"><?php echo $this->getEnteredData('message') ?></textarea> + </div> + </div> + <?php if($this->helper('Magento\Wishlist\Helper\Data')->isRssAllow()): ?> + <div class="field choice rss"> + <input type="checkbox" name="rss_url" id="rss_url" value="1" title="<?php echo __('Check this checkbox if you want to add a link to an rss feed to your wishlist.') ?>" class="checkbox" /> + <label class="label" for="rss_url"><span><?php echo __('Check this checkbox if you want to add a link to an rss feed to your wishlist.') ?></span></label> + </div> + <?php endif; ?> + </fieldset> + <div class="actions"> + <div class="primary"> + <button type="submit" title="<?php echo __('Share Wishlist') ?>" class="action submit"><span><?php echo __('Share Wishlist') ?></span></button> + </div> + <div class="secondary"> + <a class="action back" href="<?php echo $this->getBackUrl(); ?>"><span><?php echo __('Back')?></span></a></p> + </div> + </div> +</form> +<script type="text/javascript"> + (function($) { + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", function() { + $('#form-validate').validation(); + }) + })(jQuery); +</script> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/sidebar.phtml b/app/design/frontend/magento_plushe/Magento_Wishlist/sidebar.phtml new file mode 100644 index 00000000000..0925ab152d4 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/sidebar.phtml @@ -0,0 +1,71 @@ +<?php +/** + * 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 design + * @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) + */ +/* @var $this \Magento\Wishlist\Block\Customer\Sidebar */ +?> +<?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllow()) : ?> +<?php $imageBlock = $this->getLayout()->createBlock('Magento\Catalog\Block\Product\Image');?> +<div class="block wishlist"> + <div class="title"> + <strong><?php echo $this->getTitle(); ?></strong> + </div> + <div class="content"> + <strong class="subtitle"><?php echo __('Last Added Items') ?></strong> + <?php if ($this->hasWishlistItems()): ?> + <ol class="items minilist products" id="wishlist-sidebar"> + <?php $iterator = 1; ?> + <?php foreach ($this->getWishlistItems() as $_item): ?> + <?php $product = $_item->getProduct(); ?> + <?php echo ($iterator++==1) ? '<li class="item product">' : '</li><li class="item product">' ?> + <div class="product"> + <a class="product photo" href="<?php echo $this->getProductUrl($_item) ?>" title="<?php echo $this->escapeHtml($product->getName()) ?>"> + <?php echo $imageBlock->init($product, 'wishlist_sidebar_block')->toHtml() ?> + </a> + <div class="product details"> + <strong class="product name"><a href="<?php echo $this->getProductUrl($_item) ?>"><?php echo $this->escapeHtml($product->getName()) ?></a></strong> + <?php echo $this->getPriceHtml($product, false, '-wishlist') ?> + <div class="product actions"> + <?php if ($product->isSaleable() && $product->isVisibleInSiteVisibility()): ?> + <div class="primary"><a href="<?php echo $this->getItemAddToCartUrl($_item) ?>" class="action tocart"><span><?php echo __('Add to Cart') ?></span></a></div> + <?php endif; ?> + <div class="secondary"> + <a href="<?php echo $this->getItemRemoveUrl($_item) ?>" title="<?php echo __('Remove This Item') ?>" onclick="return confirm('<?php echo __('Are you sure you would like to remove this item from the wishlist?') ?>');" class="action delete"> + <span><?php echo __('Remove This Item') ?></span> + </a> + </div> + </div> + </div> + </div> + <?php echo ($iterator==count($this->getWishlistItems())+1) ? '</li>' : '' ?> + <?php endforeach; ?> + </ol> + <div class="actions"> + <a class="action details" href="<?php echo $this->helper('Magento\Wishlist\Helper\Data')->getListUrl() ?>"><span><?php echo __('Go to Wish List') ?></span></a> + </div> + <?php else: ?> + <p class="empty"><?php echo __('You have no items in your wish list.') ?></p> + <?php endif ?> + </div> +</div> +<?php endif ?> diff --git a/app/design/frontend/magento_plushe/Magento_Wishlist/view.phtml b/app/design/frontend/magento_plushe/Magento_Wishlist/view.phtml new file mode 100644 index 00000000000..dc803e1dc10 --- /dev/null +++ b/app/design/frontend/magento_plushe/Magento_Wishlist/view.phtml @@ -0,0 +1,81 @@ +<?php +/** + * 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 design + * @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) + */ +/* @var $this \Magento\Wishlist\Block\Customer\Wishlist */ +?> +<?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllow()) : ?> + <?php if ($this->helper('Magento\Wishlist\Helper\Data')->isRssAllow() && $this->hasWishlistItems()): ?> + <a href="<?php echo $this->helper('Magento\Wishlist\Helper\Data')->getRssUrl($this->getWishlistInstance()->getId()); ?>" class="action rss wishlist"><span><?php echo __('RSS Feed') ?></span></a> + <?php endif; ?> + <form class="form wishlist items" id="wishlist-view-form" action="<?php echo $this->getUrl('*/*/update', array('wishlist_id' => $this->getWishlistInstance()->getId())) ?>" method="post"> + <?php echo $this->getChildHtml('top'); ?> + <?php if ($this->hasWishlistItems()): ?> + <?php echo $this->getBlockHtml('formkey');?> + <?php $this->getChildBlock('items')->setItems($this->getWishlistItems()); ?> + <?php echo $this->getChildHtml('items');?> + <?php else: ?> + <p class="empty"><?php echo __('You have no items in your wish list.') ?></p> + <?php endif ?> + <?php echo $this->getChildHtml('bottom'); ?> + <div class="actions"> + <div class="primary"><?php echo $this->getChildHtml('control_buttons');?></div> + <div class="secondary"><a href="<?php echo $this->escapeUrl($this->getBackUrl()) ?>" class="action back"><span><?php echo __('Back') ?></span></a></div> + </div> + </form> + <script id="form-tmpl" type="text/x-jQuery-tmpl"> + <form id="wishlist-hidden-form" method="post" action="${url}" class="no-display"> + {{if itemId}}<input name="item_id" value="${itemId}"/>{{/if}} + {{if wishlistId}}<input name="wishlist_id" value="${wishlistId}"/>{{/if}} + {{if qty}}<input name="qty" value="${qty}"/>{{/if}} + {{if item}}<input name="item" value="${item}"/>{{/if}} + {{if entity}}<input name="entity" value="${entity}"/>{{/if}} + </form> + </script> + <script> + (function($) { + head.js("<?php echo $this->getViewFileUrl('jquery/jquery.validate.js')?>", + "<?php echo $this->getViewFileUrl('jquery/jquery.metadata.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation.js')?>", + "<?php echo $this->getViewFileUrl('mage/validation/validation.js')?>", + "<?php echo $this->getViewFileUrl('Magento_Persistent::splitbutton.js') ?>", + "<?php echo $this->getViewFileUrl('Magento_Wishlist::wishlist.js')?>", function() { + $('#wishlist-view-form').wishlist({ + dataAttribute: 'item-id', + nameFormat: 'qty[{0}]', + btnRemoveSelector: '.action.delete', + qtySelector: '.qty', + addToCartSelector: '.action.tocart', + addAllToCartSelector: '.primary > .action.tocart', + commentInputType: 'textarea', + infoList: false, + addToCartUrl: '<?php echo $this->getItemAddToCartUrl('%item%');?>' , + confirmRemoveMessage: '<?php echo __('Are you sure you want to remove this product from your wishlist?') ?>', + addAllToCartUrl : '<?php echo $this->getUrl('*/*/allcart', array('wishlist_id' => $this->getWishlistInstance()->getId())) ?>', + commentString : '' + }); + $('body').splitButton(); + }); + })(jQuery); + </script> +<?php endif ?> diff --git a/app/design/frontend/magento_plushe/css/print.css b/app/design/frontend/magento_plushe/css/print.css new file mode 100644 index 00000000000..c522d1b9e47 --- /dev/null +++ b/app/design/frontend/magento_plushe/css/print.css @@ -0,0 +1,158 @@ +/** + * 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 design + * @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) + */ + +* { background:none !important; text-align:left !important; } +body { background:#fff !important; font-size:9pt !important; margin:15px !important; } + +.header-container, +.footer-before-container, +.footer-container, +.widget, +.pager, +.toolbar, +.actions, +.buttons-set { display:none !important; } + +.page-print .data-table .cart-tax-total { background-position:100% -54px; } +.page-print .data-table .cart-tax-info { display:block !important; } + + + + +/* + * My Account -> My Orders + * +----------------------------------------------------------------------------- */ +.order-date { + margin-bottom: 15px; +} + +.order.details .title, +.order.details .caption { + clear: both; + margin-bottom: 15px; +} + +.order.details .title strong, +.order.details .caption strong { + line-height: 1.2; + font-weight: 200; + font-size: 20px; +} + +/* blocks */ +.order.details .block.order { + float: left; + width: 48%; + margin-bottom: 30px; + padding-right: 2%; +} +.order.details .block.order .title { + margin-bottom: 15px; +} +.order.details .block.order .title strong { + line-height: 1.2; + font-weight: 200; + font-size: 20px; +} +.order.details .block.order .content address { + font-style: normal; +} +.data.table.order.tracking { + margin: 10px 0; +} + +/* tables */ +.data.table.order { + margin-bottom: 45px; + width: 100%; +} +.data.table.order thead th { + padding: 0 10px; +} +.data.table.order thead tr:last-child th { + padding-bottom: 10px; + border-bottom: 3px solid #e5e5e5; +} +.data.table.order td.col.qty { + width: 90px; + text-align: left; +} +.data.table.order td.col.price, +.data.table.order td.col.subtotal { + text-align: left; +} +.data.table.order td { + padding: 16px 10px 10px; + vertical-align: top; +} +.data.table.order th { + text-align: left; + font-weight: 400; + font-size: 14px; + vertical-align: top; +} +.data.table.order tr:first-child th { + font-weight: 400; + font-size: 16px; +} + +/* h4 */ +.data.table.order td h4 { + margin: 0; +} + +/* .item.options */ +.data.table.order .item.options, +.data.table.order .item-options { + margin: 5px 0; +} +.data.table.order .item.options dt, +.data.table.order .item-options dt { + font-weight: 400; + display: inline; + margin-right: 10px; + float: left; + clear: left; +} +.data.table.order .item.options dt:after, +.data.table.order .item-options dt:after { + content: ': '; +} +.data.table.order .item.options dd, +.data.table.order .item-options dd { + font-weight: 200; + margin: 0 0 10px 10px; + padding: 0; +} + +/* tfoot */ +.data.table.order tfoot tr:first-child td { + border-top: 3px solid #e5e5e5; + padding-top: 15px; +} +.data.table.order.tracking th, +.data.table.order.tracking td { + padding: 0; +} \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/css/styles.css b/app/design/frontend/magento_plushe/css/styles.css new file mode 100644 index 00000000000..85ba910cf2f --- /dev/null +++ b/app/design/frontend/magento_plushe/css/styles.css @@ -0,0 +1,10859 @@ +/** + * 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 design + * @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) + */ +/* normalize.css 2012-03-11T12:53 UTC - http://github.com/necolas/normalize.css */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section, +summary { + display: block; +} +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden] { + display: none; +} +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +html, +button, +input, +select, +textarea { + font-family: sans-serif; +} +body { + margin: 0; +} +a:focus { + outline: thin dotted; +} +a:hover, +a:active { + outline: 0; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +h2 { + font-size: 1.5em; + margin: 0.83em 0; +} +h3 { + font-size: 1.17em; + margin: 1em 0; +} +h4 { + font-size: 1em; + margin: 1.33em 0; +} +h5 { + font-size: 0.83em; + margin: 1.67em 0; +} +h6 { + font-size: 0.75em; + margin: 2.33em 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +blockquote { + margin: 1em 40px; +} +dfn { + font-style: italic; +} +mark { + background: #ff0; + color: #000; +} +p, +pre { + margin: 1em 0; +} +pre, +code, +kbd, +samp { + font-family: monospace, serif; + _font-family: 'courier new', monospace; + font-size: 1em; +} +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} +q { + quotes: none; +} +q:before, +q:after { + content: ''; + content: none; +} +small { + font-size: 75%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +dl, +menu, +ol, +ul { + margin: 1em 0; +} +dd { + margin: 0 0 0 40px; +} +menu, +ol, +ul { + padding: 0 0 0 40px; +} +nav ul, +nav ol { + list-style: none; + list-style-image: none; +} +img { + border: 0; + -ms-interpolation-mode: bicubic; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 0; +} +form { + margin: 0; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; + white-space: normal; + *margin-left: -7px; +} +button, +input, +select, +textarea { + font-size: 100%; + margin: 0; + vertical-align: baseline; + *vertical-align: middle; +} +button, +input { + line-height: normal; +} +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; + *overflow: visible; +} +button[disabled], +input[disabled] { + cursor: default; +} +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; + *height: 13px; + *width: 13px; +} +input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +textarea { + overflow: auto; + vertical-align: top; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +@font-face { + font-family: "sourcesanspro"; + src: url('../fonts/sourcesanspro/sourcesanspro-200-normal-webfont.eot'); + src: url('../fonts/sourcesanspro/sourcesanspro-200-normal-webfont.eot?#iefix') format('embedded-opentype'), url('../fonts/sourcesanspro/sourcesanspro-200-normal-webfont.woff') format('woff'), url('../fonts/sourcesanspro/sourcesanspro-200-normal-webfont.ttf') format('truetype'), url('../fonts/sourcesanspro/sourcesanspro-200-normal-webfont.svg#sourcesanspro') format('svg'); + font-weight: 200; + font-style: normal; +} +@font-face { + font-family: "sourcesanspro"; + src: url('../fonts/sourcesanspro/sourcesanspro-200-normal-webfont.eot'); + src: url('../fonts/sourcesanspro/sourcesanspro-200-normal-webfont.eot?#iefix') format('embedded-opentype'), url('../fonts/sourcesanspro/sourcesanspro-200-normal-webfont.woff') format('woff'), url('../fonts/sourcesanspro/sourcesanspro-200-normal-webfont.ttf') format('truetype'), url('../fonts/sourcesanspro/sourcesanspro-200-normal-webfont.svg#sourcesanspro') format('svg'); + font-weight: 200; + font-style: normal; +} +@font-face { + font-family: "sourcesanspro"; + src: url('../fonts/sourcesanspro/sourcesanspro-400-normal-webfont.eot'); + src: url('../fonts/sourcesanspro/sourcesanspro-400-normal-webfont.eot?#iefix') format('embedded-opentype'), url('../fonts/sourcesanspro/sourcesanspro-400-normal-webfont.woff') format('woff'), url('../fonts/sourcesanspro/sourcesanspro-400-normal-webfont.ttf') format('truetype'), url('../fonts/sourcesanspro/sourcesanspro-400-normal-webfont.svg#sourcesanspro') format('svg'); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: "sourcesanspro"; + src: url('../fonts/sourcesanspro/sourcesanspro-600-normal-webfont.eot'); + src: url('../fonts/sourcesanspro/sourcesanspro-600-normal-webfont.eot?#iefix') format('embedded-opentype'), url('../fonts/sourcesanspro/sourcesanspro-600-normal-webfont.woff') format('woff'), url('../fonts/sourcesanspro/sourcesanspro-600-normal-webfont.ttf') format('truetype'), url('../fonts/sourcesanspro/sourcesanspro-600-normal-webfont.svg#sourcesanspro') format('svg'); + font-weight: 600; + font-style: normal; +} +@font-face { + font-family: "sourcesanspro"; + src: url('../fonts/sourcesanspro/sourcesanspro-700-normal-webfont.eot'); + src: url('../fonts/sourcesanspro/sourcesanspro-700-normal-webfont.eot?#iefix') format('embedded-opentype'), url('../fonts/sourcesanspro/sourcesanspro-700-normal-webfont.woff') format('woff'), url('../fonts/sourcesanspro/sourcesanspro-700-normal-webfont.ttf') format('truetype'), url('../fonts/sourcesanspro/sourcesanspro-700-normal-webfont.svg#sourcesanspro') format('svg'); + font-weight: 700; + font-style: normal; +} +@font-face { + font-family: "marvel"; + src: url('../fonts/marvel/marvel-400-normal-webfont.eot'); + src: url('../fonts/marvel/marvel-400-normal-webfont.eot?#iefix') format('embedded-opentype'), url('../fonts/marvel/marvel-400-normal-webfont.woff') format('woff'), url('../fonts/marvel/marvel-400-normal-webfont.ttf') format('truetype'), url('../fonts/marvel/marvel-400-normal-webfont.svg#marvel') format('svg'); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: "icons"; + src: url('../fonts/icons/icons.eot'); + src: url('../fonts/icons/icons.eot?#iefix') format('embedded-opentype'), url('../fonts/icons/icons.woff') format('woff'), url('../fonts/icons/icons.ttf') format('truetype'), url('../fonts/icons/icons.svg#icons') format('svg'); + font-weight: 400; + font-style: normal; +} +html, +body, +button, +input, +select, +textarea { + font: 400 14px/1.33 "sourcesanspro"; + color: #675f55; +} +nav ul, +nav ol { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; +} +h1 { + color: #675f55; + font: 200 30px/1.2 "sourcesanspro"; +} +h2 { + color: #675f55; + font: 400 20px/1.2 "sourcesanspro"; +} +h3 { + color: #675f55; + font: 600 18px/1.2 "sourcesanspro"; +} +h4 { + color: #675f55; + font: 600 16px/1.2 "sourcesanspro"; +} +h5 { + color: #675f55; + font: 600 14px/1.2 "sourcesanspro"; +} +h6 { + color: #675f55; + font: 600 12px/1.2 "sourcesanspro"; +} +a { + color: #332e29; + text-decoration: none; +} +a:visited { + color: #332e29; +} +a:hover, +a:active { + color: #da370a; +} +q:before { + content: "\201c"; +} +q:after { + content: "\201d"; +} +q q:before { + content: "\2018"; +} +q q:after { + content: "\2019"; +} +table th { + border-right: 1px solid #e5e5e5; + font-size: 16px; + padding: 7px 10px; +} +table th:last-child { + border-right: 0; +} +table td { + border-right: 1px solid #e5e5e5; + padding: 7px 10px; + vertical-align: top; +} +table td:last-child { + border-right: 0; +} +table tbody tr:nth-child(odd) td { + background: #f8f8f8; +} +blockquote { + margin: 10px 20px 10px 40px; +} +blockquote:before { + color: #999999; + content: "\201C"; + display: block; + font-family: Georgia, serif; + font-size: 60px; + font-style: italic; + position: absolute; + left: 15px; + top: 10px; +} +blockquote cite { + color: #999999; + font-style: italic; + font-size: 12px; + margin: 1em 0; +} +hr { + background: #c2c2c2; + border: 0; + color: #c2c2c2; + height: 1px; + margin: 1em 0; +} +.profileBlockWithBg, +.multicheckout > .block.shipping .box, +.multicheckout > .block.billing .box, +.multicheckout .block.other .content { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + background: #f8f8f8; + padding: 30px; +} +.primary.action, +.action.myPrimary, +input[type="submit"], +input[type="button"], +.form.settings .action.submit, +.fieldset.login .actions .action.login, +.opc .actions .primary .action, +.cart.summary .fieldset .action:not(.check), +.popup .actions .action.submit, +.page.title .action, +.block.add.review .action.submit, +.opc.wrapper .form:not(.login) .actions button.action, +.step.login.wrapper button.action:not(.reload), +.multicheckout .action.continue, +.multicheckout .action.submit, +.multicheckout .action.add, +.cart.summary .block .action, +.action.checkout, +.form.newsletter.manage .action.save, +.action.tocart, +.action.primary.customize, +.action.primary.tocart, +.login.container .action.login, +.login.container .action.create, +.form.send.friend .action.save, +.form.address.edit .action.save, +.form.edit.account .action.save, +.form.search.advanced .action.save, +.form.orders.search .action.save, +.form.contact .action.save, +.form.password.forget .action.save, +.form.create.account .action.save, +.form.wishlist.share .action.save, +.form.password.reset .action.save, +.form.paypal.review .action.save, +.form.send.friend .action.submit, +.form.address.edit .action.submit, +.form.edit.account .action.submit, +.form.search.advanced .action.submit, +.form.orders.search .action.submit, +.form.contact .action.submit, +.form.password.forget .action.submit, +.form.create.account .action.submit, +.form.wishlist.share .action.submit, +.form.password.reset .action.submit, +.form.paypal.review .action.submit, +.form.send.friend .action.add, +.form.address.edit .action.add, +.form.edit.account .action.add, +.form.search.advanced .action.add, +.form.orders.search .action.add, +.form.contact .action.add, +.form.password.forget .action.add, +.form.create.account .action.add, +.form.wishlist.share .action.add, +.form.password.reset .action.add, +.form.paypal.review .action.add, +.form.search.advanced .action, +.form.orders.search .action, +.form.contact .action, +.data.table.wishlist + .actions .primary .action.share, +.data.table.wishlist + .actions .primary .action.update, +.action.myPrimary, +input[type="submit"], +input[type="button"], +.form.settings .action.submit, +.fieldset.login .actions .action.login, +.opc .actions .primary .action, +.cart.summary .fieldset .action:not(.check), +.popup .actions .action.submit, +.page.title .action, +.block.add.review .action.submit, +.opc.wrapper .form:not(.login) .actions button.action, +.step.login.wrapper button.action:not(.reload), +.multicheckout .action.continue, +.multicheckout .action.submit, +.multicheckout .action.add, +.cart.summary .block .action, +.action.checkout, +.form.newsletter.manage .action.save, +.action.tocart, +.action.primary.customize, +.action.primary.tocart, +.login.container .action.login, +.login.container .action.create, +.form.send.friend .action.save, +.form.address.edit .action.save, +.form.edit.account .action.save, +.form.search.advanced .action.save, +.form.orders.search .action.save, +.form.contact .action.save, +.form.password.forget .action.save, +.form.create.account .action.save, +.form.wishlist.share .action.save, +.form.password.reset .action.save, +.form.paypal.review .action.save, +.form.send.friend .action.submit, +.form.address.edit .action.submit, +.form.edit.account .action.submit, +.form.search.advanced .action.submit, +.form.orders.search .action.submit, +.form.contact .action.submit, +.form.password.forget .action.submit, +.form.create.account .action.submit, +.form.wishlist.share .action.submit, +.form.password.reset .action.submit, +.form.paypal.review .action.submit, +.form.send.friend .action.add, +.form.address.edit .action.add, +.form.edit.account .action.add, +.form.search.advanced .action.add, +.form.orders.search .action.add, +.form.contact .action.add, +.form.password.forget .action.add, +.form.create.account .action.add, +.form.wishlist.share .action.add, +.form.password.reset .action.add, +.form.paypal.review .action.add, +.form.search.advanced .action, +.form.orders.search .action, +.form.contact .action, +.data.table.wishlist + .actions .primary .action.share, +.data.table.wishlist + .actions .primary .action.update { + background-color: #da370a; + color: #ffffff; +} +.primary.action:focus, +.primary.action:active, +.primary.action:hover, +.action.myPrimary:focus, +.action.myPrimary:active, +.action.myPrimary:hover, +input[type="submit"]:focus, +input[type="submit"]:active, +input[type="submit"]:hover, +input[type="button"]:focus, +input[type="button"]:active, +input[type="button"]:hover, +.form.settings .action.submit:focus, +.form.settings .action.submit:active, +.form.settings .action.submit:hover, +.fieldset.login .actions .action.login:focus, +.fieldset.login .actions .action.login:active, +.fieldset.login .actions .action.login:hover, +.opc .actions .primary .action:focus, +.opc .actions .primary .action:active, +.opc .actions .primary .action:hover, +.cart.summary .fieldset .action:not(.check):focus, +.cart.summary .fieldset .action:not(.check):active, +.cart.summary .fieldset .action:not(.check):hover, +.popup .actions .action.submit:focus, +.popup .actions .action.submit:active, +.popup .actions .action.submit:hover, +.page.title .action:focus, +.page.title .action:active, +.page.title .action:hover, +.block.add.review .action.submit:focus, +.block.add.review .action.submit:active, +.block.add.review .action.submit:hover, +.opc.wrapper .form:not(.login) .actions button.action:focus, +.opc.wrapper .form:not(.login) .actions button.action:active, +.opc.wrapper .form:not(.login) .actions button.action:hover, +.step.login.wrapper button.action:not(.reload):focus, +.step.login.wrapper button.action:not(.reload):active, +.step.login.wrapper button.action:not(.reload):hover, +.multicheckout .action.continue:focus, +.multicheckout .action.continue:active, +.multicheckout .action.continue:hover, +.multicheckout .action.submit:focus, +.multicheckout .action.submit:active, +.multicheckout .action.submit:hover, +.multicheckout .action.add:focus, +.multicheckout .action.add:active, +.multicheckout .action.add:hover, +.cart.summary .block .action:focus, +.cart.summary .block .action:active, +.cart.summary .block .action:hover, +.action.checkout:focus, +.action.checkout:active, +.action.checkout:hover, +.form.newsletter.manage .action.save:focus, +.form.newsletter.manage .action.save:active, +.form.newsletter.manage .action.save:hover, +.action.tocart:focus, +.action.tocart:active, +.action.tocart:hover, +.action.primary.customize:focus, +.action.primary.customize:active, +.action.primary.customize:hover, +.action.primary.tocart:focus, +.action.primary.tocart:active, +.action.primary.tocart:hover, +.login.container .action.login:focus, +.login.container .action.login:active, +.login.container .action.login:hover, +.login.container .action.create:focus, +.login.container .action.create:active, +.login.container .action.create:hover, +.form.send.friend .action.save:focus, +.form.send.friend .action.save:active, +.form.send.friend .action.save:hover, +.form.address.edit .action.save:focus, +.form.address.edit .action.save:active, +.form.address.edit .action.save:hover, +.form.edit.account .action.save:focus, +.form.edit.account .action.save:active, +.form.edit.account .action.save:hover, +.form.search.advanced .action.save:focus, +.form.search.advanced .action.save:active, +.form.search.advanced .action.save:hover, +.form.orders.search .action.save:focus, +.form.orders.search .action.save:active, +.form.orders.search .action.save:hover, +.form.contact .action.save:focus, +.form.contact .action.save:active, +.form.contact .action.save:hover, +.form.password.forget .action.save:focus, +.form.password.forget .action.save:active, +.form.password.forget .action.save:hover, +.form.create.account .action.save:focus, +.form.create.account .action.save:active, +.form.create.account .action.save:hover, +.form.wishlist.share .action.save:focus, +.form.wishlist.share .action.save:active, +.form.wishlist.share .action.save:hover, +.form.password.reset .action.save:focus, +.form.password.reset .action.save:active, +.form.password.reset .action.save:hover, +.form.paypal.review .action.save:focus, +.form.paypal.review .action.save:active, +.form.paypal.review .action.save:hover, +.form.send.friend .action.submit:focus, +.form.send.friend .action.submit:active, +.form.send.friend .action.submit:hover, +.form.address.edit .action.submit:focus, +.form.address.edit .action.submit:active, +.form.address.edit .action.submit:hover, +.form.edit.account .action.submit:focus, +.form.edit.account .action.submit:active, +.form.edit.account .action.submit:hover, +.form.search.advanced .action.submit:focus, +.form.search.advanced .action.submit:active, +.form.search.advanced .action.submit:hover, +.form.orders.search .action.submit:focus, +.form.orders.search .action.submit:active, +.form.orders.search .action.submit:hover, +.form.contact .action.submit:focus, +.form.contact .action.submit:active, +.form.contact .action.submit:hover, +.form.password.forget .action.submit:focus, +.form.password.forget .action.submit:active, +.form.password.forget .action.submit:hover, +.form.create.account .action.submit:focus, +.form.create.account .action.submit:active, +.form.create.account .action.submit:hover, +.form.wishlist.share .action.submit:focus, +.form.wishlist.share .action.submit:active, +.form.wishlist.share .action.submit:hover, +.form.password.reset .action.submit:focus, +.form.password.reset .action.submit:active, +.form.password.reset .action.submit:hover, +.form.paypal.review .action.submit:focus, +.form.paypal.review .action.submit:active, +.form.paypal.review .action.submit:hover, +.form.send.friend .action.add:focus, +.form.send.friend .action.add:active, +.form.send.friend .action.add:hover, +.form.address.edit .action.add:focus, +.form.address.edit .action.add:active, +.form.address.edit .action.add:hover, +.form.edit.account .action.add:focus, +.form.edit.account .action.add:active, +.form.edit.account .action.add:hover, +.form.search.advanced .action.add:focus, +.form.search.advanced .action.add:active, +.form.search.advanced .action.add:hover, +.form.orders.search .action.add:focus, +.form.orders.search .action.add:active, +.form.orders.search .action.add:hover, +.form.contact .action.add:focus, +.form.contact .action.add:active, +.form.contact .action.add:hover, +.form.password.forget .action.add:focus, +.form.password.forget .action.add:active, +.form.password.forget .action.add:hover, +.form.create.account .action.add:focus, +.form.create.account .action.add:active, +.form.create.account .action.add:hover, +.form.wishlist.share .action.add:focus, +.form.wishlist.share .action.add:active, +.form.wishlist.share .action.add:hover, +.form.password.reset .action.add:focus, +.form.password.reset .action.add:active, +.form.password.reset .action.add:hover, +.form.paypal.review .action.add:focus, +.form.paypal.review .action.add:active, +.form.paypal.review .action.add:hover, +.form.search.advanced .action:focus, +.form.search.advanced .action:active, +.form.search.advanced .action:hover, +.form.orders.search .action:focus, +.form.orders.search .action:active, +.form.orders.search .action:hover, +.form.contact .action:focus, +.form.contact .action:active, +.form.contact .action:hover, +.data.table.wishlist + .actions .primary .action.share:focus, +.data.table.wishlist + .actions .primary .action.share:active, +.data.table.wishlist + .actions .primary .action.share:hover, +.data.table.wishlist + .actions .primary .action.update:focus, +.data.table.wishlist + .actions .primary .action.update:active, +.data.table.wishlist + .actions .primary .action.update:hover { + background-color: #a92b08; +} +.secondary.action, +.action.mySecondary, +input[type="reset"], +.action.mySecondaryButton, +.popup .actions .action.cancel, +.multicheckout .action.update, +.cart.main.actions .action.update, +.cart.main.actions .action.clear, +.block.compare .action.compare, +.data.comparison .cell.remove .action.delete, +.form.send.friend .actions > .primary .action.add, +.paypal.review.view .actions .action.update, +.shipping-tracking-popup .action.close, +.action.mySecondary, +input[type="reset"], +.action.mySecondaryButton, +.popup .actions .action.cancel, +.multicheckout .action.update, +.cart.main.actions .action.update, +.cart.main.actions .action.clear, +.block.compare .action.compare, +.data.comparison .cell.remove .action.delete, +.form.send.friend .actions > .primary .action.add, +.paypal.review.view .actions .action.update, +.shipping-tracking-popup .action.close { + background-color: #c2c2c2; + color: #ffffff; +} +.secondary.action:focus, +.secondary.action:active, +.secondary.action:hover, +.action.mySecondary:focus, +.action.mySecondary:active, +.action.mySecondary:hover, +input[type="reset"]:focus, +input[type="reset"]:active, +input[type="reset"]:hover, +.action.mySecondaryButton:focus, +.action.mySecondaryButton:active, +.action.mySecondaryButton:hover, +.popup .actions .action.cancel:focus, +.popup .actions .action.cancel:active, +.popup .actions .action.cancel:hover, +.multicheckout .action.update:focus, +.multicheckout .action.update:active, +.multicheckout .action.update:hover, +.cart.main.actions .action.update:focus, +.cart.main.actions .action.update:active, +.cart.main.actions .action.update:hover, +.cart.main.actions .action.clear:focus, +.cart.main.actions .action.clear:active, +.cart.main.actions .action.clear:hover, +.block.compare .action.compare:focus, +.block.compare .action.compare:active, +.block.compare .action.compare:hover, +.data.comparison .cell.remove .action.delete:focus, +.data.comparison .cell.remove .action.delete:active, +.data.comparison .cell.remove .action.delete:hover, +.form.send.friend .actions > .primary .action.add:focus, +.form.send.friend .actions > .primary .action.add:active, +.form.send.friend .actions > .primary .action.add:hover, +.paypal.review.view .actions .action.update:focus, +.paypal.review.view .actions .action.update:active, +.paypal.review.view .actions .action.update:hover, +.shipping-tracking-popup .action.close:focus, +.shipping-tracking-popup .action.close:active, +.shipping-tracking-popup .action.close:hover { + background-color: #a9a9a9; +} +.button.link, +.action.myLink, +.fieldset .fields.dates .field .ui-datepicker-trigger, +.multicheckout.success .action.continue { + background: none; + border: 0; + display: inline; + color: #332e29; + margin: 0; + padding: 0; + text-decoration: underline; +} +.button.link:focus, +.button.link:active, +.button.link:hover, +.action.myLink:focus, +.action.myLink:active, +.action.myLink:hover, +.fieldset .fields.dates .field .ui-datepicker-trigger:focus, +.fieldset .fields.dates .field .ui-datepicker-trigger:active, +.fieldset .fields.dates .field .ui-datepicker-trigger:hover, +.multicheckout.success .action.continue:focus, +.multicheckout.success .action.continue:active, +.multicheckout.success .action.continue:hover { + color: #da370a; + text-decoration: none; +} +.button.action, +.primary.action, +.secondary.action, +.action.myPrimary, +.action.mySecondary, +input[type="submit"], +input[type="button"], +input[type="reset"], +.form.settings .action.submit, +.fieldset.login .actions .action.login, +.action.mySecondaryButton, +.opc .actions .primary .action, +.cart.summary .fieldset .action:not(.check), +.popup .actions .action.submit, +.popup .actions .action.cancel, +.page.title .action, +.block.add.review .action.submit, +.opc.wrapper .form:not(.login) .actions button.action, +.step.login.wrapper button.action:not(.reload), +.multicheckout .action.update, +.multicheckout .action.continue, +.multicheckout .action.submit, +.multicheckout .action.add, +.cart.main.actions .action.update, +.cart.main.actions .action.clear, +.cart.summary .block .action, +.action.checkout, +.form.newsletter.manage .action.save, +.block.compare .action.compare, +.data.comparison .cell.remove .action.delete, +.action.tocart, +.action.primary.customize, +.action.primary.tocart, +.login.container .action.login, +.login.container .action.create, +.form.send.friend .action.save, +.form.address.edit .action.save, +.form.edit.account .action.save, +.form.search.advanced .action.save, +.form.orders.search .action.save, +.form.contact .action.save, +.form.password.forget .action.save, +.form.create.account .action.save, +.form.wishlist.share .action.save, +.form.password.reset .action.save, +.form.paypal.review .action.save, +.form.send.friend .action.submit, +.form.address.edit .action.submit, +.form.edit.account .action.submit, +.form.search.advanced .action.submit, +.form.orders.search .action.submit, +.form.contact .action.submit, +.form.password.forget .action.submit, +.form.create.account .action.submit, +.form.wishlist.share .action.submit, +.form.password.reset .action.submit, +.form.paypal.review .action.submit, +.form.send.friend .action.add, +.form.address.edit .action.add, +.form.edit.account .action.add, +.form.search.advanced .action.add, +.form.orders.search .action.add, +.form.contact .action.add, +.form.password.forget .action.add, +.form.create.account .action.add, +.form.wishlist.share .action.add, +.form.password.reset .action.add, +.form.paypal.review .action.add, +.form.send.friend .actions > .primary .action.add, +.form.search.advanced .action, +.form.orders.search .action, +.form.contact .action, +.paypal.review.view .actions .action.update, +.data.table.wishlist + .actions .primary .action.share, +.data.table.wishlist + .actions .primary .action.update, +.shipping-tracking-popup .action.close { + border: none; + border-radius: 0; + font: 600 14px/16px; + text-transform: uppercase; + margin: 0; + padding: 9px 11px 9px; + box-shadow: none; + text-shadow: none; + outline: none; + text-decoration: none; +} +.action + .action { + margin-left: 5px; +} +.hasRequired:after, +.form.validation:after, +.opc .form:after { + content: attr(data-hasrequired); + display: block; + font-size: 14px; + margin: 10px 0 0; + color: #da370a; + letter-spacing: normal; + word-spacing: normal; +} +.load.indicator { + display: inline-block; + margin: 20px auto; + padding: 8px; + vertical-align: middle; +} +.load.indicator span { + display: block; + line-height: 16px; +} +.load.indicator span:before { + content: ''; + margin-right: 5px; + display: inline-block; + width: 16px; + height: 16px; + background: url("../images/loader.gif") no-repeat 0 0; + background-color: #da370a; + vertical-align: top; +} +.form .actions { + margin-right: 10px; + text-align: right; +} +.fieldset { + border: 0; + margin: 30px 10px 30px 30px; + padding: 0; + letter-spacing: -0.31em; + word-spacing: -0.43em; +} +.fieldset > * { + letter-spacing: normal; + word-spacing: normal; +} +.fieldset > .legend { + float: left; + font: 400 20px/1.2 "sourcesanspro"; + margin: -30px 30px 50px -30px; + width: 100%; +} +.fieldset > .legend + br { + display: block; + *zoom: 1; +} +.fieldset > .legend + br:before, +.fieldset > .legend + br:after { + content: ""; + display: table; +} +.fieldset > .legend + br:after { + clear: both; +} +.fieldset > .field { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + margin: 0 0 20px; +} +.fieldset > .field > .label { + display: block; + padding-bottom: 5px; +} +.fieldset > .field .nested .field { + margin: 5px 0; +} +.fieldset > .field.choice > .control { + width: auto; +} +.fieldset > .field.choice > .label { + display: inline; +} +.fieldset > .field.choice > input { + vertical-align: top; + margin-top: 2px; + margin-right: 5px; +} +.fieldset > .field.required > .label > span:first-child:after { + content: '*'; + color: #da370a; +} +.fieldset > .field .addon { + display: table; + padding: 0; + width: 100%; +} +.fieldset > .field .addon textarea, +.fieldset > .field .addon select, +.fieldset > .field .addon input { + box-shadow: none; + display: table-cell; + margin: 0; + width: 100%; +} +.fieldset > .field .addon .addbefore, +.fieldset > .field .addon .addafter { + height: 0; + white-space: nowrap; + display: inline-block; + display: table-cell; + vertical-align: middle; + width: 1px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + background: #ffffff; + border: 1px solid #c2c2c2; + border-radius: 3px; + font: 400 14px "sourcesanspro"; + /* Prevent background color leak outs */ + + background-clip: padding-box; + outline: none; + height: 32px; + line-height: 1; + padding: 0 10px; +} +.fieldset > .field .addon .addbefore:focus, +.fieldset > .field .addon .addafter:focus { + border-color: #999999; +} +.control .fieldset > .field .addon .addbefore, +.control .fieldset > .field .addon .addafter { + width: 100%; +} +.fieldset > .field .addon .addbefore:disabled, +.fieldset > .field .addon .addafter:disabled { + opacity: 0.5; +} +.fieldset > .field .addon .addbefore::-webkit-input-placeholder, +.fieldset > .field .addon .addafter::-webkit-input-placeholder { + line-height: 1.333; +} +.fieldset > .field .addon .addbefore:-ms-input-placeholder, +.fieldset > .field .addon .addafter:-ms-input-placeholder { + line-height: 1.333; +} +.eq-ie8 .fieldset > .field .addon .addbefore, +.eq-ie8 .fieldset > .field .addon .addafter { + padding-top: 8px; +} +.fieldset > .field .note { + font-size: 12px; + margin-top: 3px; + padding-left: 15px; +} +.fieldset > .field .note:before { + border-bottom: 5px solid #675f55; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + content: ''; + display: inline-block; + font-size: 0; + line-height: 0; + margin: 4px 0 0 -14px; + position: absolute; + vertical-align: top; + width: 0; +} +.fieldset .fields.range .field { + display: inline-block; + letter-spacing: normal; + margin: 0; + vertical-align: top; + word-spacing: normal; +} +.fieldset .fields.range .field:first-child .control { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + padding-right: 30px; +} +.fieldset .fields.range .field:first-child .control:after { + content: '\2014'; + display: inline-block; + margin-right: -30px; + text-align: center; + width: 29px; +} +.fieldset .fields.range .field:first-child input { + width: 98%; +} +.fieldset .fields.dates .field { + display: inline-block; + letter-spacing: normal; + margin: 0 25px 0 0; + padding: 0 34px 0 0; + position: relative; + vertical-align: top; +} +.fieldset .fields.dates .field:first-child { + margin: 0 30px 0 0; +} +.fieldset .fields.dates .field:first-child .control { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} +.fieldset .fields.dates .field:first-child .control:after { + content: '\2014'; + display: inline-block; + position: absolute; + right: -39px; + top: 7px; + width: 29px; +} +.fieldset .fields.dates .field .ui-datepicker-trigger { + text-decoration: none; + position: absolute; + right: 0; + top: 9px; +} +input[type="text"], +input[type="search"], +input[type="tel"], +input[type="url"], +input[type="email"], +input[type="datetime"], +input[type="password"] { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + background: #ffffff; + border: 1px solid #c2c2c2; + border-radius: 3px; + font: 400 14px "sourcesanspro"; + /* Prevent background color leak outs */ + + background-clip: padding-box; + outline: none; + height: 32px; + line-height: 1; + padding: 0 10px; +} +input[type="text"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="url"]:focus, +input[type="email"]:focus, +input[type="datetime"]:focus, +input[type="password"]:focus { + border-color: #999999; +} +.control input[type="text"], +.control input[type="search"], +.control input[type="tel"], +.control input[type="url"], +.control input[type="email"], +.control input[type="datetime"], +.control input[type="password"] { + width: 100%; +} +input[type="text"]:disabled, +input[type="search"]:disabled, +input[type="tel"]:disabled, +input[type="url"]:disabled, +input[type="email"]:disabled, +input[type="datetime"]:disabled, +input[type="password"]:disabled { + opacity: 0.5; +} +input[type="text"]::-webkit-input-placeholder, +input[type="search"]::-webkit-input-placeholder, +input[type="tel"]::-webkit-input-placeholder, +input[type="url"]::-webkit-input-placeholder, +input[type="email"]::-webkit-input-placeholder, +input[type="datetime"]::-webkit-input-placeholder, +input[type="password"]::-webkit-input-placeholder { + line-height: 1.333; +} +input[type="text"]:-ms-input-placeholder, +input[type="search"]:-ms-input-placeholder, +input[type="tel"]:-ms-input-placeholder, +input[type="url"]:-ms-input-placeholder, +input[type="email"]:-ms-input-placeholder, +input[type="datetime"]:-ms-input-placeholder, +input[type="password"]:-ms-input-placeholder { + line-height: 1.333; +} +.eq-ie8 input[type="text"], +.eq-ie8 input[type="search"], +.eq-ie8 input[type="tel"], +.eq-ie8 input[type="url"], +.eq-ie8 input[type="email"], +.eq-ie8 input[type="datetime"], +.eq-ie8 input[type="password"] { + padding-top: 8px; +} +select { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + background: #ffffff; + border: 1px solid #c2c2c2; + border-radius: 3px; + font: 400 14px "sourcesanspro"; + /* Prevent background color leak outs */ + + background-clip: padding-box; + outline: none; + padding: 5px 10px 4px; +} +select:focus { + border-color: #999999; +} +.control select { + width: 100%; +} +select:disabled { + opacity: 0.5; +} +select.multiselect { + height: auto; +} +textarea { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + background: #ffffff; + border: 1px solid #c2c2c2; + border-radius: 3px; + font: 400 14px "sourcesanspro"; + /* Prevent background color leak outs */ + + background-clip: padding-box; + outline: none; + height: auto; + line-height: 1.2; + min-height: 4.8em; + padding: 10px; + resize: vertical; +} +textarea:focus { + border-color: #999999; +} +.control textarea { + width: 100%; +} +textarea:disabled { + opacity: 0.5; +} +.fieldset textarea.valid, +.fieldset select.valid, +.fieldset input[type="text"].valid, +.fieldset input[type="search"].valid, +.fieldset input[type="tel"].valid, +.fieldset input[type="url"].valid, +.fieldset input[type="email"].valid, +.fieldset input[type="datetime"].valid, +.fieldset input[type="password"].valid { + border-color: #42b649 !important; +} +.fieldset textarea.mage-error, +.fieldset select.mage-error, +.fieldset input[type="text"].mage-error, +.fieldset input[type="search"].mage-error, +.fieldset input[type="tel"].mage-error, +.fieldset input[type="url"].mage-error, +.fieldset input[type="email"].mage-error, +.fieldset input[type="datetime"].mage-error, +.fieldset input[type="password"].mage-error { + border-color: #da370a !important; +} +.fieldset div.mage-error[generated] { + color: #da370a !important; + font-size: 12px; + padding-top: 4px; +} +.form.validation .fieldset { + margin: 20px 0; +} +.form.settings .field { + display: inline-block; + padding-right: 20px; + vertical-align: top; + width: 50%; +} +.form.settings .nested .field { + width: 100%; +} +.form.settings .actions { + margin-right: 30px; +} +.ui-datepicker { + background: #efefef; + border: 4px solid #ffffff; + box-shadow: 5px 5px 10px 0 rgba(0, 0, 0, 0.35); + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + display: none; + padding: 15px; + width: auto; + z-index: 999999 !important; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; + cursor: pointer; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + border: solid; + display: block; + font-size: 0; + margin-top: -5px; + position: absolute; + left: 50%; + top: 50%; + width: 0; + height: 0; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-prev span { + margin-left: -8px; + border-width: 5px 8px 5px 0; + border-color: transparent #da370a transparent transparent; +} +.ui-datepicker .ui-datepicker-prev.ui-datepicker-prev-hover span { + border-color: transparent #a92b08 transparent transparent; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-next span { + margin-left: 0; + border-width: 5px 0 5px 8px; + border-color: transparent transparent transparent #da370a; +} +.ui-datepicker .ui-datepicker-next.ui-datepicker-next-hover span { + border-color: transparent transparent transparent #a92b08; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + margin: 1px 0; + padding: 0; +} +.ui-datepicker .ui-datepicker-title .ui-datepicker-month, +.ui-datepicker .ui-datepicker-title .ui-datepicker-year { + width: 47%; +} +.ui-datepicker .ui-datepicker-title .ui-datepicker-month { + margin-right: 6%; +} +.ui-datepicker .ui-datepicker-title .ui-datepicker-month-year { + width: 100%; +} +.ui-datepicker table { + width: 100%; + font-size: 12px; +} +.ui-datepicker th { + font-size: 12px; +} +.ui-datepicker td { + padding: 0; +} +.ui-datepicker td span, +.ui-datepicker td a { + color: #000000; + display: block; + line-height: 14px; + padding: 4px; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + overflow: hidden; + padding-top: 10px; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} +.ui-datepicker .ui-datepicker-calendar { + background: #ffffff; + border: 1px solid #cfcfcf; +} +.ui-datepicker .ui-datepicker-calendar th { + background: #efefef; + border: 1px solid #cfcfcf; + padding: 4px; + text-transform: uppercase; +} +.ui-datepicker .ui-datepicker-calendar td { + border: 1px solid #cfcfcf; +} +.ui-datepicker .ui-datepicker-calendar td a { + padding: 4px; + display: block; +} +.ui-datepicker .ui-datepicker-calendar td .ui-state-hover:hover { + background: #f9eae7; +} +.ui-datepicker .ui-datepicker-calendar .ui-datepicker-week-col { + text-align: center; + border: 1px solid #cfcfcf; +} +.ui-datepicker .ui-datepicker-calendar .ui-datepicker-today { + background: #f3d7d2; +} +.ui-datepicker .ui-datepicker-calendar .ui-state-active { + background: #f77653; +} +.ui-datepicker .ui-datepicker-calendar .ui-state-disabled { + background: #f9f9f9; +} +.ui-datepicker .ui-datepicker-calendar .ui-state-disabled span { + color: #959595; +} +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} +.ui-timepicker-div { + padding: 10px 0 5px 0; +} +.ui-timepicker-div .ui-widget-header { + margin-bottom: 8px; +} +.ui-timepicker-div dl { + text-align: left; +} +.ui-timepicker-div dl dt { + height: 25px; + margin-bottom: -22px; +} +.ui-timepicker-div dl dd { + margin: 0 10px 10px 65px; +} +.ui-timepicker-div dl .ui_tpicker_time_label { + margin-bottom: -25px; +} +.ui-timepicker-div td { + font-size: 90%; +} +.ui-tpicker-grid-label { + background: none; + border: none; + margin: 0; + padding: 0; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + cursor: default; +} +.ui-slider-horizontal { + border-radius: 10px; + border: none; + background: #efefef; + height: 10px; +} +.ui-slider-horizontal .ui-slider-handle { + margin-left: -5px; + height: 10px; + width: 10px; + border-radius: 10px; + background: #da370a; + display: block; + position: absolute; +} +.clearlessgrid1 { + width: 100%; +} +.clearlessgrid1 > .grid-1 { + float: left; + margin-right: 0%; + width: 100%; + margin-right: 0; + float: right; +} +.clearlessgrid2 { + width: 100%; +} +.clearlessgrid2 .main { + float: left; + margin-right: 0%; + width: 75%; +} +.clearlessgrid2 .sidebar { + float: left; + margin-right: 0%; + width: 25%; + margin-right: 0; + float: right; +} +.clearlessgrid3 { + width: 100%; +} +.clearlessgrid3 .main { + float: left; + margin-right: 0%; + width: 75%; + margin-right: 0; + float: right; +} +.clearlessgrid3 .sidebar { + float: left; + margin-right: 0%; + width: 25%; +} +.clearlessgrid4 { + width: 100%; +} +.clearlessgrid4 .main { + float: left; + margin-right: 0%; + width: 50%; +} +.clearlessgrid4 .sidebar1, +.clearlessgrid4 .sidebar2 { + float: left; + margin-right: 0%; + width: 25%; +} +.clearlessgrid4 .sidebar2 { + margin-right: 0; + float: right; +} +.clearlessgrid5 { + width: 100%; +} +.clearlessgrid5 > .grid-1 { + float: left; + margin-right: 0%; + width: 25%; +} +.clearlessgrid5 > .grid-1:last-child { + margin-right: 0; + float: right; +} +.clearlessgrid6 { + width: 100%; +} +.clearlessgrid6 > .grid-1 { + float: left; + margin-right: 0%; + width: 16.666666666666664%; +} +.clearlessgrid6 > .grid-1:last-child { + margin-right: 0; + float: right; +} +.clearlessgrid12 { + width: 100%; +} +.clearlessgrid12 > .grid-1 { + float: left; + margin-right: 0%; + width: 8.333333333333332%; +} +.clearlessgrid12 > .grid-1:last-child { + margin-right: 0; + float: right; +} +.inlinegrid1 { + letter-spacing: -0.31em; + *letter-spacing: normal; + word-spacing: -0.43em; +} +.inlinegrid1 > .grid-1 { + display: inline-block; + *display: inline; + *zoom: 1; + vertical-align: top; + letter-spacing: normal; + word-spacing: normal; + margin-right: 0%; + width: 100%; + margin-right: 0; +} +.inlinegrid2 { + letter-spacing: -0.31em; + *letter-spacing: normal; + word-spacing: -0.43em; +} +.inlinegrid2 .main { + display: inline-block; + *display: inline; + *zoom: 1; + vertical-align: top; + letter-spacing: normal; + word-spacing: normal; + margin-right: 0%; + width: 75%; +} +.inlinegrid2 .sidebar { + display: inline-block; + *display: inline; + *zoom: 1; + vertical-align: top; + letter-spacing: normal; + word-spacing: normal; + margin-right: 0%; + width: 25%; + margin-right: 0; +} +.inlinegrid3 { + letter-spacing: -0.31em; + *letter-spacing: normal; + word-spacing: -0.43em; +} +.inlinegrid3 .main { + display: inline-block; + *display: inline; + *zoom: 1; + vertical-align: top; + letter-spacing: normal; + word-spacing: normal; + margin-right: 0%; + width: 75%; + margin-right: 0; +} +.inlinegrid3 .sidebar { + display: inline-block; + *display: inline; + *zoom: 1; + vertical-align: top; + letter-spacing: normal; + word-spacing: normal; + margin-right: 0%; + width: 25%; +} +.inlinegrid4 { + letter-spacing: -0.31em; + *letter-spacing: normal; + word-spacing: -0.43em; +} +.inlinegrid4 .main { + display: inline-block; + *display: inline; + *zoom: 1; + vertical-align: top; + letter-spacing: normal; + word-spacing: normal; + margin-right: 0%; + width: 50%; +} +.inlinegrid4 .sidebar1, +.inlinegrid4 .sidebar2 { + display: inline-block; + *display: inline; + *zoom: 1; + vertical-align: top; + letter-spacing: normal; + word-spacing: normal; + margin-right: 0%; + width: 25%; +} +.inlinegrid4 .sidebar2 { + margin-right: 0; +} +.inlinegrid5 { + letter-spacing: -0.31em; + *letter-spacing: normal; + word-spacing: -0.43em; +} +.inlinegrid5 > .grid-1 { + display: inline-block; + *display: inline; + *zoom: 1; + vertical-align: top; + letter-spacing: normal; + word-spacing: normal; + margin-right: 0%; + width: 25%; +} +.inlinegrid5 > .grid-1:last-child { + margin-right: 0; +} +.inlinegrid6 { + letter-spacing: -0.31em; + *letter-spacing: normal; + word-spacing: -0.43em; +} +.inlinegrid6 > .grid-1 { + display: inline-block; + *display: inline; + *zoom: 1; + vertical-align: top; + letter-spacing: normal; + word-spacing: normal; + margin-right: 0%; + width: 16.666666666666664%; +} +.inlinegrid6 > .grid-1:last-child { + margin-right: 0; +} +.inlinegrid12 { + letter-spacing: -0.31em; + *letter-spacing: normal; + word-spacing: -0.43em; +} +.inlinegrid12 > .grid-1 { + display: inline-block; + *display: inline; + *zoom: 1; + vertical-align: top; + letter-spacing: normal; + word-spacing: normal; + margin-right: 0%; + width: 8.333333333333332%; +} +.inlinegrid12 > .grid-1:last-child { + margin-right: 0; +} +.gridwrapper > div, +.inlinegridwrapper > div { + background: #e5e5e5; + border: 1px solid #999; + padding: 5px 0; + text-align: center; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} +.example.icon { + display: inline-block; + margin: 0 0 16px; + width: 20%; + text-align: center; +} +.example.icon:before { + font-family: "icons"; + font-size: 32px; + line-height: 32px; + height: 32px; + margin: 0 0 10px 0; + overflow: hidden; + content: ""; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.example.icon:before { + content: attr(data-icon); + display: block; +} +.example.icon:hover { + color: #55c2e6; +} +.action.showcart1:before { + font-family: "icons"; + font-size: 16px; + line-height: 16px; + height: 16px; + margin: 0 5px 0 0; + overflow: hidden; + content: "\e014"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.action.showcart2:after { + font-family: "icons"; + font-size: 16px; + line-height: 16px; + height: 16px; + margin: 0 0 0 10px; + overflow: hidden; + content: "\e014"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.action.showcart3 { + width: 16px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; +} +.action.showcart3:after { + font-family: "icons"; + font-size: 16px; + line-height: 16px; + height: 16px; + margin: 10px; + overflow: hidden; + content: "\e014"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.action.showcart3:active { + outline: 0; +} +.action.showcart3:after { + text-indent: 0; + display: block; + margin: 0; +} +ul.messages { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; +} +.message.base, +.message.error, +.message.success, +.message.notice, +.message.info, +.error-msg, +.success-msg, +.notice-msg, +.note-msg { + display: block; + *zoom: 1; + padding: 13px 60px 12px 20px; + margin: 3px 0 3px; + border-radius: 3px; + position: relative; + line-height: 16px; + z-index: 1; +} +.message.base:before, +.message.base:after, +.message.error:before, +.message.error:after, +.message.success:before, +.message.success:after, +.message.notice:before, +.message.notice:after, +.message.info:before, +.message.info:after, +.error-msg:before, +.error-msg:after, +.success-msg:before, +.success-msg:after, +.notice-msg:before, +.notice-msg:after, +.note-msg:before, +.note-msg:after { + content: ""; + display: table; +} +.message.base:after, +.message.error:after, +.message.success:after, +.message.notice:after, +.message.info:after, +.error-msg:after, +.success-msg:after, +.notice-msg:after, +.note-msg:after { + clear: both; +} +.message.base:before, +.message.error:before, +.message.success:before, +.message.notice:before, +.message.info:before, +.error-msg:before, +.success-msg:before, +.notice-msg:before, +.note-msg:before { + content: ''; + position: absolute; + width: 31px; + text-align: center; + right: 0; + top: 0; + height: 100%; + display: block; + padding: 0; + border-radius: 3px; + z-index: 1; +} +.message.base > *:first-child:before, +.message.error > *:first-child:before, +.message.success > *:first-child:before, +.message.notice > *:first-child:before, +.message.info > *:first-child:before, +.error-msg > *:first-child:before, +.success-msg > *:first-child:before, +.notice-msg > *:first-child:before, +.note-msg > *:first-child:before { + content: ''; + width: 0; + height: 0; + border: 5px solid transparent; + border-right-color: #ffc000; + position: absolute; + overflow: hidden; + top: 50%; + margin-top: -3px; + right: 31px; + z-index: 2; +} +.message.base > *:first-child:after, +.message.error > *:first-child:after, +.message.success > *:first-child:after, +.message.notice > *:first-child:after, +.message.info > *:first-child:after, +.error-msg > *:first-child:after, +.success-msg > *:first-child:after, +.notice-msg > *:first-child:after, +.note-msg > *:first-child:after { + font-family: "icons"; + color: #ffffff; + font-size: 20px; + line-height: 20px; + position: absolute; + top: 50%; + right: 0; + margin-top: -10px; + width: 31px; + text-align: center; + display: block; + z-index: 3; +} +.message.base ul, +.message.error ul, +.message.success ul, +.message.notice ul, +.message.info ul, +.error-msg ul, +.success-msg ul, +.notice-msg ul, +.note-msg ul { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; +} +.message.base li, +.message.error li, +.message.success li, +.message.notice li, +.message.info li, +.error-msg li, +.success-msg li, +.notice-msg li, +.note-msg li { + margin-top: 5px; +} +.message.base li:first-child, +.message.error li:first-child, +.message.success li:first-child, +.message.notice li:first-child, +.message.info li:first-child, +.error-msg li:first-child, +.success-msg li:first-child, +.notice-msg li:first-child, +.note-msg li:first-child { + margin-top: 0; +} +.message.error, +.error-msg, +.error-msg { + background: #ffd9d0; + color: #911c00; +} +.message.error:before, +.error-msg:before { + background: #ff3200; +} +.message.error > *:first-child:before, +.error-msg > *:first-child:before { + border-right-color: #ff3200; +} +.message.error > *:first-child:after, +.error-msg > *:first-child:after { + content: "\e00e"; +} +.message.success, +.success-msg, +.success-msg { + background: #d3edd5; + color: #1b6720; +} +.message.success:before, +.success-msg:before { + background: #42b649; +} +.message.success > *:first-child:before, +.success-msg > *:first-child:before { + border-right-color: #42b649; +} +.message.success > *:first-child:after, +.success-msg > *:first-child:after { + content: "\e013"; +} +.message.notice, +.notice-msg, +.note-msg, +.notice-msg, +.note-msg { + background: #ffedb8; + color: #926e00; +} +.message.notice:before, +.notice-msg:before, +.note-msg:before { + background: #ffc000; +} +.message.notice > *:first-child:before, +.notice-msg > *:first-child:before, +.note-msg > *:first-child:before { + border-right-color: #ffc000; +} +.message.notice > *:first-child:after, +.notice-msg > *:first-child:after, +.note-msg > *:first-child:after { + content: "\e00a"; +} +.message.info { + background: #ffedb8; + color: #926e00; + border: 1px solid #ffe085; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} +.message.info:before { + background: #ffc000; + top: -2px; + height: auto; + bottom: -2px; +} +.message.info > *:first-child:before { + border-right-color: #ffc000; +} +.message.info > *:first-child:after { + content: "\e00a"; +} +.navigation { + background-color: #d6d7d2; + background-image: url("../images/header-bg.jpg"); + background-repeat: repeat; + background-position: 0 0; + border-top: 1px solid; + border-color: #f6f6f5; + position: relative; + z-index: 2; + *zoom: 1; +} +.navigation:before, +.navigation:after { + content: ""; + display: table; +} +.navigation:after { + clear: both; +} +.navigation > ul > .level-top { + display: inline-block; + line-height: 1.2; + vertical-align: top; + padding-right: 40px; +} +.navigation > ul > .level-top:last-child { + padding-right: 0; +} +.navigation > ul > .level-top.active > a:after { + opacity: 1; + border-bottom-color: #ffffff; +} +.navigation > ul > .level-top.hover > a:after { + border-bottom-color: #f8f8f8; +} +.navigation > ul > .level-top.hover > .submenu { + border-bottom: 1px solid #c2c2c2; +} +.navigation > ul > .level-top.hover > .submenu, +.navigation > ul > .level-top:hover > .submenu { + z-index: 2; +} +.navigation > ul > .level-top.hover:hover > a span, +.navigation > ul > .level-top:hover:hover > a span, +.navigation > ul > .level-top.hover.parent.hover > a span, +.navigation > ul > .level-top:hover.parent.hover > a span, +.navigation > ul > .level-top.hover.parent > a span, +.navigation > ul > .level-top:hover.parent > a span { + color: #675f55; +} +.navigation > ul > .level-top.hover:hover > a:after, +.navigation > ul > .level-top:hover:hover > a:after, +.navigation > ul > .level-top.hover.hover > a:after, +.navigation > ul > .level-top:hover.hover > a:after, +.navigation > ul > .level-top.hover.parent > a:after, +.navigation > ul > .level-top:hover.parent > a:after { + opacity: 1; +} +.navigation > ul > .level-top.more:after { + cursor: pointer; + content: "\e010"; + font-family: "icons"; + font-size: 16px; + display: inline-block; + padding: .6em .7em 1em; + margin-top: 0.4em; + border-radius: 4px 4px 0 0; + position: relative; + z-index: 1; +} +.navigation > ul > .level-top.more.hover:after { + background: #f8f8f8; +} +.navigation > ul > .level-top.more li.level-top { + width: 200px; + margin: 0 0 0 -10px !important; + padding: 7px 10px 7px 30px; +} +.navigation > ul > .level-top.more li.level-top > a { + font-size: 16px; +} +.navigation > ul > .level-top.more li.level-top.hover, +.navigation > ul > .level-top.more li.level-top:hover { + background: #f8f8f8; +} +.navigation > ul > .level-top.more li.level-top.hover > a span, +.navigation > ul > .level-top.more li.level-top:hover > a span { + color: #675f55; +} +.navigation > ul > .level-top.more li.level-top.hover.parent:before, +.navigation > ul > .level-top.more li.level-top:hover.parent:before { + font-family: "icons"; + font-size: 16px; + line-height: 16px; + height: 16px; + margin: 0 8px 0 0; + overflow: hidden; + content: "\e01a"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.navigation > ul > .level-top.more li.level-top.hover.parent:before, +.navigation > ul > .level-top.more li.level-top:hover.parent:before { + float: right; + color: #da370a; +} +.navigation > ul > .level-top.more li.level-top.hover .submenu, +.navigation > ul > .level-top.more li.level-top:hover .submenu { + display: block !important; +} +.navigation > ul > .level-top.more li.level-top > a span { + color: #837d75; +} +.navigation > ul > .level-top.more li.level-top .submenu { + display: none; +} +.navigation > ul > .level-top.more li.level-top > .submenu { + position: absolute; + right: 0; + padding: 0; + left: 0; + top: 0; + margin-left: 230px; + min-height: 100%; + background: #f8f8f8; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.3); + box-shadow: 0 10px 8px rgba(0, 0, 0, 0.3); +} +.no-boxshadow .navigation > ul > .level-top.more li.level-top > .submenu { + border: 2px solid #c2c2c2; + border-width: 0 2px 2px; +} +.navigation > ul > .level-top.more li.level-top > .submenu > ul { + background: #f8f8f8; + position: relative; + z-index: 1; + padding: 10px; +} +.navigation > ul > .level-top.more > .submenu { + background: none; + border-width: 0; +} +.navigation > ul > .level-top.more > .submenu > ul { + position: relative; +} +.navigation > ul > .level-top > a { + position: relative; + display: inline-block; + vertical-align: top; + padding: 1em 0; + font-size: 16px; + text-align: center; + color: #837d75; +} +.navigation > ul > .level-top > a:after { + opacity: 0; + content: ''; + overflow: hidden; + display: block; + position: absolute; + bottom: 0; + left: 50%; + zoom: 1; + z-index: 2; + color: #675f55; + width: 0; + height: 0; + border: 10px solid transparent; +} +.navigation > ul > .level-top > a > span { + color: #837d75; +} +.navigation > ul > .level-top > a:active span, +.navigation > ul > .level-top > a:focus span { + color: #675f55; +} +.navigation > ul > .level-top > a:active:after, +.navigation > ul > .level-top > a:focus:after { + opacity: 1; +} +.navigation > ul > .level-top > .submenu { + display: none; + position: absolute; + left: 0; + top: 100%; + background: #f8f8f8; + width: 100%; + z-index: 1; +} +.navigation > ul > .level-top > .submenu > ul { + height: auto; + padding-top: 45px; + padding-bottom: 45px; +} +.navigation > ul > .level-top > .submenu > ul li.column { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + width: 25%; + display: inline-block; + padding-right: 30px; + vertical-align: top; +} +.navigation > ul > .level-top > .submenu > ul .level1 > a { + text-transform: uppercase; +} +.navigation > ul > .level-top > .submenu > ul .parent ul { + padding-left: 10px; +} +.navigation > ul > .level-top > .submenu > ul li { + margin: 8px 0; +} +.navigation > ul > .level-top > .submenu > ul li:fist-child { + margin-top: 0; +} +@media only screen and (max-width: 640px) { + html { + height: 100%; + min-width: 0; + overflow: hidden; + } + body { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + position: relative; + height: 100%; + width: 100%; + overflow: hidden; + } + body.opened .navigation { + left: 0; + } + body.opened .page.wrapper { + margin-right: -86%; + cursor: pointer; + } + .page.wrapper { + position: relative; + width: 100%; + float: right; + margin: 0; + -webkit-transition: margin 0.3s ease-out 0; + -moz-transition: margin 0.3s ease-out 0; + transition: margin 0.3s ease-out 0; + } + .navigation { + display: block; + position: absolute; + width: 86%; + left: -86%; + height: 100%; + background: #ffffff; + overflow-x: hidden; + border-right: #b6b8af 1px solid; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: left 0.3s ease-out 0; + -moz-transition: left 0.3s ease-out 0; + transition: left 0.3s ease-out 0; + } + .navigation ul { + margin: 0; + padding: 0; + } + .navigation ul li.hidden { + display: none; + } + .navigation > ul { + -webkit-transition: left 0.3s linear 0; + -moz-transition: left 0.3s linear 0; + transition: left 0.3s linear 0; + position: relative; + overflow: hidden; + } + .navigation > ul > .level-top { + display: block; + padding: 0; + background: #ffffff; + } + .navigation > ul > .level-top > a { + display: block; + padding: 10px 20px; + text-transform: none; + font-size: 20px; + font-weight: 600; + border-bottom: 1px solid #e5e5e5; + color: #675f55; + text-align: left; + } + .navigation > ul > .level-top > a:hover, + .navigation > ul > .level-top > a:visited { + color: #675f55; + } + .navigation > ul > .level-top > a:active { + background: #dbdcd7; + } + .navigation > ul > .level-top > a:after { + border: 0; + } + .navigation > ul > .level-top.parent:after { + display: none; + } + .navigation > ul > .level-top.parent > a { + position: relative; + text-transform: none !important; + } + .navigation > ul > .level-top.parent > a:after { + font-family: "icons"; + font-size: 18px; + line-height: 18px; + height: 18px; + margin: 0; + overflow: hidden; + content: "\e01a"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; + } + .navigation > ul > .level-top.parent > a:after { + position: absolute; + width: 18px; + top: 12px; + right: 17px; + left: auto; + opacity: 1; + z-index: auto; + } + .navigation > ul > .level-top.parent > .submenu { + position: absolute; + display: block; + left: 100%; + top: 0; + width: 100%; + overflow-x: hidden; + background: #ffffff; + -webkit-transition: left 0.3s ease-out 0; + -moz-transition: left 0.3s ease-out 0; + transition: left 0.3s ease-out 0; + } + .navigation > ul > .level-top.parent > .submenu.opened { + left: 0; + z-index: 3; + } + .navigation > ul > .level-top.parent > .submenu > ul { + padding-top: 0; + padding-bottom: 0; + } + .navigation > ul > .level-top.parent > .submenu > ul li { + margin: 0; + } + .navigation > ul > .level-top.parent > .submenu > ul li > a { + display: block; + padding: 10px 20px; + text-transform: none; + font-size: 20px; + font-weight: 600; + border-bottom: 1px solid #e5e5e5; + color: #675f55; + text-align: left; + } + .navigation > ul > .level-top.parent > .submenu > ul li > a:hover, + .navigation > ul > .level-top.parent > .submenu > ul li > a:visited { + color: #675f55; + } + .navigation > ul > .level-top.parent > .submenu > ul li > a:active { + background: #dbdcd7; + } + .navigation > ul > .level-top.parent > .submenu > ul li > a:after { + border: 0; + } + .navigation > ul > .level-top.parent > .submenu > ul li.column { + width: 100%; + display: block; + padding-right: 0; + } + .navigation > ul > .level-top.parent > .submenu > ul .parent ul { + padding-left: 0; + } + .navigation .action.back a { + background: #675f55; + position: relative; + color: #ffffff !important; + border-bottom-color: transparent; + cursor: pointer; + } + .navigation .action.back a:before { + font-family: "icons"; + font-size: 18px; + line-height: 18px; + height: 18px; + margin: 0; + overflow: hidden; + content: "\e01b"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; + } + .navigation .action.back a:hover, + .navigation .action.back a:active, + .navigation .action.back a:visited { + color: #ffffff !important; + background: #675f55 !important; + } + .navigation .action.back a:before { + position: absolute; + top: 12px; + left: 3px; + } + .navigation .action.back a span:before { + content: ""; + } + .navigation .parent:after { + display: none; + } + .navigation .parent > a { + position: relative; + } + .navigation .parent > a:after { + font-family: "icons"; + font-size: 18px; + line-height: 18px; + height: 18px; + margin: 0; + overflow: hidden; + content: "\e01a"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; + } + .navigation .parent > a:after { + position: absolute; + width: 18px; + top: 16px; + right: 17px; + left: auto; + opacity: 1; + z-index: auto; + } + .navigation .parent .submenu { + position: absolute; + display: block; + left: 100%; + top: 0; + width: 100%; + overflow-x: hidden; + background: #ffffff; + -webkit-transition: left 0.3s ease-out 0; + -moz-transition: left 0.3s ease-out 0; + transition: left 0.3s ease-out 0; + } + .navigation .parent .submenu.opened { + left: 0; + z-index: 3; + } + .navigation .parent .submenu > ul { + padding-top: 0; + padding-bottom: 0; + } + .navigation .parent .submenu > ul li { + margin: 0; + } + .navigation .parent .submenu > ul li > a { + display: block; + padding: 10px 20px; + text-transform: none; + font-size: 20px; + font-weight: 600; + border-bottom: 1px solid #e5e5e5; + color: #675f55; + text-align: left; + } + .navigation .parent .submenu > ul li > a:hover, + .navigation .parent .submenu > ul li > a:visited { + color: #675f55; + } + .navigation .parent .submenu > ul li > a:active { + background: #dbdcd7; + } + .navigation .parent .submenu > ul li > a:after { + border: 0; + } + .navigation .parent .submenu > ul li.column { + width: 100%; + display: block; + padding-right: 0; + } + .navigation .parent .submenu > ul .parent ul { + padding-left: 0; + } + .action.toggle.nav { + margin-top: 19px; + position: absolute; + top: 0; + left: 20px; + font-size: 0; + width: 32px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; + cursor: pointer; + } + .action.toggle.nav:after { + font-family: "icons"; + font-size: 32px; + line-height: 32px; + height: 32px; + margin: 0; + overflow: hidden; + content: "\e007"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; + } + .action.toggle.nav:active { + outline: 0; + } + .action.toggle.nav:after { + text-indent: 0; + display: block; + margin: 0; + } + .action.toggle.nav:before { + position: absolute; + width: 100%; + height: 100%; + left: -100%; + top: -20px; + padding: 20px 0; + content: ""; + } + .active-nav .action.toggle.nav:before { + position: fixed; + padding: 0; + left: 86%; + right: 0; + top: 0; + bottom: 0; + } + .header { + padding: 0; + position: relative; + margin-bottom: 35px; + } +} +@media only screen and (max-width: 99999px) { + .product.data { + *zoom: 1; + position: relative; + z-index: 1; + } + .product.data:before, + .product.data:after { + content: ""; + display: table; + } + .product.data:after { + clear: both; + } + .product.data > .item.title { + float: left; + } + .product.data > .item.title > .switch { + display: block; + position: relative; + top: 1px; + z-index: 2; + } + .product.data > .item.content { + width: 100%; + float: right; + margin-left: -100%; + display: none; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + } + .product.data > .item.content.active { + display: block; + } + .product.data .tabs > .term-content.active { + border: 1px solid #BFBFBF; + color: #808080; + display: block; + } + .product.data > .item.title { + margin-right: 1px; + min-height: 35px; + } + .product.data > .item.title > .switch { + font-size: 14px; + line-height: 1; + font-weight: 600; + text-decoration: none; + padding: 11px 11px 8px; + border: 2px solid #e5e5e5; + background: rgba(0, 0, 0, 0.03); + border-bottom: none; + text-transform: uppercase; + border-radius: 4px 4px 0 0; + } + .product.data > .item.title:not(.disabled) > .switch:active, + .product.data > .item.title:not(.disabled) > .switch:focus, + .product.data > .item.title:not(.disabled) > .switch:hover, + .product.data > .item.title.active > .switch { + background: #fff; + border-width: 3px; + padding: 10px 10px 8px; + outline: none; + } + .product.data > .item.title.active > .switch { + padding: 10px 20px 11px !important; + } + .product.data > .item.content { + *zoom: 1; + margin-top: 36px; + padding: 20px; + } + .product.data > .item.content:before, + .product.data > .item.content:after { + content: ""; + display: table; + } + .product.data > .item.content:after { + clear: both; + } + .product.data > .item.content:before { + content: ''; + border-top: 3px solid #e5e5e5; + width: 100%; + display: block; + position: absolute; + left: 0; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + margin: -20px 0 20px; + } +} +@media only screen and (max-width: 768px) { + .product.data { + margin: 0; + padding: 0; + } + .product.data > .item.title { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + } + .product.data > .item.title > .item.switch { + display: block; + } + .product.data > .item.content { + *zoom: 1; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + display: none; + } + .product.data > .item.content:before, + .product.data > .item.content:after { + content: ""; + display: table; + } + .product.data > .item.content:after { + clear: both; + } + .product.data > .item.content.active { + display: block; + } + .product.data > .item.title { + margin: 3px 0 0; + } + .product.data > .item.title > .switch { + display: block; + font-size: 14px; + line-height: 1; + font-weight: 600; + text-decoration: none; + padding: 11px; + border: 2px solid #e5e5e5; + background: #f8f8f8; + text-transform: uppercase; + border-radius: 4px; + } + .product.data > .item.title:not(.disabled) > .switch:active, + .product.data > .item.title:not(.disabled) > .switch:focus, + .product.data > .item.title:not(.disabled) > .switch:hover, + .product.data > .item.title.active > .switch { + background: #fff; + border-width: 3px; + padding: 10px; + outline: none; + } + .product.data > .item.title.active > .switch { + border-radius: 4px 4px 0 0; + } + .product.data > .item.content { + margin: 0; + padding: 20px; + background: #fff; + } +} +.block.search input { + border-radius: 3px 0 0 3px; + border-right: 0; + float: left; + width: 100%; +} +.block.search input:focus { + border-color: #c2c2c2; +} +.block.search .field .control { + width: 260px; +} +.block.search .label, +.block.search > .title, +.block.search .action.advanced { + display: none; +} +.block.search .action.search { + background: #ffffff; + border: 1px solid #c2c2c2; + border-radius: 0 3px 3px 0; + color: #c2c2c2; + float: left; + padding: 7px; +} +.block.search .action.search:hover { + color: #675f55; +} +.block.search .action.search span { + width: 16px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; +} +.block.search .action.search span:after { + font-family: "icons"; + font-size: 16px; + line-height: 16px; + height: 16px; + margin: 0; + overflow: hidden; + content: "\e005"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.block.search .action.search span:active { + outline: 0; +} +.block.search .action.search span:after { + text-indent: 0; + display: block; + margin: 0; +} +.block.search .action.search .search.autocomplete { + display: none !important; +} +.block.search ::-webkit-input-placeholder { + color: #999999; +} +.block.search :-moz-placeholder { + color: #999999; +} +.block.search ::-moz-placeholder { + color: #999999; +} +.block.search :-ms-input-placeholder { + color: #999999; +} +.block.newsletter > .title { + display: none; +} +.block.newsletter .label { + display: block; + font-size: 16px; + line-height: 1.2; + margin-bottom: 10px; +} +.block.newsletter .control { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + float: left; + padding-right: 45px; + width: 100%; +} +.block.newsletter input[type="text"] { + width: 100%; +} +.block.newsletter .actions { + float: right; + margin-left: -45px; + padding-left: 10px; +} +.block.newsletter .action.subscribe { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + background: #da370a; + border-radius: 3px; + border: 1px solid #da370a; + padding: 7px; + vertical-align: top; +} +.block.newsletter .action.subscribe:hover { + background: #a92b08; +} +.block.newsletter .action.subscribe span { + width: 16px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; + color: #ffffff; +} +.block.newsletter .action.subscribe span:after { + font-family: "icons"; + font-size: 16px; + line-height: 16px; + height: 16px; + margin: 0; + overflow: hidden; + content: "\e001"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.block.newsletter .action.subscribe span:active { + outline: 0; +} +.block.newsletter .action.subscribe span:after { + text-indent: 0; + display: block; + margin: 0; +} +.breadcrumbs { + font-size: 12px; +} +.breadcrumbs .items { + margin: 0; + padding: 0; +} +.breadcrumbs .item { + display: inline; + font-weight: 200; +} +.breadcrumbs .item:before { + content: " / "; +} +.breadcrumbs .item:first-child:before { + content: ""; +} +.breadcrumbs strong { + font-weight: 400; +} +.pages ol { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; +} +.pages .item { + display: inline-block; +} +.pages a { + padding: 0 3px; +} +.pages strong { + color: #da370a; + font-weight: normal; + padding: 0 3px; +} +.pages > .label { + display: none; +} +.pages .action { + color: #c2c2c2; +} +.pages .action.previous { + width: 16px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; + display: inline-block; +} +.pages .action.previous:after { + font-family: "icons"; + font-size: 16px; + line-height: 16px; + height: 16px; + margin: 0; + overflow: hidden; + content: "\e01b"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.pages .action.previous:active { + outline: 0; +} +.pages .action.previous:after { + text-indent: 0; + display: block; + margin: 0; +} +.pages .action.next { + width: 16px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; + display: inline-block; +} +.pages .action.next:after { + font-family: "icons"; + font-size: 16px; + line-height: 16px; + height: 16px; + margin: 0; + overflow: hidden; + content: "\e01a"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.pages .action.next:active { + outline: 0; +} +.pages .action.next:after { + text-indent: 0; + display: block; + margin: 0; +} +.pages .action:hover { + color: #8f8f8f; +} +.modes .label { + display: none; +} +.modes .mode { + border: 1px solid #c2c2c2; + color: #c2c2c2; + display: inline-block; + margin: 0 3px; + overflow: hidden; + padding: 4px; +} +.modes .mode.active { + background: #c2c2c2; + border-color: #c2c2c2; + cursor: default; + color: #ffffff; +} +.modes .mode.active span { + color: #ffffff; +} +.modes .mode.active:hover { + background: #c2c2c2; + border-color: #c2c2c2; + color: #ffffff; +} +.modes .mode.active:hover span { + color: #ffffff; +} +.modes .mode:hover { + background: #999999; + border-color: #999999; + color: #ffffff; +} +.modes .mode:hover span { + color: #ffffff; +} +.modes .mode.grid { + width: 13px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; + display: inline-block; +} +.modes .mode.grid:after { + font-family: "icons"; + font-size: 13px; + line-height: 13px; + height: 13px; + margin: 0; + overflow: hidden; + content: "\e003"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.modes .mode.grid:active { + outline: 0; +} +.modes .mode.grid:after { + text-indent: 0; + display: block; + margin: 0; +} +.modes .mode.list { + width: 13px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; + display: inline-block; +} +.modes .mode.list:after { + font-family: "icons"; + font-size: 13px; + line-height: 13px; + height: 13px; + margin: 0; + overflow: hidden; + content: "\e002"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.modes .mode.list:active { + outline: 0; +} +.modes .mode.list:after { + text-indent: 0; + display: block; + margin: 0; +} +.sorter .label { + font-weight: 400; + line-height: 25px; + margin-right: 5px; +} +.sorter select { + padding: 0; +} +.sorter .action.sort.desc { + width: 13px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; + display: inline-block; +} +.sorter .action.sort.desc:after { + font-family: "icons"; + font-size: 13px; + line-height: 13px; + height: 13px; + margin: 0; + overflow: hidden; + content: "\e01c"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.sorter .action.sort.desc:active { + outline: 0; +} +.sorter .action.sort.desc:after { + text-indent: 0; + display: block; + margin: 0; +} +.sorter .action.sort.asc { + width: 13px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; + display: inline-block; +} +.sorter .action.sort.asc:after { + font-family: "icons"; + font-size: 13px; + line-height: 13px; + height: 13px; + margin: 0; + overflow: hidden; + content: "\e019"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.sorter .action.sort.asc:active { + outline: 0; +} +.sorter .action.sort.asc:after { + text-indent: 0; + display: block; + margin: 0; +} +.limiter .label { + font-weight: 400; + line-height: 25px; + margin-right: 5px; +} +.limiter select { + padding: 0; +} +.limiter .text { + display: none; +} +.tags.items.cloud { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; + margin: 0 0 20px; +} +.tags.items.cloud .item { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; + display: inline-block; + margin: 0 0 5px 5px; +} +.tags.items.cloud .item:first-child { + margin-left: 0; +} +.tags.items.cloud .amount { + margin-left: 3px; +} +.tags.items.cloud .amount:before { + content: '('; +} +.tags.items.cloud .amount:after { + content: ')'; +} +.field.ratings { + border-bottom: 1px solid; + border-color: #d7d7d7; + padding-bottom: 15px; + margin-bottom: 30px; + overflow: hidden; + position: relative; + z-index: 1; +} +.field.ratings .nested { + display: table; +} +.field.ratings .field.rating { + display: table-row; +} +.field.ratings .field.rating > .label { + display: table-cell; + vertical-align: top; + padding: 6px 0; +} +.field.ratings .field.rating .control { + padding: 5px 10px; + display: table-cell; + z-index: 1; +} +.field.ratings .field.rating .control:before { + letter-spacing: 0.2em; + position: absolute; + z-index: 1; + display: block; + float: left; + font-family: "icons"; + content: "\e009\e009\e009\e009\e009"; + font-style: normal; + font-size: 16px; + color: rgba(218, 55, 10, 0.3); + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; +} +.field.ratings .field.rating .control input:focus + label:before, +.field.ratings .field.rating .control input:checked + label:before { + color: #da370a; + opacity: 1; +} +.field.ratings .field.rating .control input[type="radio"] { + position: absolute; + margin-left: -999em; +} +.field.ratings .field.rating .control label { + position: absolute; + display: block; + cursor: pointer; +} +.field.ratings .field.rating .control label span { + display: none; +} +.field.ratings .field.rating .control label:before { + letter-spacing: 0.2em; + font-family: "icons"; + font-style: normal; + font-size: 16px; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + opacity: 0; +} +.field.ratings .field.rating .control label:hover:before { + color: #da370a; + opacity: 1; +} +.field.ratings .field.rating .control label:hover ~ label:before { + opacity: 0 !important; +} +.field.ratings .field.rating .control .rating-1 { + z-index: 6; +} +.field.ratings .field.rating .control .rating-1:before { + content: "\e009"; +} +.field.ratings .field.rating .control .rating-2 { + z-index: 5; +} +.field.ratings .field.rating .control .rating-2:before { + content: "\e009\e009"; +} +.field.ratings .field.rating .control .rating-3 { + z-index: 4; +} +.field.ratings .field.rating .control .rating-3:before { + content: "\e009\e009\e009"; +} +.field.ratings .field.rating .control .rating-4 { + z-index: 3; +} +.field.ratings .field.rating .control .rating-4:before { + content: "\e009\e009\e009\e009"; +} +.field.ratings .field.rating .control .rating-5 { + z-index: 2; +} +.field.ratings .field.rating .control .rating-5:before { + content: "\e009\e009\e009\e009\e009"; +} +.fieldset.login { + margin: 0; + padding: 0; +} +.fieldset.login > .field { + *zoom: 1; +} +.fieldset.login > .field:before, +.fieldset.login > .field:after { + content: ""; + display: table; +} +.fieldset.login > .field:after { + clear: both; +} +.fieldset.login > .field > .label { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + float: left; + margin: 0; + padding-right: 10px; + padding-top: 7px; + text-align: right; + width: 40%; +} +.fieldset.login > .field > .control { + float: left; + margin: 0; + width: 60%; +} +.fieldset.login .actions { + text-align: right; +} +.fieldset.login .actions .secondary { + margin-top: 0.8em; +} +.loader { + background: url("../images/loader.gif") no-repeat 50% 50%; + width: 20px; + height: 20px; +} +.action.mySecondaryButton.loading { + padding-right: 30px; + position: relative; +} +.action.mySecondaryButton.loading:after { + background: url("../images/loader.gif") no-repeat 50% 50%; + width: 16px; + height: 16px; + content: ""; + margin: -8px 0 0; + position: absolute; + right: 7px; + top: 50%; +} +.textUnderLoader { + background: #f8f8f8; + border: 1px solid #c2c2c2; + padding: 10px 20px; +} +.textUnderLoader.loading { + position: relative; +} +.textUnderLoader.loading:before { + background: #ffffff; + opacity: 0.7; + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} +.textUnderLoader.loading:after { + background: url("../images/loader.gif") no-repeat 50% 50%; + width: 16px; + height: 16px; + content: ""; + margin: -8px 0 0 -8px; + position: absolute; + left: 50%; + top: 50%; +} +.opc .fieldset { + margin: 20px 0; +} +.opc .fieldset .field { + display: inline-block; + padding-right: 20px; + vertical-align: top; + width: 50%; +} +.opc .fieldset .nested .field { + width: 100%; +} +.opc .fieldset .actions { + margin-right: 30px; +} +.opc .field { + margin-bottom: 10px; +} +.opc .field.fullname + .field.company, +.opc .field.name-lastname + .field.company, +.opc .field.country, +.opc .field.taxvat { + margin: 0 40% 30px 0; +} +.form-list { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; +} +.form-list .required em { + display: none; +} +.form-list .required:first-child:after { + color: #da370a; + content: '*'; +} +.form-list > li { + *zoom: 1; + margin: 0 0 10px; +} +.form-list > li:before, +.form-list > li:after { + content: ""; + display: table; +} +.form-list > li:after { + clear: both; +} +.form-list > li .field { + *zoom: 1; + margin: 10px 0 0; +} +.form-list > li .field:before, +.form-list > li .field:after { + content: ""; + display: table; +} +.form-list > li .field:after { + clear: both; +} +.form-list > li .field:first-child { + margin: 0; +} +.form-list > li > label, +.form-list > li .field > label { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + clear: left; + float: left; + padding: 7px 10px 0 0; + text-align: right; + width: 30%; +} +.form-list > li .input-box { + float: left; + width: 70%; +} +.form-list > li .input-box > input, +.form-list > li .input-box > select, +.form-list > li .input-box > textarea { + width: 100%; +} +.form-list > li .input-box > .v-fix { + float: left; + margin: 0 10px 0 0; +} +.cart.summary .fieldset { + border: 0; + font-size: 12px; + padding: 0; + margin: 0; +} +.cart.summary .fieldset .field { + margin: 0 0 10px; +} +.cart.summary .fieldset .field:not(.choice) .label { + padding: 0 0 5px; + display: block; +} +.cart.summary .fieldset .action:not(.check) { + padding: 6px 11px 5px; +} +.cart.summary .fieldset .action:not(.check) span { + font-size: 12px; + line-height: 12px; +} +.cart.summary .fieldset.coupon .actions, +.cart.summary .fieldset.estimate .actions { + display: table-cell; + width: 1%; + white-space: nowrap; + vertical-align: bottom; +} +.cart.summary .fieldset.coupon .field, +.cart.summary .fieldset .field.postcode { + display: table-cell; + padding-right: 10px; + vertical-align: bottom; + width: 99%; +} +.cart.summary .fieldset.coupon .field div.mage-error, +.cart.summary .fieldset .field.postcode div.mage-error { + position: absolute; +} +.cart.summary .fieldset.rates { + padding-top: 25px; +} +.cart.summary .fieldset.rates .actions { + text-align: right; +} +.cart.summary .title { + cursor: pointer; + line-height: 16px; + margin: 0; + padding: 10px 5px; +} +.cart.summary .content { + padding: 15px 15px 20px; +} +.cart.summary input[type="text"] { + padding: 0 5px; + font-size: 12px; + height: 30px; +} +.cart.summary select { + padding: 5px 5px 4px; + font-size: 12px; +} +.cart.summary .items.methods dt { + font-weight: 700; +} +.cart.summary .items.methods dd { + margin: 10px 10px 25px; +} +.popup { + background: #e5e5e5; + border: 1px solid #c2c2c2; + display: inline-block; + padding: 20px; + position: relative; +} +.popup .close { + color: #999999; + cursor: pointer; + position: absolute; + right: 5px; + top: 3px; +} +.popup .close:before { + font-family: "icons"; + font-size: 12px; + line-height: 12px; + height: 12px; + margin: 0; + overflow: hidden; + content: "\e012"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.popup .close:hover { + color: #675f55; +} +.fade .popup { + background: #ffffff; + box-shadow: 0 0 10px 0 #999999; +} +.popup > .header, +.popup > .content { + margin: 0 0 5px; +} +.popup > .header { + font-size: 16px; + font-weight: 700; +} +.popup .actions { + margin: 15px 0 0; +} +.popup .actions .action.submit { + margin-right: 10px; +} +.popup.system { + background: #ffffff; + padding: 0; +} +.popup.system > .header { + background: #e5e5e5; + border-bottom: 1px solid #c2c2c2; + border-radius: 5px 5px 0 0; + cursor: move; + padding: 10px 20px; +} +.popup.system > .content { + padding: 20px; +} +.popup.system > .footer { + border-top: 1px solid #c2c2c2; + padding: 10px 20px; +} +.popup.system .actions { + margin: 0; +} +.popup.system .close { + right: 8px; + top: 8px; +} +.fade { + background-color: rgba(0, 0, 0, 0.5); + position: relative; + left: 0; + top: 0; + right: 0; + bottom: 0; + padding: 10%; +} +.tooltip { + display: inline-block; + vertical-align: middle; + line-height: 1.1; + cursor: help; +} +.tooltip .tooltip-content { + display: none; + position: absolute; + max-width: 500px; + margin: 10px 0 0; + padding: 8px; + background: rgba(0, 0, 0, 0.5); + color: #ffffff; + border-radius: 3px; + z-index: 20; +} +.tooltip .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 rgba(0, 0, 0, 0.5); +} +.tooltip:hover > .tooltip-content { + display: block; +} +.tipsy { + position: absolute; + left: 0; + top: 0; + display: none; + padding: 5px; + font-size: 16px; + z-index: 9999; +} +.tipsy .tipsy-inner { + padding: 5px 8px 4px; + background-color: rgba(0, 0, 0, 0.9); + color: #ffffff; + max-width: 200px; + border-radius: 3px; +} +.tipsy .tipsy-arrow { + position: absolute; + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 5px solid rgba(0, 0, 0, 0.9); +} +.tipsy.tipsy-s .tipsy-arrow { + top: 0; + left: 50%; + margin-left: -4px; +} +.tipsy.tipsy-se .tipsy-arrow { + top: 0; + left: 10px; +} +.tipsy.tipsy-sw .tipsy-arrow { + top: 0; + right: 10px; +} +.tipsy.tipsy-n .tipsy-arrow, +.tipsy.tipsy-ne .tipsy-arrow, +.tipsy.tipsy-nw .tipsy-arrow { + bottom: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid rgba(0, 0, 0, 0.9); + border-bottom: none; +} +.tipsy.tipsy-n .tipsy-arrow { + left: 50%; + margin-left: -4px; +} +.tipsy.tipsy-ne .tipsy-arrow { + left: 10px; +} +.tipsy.tipsy-nw .tipsy-arrow { + right: 10px; +} +.tipsy.tipsy-w .tipsy-arrow, +.tipsy.tipsy-e .tipsy-arrow { + top: 50%; + margin-top: -4px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; +} +.tipsy.tipsy-w .tipsy-arrow { + right: 0; + border-right: none; + border-left: 5px solid rgba(0, 0, 0, 0.9); +} +.tipsy.tipsy-e .tipsy-arrow { + left: 0; + border-right: 5px solid rgba(0, 0, 0, 0.9); + border-left: none; +} +.example-tooltips { + /*presentation styles*/ + + padding: 70px; + text-align: center; +} +.example-tooltips button { + /*presentation styles*/ + + width: 70px; + height: 70px; + font-size: 18px; + margin: 10px 5px; +} +strong { + font-weight: 700; +} +.items { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; +} +/* + Forms +-------------------------------------- */ +.field.required > .label > span:first-child:after { + content: ' *'; + color: #da370a; +} +/* + Magento_Page +-------------------------------------- */ +html, +body, +button, +input, +select, +textarea { + color: #675f55; + font: 400 14px/1.33 "sourcesanspro"; +} +html { + background: #ffffff; +} +body { + position: relative; +} +.page.wrapper { + background: #ffffff; +} +/* + Page Layout +-------------------------------------- */ +.columns { + padding-left: 10px; + padding-right: 10px; + margin: 0 auto; + min-width: 1005px; + max-width: 1005px; +} +.page.main { + *zoom: 1; + clear: both; + padding: 30px 0; +} +.page.main:before, +.page.main:after { + content: ""; + display: table; +} +.page.main:after { + clear: both; +} +.page.title { + *zoom: 1; + margin-bottom: 30px; +} +.page.title:before, +.page.title:after { + content: ""; + display: table; +} +.page.title:after { + clear: both; +} +.page.title .title { + display: inline; + margin: 0; + line-height: 1.2; + font-weight: 200; + font-size: 30px; + color: #837d75; +} +.page.title .action { + float: right; +} +.page.main > .page.title { + padding-left: 10px; + padding-right: 10px; + margin: 0 auto; + min-width: 1005px; + max-width: 1005px; + margin-bottom: 30px; +} +.column.main { + min-height: 500px; +} +.column.left, +.column.right { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + min-height: 1px; +} +.col1-layout .column.main { + float: left; + width: 100%; + margin-right: 0%; +} +.col2-left-layout .column.main { + float: right !important; + float: left; + width: 83.33333333333334%; + margin-right: 0%; +} +.col2-left-layout .column.left { + float: left; + width: 16.666666666666664%; + margin-right: 0%; + padding-right: 12px; +} +.col2-right-layout .column.main { + float: left; + width: 83.33333333333334%; + margin-right: 0%; +} +.col2-right-layout .column.right { + float: left; + width: 16.666666666666664%; + margin-right: 0%; + padding-left: 12px; +} +.col3-layout .column.main { + *zoom: 1; + float: left; + width: 66.66666666666666%; + margin-right: 0%; + float: none !important; + display: inline-block !important; + vertical-align: top; +} +.col3-layout .column.main:before, +.col3-layout .column.main:after { + content: ""; + display: table; +} +.col3-layout .column.main:after { + clear: both; +} +.col3-layout .column.left { + width: 16.666666666666664%; + margin-right: 0%; + float: left; + padding-right: 12px; +} +.col3-layout .column.right { + float: left; + width: 16.666666666666664%; + margin-right: 0%; + float: none !important; + display: inline-block !important; + padding-left: 12px; +} +/* + Header +-------------------------------------- */ +.header { + background-color: #d6d7d2; + background-image: url("../images/header-bg.jpg"); + background-repeat: repeat; + background-position: 0; + border-bottom: 1px solid; + border-color: #b6b8af; + padding: 15px 0; +} +.header > .content { + padding-left: 10px; + padding-right: 10px; + margin: 0 auto; + min-width: 1005px; + max-width: 1005px; + *zoom: 1; + text-align: right; +} +.header > .content:before, +.header > .content:after { + content: ""; + display: table; +} +.header > .content:after { + clear: both; +} +.header > .content .links { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; + margin-bottom: 5px; +} +.header > .content .links li { + margin-left: 20px; + display: inline; + text-transform: capitalize; +} +.header > .content .links a { + color: #837d75; +} +.header > .content .links a > span { + color: #837d75; +} +.header > .content .links a:hover, +.header > .content .links a:hover > span { + color: #da370a; +} +.header .panel { + padding-left: 10px; + padding-right: 10px; + margin: 0 auto; + min-width: 1005px; + max-width: 1005px; + *zoom: 1; + margin-bottom: 15px; + text-align: right; +} +.header .panel:before, +.header .panel:after { + content: ""; + display: table; +} +.header .panel:after { + clear: both; +} +.logo { + font-family: "marvel"; + font-style: normal; + font-weight: 400; + font-size: 55px; + display: block; + float: left; + line-height: 1; + text-align: center; +} +.logo img { + display: inline-block; + vertical-align: middle; + margin: 0 auto; +} +.logo span { + display: inline-block; + vertical-align: middle; + margin-left: 15px; + color: #837d75; + margin-top: -8px; +} +.logo:active { + outline: 0; +} +/* + Header Banner +-------------------------------------- */ +.header .panel .widget { + display: inline-block; + text-align: left; +} +.banner-header:visited, +.banner-header:hover, +.banner-header { + font-size: 16px; + text-transform: uppercase; + color: #da370a; +} +/* + Search +-------------------------------------- */ +.block.search { + float: right; +} +.block.search > .content { + white-space: nowrap; +} +.block.search .field, +.block.search .actions, +.block.search .field .control { + float: left; +} +.block.search .actions { + margin-right: 0; +} +.block.search .search.autocomplete { + background: #ffffff; + border: 1px solid #c2c2c2; + border-width: 0 1px 1px; + border-radius: 0 0 5px 5px; + z-index: 5; +} +.block.search .search.autocomplete ul { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; +} +.block.search .search.autocomplete ul li { + border-top: 1px solid #e5e5e5; + cursor: pointer; + padding: 5px 40px 5px 10px; + position: relative; + text-align: left; + white-space: normal; +} +.block.search .search.autocomplete ul li:first-child { + border-top: none; +} +.block.search .search.autocomplete ul li:hover { + background: #f8f8f8; +} +.block.search .search.autocomplete ul li .amount { + color: #999999; + font-weight: 600; + position: absolute; + right: 7px; + top: 6px; +} +/* + Navigation +-------------------------------------- */ +.navigation { + z-index: 4; +} +.navigation > ul > .level-top.hover > .submenu, +.navigation > ul > .level-top:hover > .submenu { + z-index: 3; +} +.navigation > ul > .level-top.more > .submenu { + background: #f8f8f8; +} +.navigation > ul > .level-top.more > .submenu > ul { + padding-left: 10px; + padding-right: 10px; + margin: 0 auto; + min-width: 1005px; + max-width: 1005px; + position: relative; +} +.navigation > ul > .level-top.more.hover > .submenu { + border-bottom: 1px solid #c2c2c2; + overflow: visible !important; +} +.navigation > ul, +.navigation > ul > .level0 > .submenu > ul.level0 { + padding-left: 10px; + padding-right: 10px; + margin: 0 auto; + min-width: 1005px; + max-width: 1005px; + padding-left: 0; + padding-right: 0; +} +@media only screen and (max-width: 640px) { + .navigation > ul { + min-width: 100%; + max-width: 100%; + } + .action.toggle.nav { + top: 100%; + } +} +/* + General block +-------------------------------------- */ +.column.main .block, +.sidebar .block { + margin-bottom: 45px; +} +.column.main .block > .title, +.sidebar .block > .title { + margin-bottom: 15px; +} +.column.main .block > .title strong, +.sidebar .block > .title strong { + line-height: 1.2; + font-weight: 200; + font-size: 20px; +} +.column.main .block.filter .item, +.sidebar .block.filter .item { + margin-bottom: 10px; +} +.sidebar .block > .title strong { + font-size: 18px; +} +/* + Breadcrumbs +-------------------------------------- */ +.breadcrumbs { + padding-left: 10px; + padding-right: 10px; + margin: 0 auto; + min-width: 1005px; + max-width: 1005px; + margin-top: 30px; +} +/* + Footer +-------------------------------------- */ +.footer { + background: #ffffff; + border-top: 1px solid; + border-color: #dedede; + padding: 30px 0 80px; +} +.footer > .content { + padding-left: 10px; + padding-right: 10px; + margin: 0 auto; + min-width: 1005px; + max-width: 1005px; + text-align: left; +} +.footer .links { + display: inline-block; + padding: 0; + margin: 1px 3px 19px 0; +} +.footer .links ul { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; +} +.footer .links li { + list-style: none; + list-style-image: none; + margin: 0; + padding: 0; + display: inline; +} +.footer .links li:after { + content: ' | '; +} +.footer .links li:last-child:after { + content: ''; +} +.footer .links + .links li:first-child:before { + content: ' | '; +} +.footer .links a { + color: #837d75; +} +.footer .links a > span { + color: #837d75; +} +.footer .links a:hover, +.footer .links a:hover > span { + color: #da370a; +} +.footer .copyright { + font-size: 14px; + display: block; + padding-top: 10px; +} +.footer .bugs { + margin-top: 25px; + font-size: 11px; +} +.footer .bugs a { + font-weight: bold; +} +.footer .bugs a:before { + content: ' - '; + display: inline-block; +} +/* + Switchers +-------------------------------------- */ +.switcher { + display: inline-block; + text-align: left; + font-size: 11px; + vertical-align: middle; +} +.header .panel .switcher { + margin-right: 25px; +} +.header .panel .switcher:last-child { + margin-right: 0; +} +.switcher .label { + display: none; +} +.switcher strong { + color: #837d75; + font-weight: 600; +} +.switcher .options { + display: inline-block; + position: relative; + z-index: 1; +} +.switcher .options > ul { + padding: 0; + list-style-type: none; + list-style-image: none; + margin: 0; + padding: 5px 10px; + position: absolute; + top: 100%; + right: 0; + margin-left: -11px; + min-width: 100%; + float: left; + background: #f8f8f8; + border: 1px solid #cacbc4; + visibility: hidden; + opacity: 0; + -webkit-transition: visibility 0s linear 2s; + -moz-transition: visibility 0s linear 2s; + transition: visibility 0s linear 2s; +} +.switcher .options > ul li { + margin: 5px 0; + white-space: nowrap; +} +.switcher .options.active { + z-index: 999; +} +.switcher .options.active > ul { + visibility: visible; + opacity: 1; + -webkit-transition-delay: 0s; + -moz-transition-delay: 0s; + -ms-transition-delay: 0s; + -o-transition-delay: 0s; + transition-delay: 0s; +} +.switcher .options.active strong, +.switcher .options:hover strong { + color: #675f55; +} +.action.switch { + border: none; + border-radius: 0; + background: none; + margin: 0; + padding: 0; + box-shadow: none; + text-shadow: none; + outline: none; + vertical-align: top; + color: #837d75; +} +.action.switch span { + width: 16px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; +} +.action.switch span:after { + font-family: "icons"; + font-size: 16px; + line-height: 16px; + height: 16px; + margin: 0; + overflow: hidden; + content: '\e02c'; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.action.switch span:active { + outline: 0; +} +.action.switch span:after { + text-indent: 0; + display: block; + margin: 0; +} +.action.switch span:after { + line-height: 12px; +} +.action.switch:focus, +.action.switch:hover, +.action.switch.active { + color: #675f55; +} +.action.switch.active span:after { + content: "\e029"; +} +.no-js .action.switch:focus + ul { + visibility: visible; + opacity: 1; + -webkit-transition-delay: 0s; + -moz-transition-delay: 0s; + -ms-transition-delay: 0s; + -o-transition-delay: 0s; + transition-delay: 0s; +} +/* + Global Notices +-------------------------------------- */ +.notice.global.site { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + position: absolute; + width: 100%; + padding: 8px; + background: #4d5d64; + color: #fff; + top: 0; + left: 0; + text-align: center; +} +.notice.global.site p { + margin: 0; +} +/* + Reviews +-------------------------------------- */ +.reviews.summary { + line-height: 16px; +} +.reviews.summary .action { + font-size: 12px; +} +.reviews.summary .reviews.actions { + font-size: 12px; + display: inline; +} +.reviews.summary .action.view span:before { + content: ' '; +} +.reviews.summary .action.view + .action.add:before { + content: '\00A0|\00A0\00A0'; + display: inline-block; + color: #332e29; +} +.reviews.summary.short:not(.no-rating) .action.view span { + display: none; +} +.reviews.summary.short:not(.no-rating) .action.view:before { + content: '('; + display: inline-block; +} +.reviews.summary.short:not(.no-rating) .action.view:after { + content: ')'; + display: inline-block; +} +.block.reviews.dashboard .rating, +.reviews.summary .rating { + width: 80px; + margin-right: 3px; + line-height: 1; + color: rgba(218, 55, 10, 0.3); + display: inline-block; + vertical-align: top; + margin-top: -1px; +} +.block.reviews.dashboard .rating > span, +.reviews.summary .rating > span { + display: block; + overflow: hidden; + color: #da370a; + height: 0; + padding-top: 16px; + line-height: 1; + margin-top: -16px; +} +.block.reviews.dashboard .rating > span:before, +.reviews.summary .rating > span:before { + margin-top: -16px; +} +.block.reviews.dashboard .rating:before, +.reviews.summary .rating:before, +.block.reviews.dashboard .rating > span:before, +.reviews.summary .rating > span:before { + display: block; + top: 0; + left: 0; + width: 100%; + font-family: "icons"; + content: "\e009" "\e009" "\e009" "\e009" "\e009"; + font-style: normal; + font-size: 16px; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; +} +/* + Customer Reviews +-------------------------------------- */ +.block.reviews.list { + margin: 0 0 30px -20px; + padding: 0; +} +.block.reviews.list > .title { + display: none; +} +.block.reviews.list .item.review { + padding: 15px; +} +.block.reviews.list .item.review .review.title { + font-weight: 600; + display: block; + margin: 15px 0; +} +.block.reviews.list .item.review:nth-child(odd) { + background: #f8f8f8; +} +.block.reviews.list .review.details .author strong { + text-transform: uppercase; + font-weight: 600; +} +.block.reviews.list .review.details .review.date { + font-size: 12px; +} +.block.reviews.list .review.details p { + margin: 5px 0; +} +.block.reviews.list .review.details p span { + display: none; +} +.block.add.review { + margin: 0 0 30px -20px; + padding: 20px; + background: #f8f8f8; +} +.block.add.review .title { + display: none; +} +.block.add.review .fieldset { + margin: 30px 10px 30px 30px; + letter-spacing: -0.31em; + word-spacing: -0.43em; + border: 0; + padding: 0; + margin: 0; +} +.block.add.review .fieldset > * { + letter-spacing: normal; + word-spacing: normal; +} +.block.add.review .fieldset > .legend { + float: left; + font: 400 20px/1.2 "sourcesanspro"; + margin: -30px 30px 50px -30px; + width: 100%; +} +.block.add.review .fieldset > .legend + br { + display: block; + *zoom: 1; +} +.block.add.review .fieldset > .legend + br:before, +.block.add.review .fieldset > .legend + br:after { + content: ""; + display: table; +} +.block.add.review .fieldset > .legend + br:after { + clear: both; +} +.block.add.review .fieldset > .legend { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + float: left; + width: 100%; + margin: 0 0 20px; + padding: 10px 0 30px; + border-bottom: 1px solid; + border-color: #d7d7d7; +} +.block.add.review .fieldset > .legend + br { + clear: both; + display: block !important; +} +.block.add.review .fieldset > .legend span { + line-height: 1.2; + font-weight: 200; + font-size: 20px; +} +.block.add.review .fieldset > .legend strong { + margin-left: 20px; + font-size: 14px; + font-weight: 600; +} +.block.add.review .fieldset > .field:not(.ratings) { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + margin: 0 0 20px; + margin: 0 0 10px; +} +.block.add.review .fieldset > .field:not(.ratings) > .label { + display: block; + padding-bottom: 5px; +} +.block.add.review .fieldset > .field:not(.ratings) .nested .field { + margin: 5px 0; +} +.block.add.review .fieldset > .field:not(.ratings).choice > .control { + width: auto; +} +.block.add.review .fieldset > .field:not(.ratings).choice > .label { + display: inline; +} +.block.add.review .fieldset > .field:not(.ratings).choice > input { + vertical-align: top; + margin-top: 2px; + margin-right: 5px; +} +.block.add.review .fieldset > .field:not(.ratings).required > .label > span:first-child:after { + content: '*'; + color: #da370a; +} +.block.add.review .fieldset > .field:not(.ratings) .addon { + display: table; + padding: 0; + width: 100%; +} +.block.add.review .fieldset > .field:not(.ratings) .addon textarea, +.block.add.review .fieldset > .field:not(.ratings) .addon select, +.block.add.review .fieldset > .field:not(.ratings) .addon input { + box-shadow: none; + display: table-cell; + margin: 0; + width: 100%; +} +.block.add.review .fieldset > .field:not(.ratings) .addon .addbefore, +.block.add.review .fieldset > .field:not(.ratings) .addon .addafter { + height: 0; + white-space: nowrap; + display: inline-block; + display: table-cell; + vertical-align: middle; + width: 1px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + background: #ffffff; + border: 1px solid #c2c2c2; + border-radius: 3px; + font: 400 14px "sourcesanspro"; + /* Prevent background color leak outs */ + + background-clip: padding-box; + outline: none; + height: 32px; + line-height: 1; + padding: 0 10px; +} +.block.add.review .fieldset > .field:not(.ratings) .addon .addbefore:focus, +.block.add.review .fieldset > .field:not(.ratings) .addon .addafter:focus { + border-color: #999999; +} +.control .block.add.review .fieldset > .field:not(.ratings) .addon .addbefore, +.control .block.add.review .fieldset > .field:not(.ratings) .addon .addafter { + width: 100%; +} +.block.add.review .fieldset > .field:not(.ratings) .addon .addbefore:disabled, +.block.add.review .fieldset > .field:not(.ratings) .addon .addafter:disabled { + opacity: 0.5; +} +.block.add.review .fieldset > .field:not(.ratings) .addon .addbefore::-webkit-input-placeholder, +.block.add.review .fieldset > .field:not(.ratings) .addon .addafter::-webkit-input-placeholder { + line-height: 1.333; +} +.block.add.review .fieldset > .field:not(.ratings) .addon .addbefore:-ms-input-placeholder, +.block.add.review .fieldset > .field:not(.ratings) .addon .addafter:-ms-input-placeholder { + line-height: 1.333; +} +.eq-ie8 .block.add.review .fieldset > .field:not(.ratings) .addon .addbefore, +.eq-ie8 .block.add.review .fieldset > .field:not(.ratings) .addon .addafter { + padding-top: 8px; +} +.block.add.review .fieldset > .field:not(.ratings) .note { + font-size: 12px; + margin-top: 3px; + padding-left: 15px; +} +.block.add.review .fieldset > .field:not(.ratings) .note:before { + border-bottom: 5px solid #675f55; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + content: ''; + display: inline-block; + font-size: 0; + line-height: 0; + margin: 4px 0 0 -14px; + position: absolute; + vertical-align: top; + width: 0; +} +.block.add.review .fieldset > .field:not(.ratings):last-child { + margin-bottom: 0; +} +.block.add.review .fieldset > .field:not(.ratings) .nested { + padding: 0 0 0; +} +.block.add.review .fieldset > .field:not(.ratings) .nested .field { + margin: 5px 0; +} +.block.add.review .fieldset > .field:not(.ratings) > .label { + padding: 0 0 5px; +} +.block.add.review .action.cancel { + border: none; + border-radius: 0; + background: none; + margin: 0; + padding: 0; + box-shadow: none; + text-shadow: none; + outline: none; + display: inline; + color: #332e29; + text-decoration: none; + position: absolute; + left: 100%; + text-decoration: underline; + text-transform: uppercase; + margin-left: 20px; + margin-top: 10px; +} +.block.add.review .action.cancel:focus, +.block.add.review .action.cancel:active, +.block.add.review .action.cancel:hover { + color: #da370a; +} +.block.add.review .actions, +.block.add.review .field:not(.ratings) { + width: 60%; +} +.block.add.review .actions { + padding-top: 20px; + text-align: right; + position: relative; + z-index: 1; +} +/* + Review details +-------------------------------------- */ +.review.view .product.name { + display: inline-block; + margin: 0; +} +.review.view .product.details { + float: left; + margin-right: 30px; +} +.review.view .product.photo { + display: block; + margin-bottom: 30px; +} +.review.view .review.details { + margin: 30px 0; + display: table; +} +.review.view .review.details .ratings.summary { + margin-bottom: 30px; +} +.review.view .review.details .ratings.summary strong { + font-weight: 600; + display: block; + margin: 0 0 15px; +} +.review.view .review.details .ratings.summary .item { + display: table-row; +} +.review.view .review.details .ratings.summary .label { + padding: 0 0 10px; + padding-right: 10px; + display: table-cell; +} +.review.view .review.details .ratings.summary .label:after { + content: ': '; +} +.review.view .review.details .review.date { + font-size: 12px; +} +.review.view .review.details .review.title { + font-weight: 600; + font-size: 16px; + margin: 0 0 15px; +} +.customer.review.view + .actions { + clear: both; +} +/* + Messages +-------------------------------------- */ +.page.messages { + padding-left: 10px; + padding-right: 10px; + margin: 0 auto; + min-width: 1005px; + max-width: 1005px; + margin: 15px auto; +} +/* + Magento_Checkout + One page +-------------------------------------- */ +.block.progress.onepage { + float: left; + width: 200px; +} +.block.progress.onepage dt { + font-size: 16px; + font-weight: 400; + margin: 0 0 10px 0; +} +.block.progress.onepage dt a { + font-size: 14px; +} +.block.progress.onepage dd.complete { + padding: 0; + margin: 0 0 30px; +} +.block.progress.onepage address { + font-style: normal; +} +.opc.wrapper { + float: right; + width: 725px; +} +.opc.wrapper > .opc { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; +} +.opc.wrapper > .opc .section { + margin-bottom: 4px; +} +.opc.wrapper > .opc .section > .step-title { + padding: 15px 20px; + line-height: 1; + background: #da370a; + font-size: 22px; +} +.opc.wrapper > .opc .section > .step-title h2 { + font-weight: 400; + font-size: 18px; + margin: 0; + padding: 0; + color: #fff; +} +.opc.wrapper > .opc .section > .step-title .number { + display: none; +} +.opc.wrapper > .opc .section.active > .step-title { + background: #f8f8f8; + margin-bottom: 0; +} +.opc.wrapper > .opc .section.active > .step-title h2 { + color: #675f55; +} +.opc.wrapper > .opc .section.allow > .step-title { + cursor: pointer; +} +.opc.wrapper > .opc .section.allow > .step-title h2:after { + display: block; +} +.opc.wrapper > .opc .section > .step { + padding: 0 20px 20px; + background: #f8f8f8; +} +.opc.wrapper > .opc .section > .step:before { + content: ''; + border-top: 3px solid #e5e5e5; + display: block; + margin-bottom: 20px; +} +.opc.wrapper .form:not(.login) .fieldset { + padding: 0; + margin: 20px 0; + border: 0; +} +.opc.wrapper .form:not(.login) .fieldset .field { + display: inline-block; + padding-right: 20px; + vertical-align: top; + width: 50%; +} +.opc.wrapper .form:not(.login) .fieldset .nested .field { + width: 100%; +} +.opc.wrapper .form:not(.login) .fieldset .actions { + margin-right: 30px; +} +.opc.wrapper .form:not(.login) .field { + margin: 0 0 10px; +} +.opc.wrapper .form:not(.login) .field:last-child { + margin-bottom: 0; +} +.opc.wrapper .form:not(.login) .field .nested { + padding: 0 0 0; +} +.opc.wrapper .form:not(.login) .field .nested .field { + margin: 5px 0; +} +.opc.wrapper .form:not(.login) .field:not(.choice) .label { + display: block; + padding-bottom: 5px; +} +.opc.wrapper .form:not(.login) .actions { + *zoom: 1; + text-align: right; +} +.opc.wrapper .form:not(.login) .actions:before, +.opc.wrapper .form:not(.login) .actions:after { + content: ""; + display: table; +} +.opc.wrapper .form:not(.login) .actions:after { + clear: both; +} +.opc.wrapper .form:not(.login) .actions button.action { + float: right; +} +.opc.wrapper .form:not(.login) .actions .secondary { + padding-top: 10px; + clear: right; + float: right; +} +.opc.wrapper .form:not(.login) .field.fullname + .field.company, +.opc.wrapper .form:not(.login) .field.name-lastname + .field.company, +.opc.wrapper .form:not(.login) .field.country, +.opc.wrapper .form:not(.login) .field.taxvat { + margin: 0 40% 30px 0; +} +.opc.wrapper .form:not(.login) .field.confirm, +.opc.wrapper .form:not(.login) .field.password { + margin-top: 20px; + margin-bottom: 20px; +} +.opc.wrapper .form:not(.login) .field.choice { + width: 100%; + display: block; +} +.opc.wrapper .form:not(.login) .field.persistent, +.opc.wrapper .form:not(.login) .field.save { + margin: 20px 0 0; +} +.opc.wrapper .form:not(.login) .field.addresses { + margin-bottom: 20px; +} +.opc.wrapper .form:not(.login):after { + content: attr(data-hasrequired); + display: block; + letter-spacing: normal; + word-spacing: normal; + color: #da370a; +} +.opc.loading .active { + position: relative; + z-index: 1; +} +.opc.loading .active:before { + content: ''; + display: block; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(255, 255, 255, 0.1); +} +.opc.loading .active .actions .action { + visibility: hidden; + width: 1px; + overflow: hidden; +} +/* + Load Indicator +-------------------------------------- */ +.load.indicator { + display: inline-block; + padding: 8px; + vertical-align: middle; +} +.load.indicator span { + display: block; + line-height: 16px; +} +.load.indicator span:before { + content: ''; + margin-right: 5px; + display: inline-block; + width: 16px; + height: 16px; + background: url(../images/loader.gif) no-repeat 0 0; + background-color: #da370a; + vertical-align: top; +} +/* + Step Login +-------------------------------------- */ +.step.login.wrapper { + *zoom: 1; + position: relative; + z-index: 1; + padding-bottom: 70px; +} +.step.login.wrapper:before, +.step.login.wrapper:after { + content: ""; + display: table; +} +.step.login.wrapper:after { + clear: both; +} +.step.login.wrapper .block { + float: left; + width: 50%; + margin-right: 0%; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} +.step.login.wrapper .block .fieldset { + border: 0; + margin: 0; + padding: 0; +} +.step.login.wrapper .block .fieldset .field { + width: 100%; +} +.step.login.wrapper .block.guest { + padding-left: 50px; +} +.step.login.wrapper .block.guest:before { + content: ''; + border-left: 1px solid #e5e5e5; + position: absolute; + top: 0; + margin-left: -25px; + bottom: 20px; +} +.step.login.wrapper .actions { + position: absolute; + bottom: 0; + padding: 20px 0; + text-align: right; + margin: 0; + width: 50%; +} +.step.login.wrapper .actions .secondary { + font-size: 12px; + margin-top: .5em; + line-height: 1.4em; + margin-bottom: -1.9em; +} +.step.login.wrapper .guest .actions { + margin-left: -50px; +} +.fieldset.guest > .field { + margin: 0 0 10px; +} +.fieldset.guest > .field:last-child { + margin-bottom: 0; +} +.fieldset.guest > .field .nested { + padding: 0 0 0; +} +.fieldset.guest > .field .nested .field { + margin: 5px 0; +} +/* + Step Review +-------------------------------------- */ +.checkout.submit.order .actions { + margin-top: 15px; + *zoom: 1; +} +.checkout.submit.order .actions:before, +.checkout.submit.order .actions:after { + content: ""; + display: table; +} +.checkout.submit.order .actions:after { + clear: both; +} +.checkout.submit.order .actions .primary { + float: right; +} +.checkout.submit.order .actions .secondary { + float: left; + line-height: 32px; +} +.order.data.items tfoot tr:first-child td { + border-top: 3px solid #e5e5e5; + padding-top: 15px; +} +.order.data.items tr.total td { + padding-top: 5px; + padding-bottom: 5px; + text-align: right; +} +.order.data.items tr.total:last-child td { + padding-bottom: 20px; +} +.order.data.items tr.grand.total td { + vertical-align: middle; +} +.order.data.items tr.grand.total .amount { + font-size: 24px; + color: #da370a; +} +.order.review.data th.col.price, +.order.review.data th.col.subtotal { + text-align: right; + padding-right: 10px; +} +.order.review.data th.col.item { + text-align: left; + padding-left: 20px; +} +/* + Magento_Checkout + Multishipping +-------------------------------------- */ +.multicheckout.progress { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; + float: left; + width: 200px; +} +.multicheckout.progress li { + font-size: 16px; + font-weight: 400; + margin: 0 0 10px 0; +} +.multicheckout.progress li.active { + font-weight: bold; +} +.multicheckout.progress + .form.address.edit { + float: right; + width: 725px; +} +.multicheckout.form.address, +.multicheckout.form.billing, +.multicheckout.form.shipping, +.multicheckout.form.overview, +.multicheckout.success, +.multicheckout.change.billing { + float: right; + width: 725px; +} +.multicheckout .title { + *zoom: 1; + margin: 0 0 30px; +} +.multicheckout .title:before, +.multicheckout .title:after { + content: ""; + display: table; +} +.multicheckout .title:after { + clear: both; +} +.multicheckout .title > strong { + font-size: 20px; + font-weight: 400; + margin: 4px 0 0; +} +.multicheckout .subtitle { + display: block; + *zoom: 1; + margin: 0 0 20px; +} +.multicheckout .subtitle:before, +.multicheckout .subtitle:after { + content: ""; + display: table; +} +.multicheckout .subtitle:after { + clear: both; +} +.multicheckout .subtitle > span { + font-size: 18px; + font-weight: normal; + margin: 4px 0 0; +} +.multicheckout .title .action, +.multicheckout .subtitle .action { + font-weight: 400; + font-size: 14px; + margin-left: 20px; + text-decoration: underline; + display: inline-block; + text-transform: lowercase; +} +.multicheckout .title .action:hover, +.multicheckout .subtitle .action:hover { + text-decoration: none; +} +.multicheckout .content { + *zoom: 1; +} +.multicheckout .content:before, +.multicheckout .content:after { + content: ""; + display: table; +} +.multicheckout .content:after { + clear: both; +} +.multicheckout .content > .block { + margin-bottom: 20px; +} +.multicheckout .content > .block:last-child { + margin-bottom: 0; +} +.multicheckout address { + font-style: normal; +} +.multicheckout > .block.shipping .box, +.multicheckout > .block.billing .box { + margin-bottom: 20px; +} +.multicheckout > .block.shipping .box:last-child, +.multicheckout > .block.billing .box:last-child { + margin-bottom: 0; +} +.multicheckout > .block.shipping .box.address, +.multicheckout.overview > .block.billing .box.address { + float: left; + width: 49%; +} +.multicheckout > .block.shipping .box.method, +.multicheckout.overview > .block.billing .box.method { + float: right; + width: 49%; +} +.multicheckout > .block.shipping .box.items, +.multicheckout.overview > .block.billing .box.items { + clear: both; +} +.multicheckout.overview > .block.billing { + *zoom: 1; +} +.multicheckout.overview > .block.billing:before, +.multicheckout.overview > .block.billing:after { + content: ""; + display: table; +} +.multicheckout.overview > .block.billing:after { + clear: both; +} +.multicheckout.overview > .block.billing .box.method p { + margin: 0 0 10px; +} +.multicheckout.overview > .block.billing .box.method th, +.multicheckout.overview > .block.billing .box.method td { + font-size: 14px; + padding: 0; +} +.multicheckout.overview > .block.shipping .content { + margin-bottom: 20px; +} +.multicheckout.overview > .block.shipping .content:last-child { + margin-bottom: 0; +} +.multicheckout.overview .checkout.agreements { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; + margin: 10px 0; +} +.multicheckout.overview .checkout.agreements .item { + margin: 0 0 10px; +} +.multicheckout.overview .checkout.agreements .item:last-child { + margin: 0; +} +.multicheckout.overview .checkout.agreements .agreement { + background-color: #f8f8f8; + border: 1px solid #e5e5e5; + font-size: 11px; + overflow: auto; + margin: 0 0 10px; + padding: 15px; +} +.multicheckout.overview > .checkout.review .grand.total { + margin: 15px 0; + text-align: right; +} +.multicheckout.overview > .checkout.review .grand.total .label { + font-size: 18px; + font-weight: 400; +} +.multicheckout.overview > .checkout.review .grand.total .price { + color: #da370a; + font-size: 24px; + font-weight: 700; +} +.multicheckout.change.billing .box { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + background: #f8f8f8; + float: left; + margin-bottom: 20px; + margin-left: 2%; + padding: 30px; + width: 49%; +} +.multicheckout.change.billing .box.odd { + clear: left; + margin-left: 0; +} +.multicheckout.change.billing .box .actions { + margin: 15px 0 0; +} +.multicheckout.change.billing .actions { + clear: left; +} +.multicheckout .actions { + *zoom: 1; + margin: 20px 0; +} +.multicheckout .actions:before, +.multicheckout .actions:after { + content: ""; + display: table; +} +.multicheckout .actions:after { + clear: both; +} +.multicheckout.change.billing .actions { + margin-top: 0; +} +.multicheckout .action.back { + float: left; + margin: 9px 0 0; +} +.multicheckout .action.back span:before { + content: "\00AB\00A0"; +} +.multicheckout .action.continue.disabled, +.multicheckout .action.submit.disabled { + opacity: 0.3; +} +.multicheckout .action.continue.disabled:hover, +.multicheckout .action.submit.disabled:hover { + background: #da370a; +} +.multicheckout .action.add { + float: right; + text-decoration: none; + text-transform: uppercase; +} +.multicheckout.success .action.continue { + text-decoration: none; + text-transform: none; +} +.multicheckout .product.name { + margin-bottom: 0; +} +.multicheckout .items.data td.col.address { + padding-top: 10px; +} +.multicheckout .items.data td.col.delete, +.multicheckout .items.data td.col.product { + padding-top: 18px; +} +.multicheckout .items.data .col.item { + padding-left: 0; + text-align: left; +} +.multicheckout .items.data th.col.item, +.multicheckout .items.data th.col.qty { + padding-bottom: 5px; +} +.multicheckout .items.data .mark, +.multicheckout .items.data .amount { + text-align: right; +} +.multicheckout .items.data tfoot tr.total:first-child td { + border-top: 3px solid #e5e5e5; + padding-top: 15px; +} +.multicheckout .items.data tfoot tr.total:last-child td { + border-bottom: 0; +} +.multicheckout .items.data tfoot tr.total td { + padding-top: 5px; + padding-bottom: 5px; + text-align: right; +} +.multicheckout .items.data tfoot tr.total.grand td { + vertical-align: middle; +} +.multicheckout .items.data tfoot tr.total.grand .amount { + color: #da370a; + font-size: 24px; +} +.multicheckout .items.data .applicable { + padding-top: 7px; +} +.multicheckout .block .items.data tr td:first-child { + padding-left: 0; +} +.multicheckout .block .items.data tr td:last-child { + padding-right: 0; +} +.multicheckout .shipping .items.data tr:last-child td { + border-bottom: 1px solid #e5e5e5; +} +.multicheckout .sp-methods, +.multicheckout .items.methods { + margin: 0; +} +.multicheckout .sp-methods dt, +.multicheckout .items.methods dt { + margin: 0; +} +.multicheckout .sp-methods dd, +.multicheckout .items.methods dd { + margin: 0; + padding: 0; +} +.multicheckout .sp-methods dd ul, +.multicheckout .items.methods dd ul { + margin: 0 0 15px; + padding: 10px; +} +.multicheckout.form.address .col.address select { + max-width: 450px; +} +.checkout-multishipping-address-newshipping .form.address.edit, +.checkout-multishipping-address-editshipping .form.address.edit { + float: right; + width: 725px; +} +.block.gift.message { + margin: 30px 0 0; +} +.block.gift.message .title { + font-size: 16px; + font-weight: 400; + margin-bottom: 15px; +} +/* + Magento_Checkout + Gift Message +-------------------------------------- */ +.gift.message > .legend { + font-size: 16px; + margin: 0 0 20px; +} +.gift.message .block.items { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #e5e5e5; + height: 310px; + overflow: auto; + padding: 20px; +} +.gift.message dt { + margin: 30px 0 0; +} +.gift.message dt:first-child { + margin: 0; +} +.gift.message dt .title { + font-size: 16px; + margin: 0 0 15px; +} +.gift.message dt > .price { + margin: 0 0 10px; +} +.gift.message dd { + margin: 20px 0 0 20px; +} +.gift.message .field.choice input { + margin-right: 5px; + margin-top: 2px; + vertical-align: top; +} +.gift.message .design { + *zoom: 1; + margin: 10px 0 0; +} +.gift.message .design:before, +.gift.message .design:after { + content: ""; + display: table; +} +.gift.message .design:after { + clear: both; +} +.gift.message .design img { + height: 75px; + width: 75px; + float: left; + margin-right: 15px; +} +.gift.message .design > .price { + float: left; +} +.gift.message .field.gift.wrapping .label { + display: block; + padding-bottom: 5px; +} +.gift.message .field.gift.wrapping .control select { + width: 100%; +} +.gift.message .activate.message { + display: inline-block; + margin: 10px 0 0; +} +.gift.message .activate.message + div .fieldset { + margin-top: 0; +} +.gift.message .field.gift.wrapping .design > .price > .price, +.gift.message dt > .price > .price { + display: block; +} +.gift.message .field.gift.wrapping .design > .price > .price > span, +.gift.message dt > .price > .price > span { + display: inline-block; +} +.gift.message .no-display { + display: none; +} +.gift.message .options.order .field.gift.wrapping, +.gift.message .options.order .field.text { + width: 100%; +} +.gift.message .options.individual ol { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; +} +.gift.message .options.individual li { + *zoom: 1; + border-bottom: 1px solid #e5e5e5; + margin: 0 0 15px; + padding: 0 0 15px; + overflow: hidden; +} +.gift.message .options.individual li:before, +.gift.message .options.individual li:after { + content: ""; + display: table; +} +.gift.message .options.individual li:after { + clear: both; +} +.gift.message .options.individual .number { + border-bottom: 1px solid #e5e5e5; + color: #999999; + margin: 0 0 15px; + padding: 0 0 5px; +} +.gift.message .options.individual .product { + float: left; + margin-right: 20px; + text-align: center; +} +.gift.message .options.individual .product > .product { + float: none; + margin: 0; +} +.gift.message .options.individual .product .img { + margin-bottom: 5px; +} +.gift.message .options.individual .options-items-container { + width: 100%; +} +.gift.message .options.individual .options-items-container .field { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + width: 100%; +} +.gift.message .options.individual .field.text { + width: 100%; +} +.gift.message .options.individual .item.options { + overflow: hidden; +} +.gift.message .extra-options-container { + margin: 10px 0 0; +} +.gift.message .extra-options-container .field.choice { + margin: 0 0 10px; +} +.multicheckout .gift.message { + margin: 20px 0; +} +.multicheckout .gift.message .fieldset { + margin: 20px 0; +} +.multicheckout .gift.message .block.message { + margin: 0; +} +.multicheckout .gift.message .block.message .fieldset { + margin: 0; +} +.multicheckout .gift.message .field { + display: inline-block; + padding-right: 20px; + vertical-align: top; + width: 50%; +} +.data.table .gift.wrapping { + font-size: 13px; + margin: 0; +} +.data.table .gift.wrapping dt { + font-weight: 600; + margin: 5px 0 0; +} +.data.table .gift.wrapping dd { + margin: 0 0 5px; +} +/* + Magento_Checkout + Shopping Cart +-------------------------------------- */ +.cart.container { + *zoom: 1; + position: relative; + z-index: 1; +} +.cart.container:before, +.cart.container:after { + content: ""; + display: table; +} +.cart.container:after { + clear: both; +} +.cart.main.actions { + padding: 20px 0; +} +.cart.main.actions .action.continue { + position: absolute; + text-decoration: underline; + right: 0; + top: 3px; +} +.items.data { + width: 100%; +} +.items.data thead tr:last-child th { + padding-bottom: 10px; +} +.items.data th.col.item > span { + display: none; +} +.items.data td.col.qty { + width: 40px; + padding-top: 20px; + text-align: center; +} +.review .items.data td.col.qty { + padding-top: 16px; +} +.items.data th.col.qty { + text-transform: uppercase; +} +.items.data input.qty { + width: 50px; + text-align: center; +} +.items.data td.col.price, +.items.data td.col.subtotal { + text-align: right; +} +.items.data .product.photo { + padding-right: 20px; + display: table-cell; + width: 1%; + vertical-align: top; +} +.items.data .product.details { + display: table-cell; + width: 99%; + vertical-align: top; +} +.items.data .item.actions { + text-align: right; +} +.items.data .item.actions div.actions { + padding-bottom: 30px; +} +.items.data td { + border-left: 0; + border-right: 0; + padding: 26px 10px 10px; + vertical-align: top; + background: transparent; +} +.items.data td:first-child { + padding-left: 20px; +} +.items.data td:last-child { + padding-right: 20px; +} +.items.data tbody:nth-child(even) tr { + background: #f8f8f8; +} +.items.data th { + border-left: 0; + border-right: 0; + text-align: center; + font-weight: 400; + font-size: 14px; + vertical-align: top; +} +.items.data tr:first-child th { + font-weight: 400; + font-size: 16px; +} +.items.data .item.actions td { + padding: 0 20px 10px; + line-height: 16px; +} +.items.data .item.actions td .action { + margin-left: 20px; +} +.items.data .item.actions td .action.towishlist { + font-size: 14px; +} +.items.data .item.actions td .action.delete { + vertical-align: top; + margin-top: 0; +} +.items.data .item.actions td:before { + content: ''; + border-top: 1px solid #e5e5e5; + display: block; + height: 0; + overflow: hidden; + margin: 0 0 10px; +} +.items.data .item.options dt { + font-weight: 400; + display: inline; + margin-right: 10px; + float: left; + clear: left; +} +.items.data .item.options dt:after { + content: ': '; +} +.items.data .item.options dd { + font-weight: 200; + margin: 0 0 10px 10px; + padding: 0; +} +.cart.table.wrapper { + float: left; + width: 665px; +} +.cart.summary { + position: relative; + z-index: 1; + margin-top: 33px; + background: #f8f8f8; + display: inline-block; + width: 290px; + padding: 20px; + margin-left: 10px; +} +.cart.summary .summary.title { + font-size: 20px; + font-weight: 200; + display: block; + border-bottom: 3px solid #e5e5e5; + padding-bottom: 15px; +} +.cart.summary .block { + margin-bottom: 0; + border-bottom: 1px solid #e5e5e5; + font-size: 12px; +} +.cart.summary .block > .title { + cursor: pointer; + padding: 10px 5px; + margin: 0; + line-height: 16px; +} +.cart.summary .block > .title strong { + font-size: 12px; + font-weight: 600; +} +.cart.summary .block > .title strong:after { + content: "\e00d"; + font-family: "icons"; + float: right; + font-weight: 400; + font-size: 16px; + line-height: 16px; +} +.cart.summary .block > .title.active strong:after { + content: "\e011"; +} +.cart.summary .block > .content { + display: none; + padding: 15px 15px 20px; +} +.cart.summary .block.active > .content { + display: block; +} +.cart.summary .block .fieldset { + padding: 0; + margin: 0; + border: 0; +} +.cart.summary .block .fieldset .field { + margin: 0 0 10px; +} +.cart.summary .block input[type="text"] { + padding: 0 5px; + font-size: 12px; + height: 30px; +} +.cart.summary .block .field:not(.choice) .label { + padding: 0 0 5px; + display: block; +} +.cart.summary .block select { + padding: 5px 5px 4px; + font-size: 12px; +} +.cart.summary .block .action { + padding: 6px 11px 5px; +} +.cart.summary .block .action span { + font-size: 12px; + line-height: 12px; +} +.cart.summary .block .action.check span { + display: inline; + color: #332e29; + text-decoration: none; +} +.cart.summary .block .action.check span:focus, +.cart.summary .block .action.check span:active, +.cart.summary .block .action.check span:hover { + color: #da370a; +} +.cart.container > .summary.sticky { + position: fixed; + display: inline-block !important; +} +.cart.container > .summary.bottom { + position: absolute; + vertical-align: bottom; + bottom: 0; +} +.cart > .summary.fixed, +.cart.container > .summary > .container.fixed { + position: fixed; + top: 0; +} +.cart.table.wrapper.detailed + .cart.summary { + margin-top: 54px; +} +.block.shipping .content { + *zoom: 1; +} +.block.shipping .content:before, +.block.shipping .content:after { + content: ""; + display: table; +} +.block.shipping .content:after { + clear: both; +} +.block.shipping .fieldset.estimate .actions { + display: table-cell; + width: 1%; + white-space: nowrap; + vertical-align: bottom; +} +.block.shipping .fieldset.rates { + padding-top: 20px; +} +.block.shipping .fieldset.rates .actions { + text-align: right; +} +.block.shipping .field.postcode { + display: table-cell; + width: 99%; + vertical-align: bottom; + padding-right: 10px; +} +.block.shipping .field.postcode div.mage-error { + position: absolute; +} +.block.discount .content { + *zoom: 1; +} +.block.discount .content:before, +.block.discount .content:after { + content: ""; + display: table; +} +.block.discount .content:after { + clear: both; +} +.block.discount .fieldset.coupon { + position: relative; +} +.block.discount .fieldset.coupon.applied { + padding-bottom: 20px; +} +.block.discount .fieldset.coupon .field { + display: table-cell; + width: 99%; + vertical-align: bottom; + padding-right: 10px; +} +.block.discount .fieldset.coupon .field .label { + float: left; + margin-right: -100px; +} +.block.discount .fieldset.coupon .field input { + clear: left; +} +.block.discount .fieldset.coupon .field div.mage-error { + position: absolute; +} +.block.discount .fieldset.coupon .actions { + vertical-align: bottom; + display: table-cell; + width: 1%; + white-space: nowrap; +} +.block.discount .fieldset.coupon .action.cancel { + border: none; + border-radius: 0; + background: none; + margin: 0; + padding: 0; + box-shadow: none; + text-shadow: none; + outline: none; + display: inline; + color: #332e29; + text-decoration: none; + position: absolute; + left: 0; + bottom: 0; + margin-bottom: -15px; +} +.block.discount .fieldset.coupon .action.cancel:focus, +.block.discount .fieldset.coupon .action.cancel:active, +.block.discount .fieldset.coupon .action.cancel:hover { + color: #da370a; +} +.block.discount .fieldset.coupon .action.cancel span { + text-transform: none; +} +.sp-methods dt, +.items.methods dt, +.sp-methods .item.title, +.items.methods .item.title { + font-weight: bold; +} +.sp-methods dd, +.items.methods dd, +.sp-methods .item.options, +.items.methods .item.options { + margin: 0 0 15px; + padding: 10px; +} +.field.choice.payment > .label { + font-weight: bold; +} +.data-table { + width: 100%; + border: 0; +} +.data-table td { + border-right: 1px solid #e5e5e5; + padding: 5px; + vertical-align: top; +} +.data-table td:last-child { + border: 0; +} +.cart.totals { + padding: 20px 0; +} +.cart.totals .table.totals { + width: 100%; +} +.cart.totals td, +.cart.totals th { + text-align: right; + padding: 4px 0 4px 5px; +} +.cart.totals td:not(:first-child) strong { + font-size: 24px; + color: #da370a; +} +.cart.totals td:first-child { + text-align: left; + padding-left: 0; +} +.cart.totals td:first-child strong { + font-size: 14px; +} +.checkout.methods.items { + background: #fff; + padding: 20px; +} +.checkout.methods.items .item { + margin: 15px auto; + text-align: center; +} +.checkout.methods.items .action.multicheckout { + text-decoration: underline; +} +/* + Magento_Checkout + Mini cart +-------------------------------------- */ +.minicart.wrapper { + float: right; + margin-right: 40px; + z-index: 11; +} +.minicart.wrapper .block.minicart { + *zoom: 1; + left: -100%; + margin-top: 15px; + position: absolute; + z-index: 2; + background: #f8f8f8; + border: 2px solid #d7d7d7; + border-radius: 3px; + text-align: center; + padding: 58px 345px 25px 15px; +} +.minicart.wrapper .block.minicart:before, +.minicart.wrapper .block.minicart:after { + content: ""; + display: table; +} +.minicart.wrapper .block.minicart:after { + clear: both; +} +.minicart.wrapper .block.minicart:before { + content: ''; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-bottom: 10px solid #f8f8f8; + height: 0; + width: 0; + overflow: hidden; + display: block; + position: absolute; + top: 0; + margin-top: -10px; + margin-right: 25px; + right: 0; + zoom: 1; + z-index: 2; +} +.minicart.wrapper .block.minicart > .content { + margin-top: -33px; +} +.minicart.wrapper .block.minicart > .content .subtotal { + *zoom: 1; +} +.minicart.wrapper .block.minicart > .content .subtotal:before, +.minicart.wrapper .block.minicart > .content .subtotal:after { + content: ""; + display: table; +} +.minicart.wrapper .block.minicart > .content .subtotal:after { + clear: both; +} +.minicart.wrapper .block.minicart > .content .subtotal .mark { + display: inline-block; + font-weight: 600; + font-size: 18px; + float: left; + line-height: 24px; +} +.minicart.wrapper .block.minicart > .content .subtotal > .amount { + text-align: right; + float: right; + display: inline-block; + font-weight: 700; + font-size: 24px; + line-height: 24px; + color: #da370a; +} +.minicart.wrapper .block.minicart > .content .subtotal .amount.incl.tax { + display: block; + font-size: 14px; +} +.minicart.wrapper .block.minicart > .content .subtotal .amount.incl.tax:after { + content: ')'; +} +.minicart.wrapper .block.minicart > .content .subtotal .amount.incl.tax .price:after { + content: ' ('; +} +.minicart.wrapper .block.minicart > .content .disclaimer { + font-size: 12px; +} +.minicart.wrapper .block.minicart > .content .actions .secondary { + margin-top: 15px; + margin-bottom: -15px; + text-align: right; +} +.minicart.wrapper .block.minicart > .content .actions .secondary a { + color: #da370a; +} +.minicart.wrapper .block.minicart > .content .subtitle { + display: block; + text-align: left; + padding: 0 50px; + margin: 0 0 15px 0; + font-weight: 400; +} +.minicart.wrapper .block.minicart > .content .subtitle.empty { + margin: 10px -320px 0 0; + padding: 0; + float: right; + width: 310px; + clear: right; +} +.minicart.wrapper .block.minicart .minicart.empty.text, +.minicart.wrapper .block.minicart > .title, +.minicart.wrapper .block.minicart > .content .subtotal, +.minicart.wrapper .block.minicart > .content .disclaimer, +.minicart.wrapper .block.minicart > .content > .actions { + margin: 0 -330px 15px 0; + text-align: left; + float: right; + width: 310px; + clear: right; +} +.minicart.wrapper .block.minicart > .title .text { + display: none; +} +.minicart.wrapper .block.minicart > .title .qty:before { + content: attr(title) ": "; +} +.minicart.wrapper .block.minicart .minicart.empty.text { + margin-top: 15px; +} +.minicart.wrapper .block.minicart > .title strong { + font-weight: 400; +} +.minicart.wrapper.active { + position: relative; + z-index: 11; +} +.minicart.wrapper.active:before { + content: ''; + position: fixed; + z-index: 1; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: #000; + opacity: 0.01; +} +.minicart.wrapper.active .block.minicart { + left: auto; + right: -20px; +} +.minicart.wrapper .action.previous, +.minicart.wrapper .action.next { + border: none; + border-radius: 0; + background: none; + margin: 0; + padding: 0; + box-shadow: none; + text-shadow: none; + outline: none; + width: 25px; + overflow: hidden; + position: absolute; + right: 10px; + top: 50%; + margin-top: -22px; +} +.minicart.wrapper .action.previous span, +.minicart.wrapper .action.next span { + width: 42px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; + color: #c2c2c2; + margin-left: -10px; + overflow: hidden; +} +.minicart.wrapper .action.previous span:after, +.minicart.wrapper .action.next span:after { + font-family: "icons"; + font-size: 42px; + line-height: 42px; + height: 42px; + margin: 0; + overflow: hidden; + content: "\e01a"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.minicart.wrapper .action.previous span:active, +.minicart.wrapper .action.next span:active { + outline: 0; +} +.minicart.wrapper .action.previous span:after, +.minicart.wrapper .action.next span:after { + text-indent: 0; + display: block; + margin: 0; +} +.minicart.wrapper .action.previous[disabled], +.minicart.wrapper .action.next[disabled] { + opacity: 0.3; +} +.minicart.wrapper .action.previous { + right: auto; + left: 0; +} +.minicart.wrapper .action.previous span:after { + content: "\e01b"; +} +.minicart.wrapper .action.close { + position: absolute; + top: 10px; + right: 15px; +} +.minicart.wrapper p { + clear: both; +} +.block.minicart.empty > .title, +.eq-ie8 .minicart.wrapper.active:before { + display: none; +} +/* + Product options +-------------------------------------- */ +.minicart .product.options.wrapper { + position: relative; + display: inline; + z-index: 1; + margin: 7px 0; +} +.minicart .product.options.wrapper .more { + color: #675f55; + font-size: 12px; + line-height: 1; + padding: 0; + border-bottom: 1px dotted #675f55; + cursor: help; +} +.minicart .product.options.wrapper:hover { + z-index: 99; +} +.minicart .product.options.wrapper:hover .product.options.details { + display: block; +} +.minicart .product.options.wrapper:hover:before { + content: ''; + border-left: 10px solid rgba(0, 0, 0, 0.8); + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + height: 0; + width: 0; + overflow: hidden; + display: block; + position: absolute; + top: 0; + margin-top: 0; + left: -10px; + zoom: 1; + z-index: 2; +} +.minicart .product.options.details { + display: none; + position: absolute; + background: rgba(0, 0, 0, 0.8); + border-radius: 6px; + padding: 10px; + right: 100%; + top: 50%; + margin-top: -20px; + margin-right: 10px; + float: left; + max-width: 200px; + min-width: 100px; + color: #ffffff; +} +.minicart .product.options.details .title { + font-weight: 600; +} +.minicart .product.options.list { + padding-left: 10px; +} +.minicart .product.options.list dt { + font-size: 12px; + display: inline; + margin: 0; + padding: 0; + font-weight: 600; +} +.minicart .product.options.list dt:after { + content: ': '; +} +.minicart .product.options.list dt:before { + content: ''; + display: block; +} +.minicart .product.options.list dd { + font-size: 12px; + display: inline-block; + padding: 0; + margin: 0; +} +.minicart .item:not(.shown) + .shown .product.options.details, +.minicart :first-child .product.options.details { + right: auto; + left: 100%; + margin-left: 10px; +} +.minicart .item:not(.shown) + .shown .product.options.wrapper:before, +.minicart :first-child .product.options.wrapper:before { + border-right: 10px solid rgba(0, 0, 0, 0.8); + border-left: 0; + left: auto; + right: -10px; +} +.minicart.wrapper .block.minicart > .content > .actions .primary { + *zoom: 1; + text-align: center; +} +.minicart.wrapper .block.minicart > .content > .actions .primary:before, +.minicart.wrapper .block.minicart > .content > .actions .primary:after { + content: ""; + display: table; +} +.minicart.wrapper .block.minicart > .content > .actions .primary:after { + clear: both; +} +.minicart.wrapper .block.minicart > .content > .actions .primary .checkout.paypal { + display: inline; +} +.minicart.wrapper .block.minicart > .content > .actions .primary .checkout.paypal input[type="image"] { + margin-top: 5px; + float: left; +} +.minicart.wrapper .block.minicart > .content > .actions .primary .checkout.paypal:after { + float: none; +} +.minicart.wrapper .block.minicart > .content > .actions .primary .checkout.paypal + .action.checkout { + float: right; +} +.block.minicart .products.minilist { + float: left; + padding: 0; + border-right: 1px solid #d7d7d7; + max-width: 561px; + padding: 0 30px; + position: relative; + z-index: 1; +} +.block.minicart .products.minilist .minilist.items { + position: relative; + white-space: nowrap; +} +.block.minicart .products.minilist.animation { + position: relative; +} +.block.minicart .products.minilist.animation .items-wrapper { + overflow: hidden; +} +.block.minicart .products.minilist.animation .item { + visibility: visible; +} +.block.minicart .products.minilist .item { + padding: 0 20px; + vertical-align: top; + text-align: left; + white-space: normal; + display: none; + display: inline-block; + width: 187px; + visibility: hidden; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + margin-left: 0; +} +.block.minicart .products.minilist .item:before { + content: ''; + width: 0; + display: block; + border-left: 1px solid #d7d7d7; + height: 100%; + margin-left: -20px; + position: absolute; +} +.block.minicart .products.minilist .item.item:not(.shown) + .shown:before, +.block.minicart .products.minilist .item:first-child:before { + display: none; +} +.wrapper.active .block.minicart .products.minilist .item.shown { + visibility: visible; +} +.block.minicart .products.minilist .item.hidden { + margin-left: -187px !important; +} +.block.minicart .products.minilist .item .product.photo { + display: block; + margin-bottom: 10px; +} +.block.minicart .products.minilist .item .product.photo .photo.container { + overflow: visible !important; + margin: 0 auto; +} +.block.minicart .products.minilist .item .product.photo .photo.image { + border: 1px solid #dcdcdc; + display: block; + margin: 0 auto; +} +.block.minicart .products.minilist .item .pricing { + margin-top: 10px; +} +.block.minicart .products.minilist .item .pricing:not(.complex) .label.display { + display: none; +} +.block.minicart .products.minilist .item .pricing .label:after { + content: ': '; +} +.block.minicart .products.minilist .item .actions { + float: right; +} +.block.minicart .products.minilist .item .action.edit { + font-size: 12px; +} +.block.minicart .products.minilist .item .product.options.wrapper + .action.edit { + margin-right: 8px; +} +.block.minicart .products.minilist .item .product.options.wrapper + .action.edit:before { + content: '|'; + display: inline-block; + text-decoration: none; + padding: 0 8px; + margin-right: -16px; +} +.block.minicart .products.minilist .item .product.options.wrapper + .action.edit:hover:before { + color: #675f55; +} +.block.minicart .products.minilist .item .action.delete { + position: absolute; + margin-left: -5px; + margin-top: -1.35em; + bottom: 0; +} +.eq-ie8 .block.minicart .products.minilist .action.delete, +.eq-ie8 .block.minicart .products.minilist .action.edit { + visibility: hidden; +} +.eq-ie8 .block.minicart .products.minilist .shown .action.delete, +.eq-ie8 .block.minicart .products.minilist .shown .action.edit { + visibility: visible; +} +.eq-ie8 .block.minicart .products.minilist .item:before { + border-left: 0; +} +.action.delete { + display: inline-block; +} +.action.delete span { + color: #c2c2c2; + width: 16px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; +} +.action.delete span:after { + font-family: "icons"; + font-size: 16px; + line-height: 16px; + height: 16px; + margin: 0; + overflow: hidden; + content: "\e000"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.action.delete span:active { + outline: 0; +} +.action.delete span:after { + text-indent: 0; + display: block; + margin: 0; +} +.action.delete:focus, +.action.delete:active, +.action.delete:hover { + outline: none; +} +.action.delete:focus span, +.action.delete:active span, +.action.delete:hover span { + color: #999999; +} +.action.checkout.shadow span { + text-shadow: 0px 1px 2px #000; +} +.action.close { + border: none; + border-radius: 0; + background: none; + margin: 0; + padding: 0; + box-shadow: none; + text-shadow: none; + outline: none; +} +.action.close span { + width: 11px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; +} +.action.close span:after { + font-family: "icons"; + font-size: 11px; + line-height: 11px; + height: 11px; + margin: 0; + overflow: hidden; + content: "\e012"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.action.close span:active { + outline: 0; +} +.action.close span:after { + text-indent: 0; + display: block; + margin: 0; +} +.action.showcart { + width: 32px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; + margin-top: 20px; + margin-left: 20px; + color: #837d75; + position: relative; +} +.action.showcart:after { + font-family: "icons"; + font-size: 32px; + line-height: 32px; + height: 32px; + margin: 0; + overflow: hidden; + content: "\e014"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.action.showcart:active { + outline: 0; +} +.action.showcart:after { + text-indent: 0; + display: block; + margin: 0; +} +.action.showcart:hover, +.action.showcart:active, +.action.showcart:focus, +.action.showcart.active { + color: #999999; + outline: none; +} +.action.showcart .qty { + position: absolute; + left: 70%; + top: 0; + margin-top: -30%; + text-indent: 0; + background: #da370a; + display: inline-block; + border: 1px solid #da370a; + border-radius: 50px; + font-size: 14px; + font-weight: 600; + color: #fff; + line-height: 1.7em; + vertical-align: middle; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + min-width: 1.87em; + min-height: 1.7em; + text-align: center; + padding: 0 4px; +} +.action.showcart .qty.empty { + display: none; +} +/* + Paypal button +-------------------------------------- */ +.checkout.paypal { + display: none; + display: inline-block; + vertical-align: top; +} +.checkout.paypal input[type="image"] { + display: inline-block; + vertical-align: top; +} +.checkout.paypal.before:before { + content: "- " attr(data-label) " -"; + text-transform: uppercase; + display: inline-block; + line-height: 32px; + font-size: 14px; + vertical-align: middle; + margin: 0 5px; +} +.checkout.paypal.after:after { + content: "- " attr(data-label) " -"; + text-transform: uppercase; + display: inline-block; + line-height: 32px; + font-size: 14px; + vertical-align: middle; + margin: 0 5px; +} +.box.tocart .checkout.paypal.after:after { + display: none; +} +.box.tocart .checkout.paypal.after:before { + content: "- " attr(data-label) " -"; + text-transform: uppercase; + display: inline-block; + line-height: 32px; + font-size: 14px; + vertical-align: middle; + margin: 0 5px; +} +.checkout.methods .checkout.paypal.after:after { + display: block; + text-align: center; +} +/* + Magento_Sales +-------------------------------------- */ +.block.reorder { + padding-right: 30px; +} +.block.reorder .item { + padding-left: 20px; +} +.block.reorder .item input { + float: left; + margin-top: 2px; + margin-left: -20px; +} +.block.reorder .subtitle { + display: block; + margin: 0 0 15px; + font-weight: 600; +} +.block.reorder .actions { + margin: 15px 0 0; +} +.block.reorder .actions .primary, +.block.reorder .actions .secondary { + margin-right: 5px; + display: inline-block; + vertical-align: middle; +} +/* + Magento_Newsletter +-------------------------------------- */ +.block.newsletter { + text-align: left; +} +.block.newsletter .title { + display: none; +} +.block.newsletter .field { + *zoom: 1; +} +.block.newsletter .field:before, +.block.newsletter .field:after { + content: ""; + display: table; +} +.block.newsletter .field:after { + clear: both; +} +.block.newsletter .label { + display: block; + font-size: 16px; + margin-bottom: 10px; + line-height: 1.2; +} +.block.newsletter .control { + float: left; + width: 100%; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + padding-right: 45px; +} +.block.newsletter .actions { + padding-left: 10px; + float: right; + margin-left: -45px; +} +.block.newsletter input[type="text"] { + width: 100%; +} +.footer .block.newsletter { + width: 310px; + float: right; +} +.action.subscribe { + border: none; + border-radius: 0; + background: none; + margin: 0; + padding: 0; + box-shadow: none; + text-shadow: none; + outline: none; + background: #da370a; + border-radius: 3px; + padding: 7px; + border: 1px solid #da370a; + vertical-align: top; +} +.action.subscribe span { + width: 16px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; + color: #fff; +} +.action.subscribe span:after { + font-family: "icons"; + font-size: 16px; + line-height: 16px; + height: 16px; + margin: 0; + overflow: hidden; + content: "\e001"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.action.subscribe span:active { + outline: 0; +} +.action.subscribe span:after { + text-indent: 0; + display: block; + margin: 0; +} +.form.newsletter.manage .fieldset { + margin: 0 0 20px; + padding: 0; + border: 0; +} +.form.newsletter.manage .fieldset .legend { + float: left; + margin: 0 0 20px; + font-weight: 600; +} +.form.newsletter.manage .fieldset .legend + br { + display: block; + clear: both; +} +.form.newsletter.manage .actions .primary { + margin-bottom: 15px; +} +/* + Widgets +-------------------------------------- */ +.widget ul { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; +} +/* + Magento_Catalog + Compare +-------------------------------------- */ +.block.compare > .title .qty { + font-size: 16px; + margin-right: -5px; +} +.block.compare > .title .qty:before { + content: '('; +} +.block.compare > .title .qty:after { + content: ')'; +} +.block.compare .item { + padding-right: 20px; + overflow: hidden; +} +.block.compare .product.name { + float: left; +} +.block.compare .action.delete { + margin-right: -20px; + float: right; +} +.block.compare .action.compare { + float: right; +} +.block.compare .action.clear { + float: left; + margin-top: 10px; +} +.block.compare .actions { + *zoom: 1; + margin-top: 15px; +} +.block.compare .actions:before, +.block.compare .actions:after { + content: ""; + display: table; +} +.block.compare .actions:after { + clear: both; +} +.catalog-product-compare-index .action.print { + float: right; + margin-top: -50px; +} +.comparison.wrapper { + clear: both; + position: relative; + z-index: 1; + margin-bottom: 50px; +} +.comparison.wrapper:after { + content: ''; + position: absolute; + z-index: 2; + right: 0; + top: 0; + height: 100%; + width: 15px; +} +.comparison.container { + overflow-y: hidden; + overflow-x: auto; +} +.data.comparison { + table-layout: fixed; +} +.data.comparison .cell.label { + width: 130px; + padding-left: 10px; + font-weight: 600; + text-align: left; + border-right: 1px solid #e5e5e5; +} +.data.comparison .cell.label .attribute.label { + display: block; + width: 100%; + word-break: break-all; +} +.data.comparison .cell.label.product { + border-bottom: 1px solid #e5e5e5; +} +.data.comparison .cell { + padding: 15px; + vertical-align: top; +} +.data.comparison .cell p:first-child { + margin-top: 0; +} +.data.comparison .cell .attibute.value { + width: 100%; + overflow: hidden; +} +.data.comparison .cell.product { + width: 140px; +} +.data.comparison .cell.product.info { + border-bottom: 1px solid #e5e5e5; +} +.data.comparison .cell.attribute { + font-size: 12px; +} +.data.comparison td:last-child { + border-right: 1px solid #e5e5e5; +} +.data.comparison tr:nth-child(odd) .cell.attribute { + background-color: #f8f8f8; +} +.data.comparison .product.photo { + text-align: center; + display: block; + margin: 0 auto 15px; +} +.data.comparison .product.photo .img.photo.container { + display: inline-block !important; +} +.data.comparison .actions, +.data.comparison .price-box, +.data.comparison .product.rating, +.data.comparison .product.name { + margin: 15px 0; +} +.data.comparison .addto.links { + margin-top: 15px; + padding-top: 15px; + border-top: 1px solid #e5e5e5; + font-size: 12px; +} +.data.comparison .cell.remove { + padding-top: 0; + padding-bottom: 0; + text-align: right; +} +.data.comparison .cell.remove .action.delete { + float: right; + padding: 4px; + margin-right: -15px; +} +.data.comparison .cell.remove .action.delete span { + overflow: hidden; + line-height: 0; +} +.data.comparison .cell.remove .action.delete span:after { + content: "\e012"; + font-size: 12px; + color: #fff; +} +.comparison.headings { + position: absolute; + z-index: 2; + top: 0; + left: 0; + width: auto; + background-color: #ffffff; +} +.comparison.headings th { + background-color: #ffffff; +} +/* + Magento_Catalog + Compare +-------------------------------------- */ +.item.link.compare .qty:before { + content: '('; +} +.item.link.compare .qty:after { + content: ')'; +} +/* + Magento_Catalog + Product lists +-------------------------------------- */ +.block.related .action.select { + border: none; + border-radius: 0; + background: none; + margin: 0; + padding: 0; + box-shadow: none; + text-shadow: none; + outline: none; + display: inline; + color: #332e29; + text-decoration: none; +} +.block.related .action.select:focus, +.block.related .action.select:active, +.block.related .action.select:hover { + color: #da370a; +} +.block.related .field.choice.related { + margin: 0 0 10px; +} +.block.widget.viewed, +.block.crosssell, +.block.upsell, +.block.related, +.block.widget.new, +.block.widget.compared { + clear: both; + margin: 30px 0; + padding-top: 25px; + border-top: 1px solid #e5e5e5; +} +.block.widget.viewed .products.list, +.block.crosssell .products.list, +.block.upsell .products.list, +.block.related .products.list, +.block.widget.new .products.list, +.block.widget.compared .products.list { + clear: both; + margin: 0 -20px; +} +.block.widget.viewed .products.list .item.product, +.block.crosssell .products.list .item.product, +.block.upsell .products.list .item.product, +.block.related .products.list .item.product, +.block.widget.new .products.list .item.product, +.block.widget.compared .products.list .item.product { + float: left; + width: 33.33333333333333%; + margin-right: 0%; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + display: inline-block; + vertical-align: top; + margin: 0; + padding: 20px; + float: none; +} +.col3-layout .block.widget.viewed .products.list .item.product, +.col3-layout .block.crosssell .products.list .item.product, +.col3-layout .block.upsell .products.list .item.product, +.col3-layout .block.related .products.list .item.product, +.col3-layout .block.widget.new .products.list .item.product, +.col3-layout .block.widget.compared .products.list .item.product { + width: 50%; +} +.block.widget.viewed .products.list .item.product .product.photo, +.block.crosssell .products.list .item.product .product.photo, +.block.upsell .products.list .item.product .product.photo, +.block.related .products.list .item.product .product.photo, +.block.widget.new .products.list .item.product .product.photo, +.block.widget.compared .products.list .item.product .product.photo { + float: left; + margin-right: 20px; +} +.block.widget.viewed .products.list .item.product .product.details, +.block.crosssell .products.list .item.product .product.details, +.block.upsell .products.list .item.product .product.details, +.block.related .products.list .item.product .product.details, +.block.widget.new .products.list .item.product .product.details, +.block.widget.compared .products.list .item.product .product.details { + overflow: hidden; +} +.block.widget.viewed .products.list .item.product .product.name, +.block.crosssell .products.list .item.product .product.name, +.block.upsell .products.list .item.product .product.name, +.block.related .products.list .item.product .product.name, +.block.widget.new .products.list .item.product .product.name, +.block.widget.compared .products.list .item.product .product.name, +.block.widget.viewed .products.list .item.product .price-box, +.block.crosssell .products.list .item.product .price-box, +.block.upsell .products.list .item.product .price-box, +.block.related .products.list .item.product .price-box, +.block.widget.new .products.list .item.product .price-box, +.block.widget.compared .products.list .item.product .price-box { + margin: 0 0 10px; +} +.block.widget.viewed .products.list .item.product .addto.links .action:after, +.block.crosssell .products.list .item.product .addto.links .action:after, +.block.upsell .products.list .item.product .addto.links .action:after, +.block.related .products.list .item.product .addto.links .action:after, +.block.widget.new .products.list .item.product .addto.links .action:after, +.block.widget.compared .products.list .item.product .addto.links .action:after { + content: ''; + display: block; +} +.block.widget.viewed .products.list .item.product .actions, +.block.crosssell .products.list .item.product .actions, +.block.upsell .products.list .item.product .actions, +.block.related .products.list .item.product .actions, +.block.widget.new .products.list .item.product .actions, +.block.widget.compared .products.list .item.product .actions { + visibility: hidden; +} +.block.widget.viewed .products.list .item.product .actions .primary, +.block.crosssell .products.list .item.product .actions .primary, +.block.upsell .products.list .item.product .actions .primary, +.block.related .products.list .item.product .actions .primary, +.block.widget.new .products.list .item.product .actions .primary, +.block.widget.compared .products.list .item.product .actions .primary { + margin: 0 0 10px; +} +.block.widget.viewed .products.list .item.product:hover .actions, +.block.crosssell .products.list .item.product:hover .actions, +.block.upsell .products.list .item.product:hover .actions, +.block.related .products.list .item.product:hover .actions, +.block.widget.new .products.list .item.product:hover .actions, +.block.widget.compared .products.list .item.product:hover .actions { + visibility: visible; +} +.block.crosssell .products.list.items.crosssell { + margin: 0 -13px; +} +.block.crosssell .products.list.items.crosssell .item.product { + float: left; + width: 16.666666666666664%; + margin-right: 0%; + padding: 13px; + margin-bottom: 90px; +} +.block.crosssell .products.list.items.crosssell .item.product .product.photo { + float: none; + display: block; + margin: 0 0 10px; +} +.block.crosssell .products.list.items.crosssell .item.product .actions { + position: absolute; +} +.block.widget.viewed .products.list.items.widget-viewed-grid .item.product { + float: left; + width: 16.666666666666664%; + margin-right: 0%; + float: none; + display: inline-block; +} +.col2-left-layout .block.widget.viewed .products.list.items.widget-viewed-grid .item.product, +.col2-right-layout .block.widget.viewed .products.list.items.widget-viewed-grid .item.product { + width: 19.99%; +} +.col3-layout .block.widget.viewed .products.list.items.widget-viewed-grid .item.product { + width: 25%; +} +.block.widget.viewed .products.list.items.widget-viewed-grid .item.product .product.photo { + float: none; + display: block; + margin: 0 0 10px; +} +.block.widget.viewed .products.list.items.widget-viewed-list .item.product { + float: left; + width: 100%; + margin-right: 0%; + float: none; + display: inline-block; +} +.block.widget.compared .products.list.items.widget-compared-grid .item.product { + float: left; + width: 16.666666666666664%; + margin-right: 0%; + float: none; + display: inline-block; +} +.col2-left-layout .block.widget.compared .products.list.items.widget-compared-grid .item.product, +.col2-right-layout .block.widget.compared .products.list.items.widget-compared-grid .item.product { + width: 19.99%; +} +.col3-layout .block.widget.compared .products.list.items.widget-compared-grid .item.product { + width: 25%; +} +.block.widget.compared .products.list.items.widget-compared-grid .item.product .product.photo { + float: none; + display: block; + margin: 0 0 10px; +} +.block.widget.compared .products.list.items.widget-compared-list .item.product { + float: left; + width: 100%; + margin-right: 0%; + float: none; + display: inline-block; +} +.block.widget.new .products.list.items.widget-new-grid .item.product { + width: 20%; + float: none; + display: inline-block; +} +.col2-left-layout .block.widget.new .products.list.items.widget-new-grid .item.product, +.col2-right-layout .block.widget.new .products.list.items.widget-new-grid .item.product { + float: left; + width: 25%; + margin-right: 0%; + float: none; + display: inline-block; +} +.col3-layout .block.widget.new .products.list.items.widget-new-grid .item.product { + float: left; + width: 33.33333333333333%; + margin-right: 0%; + float: none; + display: inline-block; +} +.block.widget.new .products.list.items.widget-new-grid .item.product .product.photo { + float: none; + display: block; + margin: 0 0 10px; +} +.block.widget.new .products.list.items.widget-new-list .item.product { + float: left; + width: 100%; + margin-right: 0%; + float: none; + display: inline-block; +} +.product.info.detailed + .block.upsell, +.product.info.detailed + .block.related { + margin-top: 70px; + clear: none; + float: right; + width: 140px; + border-top: 0; + padding-top: 0; + padding-left: 25px; + border-left: 1px solid #e5e5e5; +} +.product.info.detailed + .block.upsell .products.list, +.product.info.detailed + .block.related .products.list { + margin: 0; +} +.product.info.detailed + .block.upsell .products.list .item.product, +.product.info.detailed + .block.related .products.list .item.product { + display: block; + width: auto; + padding: 13px 0; +} +.product.info.detailed + .block.upsell .products.list .item.product .product.photo, +.product.info.detailed + .block.related .products.list .item.product .product.photo { + float: none; + display: block; + margin: 0 0 10px; +} +.block.widget .pager { + float: right; +} +.block.widget .pager .amount { + float: left; + line-height: 25px; + margin: 2px 15px 0 0; + display: none; +} +.block.widget .pager .text { + display: none; +} +.block.widget .pages { + margin-left: 15px; + float: left; +} +.block.widget .pages .label { + line-height: 25px; + display: inline-block; +} +.block.widget .pages strong.label { + font-weight: 400; + float: left; + line-height: 25px; + margin-top: 2px; + margin-right: 5px; + display: none; +} +.block.widget .pages input { + width: 30px; + margin: 0 5px; + text-align: center; + padding: 0 5px; + height: 25px; + line-height: 25px; +} +.block.widget .pages > ol { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; + display: inline-block; + vertical-align: top; + margin-top: 2px; + line-height: 25px; + vertical-align: middle; +} +.block.widget .pages > ol li { + display: inline; +} +.block.widget .pages > ol strong, +.block.widget .pages > ol a { + padding: 0 3px; +} +.block.widget .pages > ol strong { + font-weight: 400; + color: #da370a; +} +.block.widget .action.next, +.block.widget .action.previous { + overflow: hidden; + display: inline-block; + vertical-align: middle; +} +.block.widget .action.next span, +.block.widget .action.previous span { + color: #c2c2c2; + width: 16px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; +} +.block.widget .action.next span:after, +.block.widget .action.previous span:after { + font-family: "icons"; + font-size: 16px; + line-height: 16px; + height: 16px; + margin: 0; + overflow: hidden; + content: ''; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.block.widget .action.next span:active, +.block.widget .action.previous span:active { + outline: 0; +} +.block.widget .action.next span:after, +.block.widget .action.previous span:after { + text-indent: 0; + display: block; + margin: 0; +} +.block.widget .action.next span:after { + content: "\e016"; +} +.block.widget .action.previous span:after { + content: "\e017"; +} +/* + Magento_Catalog + Layered Navigation +-------------------------------------- */ +.block.filter .subtitle { + display: none; +} +.block.filter > .content { + padding: 0; +} +.block.filter .filtered .item { + border-top: 1px solid #c2c2c2; + padding: 2px 0 5px; + margin: 0 0 5px; + position: relative; + z-index: 1; +} +.block.filter .filtered .label { + font-weight: 600; + text-transform: uppercase; + display: block; +} +.block.filter .action.remove { + overflow: hidden; + display: inline-block; + padding: 4px; + position: absolute; + top: -1px; + right: 0; + background: #c2c2c2; +} +.block.filter .action.remove span { + color: #fff; + width: 13px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; +} +.block.filter .action.remove span:after { + font-family: "icons"; + font-size: 13px; + line-height: 13px; + height: 13px; + margin: 0; + overflow: hidden; + content: "\e012"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.block.filter .action.remove span:active { + outline: 0; +} +.block.filter .action.remove span:after { + text-indent: 0; + display: block; + margin: 0; +} +.block.filter .actions { + margin-bottom: 30px; +} +.block.filter .action.reset { + font-size: 12px; + text-transform: lowercase; + text-decoration: underline; +} +.block.filter dt { + text-transform: uppercase; +} +.block.filter dd { + margin: 0; + padding: 15px 0 25px; +} +.block.filter .count { + font-size: 12px; +} +.block.filter .count:before { + content: ' ('; +} +.block.filter .count:after { + content: ')'; +} +/* + Magento_Catalog + Product Listing +-------------------------------------- */ +.toolbar { + clear: both; + margin: 17px 0; + *zoom: 1; +} +.toolbar:first-child { + margin-top: 0; +} +.toolbar.alternative { + direction: rtl; +} +.toolbar.alternative .pager { + direction: ltr; +} +.toolbar.alternative .settings { + display: inline; + direction: ltr; +} +.toolbar.alternative .pages, +.toolbar.alternative .amount, +.toolbar.alternative .limiter { + border-left: 1px solid #e5e5e5; + padding: 2px 0 2px 15px; +} +.toolbar .amount { + display: none; +} +.toolbar:before, +.toolbar:after { + content: ""; + display: table; +} +.toolbar:after { + clear: both; +} +.toolbar .settings { + display: inline; +} +.toolbar .modes { + margin-left: 30px; + display: inline-block; + margin-top: 3px; + margin-right: 14px; + vertical-align: top; +} +.toolbar .modes .label { + display: none; +} +.toolbar .limiter, +.toolbar .sorter { + *zoom: 1; + padding: 2px 0; + float: left; + display: inline-block; +} +.toolbar .limiter:before, +.toolbar .sorter:before, +.toolbar .limiter:after, +.toolbar .sorter:after { + content: ""; + display: table; +} +.toolbar .limiter:after, +.toolbar .sorter:after { + clear: both; +} +.toolbar .limiter select, +.toolbar .sorter select { + margin-top: 1px; + margin-right: 5px; +} +.toolbar .options { + float: left; + border: 1px solid #e5e5e5; + white-space: nowrap; + height: 23px; + line-height: 23px; + overflow: visible; + display: block; + padding: 0 7px; +} +.toolbar .options .current { + font-weight: 400; + float: left; + padding-right: 7px; +} +.toolbar .options ul { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; + height: 0; + overflow: hidden; + clear: both; + padding: 0 30px 0 7px; + margin: 0 -8px; + border: 1px solid #c2c2c2; + visibility: hidden; + top: -24px; + background: #fff; + position: relative; + z-index: 2; +} +.toolbar .options .action.switch { + float: right; + margin-top: 4px; +} +.toolbar .options .selected { + color: #da370a; +} +.toolbar .options.active ul { + height: auto; + visibility: visible; +} +.toolbar .pager { + float: right; +} +.toolbar .pager .amount { + float: left; + line-height: 25px; + margin: 2px 15px 0 0; +} +.toolbar .pager .text { + display: none; +} +.toolbar .pages { + margin-left: 15px; + float: left; +} +.toolbar .pages .label { + line-height: 25px; + display: inline-block; +} +.toolbar .pages strong.label { + font-weight: 400; + float: left; + line-height: 25px; + margin-top: 2px; + margin-right: 5px; + display: none; +} +.toolbar .pages input { + width: 30px; + margin: 0 5px; + text-align: center; + padding: 0 5px; + height: 25px; + line-height: 25px; +} +.toolbar .pages > ol { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; + display: inline-block; + vertical-align: top; + margin-top: 2px; + line-height: 25px; + vertical-align: middle; +} +.toolbar .pages > ol li { + display: inline; +} +.toolbar .pages > ol strong, +.toolbar .pages > ol a { + padding: 0 3px; +} +.toolbar .pages > ol strong { + font-weight: 400; + color: #da370a; +} +/* + Magento_Catalog + Product List +-------------------------------------- */ +.products.wrapper .products.list .item { + z-index: 1; + position: relative; + border: 1px solid transparent; + background: transparent; +} +.products.wrapper .products.list .item .product.photo { + display: block; + margin-bottom: 10px; + text-align: center; +} +.products.wrapper .products.list .item .product.photo > .photo { + display: block; + margin: 0 auto; +} +.products.wrapper .products.list .item:hover { + border: 1px solid #c2c2c2; + background: #f8f8f8; + z-index: 99; +} +.products.wrapper .products.list .item:hover .product.actions { + opacity: 1; + visibility: hidden; +} +.products.wrapper .products.list .item:hover .product.actions .action.tocart, +.products.wrapper .products.list .item:hover .product.actions .secondary { + visibility: visible; +} +.products.wrapper .products.list .item .product.actions { + opacity: 0.8; + visibility: hidden; +} +.products.wrapper .products.list .item .product.actions .action.tocart, +.products.wrapper .products.list .item .product.actions .secondary { + visibility: hidden; +} +.products.wrapper .products.list .item .price-box, +.products.wrapper .products.list .item .product.reviews { + display: block; + margin-bottom: 7px; +} +.products.wrapper .products.list .item .secondary { + border: solid #c2c2c2; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; + position: absolute; +} +.products.wrapper .products.list .item .secondary .action { + padding: 10px; + white-space: normal; + vertical-align: top; + display: inline-block; + line-height: 1; +} +.products.wrapper.grid { + margin-bottom: 20px; +} +.products.wrapper.grid .products.list .item.product { + float: left; + width: 16.666666666666664%; + margin-right: 0%; + display: inline-block; + float: none; + padding: 9px 9px 9px; + vertical-align: top; +} +.col2-left-layout .products.wrapper.grid .products.list .item.product, +.col2-right-layout .products.wrapper.grid .products.list .item.product { + float: left; + width: 25%; + margin-right: 0%; + display: inline-block; + float: none; + margin-bottom: 30px; +} +.col3-layout .products.wrapper.grid .products.list .item.product { + float: left; + width: 33.33333333333333%; + margin-right: 0%; + display: inline-block; + float: none; + margin-bottom: 30px; +} +.products.wrapper.grid .products.list .secondary { + border-width: 1px; + background: #f8f8f8; + top: 100%; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + left: -1px; + right: -1px; +} +.products.wrapper.grid .products.list .secondary .action { + padding: 10px 0; + text-align: center; + width: 49%; +} +.products.wrapper.list .products.list { + margin-bottom: 20px; +} +.products.wrapper.list .products.list .item.product { + *zoom: 1; + display: block; + border-bottom: 1px solid #c2c2c2; + padding: 9px 9px 9px 9px; + margin-bottom: -1px; +} +.products.wrapper.list .products.list .item.product:before, +.products.wrapper.list .products.list .item.product:after { + content: ""; + display: table; +} +.products.wrapper.list .products.list .item.product:after { + clear: both; +} +.products.wrapper.list .products.list .item.product .product.details { + padding-bottom: 40px; +} +.products.wrapper.list .products.list .product.details { + display: table; +} +.products.wrapper.list .products.list .product.photo { + float: left; + margin-right: 9px; + margin-bottom: 0; +} +.products.wrapper.list .products.list .secondary { + bottom: 0; + top: auto !important; + margin-left: 18px; + border-width: 1px 0 0; + right: 20px; +} +.products.wrapper.list .products.list .product.description { + margin: 9px 0; +} +/* + General product item styling +-------------------------------------- */ +.product.name { + color: #675f55; + font-weight: 600; + line-height: 1.2; + display: block; + margin-bottom: 10px; +} +.price-box p, +.pricing p { + margin: 5px 0; +} +.price-box p:first-child, +.pricing p:first-child { + margin-top: 0; +} +.price-box p:last-child, +.pricing p:last-child { + margin-bottom: 0; +} +.stock[title] { + line-height: 16px; +} +.stock[title] span:before { + content: ''; + line-height: 16px; + background: #42b649; + display: inline-block; + border-radius: 5px; + width: 10px; + height: 10px; + margin-right: 5px; + vertical-align: middle; +} +.stock[title].unavailable { + color: #c2c2c2; +} +.stock[title].unavailable span:before { + background: #c2c2c2; +} +.product.item .product.description { + font-size: 12px; +} +.action.tocart { + padding: 5px 11px; +} +.block .product.actions .action.tocart { + display: inline-block; + margin: 10px 0; +} +.action.tocompare, +.action.towishlist { + font-size: 12px; +} +.action.tocompare span:before, +.action.towishlist span:before { + content: "\002B\00A0"; +} +.item.product .action.tocompare, +.item.product .action.towishlist { + margin-left: 0; +} +/* + Magento_Catalog + Product View +-------------------------------------- */ +.fieldset { + border: 0; + margin: 30px 10px 30px 30px; + padding: 0; + letter-spacing: -0.31em; + word-spacing: -0.43em; +} +.fieldset > * { + letter-spacing: normal; + word-spacing: normal; +} +.fieldset > .legend { + float: left; + font: 400 20px/1.2 "sourcesanspro"; + margin: -30px 30px 50px -30px; + width: 100%; +} +.fieldset > .legend + br { + display: block; + *zoom: 1; +} +.fieldset > .legend + br:before, +.fieldset > .legend + br:after { + content: ""; + display: table; +} +.fieldset > .legend + br:after { + clear: both; +} +.fieldset > .field { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + margin: 0 0 20px; +} +.fieldset > .field > .label { + display: block; + padding-bottom: 5px; +} +.fieldset > .field .nested .field { + margin: 5px 0; +} +.fieldset > .field.choice > .control { + width: auto; +} +.fieldset > .field.choice > .label { + display: inline; +} +.fieldset > .field.choice > input { + vertical-align: top; + margin-top: 2px; + margin-right: 5px; +} +.fieldset > .field.required > .label > span:first-child:after { + content: '*'; + color: #da370a; +} +.fieldset > .field .addon { + display: table; + padding: 0; + width: 100%; +} +.fieldset > .field .addon textarea, +.fieldset > .field .addon select, +.fieldset > .field .addon input { + box-shadow: none; + display: table-cell; + margin: 0; + width: 100%; +} +.fieldset > .field .addon .addbefore, +.fieldset > .field .addon .addafter { + height: 0; + white-space: nowrap; + display: inline-block; + display: table-cell; + vertical-align: middle; + width: 1px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + background: #ffffff; + border: 1px solid #c2c2c2; + border-radius: 3px; + font: 400 14px "sourcesanspro"; + /* Prevent background color leak outs */ + + background-clip: padding-box; + outline: none; + height: 32px; + line-height: 1; + padding: 0 10px; +} +.fieldset > .field .addon .addbefore:focus, +.fieldset > .field .addon .addafter:focus { + border-color: #999999; +} +.control .fieldset > .field .addon .addbefore, +.control .fieldset > .field .addon .addafter { + width: 100%; +} +.fieldset > .field .addon .addbefore:disabled, +.fieldset > .field .addon .addafter:disabled { + opacity: 0.5; +} +.fieldset > .field .addon .addbefore::-webkit-input-placeholder, +.fieldset > .field .addon .addafter::-webkit-input-placeholder { + line-height: 1.333; +} +.fieldset > .field .addon .addbefore:-ms-input-placeholder, +.fieldset > .field .addon .addafter:-ms-input-placeholder { + line-height: 1.333; +} +.eq-ie8 .fieldset > .field .addon .addbefore, +.eq-ie8 .fieldset > .field .addon .addafter { + padding-top: 8px; +} +.fieldset > .field .note { + font-size: 12px; + margin-top: 3px; + padding-left: 15px; +} +.fieldset > .field .note:before { + border-bottom: 5px solid #675f55; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + content: ''; + display: inline-block; + font-size: 0; + line-height: 0; + margin: 4px 0 0 -14px; + position: absolute; + vertical-align: top; + width: 0; +} +.product.info.main { + float: right; + width: 430px; + padding-bottom: 30px; +} +.col2-left-layout .product.info.main, +.col2-right-layout .product.info.main { + width: 370px; +} +.col3-layout .product.info.main { + float: none; + width: 100%; +} +.product.info.main .price-box { + font-size: 20px; + padding-bottom: 10px; + margin: 15px 0; + line-height: 1.2; + font-weight: 200; +} +.product.info.main .page.title.product + .price-box { + border-bottom: 1px solid #e5e5e5; +} +.product.info.main p { + margin: 5px 0; +} +.product.info.main .old-price { + font-size: 16px; +} +.product.info.main .old-price .price { + text-decoration: line-through; +} +.product.info.main .special-price { + color: #da370a; +} +.product.info.main .stock { + margin: 15px 0; +} +.product.info.main .product.options.bottom .price-box { + display: none; +} +.product.info.main .product.addto.links { + margin: 15px 0 0; + padding-top: 10px; + border-top: 1px solid #e5e5e5; +} +.product.info.main .product.addto.links .action { + float: left; + margin-right: 15px; +} +.product.main.info .product.options.wrapper .field { + margin: 0 0 10px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + margin: 0 0 20px; +} +.product.main.info .product.options.wrapper .field:last-child { + margin-bottom: 0; +} +.product.main.info .product.options.wrapper .field .nested { + padding: 0 0 0; +} +.product.main.info .product.options.wrapper .field .nested .field { + margin: 5px 0; +} +.product.main.info .product.options.wrapper .field > .label { + display: block; + padding-bottom: 5px; +} +.product.main.info .product.options.wrapper .field .nested .field { + margin: 5px 0; +} +.product.main.info .product.options.wrapper .field.choice > .control { + width: auto; +} +.product.main.info .product.options.wrapper .field.choice > .label { + display: inline; +} +.product.main.info .product.options.wrapper .field.choice > input { + vertical-align: top; + margin-top: 2px; + margin-right: 5px; +} +.product.main.info .product.options.wrapper .field.required > .label > span:first-child:after { + content: '*'; + color: #da370a; +} +.product.main.info .product.options.wrapper .field .addon { + display: table; + padding: 0; + width: 100%; +} +.product.main.info .product.options.wrapper .field .addon textarea, +.product.main.info .product.options.wrapper .field .addon select, +.product.main.info .product.options.wrapper .field .addon input { + box-shadow: none; + display: table-cell; + margin: 0; + width: 100%; +} +.product.main.info .product.options.wrapper .field .addon .addbefore, +.product.main.info .product.options.wrapper .field .addon .addafter { + height: 0; + white-space: nowrap; + display: inline-block; + display: table-cell; + vertical-align: middle; + width: 1px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + background: #ffffff; + border: 1px solid #c2c2c2; + border-radius: 3px; + font: 400 14px "sourcesanspro"; + /* Prevent background color leak outs */ + + background-clip: padding-box; + outline: none; + height: 32px; + line-height: 1; + padding: 0 10px; +} +.product.main.info .product.options.wrapper .field .addon .addbefore:focus, +.product.main.info .product.options.wrapper .field .addon .addafter:focus { + border-color: #999999; +} +.control .product.main.info .product.options.wrapper .field .addon .addbefore, +.control .product.main.info .product.options.wrapper .field .addon .addafter { + width: 100%; +} +.product.main.info .product.options.wrapper .field .addon .addbefore:disabled, +.product.main.info .product.options.wrapper .field .addon .addafter:disabled { + opacity: 0.5; +} +.product.main.info .product.options.wrapper .field .addon .addbefore::-webkit-input-placeholder, +.product.main.info .product.options.wrapper .field .addon .addafter::-webkit-input-placeholder { + line-height: 1.333; +} +.product.main.info .product.options.wrapper .field .addon .addbefore:-ms-input-placeholder, +.product.main.info .product.options.wrapper .field .addon .addafter:-ms-input-placeholder { + line-height: 1.333; +} +.eq-ie8 .product.main.info .product.options.wrapper .field .addon .addbefore, +.eq-ie8 .product.main.info .product.options.wrapper .field .addon .addafter { + padding-top: 8px; +} +.product.main.info .product.options.wrapper .field .note { + font-size: 12px; + margin-top: 3px; + padding-left: 15px; +} +.product.main.info .product.options.wrapper .field .note:before { + border-bottom: 5px solid #675f55; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + content: ''; + display: inline-block; + font-size: 0; + line-height: 0; + margin: 4px 0 0 -14px; + position: absolute; + vertical-align: top; + width: 0; +} +.product.main.info .product.options.wrapper .field:not(.choice) > .label { + text-transform: uppercase; + font-weight: 600; + padding: 0 0 5px; +} +.type-configurable .product.main.info .product.options.wrapper select { + min-width: 40%; + width: auto; + padding: 2px; +} +.product.main.info .product.options.wrapper .fieldset { + margin: 0; +} +.product.main.info .product.options.wrapper .fieldset .field.required .control .field.choice .label span:after { + content: ""; +} +.product.main.info .product.options.wrapper .fieldset .field.date input[type="text"] { + width: auto; +} +.product.main.info .product.options.wrapper .fieldset .datetime-picker + .ui-datepicker-trigger { + margin: 0 15px 0 7px; +} +.action.primary.customize, +.action.primary.tocart { + line-height: 16px; + padding: 9px 15px; +} +.action.primary.customize span, +.action.primary.tocart span { + font-weight: 400; + font-size: 16px; +} +.product.media { + float: left; + width: 540px; + padding-bottom: 30px; +} +.col2-left-layout .product.media, +.col2-right-layout .product.media { + width: 400px; +} +.col3-layout .product.media { + float: none; + width: 100%; +} +.box.tocart { + *zoom: 1; + margin: 15px 0; +} +.box.tocart:before, +.box.tocart:after { + content: ""; + display: table; +} +.box.tocart:after { + clear: both; +} +.box.tocart .field { + float: left; + padding-right: 10px; +} +.box.tocart .label { + display: block; + text-align: left; + font-weight: 600; + text-transform: uppercase; + line-height: 25px; +} +.box.tocart .control { + width: 60px; + text-align: center; +} +.box.tocart .actions { + float: left; + padding-top: 24px; +} +.box.tocart .qty { + text-align: center; +} +.prices.tier { + padding: 20px; + margin: 15px 0; + background: #f8f8f8; +} +.prices.tier strong { + font-weight: 400; +} +.product.social.links { + float: right; + text-align: right; +} +.action.mailto span { + width: 16px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; + color: #c2c2c2; +} +.action.mailto span:after { + font-family: "icons"; + font-size: 16px; + line-height: 16px; + height: 16px; + margin: 0; + overflow: hidden; + content: "\e001"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.action.mailto span:active { + outline: 0; +} +.action.mailto span:after { + text-indent: 0; + display: block; + margin: 0; +} +.product.photo.thumbs { + float: left; + padding-left: 15px; +} +.product.photo.thumbs .title { + display: none; +} +.product.photo.thumbs .item.thumb { + margin-bottom: 8px; +} +.product.photo.thumbs .item.thumb img { + border: 1px solid transparent; +} +.product.photo.thumbs .item.thumb .active img { + border: 1px solid #837d75; +} +.product.photo.main { + float: left; + text-align: center; +} +.product.photo.main .notice { + font-size: 11px; +} +.product.attibute.sku { + font-size: 12px; +} +.product.attibute.sku .value { + display: inline; +} +.product.attibute.sku .type:after { + content: '#'; +} +@media only screen and (max-width: 99999px) { + .product.data { + float: left; + width: 83.33333333333334%; + margin-right: 0%; + *zoom: 1; + position: relative; + z-index: 1; + } + .product.data:before, + .product.data:after { + content: ""; + display: table; + } + .product.data:after { + clear: both; + } + .product.data > .item.title { + float: left; + } + .product.data > .item.title > .switch { + display: block; + position: relative; + top: 1px; + z-index: 2; + } + .product.data > .item.content { + width: 100%; + float: right; + margin-left: -100%; + display: none; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + } + .product.data > .item.content.active { + display: block; + } + .product.data .tabs > .term-content.active { + border: 1px solid #BFBFBF; + color: #808080; + display: block; + } + .product.data > .item.title { + margin-right: 1px; + min-height: 35px; + } + .product.data > .item.title > .switch { + font-size: 14px; + line-height: 1; + font-weight: 600; + text-decoration: none; + padding: 11px 11px 8px; + border: 2px solid #e5e5e5; + background: rgba(0, 0, 0, 0.03); + border-bottom: none; + text-transform: uppercase; + border-radius: 4px 4px 0 0; + } + .product.data > .item.title:not(.disabled) > .switch:active, + .product.data > .item.title:not(.disabled) > .switch:focus, + .product.data > .item.title:not(.disabled) > .switch:hover, + .product.data > .item.title.active > .switch { + background: #fff; + border-width: 3px; + padding: 10px 10px 8px; + outline: none; + } + .product.data > .item.title.active > .switch { + padding: 10px 20px 11px !important; + } + .product.data > .item.content { + *zoom: 1; + margin-top: 36px; + padding: 20px; + } + .product.data > .item.content:before, + .product.data > .item.content:after { + content: ""; + display: table; + } + .product.data > .item.content:after { + clear: both; + } + .product.data > .item.content:before { + content: ''; + border-top: 3px solid #e5e5e5; + width: 100%; + display: block; + position: absolute; + left: 0; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + margin: -20px 0 20px; + } + .temp-upsell-placeholder { + float: left; + width: 16.666666666666664%; + margin-right: 0%; + background: red; + height: 200px; + margin-top: 50px; + } +} +@media only screen and (max-width: 768px) { + .product.data { + float: left; + width: 100%; + margin-right: 0%; + margin: 0; + padding: 0; + } + .product.data > .item.title { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + width: 100%; + } + .product.data > .item.title > .item.switch { + display: block; + } + .product.data > .item.content { + *zoom: 1; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + display: none; + } + .product.data > .item.content:before, + .product.data > .item.content:after { + content: ""; + display: table; + } + .product.data > .item.content:after { + clear: both; + } + .product.data > .item.content.active { + display: block; + } + .product.data > .item.title { + margin: 3px 0 0; + } + .product.data > .item.title > .switch { + display: block; + font-size: 14px; + line-height: 1; + font-weight: 600; + text-decoration: none; + padding: 11px; + border: 2px solid #e5e5e5; + background: #f8f8f8; + text-transform: uppercase; + border-radius: 4px; + } + .product.data > .item.title:not(.disabled) > .switch:active, + .product.data > .item.title:not(.disabled) > .switch:focus, + .product.data > .item.title:not(.disabled) > .switch:hover, + .product.data > .item.title.active > .switch { + background: #fff; + border-width: 3px; + padding: 10px; + outline: none; + } + .product.data > .item.title.active > .switch { + border-radius: 4px 4px 0 0; + } + .product.data > .item.content { + margin: 0; + padding: 20px; + background: #fff; + } + .temp-upsell-placeholder { + float: left; + width: 100%; + margin-right: 0%; + background: red; + height: 200px; + margin-top: 20px; + } +} +/* + Magento_Bundle + Product View +-------------------------------------- */ +body.type-bundle { + overflow-x: hidden; +} +@media only screen and (max-width: 768px) { + body.type-bundle { + overflow: auto; + } + body.type-bundle .customize:before { + left: -10px; + right: -10px; + } +} +.product.info.main .action.primary.customize { + margin: 40px 0; +} +.bundle.options.container { + margin: 45px 0; + clear: both; + position: relative; + z-index: 1; +} +.bundle.options.container:before { + position: relative; + z-index: 1; + content: ''; + display: block; + position: absolute; + left: -999em; + right: -999em; + z-index: -1; + background: #f8f8f8; + top: 0; + bottom: 0; +} +.bundle.options.container .product.add.form { + *zoom: 1; + position: relative; + z-index: 1; + display: none; + padding: 45px 0; +} +.bundle.options.container .product.add.form:before, +.bundle.options.container .product.add.form:after { + content: ""; + display: table; +} +.bundle.options.container .product.add.form:after { + clear: both; +} +.bundle.options.container .product.options.wrapper { + float: left; + width: 500px; +} +.col2-left-layout .bundle.options.container .product.options.wrapper, +.col2-right-layout .bundle.options.container .product.options.wrapper { + width: 450px; +} +.col3-layout .bundle.options.container .product.options.wrapper { + width: 360px; +} +.bundle.options.container .product.options.bottom { + float: left; + width: 500px; + clear: left; +} +.fieldset.bundle.options { + border: 0; + padding: 0; + margin: 0; +} +.fieldset.bundle.options .legend { + font-size: 26px; + font-weight: 200; + float: left; + margin-bottom: 20px; +} +.fieldset.bundle.options .legend + br { + display: block; + clear: both; +} +.fieldset.bundle.options .bundle-slide-back { + float: right; +} +.fieldset.bundle.options > .field { + margin: 0 0 50px; + padding: 20px; + background: #ffffff; +} +.fieldset.bundle.options > .field > .label { + font-size: 20px; + font-weight: 200; + display: block; + margin-bottom: 20px; +} +.fieldset.bundle.options > .field:last-child { + margin-bottom: 0; +} +.fieldset.bundle.options .nested .field { + margin: 10px 0; +} +.fieldset.bundle.options .nested .field.qty { + margin-top: 20px; +} +.fieldset.bundle.options .nested .field.qty .label { + display: inline-block; + vertical-align: middle; +} +.fieldset.bundle.options .nested .field.qty .label span:after { + content: ':'; +} +.fieldset.bundle.options .nested .field.qty .control { + width: 60px; + display: inline-block; + vertical-align: middle; +} +.fieldset.bundle.options .nested .field.qty input { + text-align: center; +} +.product.options.wrapper .nested.mage-error-group { + position: relative; + z-index: 1; +} +.product.options.wrapper .nested.mage-error-group .field { + z-index: 2; + position: relative; +} +.product.options.wrapper .nested.mage-error-group:before { + z-index: 1; + border: 1px solid #da370a !important; + background: rgba(218, 55, 10, 0.040000000000000036); + content: ''; + left: -8px; + right: -8px; + top: -5px; + bottom: -5px; + display: block; + position: absolute; +} +.block.bundle.summary { + background: #ffffff; + margin-top: 54px; + float: right; + position: relative; + width: 380px; +} +.col2-left-layout .block.bundle.summary, +.col2-right-layout .block.bundle.summary { + width: 320px; +} +.col3-layout .block.bundle.summary { + width: 230px; +} +.block.bundle.summary > .title { + font-weight: 400; + border-bottom: 3px solid #e5e5e5; + line-height: 1; + padding: 20px 20px 10px; + margin-bottom: 0; +} +.block.bundle.summary .photo { + float: left; + border: 1px solid #e5e5e5; + margin-right: 20px; +} +.block.bundle.summary .photo .photo { + float: none; + border: none; + margin-right: 0; +} +.block.bundle.summary > .content { + padding: 20px; +} +.block.bundle.summary .price-box { + *zoom: 1; + padding: 20px 0 0; + clear: both; + line-height: 24px; +} +.block.bundle.summary .price-box:before, +.block.bundle.summary .price-box:after { + content: ""; + display: table; +} +.block.bundle.summary .price-box:after { + clear: both; +} +.block.bundle.summary .price-box .price-label { + float: left; + font-size: 18px; + font-weight: 600; +} +.block.bundle.summary .price-box .full-product-price { + float: right; +} +.block.bundle.summary .price-box .full-product-price .price { + color: #da370a; + font-weight: 700; + font-size: 24px; +} +.block.bundle.summary .box.tocart { + padding: 10px 0 20px; + border-top: 1px solid #e5e5e5; + border-bottom: 1px solid #e5e5e5; +} +.block.bundle.summary .addto.links .action { + font-size: 14px; + margin-right: 20px; +} +.block.bundle.summary .addto.links .action:last-child { + margin-right: 0; +} +.block.bundle.summary .subtitle { + display: block; + margin: 20px -20px 0; + font-weight: 200; + font-size: 20px; + border-bottom: 3px solid #e5e5e5; + line-height: 1; + padding: 20px 20px 10px; + margin-bottom: 0; +} +.block.bundle.summary .bundle.summary div > ul { + list-style: none; + margin: 10px 0 0; + padding: 0; +} +.block.bundle.summary .bundle.summary div > ul > li { + margin: 0 0 10px; +} +.block.bundle.summary .bundle.summary div > ul > li > div > div { + margin: 0 0 5px; +} +.action.back.customization { + border: none; + border-radius: 0; + background: none; + margin: 0; + padding: 0; + box-shadow: none; + text-shadow: none; + outline: none; + display: inline; + color: #332e29; + text-decoration: none; + position: absolute; + top: 57px; + right: 0; +} +.action.back.customization:focus, +.action.back.customization:active, +.action.back.customization:hover { + color: #da370a; +} +/* + CMS +-------------------------------------- */ +img[align="left"] { + margin: 0 22px 22px 0; +} +img[align="right"] { + margin: 0 0 22px 22px; +} +.home.main.slider img { + width: 100%; + display: block; +} +/* + Magento_Customer +-------------------------------------- */ +.customer.welcome { + display: inline-block !important; + position: relative; + z-index: 1; + cursor: pointer; +} +.customer.welcome .menu > ul { + font-weight: 600; + font-size: 12px; + margin: 0; + position: absolute; + top: 100%; + margin-left: -11px; + float: left; + right: 0; + text-align: left; + background: #f8f8f8; + border: 1px solid #cacbc4; + visibility: hidden; + opacity: 0; + -webkit-transition: visibility 0s linear 0.2s; + -moz-transition: visibility 0s linear 0.2s; + transition: visibility 0s linear 0.2s; +} +.customer.welcome .menu > ul li { + margin: 15px; + display: block; + white-space: nowrap; +} +.customer.welcome.active { + z-index: 9999; +} +.customer.welcome.active .menu > ul { + visibility: visible; + opacity: 1; + -webkit-transition-delay: 0s; + -moz-transition-delay: 0s; + -ms-transition-delay: 0s; + -o-transition-delay: 0s; + transition-delay: 0s; +} +.header .content .customer.welcome .customer.name { + font-weight: 400; +} +.header .content .customer.welcome .customer.name span { + color: #837d75; +} +.header .content .customer.welcome .customer.name span:after { + font-family: "icons"; + font-size: 16px; + line-height: 16px; + height: 16px; + margin: 0; + overflow: hidden; + content: "\e02c"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.header .content .customer.welcome .customer.name span:after { + line-height: 14px; +} +.header .content .customer.welcome .customer.name:focus span, +.header .content .customer.welcome .customer.name:hover span, +.header .content .customer.welcome .customer.name.active span { + color: #675f55; + outline: 0; +} +.header .content .customer.welcome .customer.name.active span:after { + content: "\e029"; +} +.customer.welcome + li { + display: none; +} +.customer.welcome + li { + display: none !important; +} +.login.container { + *zoom: 1; + background: #f8f8f8; + padding: 40px; + position: relative; + z-index: 1; + padding-bottom: 150px; +} +.login.container:before, +.login.container:after { + content: ""; + display: table; +} +.login.container:after { + clear: both; +} +.login.container .block { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + float: left; + width: 50%; +} +.login.container .block > .title { + margin-bottom: 25px; +} +.login.container .block .actions { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + text-align: right; + position: absolute; + bottom: 140px; + width: 50%; + padding: 0 40px; +} +.login.container .block .actions .secondary { + margin-bottom: -2em; + margin-top: 0.8em; + line-height: 1.2em; + float: right; +} +.login.container .block.login { + padding-right: 90px; +} +.login.container .block.login .actions { + margin-left: -90px; +} +.login.container .block.new { + padding-left: 40px; +} +.login.container .block.new .actions { + margin-left: -40px; +} +.login.container .block.new:before { + content: ''; + border-left: 1px solid; + border-color: #d7d7d7; + position: absolute; + top: 40px; + margin-left: -40px; + bottom: 60px; +} +.form.login .fieldset.login { + margin: 30px 10px 30px 30px; + letter-spacing: -0.31em; + word-spacing: -0.43em; + margin: 0; + padding: 0; + border: 0; +} +.form.login .fieldset.login > * { + letter-spacing: normal; + word-spacing: normal; +} +.form.login .fieldset.login > .legend { + float: left; + font: 400 20px/1.2 "sourcesanspro"; + margin: -30px 30px 50px -30px; + width: 100%; +} +.form.login .fieldset.login > .legend + br { + display: block; + *zoom: 1; +} +.form.login .fieldset.login > .legend + br:before, +.form.login .fieldset.login > .legend + br:after { + content: ""; + display: table; +} +.form.login .fieldset.login > .legend + br:after { + clear: both; +} +.form.login .fieldset.login > .field { + *zoom: 1; +} +.form.login .fieldset.login > .field:before, +.form.login .fieldset.login > .field:after { + content: ""; + display: table; +} +.form.login .fieldset.login > .field:after { + clear: both; +} +.form.login .fieldset.login > .field > .control, +.form.login .fieldset.login > .field > .label { + margin: 0; + float: left; + width: 40%; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} +.form.login .fieldset.login > .field > .control { + width: 60%; +} +.form.login .fieldset.login > .field.no-label .control { + margin-left: 40%; +} +.form.login .fieldset.login .field { + margin: 0 0 10px; +} +.form.login .fieldset.login .field:last-child { + margin-bottom: 0; +} +.form.login .fieldset.login .field .nested { + padding: 0 0 0; +} +.form.login .fieldset.login .field .nested .field { + margin: 5px 0; +} +.form.login .fieldset.login .field .label { + padding-top: 7px; + padding-right: 10px; + text-align: right; +} +.action.reload { + border: none; + border-radius: 0; + background: none; + margin: 0; + padding: 0; + box-shadow: none; + text-shadow: none; + outline: none; + position: absolute; + background: #fff; + padding: 2px; +} +.action.reload span { + width: 22px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; + color: #da370a; + text-shadow: 0px 1px rgba(0, 0, 0, 0.4); +} +.action.reload span:after { + font-family: "icons"; + font-size: 22px; + line-height: 22px; + height: 22px; + margin: 0; + overflow: hidden; + content: "\e00a"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.action.reload span:active { + outline: 0; +} +.action.reload span:after { + text-indent: 0; + display: block; + margin: 0; +} +/* + Registration +-------------------------------------- */ +.form.send.friend .fieldset, +.form.address.edit .fieldset, +.form.edit.account .fieldset, +.form.search.advanced .fieldset, +.form.orders.search .fieldset, +.form.contact .fieldset, +.form.password.forget .fieldset, +.form.create.account .fieldset, +.form.wishlist.share .fieldset, +.form.password.reset .fieldset, +.form.paypal.review .fieldset { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + margin: 30px 10px 30px 30px; + padding: 0; + letter-spacing: -0.31em; + word-spacing: -0.43em; + width: 690px; + background: #f8f8f8; + padding: 30px 10px 30px 30px; + border: 0; + margin: 0 0 40px; + position: relative; + z-index: 1; +} +.form.send.friend .fieldset .field, +.form.address.edit .fieldset .field, +.form.edit.account .fieldset .field, +.form.search.advanced .fieldset .field, +.form.orders.search .fieldset .field, +.form.contact .fieldset .field, +.form.password.forget .fieldset .field, +.form.create.account .fieldset .field, +.form.wishlist.share .fieldset .field, +.form.password.reset .fieldset .field, +.form.paypal.review .fieldset .field { + display: inline-block; + padding-right: 20px; + vertical-align: top; + width: 50%; +} +.form.send.friend .fieldset .nested .field, +.form.address.edit .fieldset .nested .field, +.form.edit.account .fieldset .nested .field, +.form.search.advanced .fieldset .nested .field, +.form.orders.search .fieldset .nested .field, +.form.contact .fieldset .nested .field, +.form.password.forget .fieldset .nested .field, +.form.create.account .fieldset .nested .field, +.form.wishlist.share .fieldset .nested .field, +.form.password.reset .fieldset .nested .field, +.form.paypal.review .fieldset .nested .field { + width: 100%; +} +.form.send.friend .fieldset .actions, +.form.address.edit .fieldset .actions, +.form.edit.account .fieldset .actions, +.form.search.advanced .fieldset .actions, +.form.orders.search .fieldset .actions, +.form.contact .fieldset .actions, +.form.password.forget .fieldset .actions, +.form.create.account .fieldset .actions, +.form.wishlist.share .fieldset .actions, +.form.password.reset .fieldset .actions, +.form.paypal.review .fieldset .actions { + margin-right: 30px; +} +.form.send.friend .fieldset > *, +.form.address.edit .fieldset > *, +.form.edit.account .fieldset > *, +.form.search.advanced .fieldset > *, +.form.orders.search .fieldset > *, +.form.contact .fieldset > *, +.form.password.forget .fieldset > *, +.form.create.account .fieldset > *, +.form.wishlist.share .fieldset > *, +.form.password.reset .fieldset > *, +.form.paypal.review .fieldset > * { + letter-spacing: normal; + word-spacing: normal; +} +.form.send.friend .fieldset > .legend, +.form.address.edit .fieldset > .legend, +.form.edit.account .fieldset > .legend, +.form.search.advanced .fieldset > .legend, +.form.orders.search .fieldset > .legend, +.form.contact .fieldset > .legend, +.form.password.forget .fieldset > .legend, +.form.create.account .fieldset > .legend, +.form.wishlist.share .fieldset > .legend, +.form.password.reset .fieldset > .legend, +.form.paypal.review .fieldset > .legend { + float: left; + font: 400 20px/1.2 "sourcesanspro"; + margin: -30px 30px 50px -30px; + width: 100%; +} +.form.send.friend .fieldset > .legend + br, +.form.address.edit .fieldset > .legend + br, +.form.edit.account .fieldset > .legend + br, +.form.search.advanced .fieldset > .legend + br, +.form.orders.search .fieldset > .legend + br, +.form.contact .fieldset > .legend + br, +.form.password.forget .fieldset > .legend + br, +.form.create.account .fieldset > .legend + br, +.form.wishlist.share .fieldset > .legend + br, +.form.password.reset .fieldset > .legend + br, +.form.paypal.review .fieldset > .legend + br { + display: block; + *zoom: 1; +} +.form.send.friend .fieldset > .legend + br:before, +.form.address.edit .fieldset > .legend + br:before, +.form.edit.account .fieldset > .legend + br:before, +.form.search.advanced .fieldset > .legend + br:before, +.form.orders.search .fieldset > .legend + br:before, +.form.contact .fieldset > .legend + br:before, +.form.password.forget .fieldset > .legend + br:before, +.form.create.account .fieldset > .legend + br:before, +.form.wishlist.share .fieldset > .legend + br:before, +.form.password.reset .fieldset > .legend + br:before, +.form.paypal.review .fieldset > .legend + br:before, +.form.send.friend .fieldset > .legend + br:after, +.form.address.edit .fieldset > .legend + br:after, +.form.edit.account .fieldset > .legend + br:after, +.form.search.advanced .fieldset > .legend + br:after, +.form.orders.search .fieldset > .legend + br:after, +.form.contact .fieldset > .legend + br:after, +.form.password.forget .fieldset > .legend + br:after, +.form.create.account .fieldset > .legend + br:after, +.form.wishlist.share .fieldset > .legend + br:after, +.form.password.reset .fieldset > .legend + br:after, +.form.paypal.review .fieldset > .legend + br:after { + content: ""; + display: table; +} +.form.send.friend .fieldset > .legend + br:after, +.form.address.edit .fieldset > .legend + br:after, +.form.edit.account .fieldset > .legend + br:after, +.form.search.advanced .fieldset > .legend + br:after, +.form.orders.search .fieldset > .legend + br:after, +.form.contact .fieldset > .legend + br:after, +.form.password.forget .fieldset > .legend + br:after, +.form.create.account .fieldset > .legend + br:after, +.form.wishlist.share .fieldset > .legend + br:after, +.form.password.reset .fieldset > .legend + br:after, +.form.paypal.review .fieldset > .legend + br:after { + clear: both; +} +.form.send.friend .fieldset .legend, +.form.address.edit .fieldset .legend, +.form.edit.account .fieldset .legend, +.form.search.advanced .fieldset .legend, +.form.orders.search .fieldset .legend, +.form.contact .fieldset .legend, +.form.password.forget .fieldset .legend, +.form.create.account .fieldset .legend, +.form.wishlist.share .fieldset .legend, +.form.password.reset .fieldset .legend, +.form.paypal.review .fieldset .legend { + float: left; + line-height: 1.2; + font-size: 20px; + font-weight: 400; + padding-bottom: 20px; + width: 100%; + padding: 0 40px 20px 0; + background: #fff; + margin: -30px -10px 30px -30px; +} +.form.send.friend .fieldset .legend + br, +.form.address.edit .fieldset .legend + br, +.form.edit.account .fieldset .legend + br, +.form.search.advanced .fieldset .legend + br, +.form.orders.search .fieldset .legend + br, +.form.contact .fieldset .legend + br, +.form.password.forget .fieldset .legend + br, +.form.create.account .fieldset .legend + br, +.form.wishlist.share .fieldset .legend + br, +.form.password.reset .fieldset .legend + br, +.form.paypal.review .fieldset .legend + br { + display: block; + clear: both; +} +.form.send.friend .fieldset > .field, +.form.address.edit .fieldset > .field, +.form.edit.account .fieldset > .field, +.form.search.advanced .fieldset > .field, +.form.orders.search .fieldset > .field, +.form.contact .fieldset > .field, +.form.password.forget .fieldset > .field, +.form.create.account .fieldset > .field, +.form.wishlist.share .fieldset > .field, +.form.password.reset .fieldset > .field, +.form.paypal.review .fieldset > .field { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + margin: 0 0 20px; + margin: 0 0 10px; + margin-bottom: 20px; +} +.form.send.friend .fieldset > .field > .label, +.form.address.edit .fieldset > .field > .label, +.form.edit.account .fieldset > .field > .label, +.form.search.advanced .fieldset > .field > .label, +.form.orders.search .fieldset > .field > .label, +.form.contact .fieldset > .field > .label, +.form.password.forget .fieldset > .field > .label, +.form.create.account .fieldset > .field > .label, +.form.wishlist.share .fieldset > .field > .label, +.form.password.reset .fieldset > .field > .label, +.form.paypal.review .fieldset > .field > .label { + display: block; + padding-bottom: 5px; +} +.form.send.friend .fieldset > .field .nested .field, +.form.address.edit .fieldset > .field .nested .field, +.form.edit.account .fieldset > .field .nested .field, +.form.search.advanced .fieldset > .field .nested .field, +.form.orders.search .fieldset > .field .nested .field, +.form.contact .fieldset > .field .nested .field, +.form.password.forget .fieldset > .field .nested .field, +.form.create.account .fieldset > .field .nested .field, +.form.wishlist.share .fieldset > .field .nested .field, +.form.password.reset .fieldset > .field .nested .field, +.form.paypal.review .fieldset > .field .nested .field { + margin: 5px 0; +} +.form.send.friend .fieldset > .field.choice > .control, +.form.address.edit .fieldset > .field.choice > .control, +.form.edit.account .fieldset > .field.choice > .control, +.form.search.advanced .fieldset > .field.choice > .control, +.form.orders.search .fieldset > .field.choice > .control, +.form.contact .fieldset > .field.choice > .control, +.form.password.forget .fieldset > .field.choice > .control, +.form.create.account .fieldset > .field.choice > .control, +.form.wishlist.share .fieldset > .field.choice > .control, +.form.password.reset .fieldset > .field.choice > .control, +.form.paypal.review .fieldset > .field.choice > .control { + width: auto; +} +.form.send.friend .fieldset > .field.choice > .label, +.form.address.edit .fieldset > .field.choice > .label, +.form.edit.account .fieldset > .field.choice > .label, +.form.search.advanced .fieldset > .field.choice > .label, +.form.orders.search .fieldset > .field.choice > .label, +.form.contact .fieldset > .field.choice > .label, +.form.password.forget .fieldset > .field.choice > .label, +.form.create.account .fieldset > .field.choice > .label, +.form.wishlist.share .fieldset > .field.choice > .label, +.form.password.reset .fieldset > .field.choice > .label, +.form.paypal.review .fieldset > .field.choice > .label { + display: inline; +} +.form.send.friend .fieldset > .field.choice > input, +.form.address.edit .fieldset > .field.choice > input, +.form.edit.account .fieldset > .field.choice > input, +.form.search.advanced .fieldset > .field.choice > input, +.form.orders.search .fieldset > .field.choice > input, +.form.contact .fieldset > .field.choice > input, +.form.password.forget .fieldset > .field.choice > input, +.form.create.account .fieldset > .field.choice > input, +.form.wishlist.share .fieldset > .field.choice > input, +.form.password.reset .fieldset > .field.choice > input, +.form.paypal.review .fieldset > .field.choice > input { + vertical-align: top; + margin-top: 2px; + margin-right: 5px; +} +.form.send.friend .fieldset > .field.required > .label > span:first-child:after, +.form.address.edit .fieldset > .field.required > .label > span:first-child:after, +.form.edit.account .fieldset > .field.required > .label > span:first-child:after, +.form.search.advanced .fieldset > .field.required > .label > span:first-child:after, +.form.orders.search .fieldset > .field.required > .label > span:first-child:after, +.form.contact .fieldset > .field.required > .label > span:first-child:after, +.form.password.forget .fieldset > .field.required > .label > span:first-child:after, +.form.create.account .fieldset > .field.required > .label > span:first-child:after, +.form.wishlist.share .fieldset > .field.required > .label > span:first-child:after, +.form.password.reset .fieldset > .field.required > .label > span:first-child:after, +.form.paypal.review .fieldset > .field.required > .label > span:first-child:after { + content: '*'; + color: #da370a; +} +.form.send.friend .fieldset > .field .addon, +.form.address.edit .fieldset > .field .addon, +.form.edit.account .fieldset > .field .addon, +.form.search.advanced .fieldset > .field .addon, +.form.orders.search .fieldset > .field .addon, +.form.contact .fieldset > .field .addon, +.form.password.forget .fieldset > .field .addon, +.form.create.account .fieldset > .field .addon, +.form.wishlist.share .fieldset > .field .addon, +.form.password.reset .fieldset > .field .addon, +.form.paypal.review .fieldset > .field .addon { + display: table; + padding: 0; + width: 100%; +} +.form.send.friend .fieldset > .field .addon textarea, +.form.address.edit .fieldset > .field .addon textarea, +.form.edit.account .fieldset > .field .addon textarea, +.form.search.advanced .fieldset > .field .addon textarea, +.form.orders.search .fieldset > .field .addon textarea, +.form.contact .fieldset > .field .addon textarea, +.form.password.forget .fieldset > .field .addon textarea, +.form.create.account .fieldset > .field .addon textarea, +.form.wishlist.share .fieldset > .field .addon textarea, +.form.password.reset .fieldset > .field .addon textarea, +.form.paypal.review .fieldset > .field .addon textarea, +.form.send.friend .fieldset > .field .addon select, +.form.address.edit .fieldset > .field .addon select, +.form.edit.account .fieldset > .field .addon select, +.form.search.advanced .fieldset > .field .addon select, +.form.orders.search .fieldset > .field .addon select, +.form.contact .fieldset > .field .addon select, +.form.password.forget .fieldset > .field .addon select, +.form.create.account .fieldset > .field .addon select, +.form.wishlist.share .fieldset > .field .addon select, +.form.password.reset .fieldset > .field .addon select, +.form.paypal.review .fieldset > .field .addon select, +.form.send.friend .fieldset > .field .addon input, +.form.address.edit .fieldset > .field .addon input, +.form.edit.account .fieldset > .field .addon input, +.form.search.advanced .fieldset > .field .addon input, +.form.orders.search .fieldset > .field .addon input, +.form.contact .fieldset > .field .addon input, +.form.password.forget .fieldset > .field .addon input, +.form.create.account .fieldset > .field .addon input, +.form.wishlist.share .fieldset > .field .addon input, +.form.password.reset .fieldset > .field .addon input, +.form.paypal.review .fieldset > .field .addon input { + box-shadow: none; + display: table-cell; + margin: 0; + width: 100%; +} +.form.send.friend .fieldset > .field .addon .addbefore, +.form.address.edit .fieldset > .field .addon .addbefore, +.form.edit.account .fieldset > .field .addon .addbefore, +.form.search.advanced .fieldset > .field .addon .addbefore, +.form.orders.search .fieldset > .field .addon .addbefore, +.form.contact .fieldset > .field .addon .addbefore, +.form.password.forget .fieldset > .field .addon .addbefore, +.form.create.account .fieldset > .field .addon .addbefore, +.form.wishlist.share .fieldset > .field .addon .addbefore, +.form.password.reset .fieldset > .field .addon .addbefore, +.form.paypal.review .fieldset > .field .addon .addbefore, +.form.send.friend .fieldset > .field .addon .addafter, +.form.address.edit .fieldset > .field .addon .addafter, +.form.edit.account .fieldset > .field .addon .addafter, +.form.search.advanced .fieldset > .field .addon .addafter, +.form.orders.search .fieldset > .field .addon .addafter, +.form.contact .fieldset > .field .addon .addafter, +.form.password.forget .fieldset > .field .addon .addafter, +.form.create.account .fieldset > .field .addon .addafter, +.form.wishlist.share .fieldset > .field .addon .addafter, +.form.password.reset .fieldset > .field .addon .addafter, +.form.paypal.review .fieldset > .field .addon .addafter { + height: 0; + white-space: nowrap; + display: inline-block; + display: table-cell; + vertical-align: middle; + width: 1px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + background: #ffffff; + border: 1px solid #c2c2c2; + border-radius: 3px; + font: 400 14px "sourcesanspro"; + /* Prevent background color leak outs */ + + background-clip: padding-box; + outline: none; + height: 32px; + line-height: 1; + padding: 0 10px; +} +.form.send.friend .fieldset > .field .addon .addbefore:focus, +.form.address.edit .fieldset > .field .addon .addbefore:focus, +.form.edit.account .fieldset > .field .addon .addbefore:focus, +.form.search.advanced .fieldset > .field .addon .addbefore:focus, +.form.orders.search .fieldset > .field .addon .addbefore:focus, +.form.contact .fieldset > .field .addon .addbefore:focus, +.form.password.forget .fieldset > .field .addon .addbefore:focus, +.form.create.account .fieldset > .field .addon .addbefore:focus, +.form.wishlist.share .fieldset > .field .addon .addbefore:focus, +.form.password.reset .fieldset > .field .addon .addbefore:focus, +.form.paypal.review .fieldset > .field .addon .addbefore:focus, +.form.send.friend .fieldset > .field .addon .addafter:focus, +.form.address.edit .fieldset > .field .addon .addafter:focus, +.form.edit.account .fieldset > .field .addon .addafter:focus, +.form.search.advanced .fieldset > .field .addon .addafter:focus, +.form.orders.search .fieldset > .field .addon .addafter:focus, +.form.contact .fieldset > .field .addon .addafter:focus, +.form.password.forget .fieldset > .field .addon .addafter:focus, +.form.create.account .fieldset > .field .addon .addafter:focus, +.form.wishlist.share .fieldset > .field .addon .addafter:focus, +.form.password.reset .fieldset > .field .addon .addafter:focus, +.form.paypal.review .fieldset > .field .addon .addafter:focus { + border-color: #999999; +} +.control .form.send.friend .fieldset > .field .addon .addbefore, +.control .form.address.edit .fieldset > .field .addon .addbefore, +.control .form.edit.account .fieldset > .field .addon .addbefore, +.control .form.search.advanced .fieldset > .field .addon .addbefore, +.control .form.orders.search .fieldset > .field .addon .addbefore, +.control .form.contact .fieldset > .field .addon .addbefore, +.control .form.password.forget .fieldset > .field .addon .addbefore, +.control .form.create.account .fieldset > .field .addon .addbefore, +.control .form.wishlist.share .fieldset > .field .addon .addbefore, +.control .form.password.reset .fieldset > .field .addon .addbefore, +.control .form.paypal.review .fieldset > .field .addon .addbefore, +.control .form.send.friend .fieldset > .field .addon .addafter, +.control .form.address.edit .fieldset > .field .addon .addafter, +.control .form.edit.account .fieldset > .field .addon .addafter, +.control .form.search.advanced .fieldset > .field .addon .addafter, +.control .form.orders.search .fieldset > .field .addon .addafter, +.control .form.contact .fieldset > .field .addon .addafter, +.control .form.password.forget .fieldset > .field .addon .addafter, +.control .form.create.account .fieldset > .field .addon .addafter, +.control .form.wishlist.share .fieldset > .field .addon .addafter, +.control .form.password.reset .fieldset > .field .addon .addafter, +.control .form.paypal.review .fieldset > .field .addon .addafter { + width: 100%; +} +.form.send.friend .fieldset > .field .addon .addbefore:disabled, +.form.address.edit .fieldset > .field .addon .addbefore:disabled, +.form.edit.account .fieldset > .field .addon .addbefore:disabled, +.form.search.advanced .fieldset > .field .addon .addbefore:disabled, +.form.orders.search .fieldset > .field .addon .addbefore:disabled, +.form.contact .fieldset > .field .addon .addbefore:disabled, +.form.password.forget .fieldset > .field .addon .addbefore:disabled, +.form.create.account .fieldset > .field .addon .addbefore:disabled, +.form.wishlist.share .fieldset > .field .addon .addbefore:disabled, +.form.password.reset .fieldset > .field .addon .addbefore:disabled, +.form.paypal.review .fieldset > .field .addon .addbefore:disabled, +.form.send.friend .fieldset > .field .addon .addafter:disabled, +.form.address.edit .fieldset > .field .addon .addafter:disabled, +.form.edit.account .fieldset > .field .addon .addafter:disabled, +.form.search.advanced .fieldset > .field .addon .addafter:disabled, +.form.orders.search .fieldset > .field .addon .addafter:disabled, +.form.contact .fieldset > .field .addon .addafter:disabled, +.form.password.forget .fieldset > .field .addon .addafter:disabled, +.form.create.account .fieldset > .field .addon .addafter:disabled, +.form.wishlist.share .fieldset > .field .addon .addafter:disabled, +.form.password.reset .fieldset > .field .addon .addafter:disabled, +.form.paypal.review .fieldset > .field .addon .addafter:disabled { + opacity: 0.5; +} +.form.send.friend .fieldset > .field .addon .addbefore::-webkit-input-placeholder, +.form.address.edit .fieldset > .field .addon .addbefore::-webkit-input-placeholder, +.form.edit.account .fieldset > .field .addon .addbefore::-webkit-input-placeholder, +.form.search.advanced .fieldset > .field .addon .addbefore::-webkit-input-placeholder, +.form.orders.search .fieldset > .field .addon .addbefore::-webkit-input-placeholder, +.form.contact .fieldset > .field .addon .addbefore::-webkit-input-placeholder, +.form.password.forget .fieldset > .field .addon .addbefore::-webkit-input-placeholder, +.form.create.account .fieldset > .field .addon .addbefore::-webkit-input-placeholder, +.form.wishlist.share .fieldset > .field .addon .addbefore::-webkit-input-placeholder, +.form.password.reset .fieldset > .field .addon .addbefore::-webkit-input-placeholder, +.form.paypal.review .fieldset > .field .addon .addbefore::-webkit-input-placeholder, +.form.send.friend .fieldset > .field .addon .addafter::-webkit-input-placeholder, +.form.address.edit .fieldset > .field .addon .addafter::-webkit-input-placeholder, +.form.edit.account .fieldset > .field .addon .addafter::-webkit-input-placeholder, +.form.search.advanced .fieldset > .field .addon .addafter::-webkit-input-placeholder, +.form.orders.search .fieldset > .field .addon .addafter::-webkit-input-placeholder, +.form.contact .fieldset > .field .addon .addafter::-webkit-input-placeholder, +.form.password.forget .fieldset > .field .addon .addafter::-webkit-input-placeholder, +.form.create.account .fieldset > .field .addon .addafter::-webkit-input-placeholder, +.form.wishlist.share .fieldset > .field .addon .addafter::-webkit-input-placeholder, +.form.password.reset .fieldset > .field .addon .addafter::-webkit-input-placeholder, +.form.paypal.review .fieldset > .field .addon .addafter::-webkit-input-placeholder { + line-height: 1.333; +} +.form.send.friend .fieldset > .field .addon .addbefore:-ms-input-placeholder, +.form.address.edit .fieldset > .field .addon .addbefore:-ms-input-placeholder, +.form.edit.account .fieldset > .field .addon .addbefore:-ms-input-placeholder, +.form.search.advanced .fieldset > .field .addon .addbefore:-ms-input-placeholder, +.form.orders.search .fieldset > .field .addon .addbefore:-ms-input-placeholder, +.form.contact .fieldset > .field .addon .addbefore:-ms-input-placeholder, +.form.password.forget .fieldset > .field .addon .addbefore:-ms-input-placeholder, +.form.create.account .fieldset > .field .addon .addbefore:-ms-input-placeholder, +.form.wishlist.share .fieldset > .field .addon .addbefore:-ms-input-placeholder, +.form.password.reset .fieldset > .field .addon .addbefore:-ms-input-placeholder, +.form.paypal.review .fieldset > .field .addon .addbefore:-ms-input-placeholder, +.form.send.friend .fieldset > .field .addon .addafter:-ms-input-placeholder, +.form.address.edit .fieldset > .field .addon .addafter:-ms-input-placeholder, +.form.edit.account .fieldset > .field .addon .addafter:-ms-input-placeholder, +.form.search.advanced .fieldset > .field .addon .addafter:-ms-input-placeholder, +.form.orders.search .fieldset > .field .addon .addafter:-ms-input-placeholder, +.form.contact .fieldset > .field .addon .addafter:-ms-input-placeholder, +.form.password.forget .fieldset > .field .addon .addafter:-ms-input-placeholder, +.form.create.account .fieldset > .field .addon .addafter:-ms-input-placeholder, +.form.wishlist.share .fieldset > .field .addon .addafter:-ms-input-placeholder, +.form.password.reset .fieldset > .field .addon .addafter:-ms-input-placeholder, +.form.paypal.review .fieldset > .field .addon .addafter:-ms-input-placeholder { + line-height: 1.333; +} +.eq-ie8 .form.send.friend .fieldset > .field .addon .addbefore, +.eq-ie8 .form.address.edit .fieldset > .field .addon .addbefore, +.eq-ie8 .form.edit.account .fieldset > .field .addon .addbefore, +.eq-ie8 .form.search.advanced .fieldset > .field .addon .addbefore, +.eq-ie8 .form.orders.search .fieldset > .field .addon .addbefore, +.eq-ie8 .form.contact .fieldset > .field .addon .addbefore, +.eq-ie8 .form.password.forget .fieldset > .field .addon .addbefore, +.eq-ie8 .form.create.account .fieldset > .field .addon .addbefore, +.eq-ie8 .form.wishlist.share .fieldset > .field .addon .addbefore, +.eq-ie8 .form.password.reset .fieldset > .field .addon .addbefore, +.eq-ie8 .form.paypal.review .fieldset > .field .addon .addbefore, +.eq-ie8 .form.send.friend .fieldset > .field .addon .addafter, +.eq-ie8 .form.address.edit .fieldset > .field .addon .addafter, +.eq-ie8 .form.edit.account .fieldset > .field .addon .addafter, +.eq-ie8 .form.search.advanced .fieldset > .field .addon .addafter, +.eq-ie8 .form.orders.search .fieldset > .field .addon .addafter, +.eq-ie8 .form.contact .fieldset > .field .addon .addafter, +.eq-ie8 .form.password.forget .fieldset > .field .addon .addafter, +.eq-ie8 .form.create.account .fieldset > .field .addon .addafter, +.eq-ie8 .form.wishlist.share .fieldset > .field .addon .addafter, +.eq-ie8 .form.password.reset .fieldset > .field .addon .addafter, +.eq-ie8 .form.paypal.review .fieldset > .field .addon .addafter { + padding-top: 8px; +} +.form.send.friend .fieldset > .field .note, +.form.address.edit .fieldset > .field .note, +.form.edit.account .fieldset > .field .note, +.form.search.advanced .fieldset > .field .note, +.form.orders.search .fieldset > .field .note, +.form.contact .fieldset > .field .note, +.form.password.forget .fieldset > .field .note, +.form.create.account .fieldset > .field .note, +.form.wishlist.share .fieldset > .field .note, +.form.password.reset .fieldset > .field .note, +.form.paypal.review .fieldset > .field .note { + font-size: 12px; + margin-top: 3px; + padding-left: 15px; +} +.form.send.friend .fieldset > .field .note:before, +.form.address.edit .fieldset > .field .note:before, +.form.edit.account .fieldset > .field .note:before, +.form.search.advanced .fieldset > .field .note:before, +.form.orders.search .fieldset > .field .note:before, +.form.contact .fieldset > .field .note:before, +.form.password.forget .fieldset > .field .note:before, +.form.create.account .fieldset > .field .note:before, +.form.wishlist.share .fieldset > .field .note:before, +.form.password.reset .fieldset > .field .note:before, +.form.paypal.review .fieldset > .field .note:before { + border-bottom: 5px solid #675f55; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + content: ''; + display: inline-block; + font-size: 0; + line-height: 0; + margin: 4px 0 0 -14px; + position: absolute; + vertical-align: top; + width: 0; +} +.form.send.friend .fieldset > .field:last-child, +.form.address.edit .fieldset > .field:last-child, +.form.edit.account .fieldset > .field:last-child, +.form.search.advanced .fieldset > .field:last-child, +.form.orders.search .fieldset > .field:last-child, +.form.contact .fieldset > .field:last-child, +.form.password.forget .fieldset > .field:last-child, +.form.create.account .fieldset > .field:last-child, +.form.wishlist.share .fieldset > .field:last-child, +.form.password.reset .fieldset > .field:last-child, +.form.paypal.review .fieldset > .field:last-child { + margin-bottom: 0; +} +.form.send.friend .fieldset > .field .nested, +.form.address.edit .fieldset > .field .nested, +.form.edit.account .fieldset > .field .nested, +.form.search.advanced .fieldset > .field .nested, +.form.orders.search .fieldset > .field .nested, +.form.contact .fieldset > .field .nested, +.form.password.forget .fieldset > .field .nested, +.form.create.account .fieldset > .field .nested, +.form.wishlist.share .fieldset > .field .nested, +.form.password.reset .fieldset > .field .nested, +.form.paypal.review .fieldset > .field .nested { + padding: 0 0 0; +} +.form.send.friend .fieldset > .field .nested .field, +.form.address.edit .fieldset > .field .nested .field, +.form.edit.account .fieldset > .field .nested .field, +.form.search.advanced .fieldset > .field .nested .field, +.form.orders.search .fieldset > .field .nested .field, +.form.contact .fieldset > .field .nested .field, +.form.password.forget .fieldset > .field .nested .field, +.form.create.account .fieldset > .field .nested .field, +.form.wishlist.share .fieldset > .field .nested .field, +.form.password.reset .fieldset > .field .nested .field, +.form.paypal.review .fieldset > .field .nested .field { + margin: 5px 0; +} +.form.send.friend .fieldset > .field > .label, +.form.address.edit .fieldset > .field > .label, +.form.edit.account .fieldset > .field > .label, +.form.search.advanced .fieldset > .field > .label, +.form.orders.search .fieldset > .field > .label, +.form.contact .fieldset > .field > .label, +.form.password.forget .fieldset > .field > .label, +.form.create.account .fieldset > .field > .label, +.form.wishlist.share .fieldset > .field > .label, +.form.password.reset .fieldset > .field > .label, +.form.paypal.review .fieldset > .field > .label { + display: block; + padding: 0 0 5px; +} +.form.send.friend .fieldset > .field.note, +.form.address.edit .fieldset > .field.note, +.form.edit.account .fieldset > .field.note, +.form.search.advanced .fieldset > .field.note, +.form.orders.search .fieldset > .field.note, +.form.contact .fieldset > .field.note, +.form.password.forget .fieldset > .field.note, +.form.create.account .fieldset > .field.note, +.form.wishlist.share .fieldset > .field.note, +.form.password.reset .fieldset > .field.note, +.form.paypal.review .fieldset > .field.note, +.form.send.friend .fieldset .field.street, +.form.address.edit .fieldset .field.street, +.form.edit.account .fieldset .field.street, +.form.search.advanced .fieldset .field.street, +.form.orders.search .fieldset .field.street, +.form.contact .fieldset .field.street, +.form.password.forget .fieldset .field.street, +.form.create.account .fieldset .field.street, +.form.wishlist.share .fieldset .field.street, +.form.password.reset .fieldset .field.street, +.form.paypal.review .fieldset .field.street, +.form.send.friend .fieldset .field.choice.newsletter, +.form.address.edit .fieldset .field.choice.newsletter, +.form.edit.account .fieldset .field.choice.newsletter, +.form.search.advanced .fieldset .field.choice.newsletter, +.form.orders.search .fieldset .field.choice.newsletter, +.form.contact .fieldset .field.choice.newsletter, +.form.password.forget .fieldset .field.choice.newsletter, +.form.create.account .fieldset .field.choice.newsletter, +.form.wishlist.share .fieldset .field.choice.newsletter, +.form.password.reset .fieldset .field.choice.newsletter, +.form.paypal.review .fieldset .field.choice.newsletter { + width: 100%; +} +.form.send.friend .fieldset .field.fullname, +.form.address.edit .fieldset .field.fullname, +.form.edit.account .fieldset .field.fullname, +.form.search.advanced .fieldset .field.fullname, +.form.orders.search .fieldset .field.fullname, +.form.contact .fieldset .field.fullname, +.form.password.forget .fieldset .field.fullname, +.form.create.account .fieldset .field.fullname, +.form.wishlist.share .fieldset .field.fullname, +.form.password.reset .fieldset .field.fullname, +.form.paypal.review .fieldset .field.fullname { + width: 100%; +} +.form.send.friend .fieldset .field.fullname .fields.group-5 .field, +.form.address.edit .fieldset .field.fullname .fields.group-5 .field, +.form.edit.account .fieldset .field.fullname .fields.group-5 .field, +.form.search.advanced .fieldset .field.fullname .fields.group-5 .field, +.form.orders.search .fieldset .field.fullname .fields.group-5 .field, +.form.contact .fieldset .field.fullname .fields.group-5 .field, +.form.password.forget .fieldset .field.fullname .fields.group-5 .field, +.form.create.account .fieldset .field.fullname .fields.group-5 .field, +.form.wishlist.share .fieldset .field.fullname .fields.group-5 .field, +.form.password.reset .fieldset .field.fullname .fields.group-5 .field, +.form.paypal.review .fieldset .field.fullname .fields.group-5 .field { + width: 20%; +} +.form.send.friend .fieldset .field.dob .fields.group .field, +.form.address.edit .fieldset .field.dob .fields.group .field, +.form.edit.account .fieldset .field.dob .fields.group .field, +.form.search.advanced .fieldset .field.dob .fields.group .field, +.form.orders.search .fieldset .field.dob .fields.group .field, +.form.contact .fieldset .field.dob .fields.group .field, +.form.password.forget .fieldset .field.dob .fields.group .field, +.form.create.account .fieldset .field.dob .fields.group .field, +.form.wishlist.share .fieldset .field.dob .fields.group .field, +.form.password.reset .fieldset .field.dob .fields.group .field, +.form.paypal.review .fieldset .field.dob .fields.group .field { + width: 33%; + position: relative; + z-index: 1; +} +.form.send.friend .fieldset .field.dob .fields.group .field .label, +.form.address.edit .fieldset .field.dob .fields.group .field .label, +.form.edit.account .fieldset .field.dob .fields.group .field .label, +.form.search.advanced .fieldset .field.dob .fields.group .field .label, +.form.orders.search .fieldset .field.dob .fields.group .field .label, +.form.contact .fieldset .field.dob .fields.group .field .label, +.form.password.forget .fieldset .field.dob .fields.group .field .label, +.form.create.account .fieldset .field.dob .fields.group .field .label, +.form.wishlist.share .fieldset .field.dob .fields.group .field .label, +.form.password.reset .fieldset .field.dob .fields.group .field .label, +.form.paypal.review .fieldset .field.dob .fields.group .field .label { + position: absolute; + bottom: 0; + font-size: 12px; + line-height: 16px; +} +.form.send.friend .fieldset .field.dob .fields.group .field input, +.form.address.edit .fieldset .field.dob .fields.group .field input, +.form.edit.account .fieldset .field.dob .fields.group .field input, +.form.search.advanced .fieldset .field.dob .fields.group .field input, +.form.orders.search .fieldset .field.dob .fields.group .field input, +.form.contact .fieldset .field.dob .fields.group .field input, +.form.password.forget .fieldset .field.dob .fields.group .field input, +.form.create.account .fieldset .field.dob .fields.group .field input, +.form.wishlist.share .fieldset .field.dob .fields.group .field input, +.form.password.reset .fieldset .field.dob .fields.group .field input, +.form.paypal.review .fieldset .field.dob .fields.group .field input { + margin-bottom: 16px; +} +.form.send.friend .actions, +.form.address.edit .actions, +.form.edit.account .actions, +.form.search.advanced .actions, +.form.orders.search .actions, +.form.contact .actions, +.form.password.forget .actions, +.form.create.account .actions, +.form.wishlist.share .actions, +.form.password.reset .actions, +.form.paypal.review .actions { + *zoom: 1; + width: 690px; +} +.form.send.friend .actions:before, +.form.address.edit .actions:before, +.form.edit.account .actions:before, +.form.search.advanced .actions:before, +.form.orders.search .actions:before, +.form.contact .actions:before, +.form.password.forget .actions:before, +.form.create.account .actions:before, +.form.wishlist.share .actions:before, +.form.password.reset .actions:before, +.form.paypal.review .actions:before, +.form.send.friend .actions:after, +.form.address.edit .actions:after, +.form.edit.account .actions:after, +.form.search.advanced .actions:after, +.form.orders.search .actions:after, +.form.contact .actions:after, +.form.password.forget .actions:after, +.form.create.account .actions:after, +.form.wishlist.share .actions:after, +.form.password.reset .actions:after, +.form.paypal.review .actions:after { + content: ""; + display: table; +} +.form.send.friend .actions:after, +.form.address.edit .actions:after, +.form.edit.account .actions:after, +.form.search.advanced .actions:after, +.form.orders.search .actions:after, +.form.contact .actions:after, +.form.password.forget .actions:after, +.form.create.account .actions:after, +.form.wishlist.share .actions:after, +.form.password.reset .actions:after, +.form.paypal.review .actions:after { + clear: both; +} +.form.send.friend .actions .primary, +.form.address.edit .actions .primary, +.form.edit.account .actions .primary, +.form.search.advanced .actions .primary, +.form.orders.search .actions .primary, +.form.contact .actions .primary, +.form.password.forget .actions .primary, +.form.create.account .actions .primary, +.form.wishlist.share .actions .primary, +.form.password.reset .actions .primary, +.form.paypal.review .actions .primary { + float: right; +} +.form.send.friend .actions .secondary, +.form.address.edit .actions .secondary, +.form.edit.account .actions .secondary, +.form.search.advanced .actions .secondary, +.form.orders.search .actions .secondary, +.form.contact .actions .secondary, +.form.password.forget .actions .secondary, +.form.create.account .actions .secondary, +.form.wishlist.share .actions .secondary, +.form.password.reset .actions .secondary, +.form.paypal.review .actions .secondary { + float: left; +} +.form.send.friend .fieldset.create.account:after, +.form.address.edit .fieldset.create.account:after, +.form.edit.account .fieldset.create.account:after, +.form.search.advanced .fieldset.create.account:after, +.form.orders.search .fieldset.create.account:after, +.form.contact .fieldset.create.account:after, +.form.password.forget .fieldset.create.account:after, +.form.create.account .fieldset.create.account:after, +.form.wishlist.share .fieldset.create.account:after, +.form.password.reset .fieldset.create.account:after, +.form.paypal.review .fieldset.create.account:after { + content: attr(data-hasrequired); + display: block; + position: absolute; + top: 100%; + left: 0; + padding: 10px 0 0; + letter-spacing: normal; + word-spacing: normal; + color: #da370a; +} +.form.send.friend .fieldset.recipients .fields { + *zoom: 1; + margin-bottom: 30px; + position: relative; + z-index: 1; +} +.form.send.friend .fieldset.recipients .fields:before, +.form.send.friend .fieldset.recipients .fields:after { + content: ""; + display: table; +} +.form.send.friend .fieldset.recipients .fields:after { + clear: both; +} +.form.send.friend .fieldset.recipients .fields .field { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + width: 50%; + padding-right: 20px; + float: left; +} +.form.send.friend .fieldset.recipients .fields .action.delete { + position: absolute; + right: 0; + top: 50%; +} +.form.send.friend .actions > .primary { + float: right; + text-align: right; +} +.form.send.friend .actions > .primary .action.submit { + float: right; + margin-left: 10px; +} +.form.send.friend .actions > .primary .limit { + margin: 0; + display: inline-block; +} +.form.address.edit .field.company, +.form.edit.account .field.password.current, +.form.edit.account .field.choice { + margin-right: 30%; +} +.form.address.edit .field.note.default, +.form.address.edit .field.choice.set, +.form.wishlist.share .field.emails, +.form.wishlist.share .field.text, +.form.wishlist.share .field.choice { + width: 100%; +} +.form.search.advanced, +.form.orders.search, +.form.contact { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + background: #f8f8f8; + padding: 40px; +} +.form.search.advanced .fieldset, +.form.orders.search .fieldset, +.form.contact .fieldset { + width: auto; + background: none; + margin-bottom: 0; +} +.form.search.advanced .fieldset .legend, +.form.orders.search .fieldset .legend, +.form.contact .fieldset .legend { + background: none; +} +.form.search.advanced .actions, +.form.orders.search .actions, +.form.contact .actions { + width: auto; + padding-right: 30px; + text-align: right; +} +.form.search.advanced .fields.range .field:first-child .control, +.form.orders.search .fields.range .field:first-child .control, +.form.contact .fields.range .field:first-child .control { + padding-right: 30px; + position: relative; +} +.form.search.advanced .fields.range .field:first-child .control:after, +.form.orders.search .fields.range .field:first-child .control:after, +.form.contact .fields.range .field:first-child .control:after { + content: '\2014'; + display: inline-block; + margin-right: 0; + position: absolute; + right: 6px; + top: 5px; + text-align: center; + width: 25px; +} +.form.contact .fieldset .field { + float: left; + width: 40%; + margin-right: 60%; +} +.form.contact .fieldset .field.comment { + width: 55%; + margin-left: -55%; + margin-right: 0; + float: none; +} +.form.contact .fieldset .field.comment textarea { + min-height: 13.2em; +} +/* + Review paypal express checkout order +-------------------------------------- */ +.paypal.review.view .paypal.subtitle.caption { + margin-bottom: 25px; +} +.paypal.review.view .paypal.subtitle.caption .action { + margin-left: 10px; +} +.paypal.review.view .paypal.subtitle.caption strong { + font-size: 20px; + font-weight: 200; + line-height: 1.2; +} +.paypal.review.view .form.paypal.review .fieldset { + width: 100%; +} +.paypal.review.view .form.paypal.review .fieldset.shipping.address { + float: right; + width: 49%; +} +.paypal.review.view .form.paypal.review .fieldset.billing.address { + float: left; + width: 49%; +} +.paypal.review.view .form.paypal.review .fieldset.shipping.method { + clear: both; +} +.paypal.review.view .form.paypal.review .fieldset .nested { + margin-top: 10px; +} +.paypal.review.view .actions { + margin-top: 35px; +} +.paypal.review.view .actions .action.update { + margin-left: 10px; +} +.paypal.review.view .data.table.paypal.review.items { + width: 100%; +} +.paypal.review.view .data.table.paypal.review.items td, +.paypal.review.view .data.table.paypal.review.items th { + padding: 10px 20px; + text-align: left; +} +.paypal.review.view .data.table.paypal.review.items td.col.total, +.paypal.review.view .data.table.paypal.review.items th.col.total { + text-align: right; +} +.paypal.review.view .data.table.paypal.review.items th { + font-size: 16px; + font-weight: 400; +} +.paypal.review.view .data.table.paypal.review.items tbody tr:nth-child(odd) td { + background: #f8f8f8; +} +.paypal.review.view .data.table.paypal.review.items tfoot tr:first-child td { + border-top: 3px solid #e5e5e5; + padding-top: 15px; +} +/* + MISC +-------------------------------------- */ +.action.back span:before { + content: '\00AB\00A0'; +} +/* + Magento_Customer + Account +-------------------------------------- */ +.col2-left-layout.account .column.main { + float: left; + width: 75%; + margin-right: 0%; +} +.col2-left-layout.account .column.left { + float: left; + width: 25%; + margin-right: 0%; +} +.block.account.nav .title { + font-size: 18px; +} +.block.account.nav .item { + margin-bottom: 10px; +} +.block.account.nav .item.current { + color: #da370a; +} +.block.account.nav .item strong { + font-weight: 400; +} +.my-account .pager .amount, +.my-account .pager .limiter { + display: inline-block; +} +.my-account .form .fieldset > .legend { + margin: 0 0 30px; +} +.my-account > .actions, +.my-account .form > .actions, +.my-account .block > .actions { + *zoom: 1; + margin: 30px 0 0; +} +.my-account > .actions:before, +.my-account .form > .actions:before, +.my-account .block > .actions:before, +.my-account > .actions:after, +.my-account .form > .actions:after, +.my-account .block > .actions:after { + content: ""; + display: table; +} +.my-account > .actions:after, +.my-account .form > .actions:after, +.my-account .block > .actions:after { + clear: both; +} +.my-account > .actions > .primary, +.my-account .form > .actions > .primary, +.my-account .block > .actions > .primary { + float: right; +} +.my-account > .actions > .secondary, +.my-account .form > .actions > .secondary, +.my-account .block > .actions > .secondary { + float: left; +} +.my-account .data.table { + width: 100%; +} +.my-account .data.table td, +.my-account .data.table th { + padding: 10px 20px; + text-align: left; +} +.my-account .data.table td.col.actions, +.my-account .data.table th.col.actions { + white-space: nowrap; +} +.my-account .data.table td.col.actions .action:last-child, +.my-account .data.table th.col.actions .action:last-child { + margin-left: 20px; +} +.my-account .data.table td em, +.my-account .data.table th em { + font-style: normal; +} +.my-account .data.table th { + font-size: 16px; + font-weight: 400; +} +.my-account .data.table tr:nth-child(odd) td { + background: #f8f8f8; +} +.block.dashboard .title .action, +.block.dashboard .subtitle .action { + font-weight: 400; + font-size: 14px; + margin-left: 20px; + text-decoration: underline; + display: inline-block; + text-transform: lowercase; +} +.block.dashboard .title .action:first-letter, +.block.dashboard .subtitle .action:first-letter { + text-transform: uppercase; +} +.block.dashboard .box { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + float: left; + width: 50%; + line-height: 1.666; +} +.block.dashboard .box address { + font-style: normal; +} +.block.dashboard .content { + *zoom: 1; +} +.block.dashboard .content:before, +.block.dashboard .content:after { + content: ""; + display: table; +} +.block.dashboard .content:after { + clear: both; +} +.block.dashboard:not(.welcome):not(.orders) .content { + background: #f8f8f8; + padding: 30px; +} +.block.dashboard:not(.welcome):not(.orders) .subtitle { + font-size: 18px; + font-weight: 200; + display: block; + margin-bottom: 20px; +} +.data.table.orders td.col.total, +.data.table.orders th.col.total { + text-align: right; +} +/* + Address book +-------------------------------------- */ +.block.addresses:not(.dashboard) { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + float: left; +} +.block.addresses:not(.dashboard) .title .action, +.block.addresses:not(.dashboard) .subtitle .action { + font-weight: 400; + font-size: 14px; + margin-left: 20px; + text-decoration: underline; + display: inline-block; + text-transform: lowercase; +} +.block.addresses:not(.dashboard) .title .action:first-letter, +.block.addresses:not(.dashboard) .subtitle .action:first-letter { + text-transform: uppercase; +} +.block.addresses:not(.dashboard) .content { + background: #f8f8f8; + padding: 30px; +} +.block.addresses:not(.dashboard) .subtitle { + font-size: 18px; + font-weight: 200; + display: block; + margin-bottom: 20px; +} +.block.addresses:not(.dashboard) .box:first-child { + margin-bottom: 30px; +} +.block.addresses:not(.dashboard) address { + line-height: 1.666; + font-style: normal; +} +.block.addresses:not(.dashboard).default { + float: left; + width: 60%; +} +.block.addresses:not(.dashboard).list { + float: right; + width: 35%; +} +.block.addresses:not(.dashboard).list .item { + margin-bottom: 30px; +} +.block.addresses:not(.dashboard).list .item.actions { + margin-top: 15px; +} +.block.addresses:not(.dashboard).list .action { + margin-right: 10px; +} +.customer-address-index .column.main .actions { + clear: left; +} +/* + My Account -> My Product Reviews +-------------------------------------- */ +.data.table.reviews .product.name { + margin: 0; +} +/* + My Account -> My Wishlist +-------------------------------------- */ +.data.table.wishlist { + margin-bottom: 15px; +} +.data.table.wishlist thead th { + padding-top: 0; + padding-bottom: 10px; + text-align: left; + font-weight: 400; + font-size: 16px; +} +.data.table.wishlist td, +.data.table.wishlist th { + padding: 16px 10px 10px; + vertical-align: top; +} +.data.table.wishlist td:first-child, +.data.table.wishlist th:first-child { + padding-left: 20px; +} +.data.table.wishlist td:last-child, +.data.table.wishlist th:last-child { + padding-right: 20px; +} +.data.table.wishlist tbody tr:nth-child(even) { + background: #f8f8f8; +} +.data.table.wishlist textarea { + width: 100%; +} +.data.table.wishlist .box.tocart .qty { + width: 50px; +} +.data.table.wishlist + .actions .primary { + margin-bottom: 15px; +} +.data.table.wishlist + .actions .primary .action.share, +.data.table.wishlist + .actions .primary .action.update { + padding: 5px 11px; +} +.data.table.wishlist + .actions .primary .action.update { + margin-left: 5px; +} +.data.table.wishlist .col.photo { + width: 100px; +} +.data.table.wishlist .col.actions { + width: 200px; +} +.data.table.wishlist .item-options { + background: rgba(0, 0, 0, 0.8); + color: #ffffff; + display: none; + position: absolute; + border-radius: 5px; + padding: 10px; + right: 100%; + top: 50%; + margin-top: -20px; + margin-right: 15px; + max-width: 200px; + min-width: 100px; +} +.data.table.wishlist .item-options > p { + margin-top: 0; +} +.data.table.wishlist .item-options dl { + margin: 0; +} +.data.table.wishlist .item-options dl dt { + display: inline; + float: left; + clear: left; + font-weight: 600; +} +.data.table.wishlist .item-options dl dt:after { + content: ':'; + margin-right: 5px; +} +.data.table.wishlist .item-options dl dd { + margin: 0; +} +.data.table.wishlist .truncated .truncated_full_value { + position: relative; +} +.data.table.wishlist .truncated .truncated_full_value.show:before { + content: ''; + border-left: 10px solid rgba(0, 0, 0, 0.8); + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + height: 0; + width: 0; + overflow: hidden; + display: block; + position: absolute; + top: 3px; + margin-top: 0; + left: -15px; + z-index: 2; +} +.data.table.wishlist .truncated .truncated_full_value.show .item-options { + display: block; +} +.data.table.wishlist .truncated .details { + font-size: 12px; + border-bottom: 1px dotted #332e29; + cursor: help; +} +/* + Page -> Advanced Search +-------------------------------------- */ +.form.search.advanced .range.price.fields.group .field { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + float: left; + width: 50%; + margin-right: 0%; + padding-right: 0; +} +.form.search.advanced .range.price.fields.group .field:first-child input { + width: 96%; +} +.form.search.advanced .range.dates.fields.group .field { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + float: left; + width: 50%; + margin-right: 0%; + padding-right: 0; +} +.form.search.advanced .range.dates.fields.group .field .control { + padding-right: 20px; +} +.form.search.advanced .range.dates.fields.group .field:first-child .control { + padding-right: 50px; +} +.form.search.advanced .range.dates.fields.group .field:first-child .control .ui-datepicker-trigger { + right: 32px; +} +.form.search.advanced .group.price .addon .addafter { + color: #675f55; + border: none; + background: none; +} +/* + Popular Search Terms +-------------------------------------- */ +.search.terms { + padding: 0; + margin: 0; + list-style-type: none; + list-style-image: none; +} +.search.terms .item { + display: inline-block; + margin-right: 3px; +} +/* + My Account -> My orders +-------------------------------------- */ +.order.details { + *zoom: 1; +} +.order.details:before, +.order.details:after { + content: ""; + display: table; +} +.order.details:after { + clear: both; +} +.order.details .status { + margin: 0 0 .5em; + line-height: 1.2; + font-weight: 400; + font-size: 30px; + float: left; +} +.order.details .subtitle.caption strong, +.order.details .title strong { + line-height: 1.2; + font-weight: 200; + font-size: 20px; +} +.order.details .subtitle.caption .action, +.order.details .title .action { + margin-left: 10px; +} +.order.details .subtitle.caption { + margin-bottom: 45px; +} +.order.details .order.toolbar { + clear: none; + float: right; +} +.order.details .order.toolbar .action { + margin-left: 10px; +} +.order.details .block.order { + float: left; + width: 48%; + padding-right: 2%; +} +.order.details .block.order.billing.address { + clear: left; +} +.order.details .block.order .content { + background: #f8f8f8; + padding: 30px; +} +.order.details .order.info { + clear: both; +} +.order.details .order.info > dt { + line-height: 1.2; + font-weight: 200; + font-size: 20px; +} +.order.details .order.info > dd { + margin: 10px 0 0 0; + background: #f8f8f8; + padding: 30px; +} +.order.details .order.info > dd .items { + *zoom: 1; +} +.order.details .order.info > dd .items:before, +.order.details .order.info > dd .items:after { + content: ""; + display: table; +} +.order.details .order.info > dd .items:after { + clear: both; +} +.order.details .order.info > dd .items .item { + float: left; + margin-right: 15px; +} +.order.details .additional.details { + margin-bottom: 45px; +} +.order.details .additional.details .order.comments { + background: #f8f8f8; + padding: 30px; +} +.order.details .additional.details .subtitle.caption { + font-size: 20px; + font-weight: 200; + line-height: 1.2; + margin-bottom: 15px; +} +.order.details .additional.details.gift .gift.message { + background: #f8f8f8; + padding: 30px; +} +.order.details .additional.details.gift .gift.message dt { + margin: 0; +} +.order.details .additional.details.gift .gift.message dd { + margin: 0 0 0 40px; +} +.order.details.items .order.toolbar { + margin: 5px 0 0 0; +} +.order.details.items .order.title { + margin-bottom: 10px; +} +.order.details.items h3.product-name { + margin: 0; +} +.order.details.items .action.show { + text-decoration: none; +} +.order.details.items .action.show:after { + font-family: "icons"; + font-size: 12px; + line-height: 12px; + height: 12px; + margin: 0; + overflow: hidden; + content: "\e029"; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; +} +.order.details.items .action.show.expanded:after { + content: "\e02c"; +} +.shipping-tracking-popup .action.close { + text-indent: 0; +} +.shipping-tracking-popup .action.close span { + width: auto; + text-indent: 0; +} +.shipping-tracking-popup .action.close span:after { + content: ""; + display: none; +} +.data.table.order { + margin-bottom: 45px; + width: 100%; +} +.data.table.order thead th { + padding: 0 10px; +} +.data.table.order thead tr:last-child th { + padding-bottom: 10px; +} +.data.table.order td.col.qty { + width: 90px; + text-align: left; +} +.data.table.order td.col.price, +.data.table.order td.col.subtotal { + text-align: left; +} +.data.table.order td { + padding: 16px 10px 10px; + vertical-align: top; +} +.data.table.order td h4 { + margin: 0; +} +.data.table.order td:first-child, +.data.table.order th:first-child { + padding-left: 20px; +} +.data.table.order td:last-child, +.data.table.order th:last-child { + padding-right: 20px; +} +.data.table.order tbody:nth-child(even) tr { + background: #f8f8f8; +} +.data.table.order th { + text-align: left; + font-weight: 400; + font-size: 14px; + vertical-align: top; +} +.data.table.order tr:first-child th { + font-weight: 400; + font-size: 16px; +} +.data.table.order .item-options { + margin: 5px 0; +} +.data.table.order .item-options dt { + font-weight: 400; + display: inline; + margin-right: 10px; + float: left; + clear: left; +} +.data.table.order .item-options dt:after { + content: ': '; +} +.data.table.order .item-options dd { + font-weight: 200; + margin: 0 0 5px 10px; + padding: 0; +} +.data.table.order tfoot tr:first-child td { + border-top: 3px solid #e5e5e5; + padding-top: 15px; +} +.data.table.order.tracking th, +.data.table.order.tracking td { + padding: 0; +} +.data.table.order.tracking .label { + width: 40%; +} +/* + My Account -> Billing agreements +-------------------------------------- */ +.billing.agreements .data.table { + margin-bottom: 40px; +} +.billing.agreements .form.new.agreement .field { + display: inline-block; + padding-right: 20px; + vertical-align: top; + width: 30%; +} +.billing.agreements .form.new.agreement .nested .field { + width: 100%; +} +.billing.agreements .form.new.agreement .actions { + margin-right: 30px; +} +.billing.agreements .form.new.agreement .fieldset { + margin: 0; +} +.billing.agreements .form.new.agreement .fieldset > .legend { + margin: 0 0 20px; +} +.billing.agreements .form.new.agreement .action.create { + padding-top: 7px; + padding-bottom: 6px; +} +/* + Overlay popup +-------------------------------------- */ +.window.overlay { + background: rgba(0, 0, 0, 0.5); + display: none; + min-height: 100%; + position: absolute; + top: 0; + left: 0; + width: 100%; + z-index: 990; +} +.window.overlay.active { + display: block; +} +.popup { + background: #ffffff; + left: 50%; + top: 40%; + position: absolute; + margin: -85px 0 0 -250px; + width: 500px; + z-index: 1000; + position: fixed; + display: none; +} +.popup.active { + display: block; +} +.popup .close span { + width: 16px; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; +} +.popup .close span:active { + outline: 0; +} +.popup .close span:after { + text-indent: 0; + display: block; + margin: 0; +} +.popup .title { + font-size: 18px; + margin: 0 0 30px; +} diff --git a/app/design/frontend/magento_plushe/fonts/.htaccess b/app/design/frontend/magento_plushe/fonts/.htaccess new file mode 100644 index 00000000000..d7ef2e0846f --- /dev/null +++ b/app/design/frontend/magento_plushe/fonts/.htaccess @@ -0,0 +1,13 @@ +# deny *everything* +<FilesMatch ".*"> + Order Allow,Deny + Deny from all +</FilesMatch> + +# but now allow just *certain* necessary files: +<FilesMatch ".*\.(js|JS|css|CSS|jpg|JPG|gif|GIF|png|PNG|swf|SWF|xsl|XSL|svg|eot|ttf|woff)$"> + Order Allow,Deny + Allow from all +</FilesMatch> + +IndexIgnore */* \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/fonts/icons/icons.dev.svg b/app/design/frontend/magento_plushe/fonts/icons/icons.dev.svg new file mode 100644 index 00000000000..661704d2967 --- /dev/null +++ b/app/design/frontend/magento_plushe/fonts/icons/icons.dev.svg @@ -0,0 +1,99 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata> +This is a custom SVG font generated by IcoMoon. +<iconset grid="16"></iconset> +</metadata> +<defs> +<font id="icons" horiz-adv-x="512" > +<font-face units-per-em="512" ascent="480" descent="-32" /> +<missing-glyph horiz-adv-x="512" /> +<glyph class="hidden" unicode="" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" /> +<glyph unicode="" d="M 323.52,366.72L 169.984,366.72L 93.216,268.192L 400.288,268.192 zM 246.752,480L 182.88,383.872L 310.656,383.872 zM 393.728,251.808L 99.808,251.808 c-13.088,0-23.712-10.624-23.712-23.776l0-236.256 C 76.096-21.344, 86.72-32, 99.808-32l 293.92,0 + c 13.056,0, 23.68,10.656, 23.68,23.776L 417.408,228.032 C 417.408,241.184, 406.784,251.808, 393.728,251.808z" data-tags="pencil" /> +<glyph unicode="" d="M0,243.648L 512,243.648L 512,204.32L0,204.32zM0,381.536L 512,381.536L 512,342.144L0,342.144zM0,105.824L 512,105.824L 512,66.496L0,66.496z" data-tags="menu" /> +<glyph unicode="" d="M 425.12,310.88C 425.12,404.256, 349.344,480, 256,480C 162.56,480, 86.88,404.256, 86.88,310.88c0-73.632, 47.040-136.256, 112.672-159.488l 15.232-49.504 + L 256-32l 41.216,133.888l 15.232,49.504C 378.112,174.624, 425.12,237.248, 425.12,310.88z M 349.6,256.832L 256,202.816L 162.368,256.832L 162.368,364.896 L 256,418.944 + l 93.6-54.016L 349.6,256.832 z" data-tags="location" /> +<glyph unicode="" d="M 149.824-32L 262.304-32L 332.672,319.616L 220.128,319.616 zM 357.248,450.432c-3.264,6.56-7.712,12-13.344,16.192c-5.664,4.256-11.936,7.488-19.008,9.856C 317.888,478.816, 310.592,480, 303.136,480 + C 293.728,480, 284.928,478.24, 276.736,474.72s-15.36-8.096-21.44-13.728C 249.184,455.36, 244.384,448.704, 240.864,440.928 + c-3.52-7.68-5.248-15.808-5.248-24.256c0-8.864, 1.632-16.64, 4.896-23.2c 3.264-6.56, 7.712-11.936, 13.344-16.192 + c 5.632-4.192, 11.968-7.36, 19.008-9.504c 7.040-2.080, 14.304-3.168, 21.792-3.168c 19.264,0, 35.328,5.984, 48.192,17.984 + c 12.928,11.936, 19.328,27.072, 19.328,45.344C 362.176,436.416, 360.544,443.904, 357.248,450.432z" data-tags="info" /> +<glyph unicode="" d="M 368.032,304L 512,447.968L 96,447.968L 96,480L 32,480L 32,447.968L0,447.968L0,160L 32,160L 32-32L 96-32L 96,160L 512,160 + z" data-tags="flag" /> +<glyph unicode="" d="M 512,275.2L 307.2,275.2L 307.2,480L 204.8,480L 204.8,275.2L0,275.2L0,172.8L 204.8,172.8L 204.8-32L 307.2-32L 307.2,172.8L 512,172.8 z" data-tags="expand" /> +<glyph unicode="" d="M 200.064,26.528c0,17.024, 5.376,31.040, 16.128,42.048c 10.752,10.976, 24.16,16.544, 40.192,16.544s 29.312-5.568, 39.744-16.544 + c 10.56-11.040, 15.808-25.024, 15.808-42.048s-5.248-31.072-15.808-42.016C 285.696-26.528, 272.416-32, 256.384-32s-29.44,5.472-40.192,16.512 + C 205.44-4.544, 200.064,9.504, 200.064,26.528z M 215.104,394.4L 212.8,480l 87.136,0 L 296.928,394.4l-12.064-256L 227.104,138.4 L 215.104,394.4z" data-tags="exclamation" /> +<glyph unicode="" d="M 256,46.624L0,401.376l 512,0 L 256,46.624z" data-tags="dropdown" /> +<glyph unicode="" d="M 512,275.2L 512,172.8 L0,172.8 L0,275.2 L 512,275.2 z" data-tags="collapse" /> +<glyph unicode="" d="M 512-3.296L 284.576,224.48L 511.168,451.328L 482.56,480L 255.936,253.12L 29.504,479.84L 0.864,451.168L 227.328,224.448L0-3.136L 28.64-31.84L 255.936,195.744L 483.392-32 z" data-tags="close-thick" /> +<glyph unicode="" d="M 44.384,252.768L 182.72,89.568L 459.552,480L 505.696,427.488L 183.904-32L 6.304,197.152 z" data-tags="checkmark" /> +<glyph unicode="" d="M 480,320L 96,384C 90.784,384, 86.048,382.464, 81.728,380.256L 79.36,388.384C 78.624,391.008, 77.248,393.376, 75.328,395.328l-32,32 + c-6.24,6.24-16.384,6.24-22.624,0s-6.24-16.384,0-22.624l 29.056-29.056L 110.912,161.6l-29.216-58.432 + c-2.496-4.96-2.208-10.848, 0.672-15.552C 85.312,82.88, 90.432,80, 96,80l 48,0 l0-20.896 C 134.624,53.536, 128,43.712, 128,32 + c0-17.696, 14.304-32, 32-32s 32,14.304, 32,32c0,11.712-6.624,21.536-16,27.104L 176,80 l 192,0 l0-20.896 C 358.592,53.536, 352,43.712, 352,32 + c0-17.696, 14.304-32, 32-32s 32,14.304, 32,32c0,11.712-6.592,21.536-16,27.104L 400,80 L 448,80 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 121.888,112 + l 20.448,40.832c 1.792,3.584, 2.176,7.68, 1.056,11.552l-0.32,1.12C 148.064,162.336, 153.632,160, 160,160l 288,0 c 17.696,0, 32,14.304, 32,32l 32,96 + C 512,305.696, 497.696,320, 480,320z" data-tags="cart" /> +<glyph unicode="" d="M 512,132.864L 267.552,315.072L 267.616,315.136L 255.968,323.776L0,132.96L 11.616,124.288L 255.936,306.432L 500.352,124.224 z" data-tags="arrow-up-thin" /> +<glyph unicode="" d="M 164.864-32L 347.072,212.448L 347.136,212.384L 355.776,224.032L 164.96,480L 156.288,468.384L 338.432,224.064L 156.224-20.352 z" data-tags="arrow-right-thin" /> +<glyph unicode="" d="M 347.136,480L 164.928,235.552L 164.864,235.616L 156.224,223.968L 347.040-32L 355.712-20.384L 173.568,223.936L 355.776,468.352 z" data-tags="arrow-left-thin" /> +<glyph unicode="" d="M0,315.136L 244.448,132.928L 244.384,132.864L 256.032,124.224L 512,315.040L 500.384,323.712L 256.064,141.568L 11.648,323.776 z" data-tags="arrow-down-thin" /> +<glyph unicode="" d="M 256,382.944L 255.968,382.976L0,127.008L 62.048,64.96L 256.032,258.912L 449.984,65.024L 512,127.072L 256.064,383.040 z" data-tags="arrow-up-thick" /> +<glyph unicode="" d="M 414.944,224L 414.976,224.032L 159.008,480L 96.96,417.952L 290.912,223.968L 97.024,30.016L 159.072-32L 415.040,223.936 z" data-tags="arrow-right-thick" /> +<glyph unicode="" d="M 97.056,224L 97.024,223.968L 352.992-32L 415.040,30.048L 221.088,224.032L 414.976,417.984L 352.928,480L 96.96,224.064 z" data-tags="arrow-left-thick" /> +<glyph unicode="" d="M 256,65.056L 256.032,65.024L 512,320.992L 449.952,383.040L 255.968,189.088L 62.016,382.976L0,320.928L 255.936,64.96 z" data-tags="arrow-down-thick" /> +<glyph unicode="" d="M 48,384L 240,384L 240,206.784L 48,206.784zM 48,177.216L 240,177.216L 240,0L 48,0zM 272,384L 464,384L 464,206.784L 272,206.784zM 272,177.216L 464,177.216L 464,0L 272,0zM 283.84,353.184l 156.992,42.784l-8.448,30.88L 381.44,412.928c 8.384,7.2, 15.040,14.88, 18.944,22.944 + c 5.12,10.56, 5.728,21.536, 1.728,31.744l-3.52,5.76L 394.592,476.16l-6.208,2.592c-57.024,10.56-109.024-48.96-132.416-80.992 + c-23.36,32-75.36,91.52-132.416,80.992L 111.616,472.16L 109.888,467.616C 105.888,457.376, 106.464,446.4, 111.552,435.872 + c 3.936-8.064, 10.56-15.712, 18.88-22.88l-50.88,13.856L 71.168,395.968l 156.96-42.784L 222.24,343.2l 20.16,6.112l 8.544-2.304l 8.032-0.576 + l 10.592,2.88l 20.192-6.112L 283.84,353.184z M 370.528,447.936C 361.856,433.696, 332.64,417.28, 301.76,404 + C 321.12,425.472, 346.080,446.016, 370.528,447.936z M 210.24,404C 179.36,417.248, 150.112,433.632, 141.44,447.936C 165.888,446.016, 190.88,425.44, 210.24,404 + z" data-tags="wishlist" /> +<glyph unicode="" d="M 61.135-4.221l 14.485,68.604l-9.772,0 c-36.307,0-65.846,29.536-65.846,65.841L 0.002,382.309 + c0,36.306, 29.539,65.843, 65.846,65.843l 380.303,0 c 36.309,0, 65.845-29.538, 65.845-65.843l0-252.084 + c0-36.305-29.536-65.841-65.845-65.841L 169.429,64.384 L 61.135-4.221z" data-tags="comment" /> +<glyph unicode="" d="M 342.569,64.384L 65.847,64.384 c-36.309,0-65.845,29.536-65.845,65.841L 0.002,382.309 + c0,36.306, 29.536,65.843, 65.845,65.843L 446.15,448.152 c 36.307,0, 65.846-29.538, 65.846-65.843l0-252.084 + c0-36.305-29.539-65.841-65.846-65.841l-9.773,0 l 14.486-68.604L 342.569,64.384z" data-tags="comment-reflected" /> +<glyph unicode="" d="M0,480l 128.002,0 l0-128.002 L0,351.998 L0,480 zM 192.219,415.999l 319.777,0 l0-63.331 L 192.219,352.668 L 192.219,415.999 zM0,288.001l 128.002,0 l0-128.003 L0,159.998 L0,288.001 zM 192.219,224l 319.777,0 l0-63.33 L 192.219,160.67 L 192.219,224 zM 0.002,96.003l 128.002,0 L 128.004-32 L 0.002-32 L 0.002,96.003 zM 192.221,32.002l 319.775,0 l0-63.33 L 192.221-31.328 L 192.221,32.002 z" data-tags="list" /> +<glyph unicode="" d="M 0.002,480l 192,0 l0-192.002 l-192,0 L 0.002,480 zM0,160.002l 192,0 L 192-32 L0-32 L0,160.002 zM 319.996,160.002l 192,0 L 511.996-32 l-192,0 L 319.996,160.002 zM 320,480l 192,0 l0-192.002 L 320,287.998 L 320,480 z" data-tags="grid" /> +<glyph unicode="" d="M 30.832,438.23l 10.065,10.052l 439.399-439.4l-10.066-10.051 + L 30.832,438.23zM 40.898-1.169l-10.066,10.051l 439.398,439.4l 10.066-10.052 + L 40.898-1.169z" data-tags="close-thin" /> +<glyph unicode="" d="M 313.472,448.193c 0.342,1.637, 0.576,3.314, 0.576,5.122l0,3.258 + C 314.048,469.465, 303.515,480, 290.622,480l-52.776,0 c-12.867,0-23.453-10.535-23.453-23.427l0-3.258 c0-1.808, 0.262-3.485, 0.629-5.122 + L 313.472,448.193 zM 412.972,415.662L 99.222,415.662 c-21.512-0.315-36.948-13.18-37.053-33.096l0-14.046 l 387.856,0 L 450.025,382.566 + C 449.894,402.482, 434.433,415.347, 412.972,415.662zM 117.265,12.796C 120.147-11.811, 142.762-32, 167.591-32l 177.011,0 + c 24.844,0, 47.459,20.189, 50.315,44.796l 36.895,307.077L 80.421,319.873 L 117.265,12.796z M 286.363,63.045l 21.814,188.044 + c 1.312,11.241, 11.491,19.286, 22.721,18.002c 11.241-1.311, 19.299-11.478, 18.003-22.719l-21.816-188.045 + c-1.219-10.443-10.075-18.134-20.334-18.134c-0.787,0-1.586,0.040-2.386,0.131C 293.123,41.635, 285.066,51.803, 286.363,63.045z + M 180.693,269.091c 11.228,1.271, 21.409-6.761, 22.719-18.002l 21.814-188.044c 1.299-11.242-6.76-21.41-18.001-22.721 + c-0.799-0.091-1.599-0.131-2.384-0.131c-10.26,0-19.117,7.69-20.334,18.134L 162.69,246.372 + C 161.393,257.614, 169.451,267.781, 180.693,269.091z" data-tags="trash" /> +<glyph unicode="" d="M 256.542,192.229L 1.083,362.836L 1.083,64.5L 512,64.5L 512,362.805 zM 256.542,277.081L 1.083,447.687L 512,447.687 z" data-tags="envelope" /> +<glyph unicode="" d="M 508.064,23.328l-153.92,153.92c 21.12,31.040, 33.504,68.576, 33.504,108.928C 387.648,393.216, 300.864,480, 193.824,480C 86.784,480,0,393.216,0,286.176 + c0-107.072, 86.784-193.856, 193.824-193.856c 40.384,0, 77.92,12.384, 108.928,33.504l 153.92-153.92c 5.248-5.248, 13.792-5.248, 19.040,0l 32.384,32.384 + C 513.312,9.568, 513.312,18.080, 508.064,23.328z M 193.824,165.024c-66.88,0-121.12,54.24-121.12,121.152c0,66.88, 54.24,121.12, 121.12,121.12 + c 66.912,0, 121.152-54.24, 121.152-121.12C 314.976,219.296, 260.704,165.024, 193.824,165.024z" data-tags="magnifying-glass" /> +<glyph unicode="" d="M 119.995,223.983L 351.988,386.982L 351.996,61.018 z" data-tags="arrow-right-filled" /> +<glyph unicode="" d="M 255.982,87.996L 418.982,319.99L 93.018,319.998 z" data-tags="arrow-bottom-filled" /> +<glyph unicode="" d="M 392.004,223.983L 160.010,386.982L 160.002,61.018 z" data-tags="arrow-left-filled" /> +<glyph unicode="" d="M 255.982,360.004L 418.982,128.010L 93.018,128.002 z" data-tags="arrow-up-filled" /> +<glyph unicode="" d="M 172.063,193.823L 217.844,193.823L 217.844,148.066L 172.063,148.066zM 236.52,132.598L 282.242,132.598L 282.242,86.848L 236.52,86.848zM 172.063,132.598L 217.844,132.598L 217.844,86.848L 172.063,86.848zM 172.063,255.050L 217.844,255.050L 217.844,209.319L 172.063,209.319zM 368.475,344.174c 10.469,0, 18.949,8.495, 18.949,18.977L 387.424,428.535 + c-0.001,10.481-8.481,18.964-18.949,18.964c-10.494,0-18.979-8.483-18.979-18.964l0-65.385 + C 349.5,352.669, 357.981,344.174, 368.475,344.174zM 144.372,344.174c 10.467,0, 18.946,8.495, 18.946,18.977L 163.318,428.535 + c0,10.481-8.479,18.964-18.946,18.964c-10.495,0-18.979-8.483-18.979-18.964l0-65.385 + C 125.395,352.669, 133.877,344.174, 144.372,344.174zM 107.603,193.823L 153.36,193.823L 153.36,148.066L 107.603,148.066zM 107.603,132.598L 153.36,132.598L 153.36,86.848L 107.603,86.848zM 236.52,193.823L 282.242,193.823L 282.242,148.066L 236.52,148.066zM 365.4,193.823L 411.155,193.823L 411.155,148.066L 365.4,148.066zM 365.4,255.050L 411.155,255.050L 411.155,209.319L 365.4,209.319zM 393.676,415.993l0-21.091 c 7.886-6.972, 12.886-17.154, 12.886-28.519 + c0-21.040-17.044-38.116-38.088-38.116c-21.069,0-38.114,17.076-38.114,38.116c0,11.365, 5.001,21.547, 12.885,28.519 + L 343.245,415.993 L 169.575,415.993 l0-21.091 c 7.885-6.972, 12.885-17.154, 12.885-28.519c0-21.040-17.044-38.116-38.087-38.116 + c-21.070,0-38.114,17.076-38.114,38.116c0,11.365, 5,21.547, 12.884,28.519L 119.143,415.993 L 32.91,415.993 l0-416.021 l 447.103,0 L 480.013,415.993 L 393.676,415.993 z + M 75.331,42.393L 75.331,307.647 l 363.134,0 l 0.001-265.254L 75.331,42.393 zM 236.52,255.050L 282.242,255.050L 282.242,209.319L 236.52,209.319zM 300.972,255.050L 346.727,255.050L 346.727,209.319L 300.972,209.319zM 300.972,132.598L 346.727,132.598L 346.727,86.848L 300.972,86.848zM 300.972,193.823L 346.727,193.823L 346.727,148.066L 300.972,148.066z" data-tags="calendar" /> +<glyph unicode="" d="M 512,281.475l-176.89,25.704L 256,467.47l-79.108-160.291L0,281.475l 128-124.769L 97.784-19.47L 256,63.709l 158.216-83.179 + l-30.217,176.176L 512,281.475z M 256,103.251l-111.731-58.74l 21.338,124.415l-90.393,88.111l 124.92,18.152L 256,388.387l 55.868-113.198 + l 124.918-18.152l-90.394-88.111l 21.339-124.415L 256,103.251z" data-tags="star, rate, favorite, bookmark" /> +<glyph unicode=" " horiz-adv-x="256" /> +</font></defs></svg> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/fonts/icons/icons.eot b/app/design/frontend/magento_plushe/fonts/icons/icons.eot new file mode 100644 index 0000000000000000000000000000000000000000..b84de058ea76322b80cd42136a032e484cecaa94 GIT binary patch literal 4344 zcmd^D>u+4e6+h?R-MxGF{ocf{y}Rq(O&Yx3M|RhFdJ`O56``aAIgwI|UB^i*C${5+ z@=z!XO)2z&A|z;uc(|oV6lj(3AxJ1K+fboU3FwDVRV`AtF|DXT6+)q^3f%2)?!9rG zRP8^|@y?txXU@!-^O$pI{LcW<S5TQG5=A1rY#^YVV1aGlVfG1JW&yb&u<Of*$4$!e z)<sh^L9;YNM?m(`%`{2->2^9u<1`OSj7CA3$LN&7rBRXcRKUp9GeHpYy^tl-j^W{3 zZk&8$=We1v9n`Lop>4x-3pvo&(ARF-*<b2^<=q4(frmyX4vo+KdetL8fksZy9^5~E zWUk%DN)%Xuap(SnckK&mH_Q;pEh2T}fywc`pWoKIh_QE3s|P@^1=@eb+z9%;2M!&* zQ+ZZ?6#Y}^?>;y?G2VMFhqdGr=<hf*e&-zB4TXpY(AQ?h4^6%_w(4(CpbNC=x!EH} z|M;7`_rM|#qJP5B4f>5AE?<9}f8!_QHtqjb;^Q#plL^}`iMWNX({c}{;@4`oC@=VR zK^9h8UhD=X2ZIL<vS4I`R=3y~tDYb`Ie9zp18u~DpU_G=zB~p5|B~B*@7T9(FV$Q0 zk+lcxO=~Rez|;V2&!eKCza3zdU^SHUMoaLSu;>%`6J-oxL5BN{F7?o6W3PA6t+aru z8DtTYqIMZ$ME9d7^zI@X2@O1kg=|DEUn|kN?jwS)QCidrv{qm4B|e2V<~$b$dj$vN zC8!hYbVHI2HgQmv6v|*d6#>~xX-ZNGDms?bB$&@o&X|9>5xe<+DL$&wm*^<{kWSI- z^d5bT@ao{}_<nwjpX0Oq7Pt6g$tK05Iq6~P=hE+`OR`6vk&nx#<g@a5`GS1W_I2A+ z!h=?X!=gb>N(g9f>4q6)+TL#Qj}c)qd=i88(@HX@l;g>iqnjhKa<Ww2#A~xWbn-?n zKVEO_)c@e}`COcJdA&S4abfJZ&-J08puvhFdbT3&zX41kH&G=SO^Pc1gy75d(yEtM zeYgtUQOJKD@_iy+At~jEMq&wRkT-Kq$yI7`{^`W`CI(CX)vNub!5hAc!nNUviQ(F= zQ1O8WilJRxtsbmaMXWrEwWbYSqD1j>I9<(4>6A~3MtY=jsakn#ZshR8u0YJ~TN!ex z!I--{tMS-fVXxv2tnm24UPoG_ktKV1(5WRW>1aAwj+QG)o;#tB)itfo3tTv%X?m;K zT+R=DIW5?ug1s!!oBQ6xkHeyUQy5&L^Vs76_UMGhR9#yw#UhF$CFjbDoIbA=w1B@D zly=FU^;}LS%Yh(2KRRlhGUFs7AMqntg)*FEY6I)%uVGzrE?&e~M0kK<a>L2tef!KY z%m3J)Jy(NSmADeG#U)z2*tK}E`{H8v;-b7LTJd}DJ+Ynx`}`O7X(xgY;+(tgyBy8y zzkKQQXZV4NUik}n;4#R2kv3vNCZ*)E{hW0qB*hWiz)|5x*nDlSQeKXis%x|9WUZR3 z7{OJkA-Gz4Ls4XwHFw<8y{X%#s)azfBOGWNZ9!30MSmqCORAGKZ&(X+y>4^bWX%(I zcmHmK(;rns-f-9(QlnQe)u*nuJ0wTgJLU}=_Bn>V4k5}Z)6aH8{Y#!Uc`jZ0)*1Cx z^~@QV3VcsM@4e6)eDOh+VX0@$VeOKK1^3lF?B{STSK~b<6Su52O}o>Q%wU2uFub(} zZ?HrPztyp?dxf1<#;$6@t((uC+syZx5c0;br>9L{WLWr)pEk!@Y_N)bkAr8y<f$=s zlp8n4TGlFphiD6AHH55;I9-bPU<p}UF0Z4AZv_9A|74wCKQ0X=<RJ=|ji^p9L4;AY zR_&LwN}m0aBOZ&3sH!CxDmav?lFh{mO%xoFX4CVeTK3tU4%w#EhdQ=pJd(p{_m<Qr z9TC;(j(pj(E_2^HkH(GDJ*UlPd`-gV_5=cUS@ztTt|*Ev5b(Hti8U^V#Ij>5vSRh> z6%mncgkJ4Wq1Ue{1fSK?sVp*96`3oB4CY8DH~C$ixm+h76RrM%Z7A3ISywjO^;u`` z>baTZ)l=6X?04xOT$$|h*RRYS60#8`*4Z-iou9%KN0x=PYRGuXHL%fWa$RpWuYufZ z)Cad%72n5e*EH5cPDy7_#oEHATsPWQvjHek6GyS9t@EE@2eB6l*BGgs;|UkP?9z9N zme08KFS-OK_HL)mh?&<AGhXaD3C|D0m`1u^!$$f~aMH)!oUGuC_V5NSRcqm7xV9M` zKl?bHO6R3&EWt5{l7iVQxh$_^pIUMG_;vmDK$MS1_486s_;jd8%IFJk#n>BkbBsL- zOHTLUpclAHWp;XE%uQLcsXm`-lVpuUK9rC?6Yl5;b6IbnRb7%-J*&9c_m1RJ&pLhV zR?e!>nT_+)gw>#P9|w~`C6i=s6Sr|Y;db){{T*I2`hrMR)L!Jzp>Gg3Fv{eRobb89 zN3K+h#|F9Do5~vbm_Iw2nqQco-?6cHQgvxA{qK86M)r=xPZl@sn8!fsqzlv^fHblf zc4WGPHt`sLQ%D%(;GOTcp3z?s^jm2cKf`rF&(x5wLEim7=nLR~$mGxDg8ZO4LGU-g zKPC7%Zu0Yi_l2*5q_x}dZFA{dc2bVkP(PKaMjL1s?V;Q7AlOgS$k&LFIBE_R$v0g! zzu|^U9m{YLog%6Pzo>$@7L7$C4)}6y4Ii>)I1DR{E7laeVxHiCF`wVk*S95)@(aJ) z?e|<T+F&2beSLimG0^ReC*t0pd17cs`Bi<Ir{C!7tBaw0{#@RV_PPAG-OjCw+pTPM zx|gsYVQd<s)A_ff?vOto_lMlkE0{jU3;K81rT^m{Fl`5$;o}bx6c=!>#0{VO5va&Y z@thwyagY<po)VqD>88_-o~NGbY0Sm;+%qt6&z=~s>{wXnICg61&QsO($99Jf9}ew4 zCJc`|?_=<oD2x;1v2Y2|ma=e}G`s>#9&xvQ+`{d+|GaGB4$$9*@7Sh-B95PlOSlDu zEL^5KeZj(Q;Q79V+i@>@+QJ>6zqb78H#IRkgBRd6&%c`|_uqbS9Phwk<MDUYfb)os zN$j;`JOnjb5B$m_((D(hj|Nan$Oc8k77fqN937sW-#@99@&#?ZX2=69_6_uv3Po^S zS%R$1{Fj&K=;Zv7so5E=n8!EfKW7Qw{m+uaC?3#^{LePFvx60OvdS)YvxmJ%NPZ4* zkV72i2uG1y;=F=a;?CU3T}Wd+aKDCYQ;O5v%NgbNnW^DIp&;P4LZNEGngs_exW$6k zTX4vN+e}!r<`;`rzhuF(1=m`zVnItz(UMcN<P_Ig<CeVQR;zExEn0Gmm*ozd;{{7z z!ID?7<SprC?W<tPFInrBtaVG4ypkoqV2u~n32P&RiVQ3M!9XNl^u~n`v6uxF-zm#y QM(n@w&}>mKEPq@78?P4w1poj5 literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/icons/icons.svg b/app/design/frontend/magento_plushe/fonts/icons/icons.svg new file mode 100644 index 00000000000..560b55877c2 --- /dev/null +++ b/app/design/frontend/magento_plushe/fonts/icons/icons.svg @@ -0,0 +1,99 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata> +This is a custom SVG font generated by IcoMoon. +<iconset grid="16"></iconset> +</metadata> +<defs> +<font id="icons" horiz-adv-x="512" > +<font-face units-per-em="512" ascent="480" descent="-32" /> +<missing-glyph horiz-adv-x="512" /> +<glyph class="hidden" unicode="" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" /> +<glyph unicode="" d="M 323.52,366.72L 169.984,366.72L 93.216,268.192L 400.288,268.192 zM 246.752,480L 182.88,383.872L 310.656,383.872 zM 393.728,251.808L 99.808,251.808 c-13.088,0-23.712-10.624-23.712-23.776l0-236.256 C 76.096-21.344, 86.72-32, 99.808-32l 293.92,0 + c 13.056,0, 23.68,10.656, 23.68,23.776L 417.408,228.032 C 417.408,241.184, 406.784,251.808, 393.728,251.808z" /> +<glyph unicode="" d="M0,243.648L 512,243.648L 512,204.32L0,204.32zM0,381.536L 512,381.536L 512,342.144L0,342.144zM0,105.824L 512,105.824L 512,66.496L0,66.496z" /> +<glyph unicode="" d="M 425.12,310.88C 425.12,404.256, 349.344,480, 256,480C 162.56,480, 86.88,404.256, 86.88,310.88c0-73.632, 47.040-136.256, 112.672-159.488l 15.232-49.504 + L 256-32l 41.216,133.888l 15.232,49.504C 378.112,174.624, 425.12,237.248, 425.12,310.88z M 349.6,256.832L 256,202.816L 162.368,256.832L 162.368,364.896 L 256,418.944 + l 93.6-54.016L 349.6,256.832 z" /> +<glyph unicode="" d="M 149.824-32L 262.304-32L 332.672,319.616L 220.128,319.616 zM 357.248,450.432c-3.264,6.56-7.712,12-13.344,16.192c-5.664,4.256-11.936,7.488-19.008,9.856C 317.888,478.816, 310.592,480, 303.136,480 + C 293.728,480, 284.928,478.24, 276.736,474.72s-15.36-8.096-21.44-13.728C 249.184,455.36, 244.384,448.704, 240.864,440.928 + c-3.52-7.68-5.248-15.808-5.248-24.256c0-8.864, 1.632-16.64, 4.896-23.2c 3.264-6.56, 7.712-11.936, 13.344-16.192 + c 5.632-4.192, 11.968-7.36, 19.008-9.504c 7.040-2.080, 14.304-3.168, 21.792-3.168c 19.264,0, 35.328,5.984, 48.192,17.984 + c 12.928,11.936, 19.328,27.072, 19.328,45.344C 362.176,436.416, 360.544,443.904, 357.248,450.432z" /> +<glyph unicode="" d="M 368.032,304L 512,447.968L 96,447.968L 96,480L 32,480L 32,447.968L0,447.968L0,160L 32,160L 32-32L 96-32L 96,160L 512,160 + z" /> +<glyph unicode="" d="M 512,275.2L 307.2,275.2L 307.2,480L 204.8,480L 204.8,275.2L0,275.2L0,172.8L 204.8,172.8L 204.8-32L 307.2-32L 307.2,172.8L 512,172.8 z" /> +<glyph unicode="" d="M 200.064,26.528c0,17.024, 5.376,31.040, 16.128,42.048c 10.752,10.976, 24.16,16.544, 40.192,16.544s 29.312-5.568, 39.744-16.544 + c 10.56-11.040, 15.808-25.024, 15.808-42.048s-5.248-31.072-15.808-42.016C 285.696-26.528, 272.416-32, 256.384-32s-29.44,5.472-40.192,16.512 + C 205.44-4.544, 200.064,9.504, 200.064,26.528z M 215.104,394.4L 212.8,480l 87.136,0 L 296.928,394.4l-12.064-256L 227.104,138.4 L 215.104,394.4z" /> +<glyph unicode="" d="M 256,46.624L0,401.376l 512,0 L 256,46.624z" /> +<glyph unicode="" d="M 512,275.2L 512,172.8 L0,172.8 L0,275.2 L 512,275.2 z" /> +<glyph unicode="" d="M 512-3.296L 284.576,224.48L 511.168,451.328L 482.56,480L 255.936,253.12L 29.504,479.84L 0.864,451.168L 227.328,224.448L0-3.136L 28.64-31.84L 255.936,195.744L 483.392-32 z" /> +<glyph unicode="" d="M 44.384,252.768L 182.72,89.568L 459.552,480L 505.696,427.488L 183.904-32L 6.304,197.152 z" /> +<glyph unicode="" d="M 480,320L 96,384C 90.784,384, 86.048,382.464, 81.728,380.256L 79.36,388.384C 78.624,391.008, 77.248,393.376, 75.328,395.328l-32,32 + c-6.24,6.24-16.384,6.24-22.624,0s-6.24-16.384,0-22.624l 29.056-29.056L 110.912,161.6l-29.216-58.432 + c-2.496-4.96-2.208-10.848, 0.672-15.552C 85.312,82.88, 90.432,80, 96,80l 48,0 l0-20.896 C 134.624,53.536, 128,43.712, 128,32 + c0-17.696, 14.304-32, 32-32s 32,14.304, 32,32c0,11.712-6.624,21.536-16,27.104L 176,80 l 192,0 l0-20.896 C 358.592,53.536, 352,43.712, 352,32 + c0-17.696, 14.304-32, 32-32s 32,14.304, 32,32c0,11.712-6.592,21.536-16,27.104L 400,80 L 448,80 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 121.888,112 + l 20.448,40.832c 1.792,3.584, 2.176,7.68, 1.056,11.552l-0.32,1.12C 148.064,162.336, 153.632,160, 160,160l 288,0 c 17.696,0, 32,14.304, 32,32l 32,96 + C 512,305.696, 497.696,320, 480,320z" /> +<glyph unicode="" d="M 512,132.864L 267.552,315.072L 267.616,315.136L 255.968,323.776L0,132.96L 11.616,124.288L 255.936,306.432L 500.352,124.224 z" /> +<glyph unicode="" d="M 164.864-32L 347.072,212.448L 347.136,212.384L 355.776,224.032L 164.96,480L 156.288,468.384L 338.432,224.064L 156.224-20.352 z" /> +<glyph unicode="" d="M 347.136,480L 164.928,235.552L 164.864,235.616L 156.224,223.968L 347.040-32L 355.712-20.384L 173.568,223.936L 355.776,468.352 z" /> +<glyph unicode="" d="M0,315.136L 244.448,132.928L 244.384,132.864L 256.032,124.224L 512,315.040L 500.384,323.712L 256.064,141.568L 11.648,323.776 z" /> +<glyph unicode="" d="M 256,382.944L 255.968,382.976L0,127.008L 62.048,64.96L 256.032,258.912L 449.984,65.024L 512,127.072L 256.064,383.040 z" /> +<glyph unicode="" d="M 414.944,224L 414.976,224.032L 159.008,480L 96.96,417.952L 290.912,223.968L 97.024,30.016L 159.072-32L 415.040,223.936 z" /> +<glyph unicode="" d="M 97.056,224L 97.024,223.968L 352.992-32L 415.040,30.048L 221.088,224.032L 414.976,417.984L 352.928,480L 96.96,224.064 z" /> +<glyph unicode="" d="M 256,65.056L 256.032,65.024L 512,320.992L 449.952,383.040L 255.968,189.088L 62.016,382.976L0,320.928L 255.936,64.96 z" /> +<glyph unicode="" d="M 48,384L 240,384L 240,206.784L 48,206.784zM 48,177.216L 240,177.216L 240,0L 48,0zM 272,384L 464,384L 464,206.784L 272,206.784zM 272,177.216L 464,177.216L 464,0L 272,0zM 283.84,353.184l 156.992,42.784l-8.448,30.88L 381.44,412.928c 8.384,7.2, 15.040,14.88, 18.944,22.944 + c 5.12,10.56, 5.728,21.536, 1.728,31.744l-3.52,5.76L 394.592,476.16l-6.208,2.592c-57.024,10.56-109.024-48.96-132.416-80.992 + c-23.36,32-75.36,91.52-132.416,80.992L 111.616,472.16L 109.888,467.616C 105.888,457.376, 106.464,446.4, 111.552,435.872 + c 3.936-8.064, 10.56-15.712, 18.88-22.88l-50.88,13.856L 71.168,395.968l 156.96-42.784L 222.24,343.2l 20.16,6.112l 8.544-2.304l 8.032-0.576 + l 10.592,2.88l 20.192-6.112L 283.84,353.184z M 370.528,447.936C 361.856,433.696, 332.64,417.28, 301.76,404 + C 321.12,425.472, 346.080,446.016, 370.528,447.936z M 210.24,404C 179.36,417.248, 150.112,433.632, 141.44,447.936C 165.888,446.016, 190.88,425.44, 210.24,404 + z" /> +<glyph unicode="" d="M 61.135-4.221l 14.485,68.604l-9.772,0 c-36.307,0-65.846,29.536-65.846,65.841L 0.002,382.309 + c0,36.306, 29.539,65.843, 65.846,65.843l 380.303,0 c 36.309,0, 65.845-29.538, 65.845-65.843l0-252.084 + c0-36.305-29.536-65.841-65.845-65.841L 169.429,64.384 L 61.135-4.221z" /> +<glyph unicode="" d="M 342.569,64.384L 65.847,64.384 c-36.309,0-65.845,29.536-65.845,65.841L 0.002,382.309 + c0,36.306, 29.536,65.843, 65.845,65.843L 446.15,448.152 c 36.307,0, 65.846-29.538, 65.846-65.843l0-252.084 + c0-36.305-29.539-65.841-65.846-65.841l-9.773,0 l 14.486-68.604L 342.569,64.384z" /> +<glyph unicode="" d="M0,480l 128.002,0 l0-128.002 L0,351.998 L0,480 zM 192.219,415.999l 319.777,0 l0-63.331 L 192.219,352.668 L 192.219,415.999 zM0,288.001l 128.002,0 l0-128.003 L0,159.998 L0,288.001 zM 192.219,224l 319.777,0 l0-63.33 L 192.219,160.67 L 192.219,224 zM 0.002,96.003l 128.002,0 L 128.004-32 L 0.002-32 L 0.002,96.003 zM 192.221,32.002l 319.775,0 l0-63.33 L 192.221-31.328 L 192.221,32.002 z" /> +<glyph unicode="" d="M 0.002,480l 192,0 l0-192.002 l-192,0 L 0.002,480 zM0,160.002l 192,0 L 192-32 L0-32 L0,160.002 zM 319.996,160.002l 192,0 L 511.996-32 l-192,0 L 319.996,160.002 zM 320,480l 192,0 l0-192.002 L 320,287.998 L 320,480 z" /> +<glyph unicode="" d="M 30.832,438.23l 10.065,10.052l 439.399-439.4l-10.066-10.051 + L 30.832,438.23zM 40.898-1.169l-10.066,10.051l 439.398,439.4l 10.066-10.052 + L 40.898-1.169z" /> +<glyph unicode="" d="M 313.472,448.193c 0.342,1.637, 0.576,3.314, 0.576,5.122l0,3.258 + C 314.048,469.465, 303.515,480, 290.622,480l-52.776,0 c-12.867,0-23.453-10.535-23.453-23.427l0-3.258 c0-1.808, 0.262-3.485, 0.629-5.122 + L 313.472,448.193 zM 412.972,415.662L 99.222,415.662 c-21.512-0.315-36.948-13.18-37.053-33.096l0-14.046 l 387.856,0 L 450.025,382.566 + C 449.894,402.482, 434.433,415.347, 412.972,415.662zM 117.265,12.796C 120.147-11.811, 142.762-32, 167.591-32l 177.011,0 + c 24.844,0, 47.459,20.189, 50.315,44.796l 36.895,307.077L 80.421,319.873 L 117.265,12.796z M 286.363,63.045l 21.814,188.044 + c 1.312,11.241, 11.491,19.286, 22.721,18.002c 11.241-1.311, 19.299-11.478, 18.003-22.719l-21.816-188.045 + c-1.219-10.443-10.075-18.134-20.334-18.134c-0.787,0-1.586,0.040-2.386,0.131C 293.123,41.635, 285.066,51.803, 286.363,63.045z + M 180.693,269.091c 11.228,1.271, 21.409-6.761, 22.719-18.002l 21.814-188.044c 1.299-11.242-6.76-21.41-18.001-22.721 + c-0.799-0.091-1.599-0.131-2.384-0.131c-10.26,0-19.117,7.69-20.334,18.134L 162.69,246.372 + C 161.393,257.614, 169.451,267.781, 180.693,269.091z" /> +<glyph unicode="" d="M 256.542,192.229L 1.083,362.836L 1.083,64.5L 512,64.5L 512,362.805 zM 256.542,277.081L 1.083,447.687L 512,447.687 z" /> +<glyph unicode="" d="M 508.064,23.328l-153.92,153.92c 21.12,31.040, 33.504,68.576, 33.504,108.928C 387.648,393.216, 300.864,480, 193.824,480C 86.784,480,0,393.216,0,286.176 + c0-107.072, 86.784-193.856, 193.824-193.856c 40.384,0, 77.92,12.384, 108.928,33.504l 153.92-153.92c 5.248-5.248, 13.792-5.248, 19.040,0l 32.384,32.384 + C 513.312,9.568, 513.312,18.080, 508.064,23.328z M 193.824,165.024c-66.88,0-121.12,54.24-121.12,121.152c0,66.88, 54.24,121.12, 121.12,121.12 + c 66.912,0, 121.152-54.24, 121.152-121.12C 314.976,219.296, 260.704,165.024, 193.824,165.024z" /> +<glyph unicode="" d="M 119.995,223.983L 351.988,386.982L 351.996,61.018 z" /> +<glyph unicode="" d="M 255.982,87.996L 418.982,319.99L 93.018,319.998 z" /> +<glyph unicode="" d="M 392.004,223.983L 160.010,386.982L 160.002,61.018 z" /> +<glyph unicode="" d="M 255.982,360.004L 418.982,128.010L 93.018,128.002 z" /> +<glyph unicode="" d="M 172.063,193.823L 217.844,193.823L 217.844,148.066L 172.063,148.066zM 236.52,132.598L 282.242,132.598L 282.242,86.848L 236.52,86.848zM 172.063,132.598L 217.844,132.598L 217.844,86.848L 172.063,86.848zM 172.063,255.050L 217.844,255.050L 217.844,209.319L 172.063,209.319zM 368.475,344.174c 10.469,0, 18.949,8.495, 18.949,18.977L 387.424,428.535 + c-0.001,10.481-8.481,18.964-18.949,18.964c-10.494,0-18.979-8.483-18.979-18.964l0-65.385 + C 349.5,352.669, 357.981,344.174, 368.475,344.174zM 144.372,344.174c 10.467,0, 18.946,8.495, 18.946,18.977L 163.318,428.535 + c0,10.481-8.479,18.964-18.946,18.964c-10.495,0-18.979-8.483-18.979-18.964l0-65.385 + C 125.395,352.669, 133.877,344.174, 144.372,344.174zM 107.603,193.823L 153.36,193.823L 153.36,148.066L 107.603,148.066zM 107.603,132.598L 153.36,132.598L 153.36,86.848L 107.603,86.848zM 236.52,193.823L 282.242,193.823L 282.242,148.066L 236.52,148.066zM 365.4,193.823L 411.155,193.823L 411.155,148.066L 365.4,148.066zM 365.4,255.050L 411.155,255.050L 411.155,209.319L 365.4,209.319zM 393.676,415.993l0-21.091 c 7.886-6.972, 12.886-17.154, 12.886-28.519 + c0-21.040-17.044-38.116-38.088-38.116c-21.069,0-38.114,17.076-38.114,38.116c0,11.365, 5.001,21.547, 12.885,28.519 + L 343.245,415.993 L 169.575,415.993 l0-21.091 c 7.885-6.972, 12.885-17.154, 12.885-28.519c0-21.040-17.044-38.116-38.087-38.116 + c-21.070,0-38.114,17.076-38.114,38.116c0,11.365, 5,21.547, 12.884,28.519L 119.143,415.993 L 32.91,415.993 l0-416.021 l 447.103,0 L 480.013,415.993 L 393.676,415.993 z + M 75.331,42.393L 75.331,307.647 l 363.134,0 l 0.001-265.254L 75.331,42.393 zM 236.52,255.050L 282.242,255.050L 282.242,209.319L 236.52,209.319zM 300.972,255.050L 346.727,255.050L 346.727,209.319L 300.972,209.319zM 300.972,132.598L 346.727,132.598L 346.727,86.848L 300.972,86.848zM 300.972,193.823L 346.727,193.823L 346.727,148.066L 300.972,148.066z" /> +<glyph unicode="" d="M 512,281.475l-176.89,25.704L 256,467.47l-79.108-160.291L0,281.475l 128-124.769L 97.784-19.47L 256,63.709l 158.216-83.179 + l-30.217,176.176L 512,281.475z M 256,103.251l-111.731-58.74l 21.338,124.415l-90.393,88.111l 124.92,18.152L 256,388.387l 55.868-113.198 + l 124.918-18.152l-90.394-88.111l 21.339-124.415L 256,103.251z" /> +<glyph unicode=" " horiz-adv-x="256" /> +</font></defs></svg> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/fonts/icons/icons.ttf b/app/design/frontend/magento_plushe/fonts/icons/icons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..04a1a990a5d25257d63f15ec14c1ff9dfe6c3f3c GIT binary patch literal 4188 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 B^Opbs literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/icons/icons.woff b/app/design/frontend/magento_plushe/fonts/icons/icons.woff new file mode 100644 index 0000000000000000000000000000000000000000..02d652643c34809751145ece996f0b780809ef9e GIT binary patch literal 5220 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 literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/marvel/OFL.txt b/app/design/frontend/magento_plushe/fonts/marvel/OFL.txt new file mode 100644 index 00000000000..077aee25e6b --- /dev/null +++ b/app/design/frontend/magento_plushe/fonts/marvel/OFL.txt @@ -0,0 +1,93 @@ +Copyright (c) 2011, Carolina Trebol <ca@fromzero.org>, +with Reserved Font Name "Marvel". +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/app/design/frontend/magento_plushe/fonts/marvel/marvel-400-normal-webfont.eot b/app/design/frontend/magento_plushe/fonts/marvel/marvel-400-normal-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..59d0da2feff215219a5cec8bc37c7b2cb3ab8321 GIT binary patch literal 19062 zcmZU)Wl$VW@Fu*l3oO34y99R#u8X^CaCZ;x?(PuWArPDZ!Ce>E;BFxVC%NDM>V2#3 z>bgI4&(qyCRa5h2=IQoU000{00RZ^_6a@Gm`~M3ZAO#NaAEu;M1ptKnmnQdL1owZU z|H1!Th?qlr{y+EsFlYc}fEmCY;0>?>IR1xY05tydYye*Wt^NlG0EhuP{~_)G4}cxO z1>g*z1aJb_0381*=YLVs|Er$z|EUH5BsFE#{*Mj+w+jT=$^jS`0F0{udRpw6v$%27 zHQfnYMK^_DA8KtucNX?69;5s%JPb5PJJ{ypub9a^OvFOzF(n!0R<h9$+-)5On<ZUB zGEom@xrPareg-><Ac;bI-+OFw!<QA@UK;N6vx$b@X(x_(X9AONVui*A1hvFBJNI<6 zZp)Zm<|QQyUXr!pNF}}Tln_>sPd%H<WT8Io$VpD4lWZHb8pq+U_ntvSkd+)!OrTn6 zVnO}kFj14R!IK?veE*=i`Bz=aP!rjr985TZr}Y{(9G`aBof>aZh$#S-n9R$d&pAMx zx}|ZOX2|_oj^7&mjF&nOaAXM+u6}F6y#p|HL5S3xejpDF{t@-mP&wYE$XggkKd|_# z*bgcdIx0sTNBGGfD1-G2e4|`Ozt@9zkc;XOpPczHqUy=?)&M`Dn2iI{9~_Mv{}?)h zNcv%#UgThBG8tt{iHMg~Lh+;SNPRi!@QY34>?~2AsU86Uuiu_SJ?@2mojXl#n6p$u z|EzEwG0ZnU9L0)jZT!+<SOQ`~HsFNX_i3Lv<+6jWlO5RyW#v;CnKrSqI(>K}ECZ1q zr4NSLh|4OGtsKnUP9G*Gd|H437d=#s#HOT)@1WKlDS{dIO_W!O01>Jlvu9EN5`Zdg zw&ob4^bN5r8gI>+aI#}@zB5OQ{X;-zBBCM-QoWb~gq3&<utmX=H~R0VF8lbd9+ULX zqm>`c;*jfWYNSDUOO6(b4b_!jjJDW#sN-Rs{-W~qs^M<nP~s>!+bz-PnQagrdBkl- z409M<ee7S(qB5*QKWyavdX?`@lt>l>WX2!GNjJ%V>iLLR47hCErJ(`)Qyt{Mk}4>w z8y8Ddm@D`Ls?pYqwo^RHq8YPmm4lr>ad21EWh5rT-0p9wo%!U=rJngDkV#@&mdqNk z;juWl1b1^UTHJ1XQ)*Q&QnTSc`>4<K#5}etwa!IUWk4%%HEA<s{i%^dip>-K6qv%; z+~AuA=w^0);|#W=>u4D$&|I;FWa`RZf>^L7REm-~FF{QlIt3}nN2Wx$$h>g&r#=bQ z{hAz3EFUO^Luc)Xkler0Njb{S`+gZ#*iS~(o<zXML3;N&^~UvC3;*vlU^~(BmiS9) z{g`|#N-KKP7;hJke(k57B64JA8%cy(^o1wMejv!l6e7tVw>}CiR{6@yP`Gjl#>f14 z=Sy047kRl{$ncu{+4p(L<MfCh>{DWdI$4EE&Y!qPRQM%YNx-(ABNr)7?^-0OE3}(l z^Jg62Z60o_yY>+D5@z8`AWdzVW$Ut^F@LUqOQ2{)3+3Rj7=Vhw`yh#nzaxm;ed3Wr zszp|u3;mwW+NgL#L+JV7|9pG&$fGZaKje*ad0zAtH1SU_qeONNOM3NL-^1ymd%W+V zhpB{`t!LecpRXZ#M<MS+V@32ZXL~hIOt+!gjAY``0z5%$v?VuE!DtYrp=}W*ZYzT{ zI2w7^PZzpEx(2%Wuqf5pA5qm+wM&vTyl0}T@WvH;z>B3A&r?M#LFegz7?WEUP8u## z<#JKf%*is#mciSC<nU+EHp_q`Ve{AOkIlg60pk_q%qZ}Nuc>aE8d$jtFE^v^K4PI~ zzA9k;Pm|m?voYt(HcB|F(=9XK1L;clnzb-@dTiyNPq-t8&M#)Y=qQw2bBtTm60aW~ zTtmfZ>edb^C6${_C5>?h(x7#mMA@yy`xUr%_<^@^QMlNQ*aNL$5+CW%_feCPJdSwc zBu!Os^6rSB>i4}BUza@5`!1~CNWC=3X04MuEjd4C_!Vy|BCWXvNm~iDv|iFPpbCX8 zDxV;#vkG|Qtxo2MNz5GdP!LpD)+H7!_+%U<c*H}Zg+<_C%fBo3bqdR{Of9I_$*|@f z3-^VPGwmit#iV4UBjEnP$^0%sx6rNchR+;)fv+JG#t8rh6nTgfn+E^0wT)3xaGE6D z#qvZKHMm8~&xyZ@9(jj9r3|t(l!3@6vjl0Mfh5EC8y>B7s)P%}Xx1II@i&>Y12bLl zEC9;l8KUYhHGJYzl|yK-8WCj<(KIO-#q6ZDod>ejK2jYElHFYAq<iMqvL)OtWyfM~ z+@@l^R3<ry8EAKX<(~&gYrbyAwQ??UW8(-*>q$+%LJ(0u5e~#=objsEDFWmT!Rps_ z*F`9!0N!`I_-huiqMO*M+H|)kw{4<W>~+?JdSI)+MPOWJd%$RRvF2_G0K;DR;eg=7 z(e|tB1|jZYOGWR{RZNnF_iDcm<D=B<pm+$BNXk)3M+MS~Uq|*<dQvHaH_gE*3_mnr zF-FoZ%YLBE?Wbj{3QoQCu8fw+6l)*7uy<UT_<@Ey-8}PNnTq7eZwWIA5-oJ}OY92* z%Q=?L@0x2NHbSUoBDb*nt-NHlh?#4!0flg4v;#gBPvR_?i6@T5$-IHt`-l5cT=f;f z69Y$Y4dJ3ti&JuE@dEWfmOdO6XpwV$Xc8#^6zP<or2%w1;PY01bodH9Q-4_Mi|S?K z)<q0G6pWNvn^=jT5>6zGMSs@tSTMo@d4PQLNRA758J*&&vvph)DAM@;P6<W5IAxhj zeKPq}mBJc3Y;%mtxW|HKFLJ?4<GZ4B@bpUaK%f+z|D;zc$=qb~G@ff`ua+Ifc^zrZ zk0TxWp(Y4NWQA~uCYoB@cPgvr5o31c9IdD<OBR-ryQUYph#m>ST=JxU5xJ>UBuFni z>X0XE535F@5F(|7KPFZ->_7ryBd#2+SX#&;o2zXFnjt-pnPKO-)%-;TFCl&}{D*<u zw6Bj`O2a+gkq1L+nX@WGYyEaAEpToT{rQu7?O!hC$tyWcO?rikJq`Ra>1cBsr4Yww z9!-m;4D{9amJnr~OMrVa|JOzuB{`zIExyEAPIwcx{pMAm=)ZlpG-yRx`dX*Ql2U$u zejtSl7kHkfbD4*w=GuBO<GFcYHD{tKWVUf@`ap6aK73n*DkJXoAfeXDfiNOz1;3U? zP{@c4yI|7mUz$mECGb2-`a!^gt458CygHdxU+%dw&ZnrsA#uyeDBYsTfwJEQYNrX) zWl7&bnYv3Mj9JAgjVtUs(%4(5M<A_k^;p>;He2~KI|P?#rC!R~^Ir9Kem)qk8$O~- zipGK<h9pYhh|MH8fgFFfM~$@4k`us_MF&9$!x$2_>{UQFqrbgs8X5}Y8f4QihG!X9 zm4mtaAYYRxPlAM=!M|&pNC^9U5ca3xx&E#T?-UxuRpow(PPHt-SlT@BEj#p|b3n^F zAs39SPgvQbu+-(9v%k6J;3QiSp<+(QQ>Ff#?GO;3Wim9^PMIx=8N+na8ZAA2j)vib zt6)^aJqQ<*%(Ix1LpRGV6NOy!tIY0-6c|o4fQwh14^JFXq=y^_IOpS($KD0Y*2x^{ zmT+gd4_+?{jC}?tdukpu#Gboo(v5_FGWa-rd^$@BH60d3Ibp@yk|98Z<$Ll0O!|?} zsf-JB_zK<X;8Xwge=Mi^t{gHN=_Fe+z^N&u<A}uj0YETMB|pcV{7!n_Pu9vbn=(zA z)Xg6o0FT=sQ<!z60>>MS_@t2k&?pEr$dKkgJ+b_!*iL&VBvpj-p@tCUyjYvw-(nU; zY7EEH;Hnrm1YGQzzmt01T`qq+a!2NcVMSHq{c&0`2cpF;jGHi2C7E)wUDD*`R?@Le zxs=p<Io@p9%Q8d;9A@F<FK-!+wWgx@`)n)IpQbszK$1(ZDiMJiReFIF=sJYHq=Cl> z{ywkVl9O)Q&9+-Katb;t=f+rhv_@N-(4&jv#KrK8<D-3(KeMD{(j#CN`ByQ@#Wi`} zOakQvGrJSlq9Vfzca>_&?g?{~f+`Ov8NX<OCX^&ko>f!3W6OYOp`$-bzTiB;g@P06 z#r1K+AoTI{Cs9af<=cqjJp|%a<*jHEa-rJ_+{8$o%Pxo!9^7Efn1w+>tILpp6K4?{ zvcAZiFE1`-Nbnh@-knT)jwH_@;H91DMroSpJdsF0R0!T4E-FspA$fUQL=L$0SUB<8 zba+ODq?>cx^`~75qXQ5big#JUaaz7r#T0I6sh%%&>U#NGoZN+HG2Ndqf>hyL5B%#7 zFFo5UD6B75S0Um{XJZ+fmPFZls`VM#`tDi95zrKSscf?F$~H=f^7CEAGI%ERY*HFa zbKJMXkD*O7m6fFUb9g^3K~*Am&gq!1Wt{KG@>(gANAW4CLrykH9GHQ2VHl|sgH)YL zV(z;{Q{C2PW~*n22Dk}8OrQZts$5h777*0DD{o`}0e;4M=Z+&kH!mu>+8)r{dE$b( z9V}{LSG~d$1eg*Tg6c1cH*s7R4iOLVrBN=A#3+wh00imqG(Y0SsFqcKu?p9sqMRvl z_FrjG!g4<$S1G(&M4$%CIBpBAMsh+&Mq!05RJ-Q_%mszfb<VJDaY<^2i#*K?iY4xC z{^g~};}vsatj^(NQB6_#y^ObP$Ee;%@9N4~{sg)&2;tfJYh)|iQT`mtX`C61p<cq> zuDRHX)zhQGd$JL#&x{dndV?0&vEHeE$EmvKfLh~;f2SF@^^E%>|6o&C)g`XJ>l!l= zpLOY(Z~NabVm(IWiqunbw!J+?YYy5(lD_k%dQuw_L<IWIaGv1gPGFV+M?-vV?@k2> z-&V0LuRS3AV17%UFV5I!&xMFW<><`fh)nYk>c=0a%qtnZeTMLtKTAxF7wOQ_&ye}s zP5fb#pXNrW@48PcXyRrN>~#C^&U&0Yy*TL9n%chAc>(xkkGs*`E07H~Wrn_t(}j+l zHesOu8z$<k(Rs6?$BPOsh%24CgRbDnN=?(aUyx7=68urh78p5md!NG3Pp6je|2B?O zFif4n(2*anB*A7ym1BoP4I77tMP_MvX3g%HWjYO=W29rn-$=<|8_@;pT*WrZcPZc& z%aW~2M1isD)1xmLE$bZN3Xrgt|AnZi*q}<fS;AivBi1}TP;T?ov(#j}jjxs?;_^{p zVW7)tMwB&lMy!4BuKfzfSY?PwKxl^N&9U*ck@8H{mkHJb?t6-MmvOEzXPma^#XnJ~ zNES*U;y?|E=?o%7`_VFsj65An_V74PEG^U4Z(Kh(BK-2fSs~Pg;bnb2Va6yQ@Aba4 z|M8^seRt2oHo2yl6RG0goNWvi^_pZlmp?9XtWyxp%}rx}S@NEd+&D)dRe?J5)d#}- zI5^Xh!+CsRl6IGqH?g1tHgx)y!hn%4aCs`No$S{@WOAiu9`7(Ev|HZ4Pf7;<Jp5q< zmeEBA9y-l;qXVaK!a-Z3{0j4zZ1EvQwom^UP%x!w(>}J_j*d5-K<;AY(&la^UI^2j z3joqeJH7zpzn#RyS7FchxfG3Rq{Qy2BCaOxoodRq$wmX<I1hrH4g)ABg0?9lz!?Xo zbi0>#xlX|QEd*1oAT9dHg~%Z#RU1}obbn^ozKSn-=7u2{;f_^6Iq3ALvF;Q&-1du- zY@8bTBSIGH?0$MOrVPFzww*e_4k~5e2)KQr?lMk3{v7gws6yB?Q5_XX<~=OBTj4>X z@n-=Wra$||ZppRQsR$&1lJX&&L%qNdO8p-Aq?z`m)$^7mDvB!T3>`z)yyjAtnx(@h zTrFnKV7};@=&US`ann>sX@326s5&ty;=3=?fs)_1Tr8oA<U(`G_GoHh&Dqd@WBT9_ zin4EXF}mogR2SNz>N6W}&u23BO@yaa7#Zw7*mSEUqudhM3U+kCoF;tpwyTJ0Bk$%i z@bArvF;-E&xAvH8d71HTQSh|`7Q2O;bp?E${e1eQ;IjaPii=t%F6>4fUEHVI+mAK! z!|ubb863=R;yCoSts965@5R~As}7Pi<vX`H%Uc737}lkN%1oT1*Y;#!R;{)V;V7R; z()`}&?q?1=e<coX9()kzmI*}wQgax^er5Sb!?2A`AcSFkHc{**hI~3aa$IivmEJI9 zoagJvO`;?2-&`=i@@(*p9f?SHlb4H40oqM?n2*c~wdGqj>ZV;gxgSH`X_JdW;|PdN zgi+$EF3@Hm@G@*{20r3a6T9>Dy?U{3Zd#WuV|j^zuCNgyJ`qO*3_?+`0|i)J-U6E# zQQmNa%2{T@1K`(heT;HlHv%Vwm(bx)6qYg6WR|2RzAm<xZIvUQChXoOn0s#&LApfN zER*!iip!V&MK$K*P~*c*F{K9tix3L6-#*2^snic)&N^)n-rtr^aLt0p)|}x4cRN|W zNJGK!X-S;bu3(8?4D+R;PwFq{>Lhb$6c5i23<0r-Hc((uCmCO5xo0AdCKj9FkO6Hj zR|uNA$mZhDujcaws49%euz^4P!1zfFgpl^HJyR|??T{Dp!Y9X_Qwb`DSHVFle)tY! zOd7Zxr$tCKo<Rn>HUBq|_YMno(m?*AWX)x{WrZi#N62FiG7!UhIx-@SGZrEnDkEr@ zG?S>0lFLXznGYUK8NE<>iyyrWakJZ4bB?zE%#iR5;F(-%BiFK&&H&_NS(l;gnG)y| z@qCmwxHinjwB}Fexw>Wvj;P}ALx0nHLZwtEo9A99VB<XkszQz6iyv}>B(!*aM~I)% z$}Lo+v{uTBVC%egVv?oYL-32(Me)jp<$Q7ogwBlp!#Y6gh|2b@+3H<3LYji6TMy}w z9+74Fy{F`lAJP5C3K^tqkfbseo{Y&c({4URhuTZa;0#pZBf#5K`4ah7Ell_%Iy7OJ z+QE8-5SL6eH*ymZfHv$>i{n#6UH5s4yCQX{E}<YS8w3Zf3#SY?oS33W-wDGLxm4d8 zt5c`A!&;sS?tMn4(>J-O<&$8PJS=_dB1NrW^D@_SB>qtJO`-@qy2v=l95vp&C1*ir zagX7|Mon8cS3eJO84CA95K-^i8BRm-JcpkjoY!0NqII^KKZz&qn;w@@T)Z#eq-Hyz zja9`zb+Odaf>D>qGxpy#tZvEoaRC4Ow*4X3&&EjvKbZovTFQXWW2j@1#3pR`;|DJu z=jMTKnNJ^Uo-KZ$HnIJn4|Bl5V{Z({-Lj(2u(gSm`zd|c*dyymxRi$n<0~e5A!%RH z$Zae^!!>1#C2TJXR!A}AT4hwc0G$zi`kpB+5kku>o{+Y@T%}2t)I5i<60Kz_@0h&c z{*}HD{viHlF7m#lD{VdG`BfUqa2GQ|0n8(0NyEgQ0}aBrHI2*&(f@$BHC*t=OmE*2 z5aTeTpDKyx(B4~*-^6;ZLJEGy`=oG!c9FWOF|1*VZGvADu+U^jl&EII>_@$6j@kb> zJS&nIBm^2uQ6kU>>8(AcXJzpje!I5Xpa)}${#=x-ULnL|mOe169v}W$3KK1)M&Z{C z8?5(zDb6`E3fJNy4o6g0`@Hei(s%5EgbbO^)q0@H^@6&RK8I}Xum<Z{<ba&sZywf| zPBC_ii&L*wQYa)OtA2j29C(qaT#;xiS1bwl2LvgJiuvxFkCW?*1uVXt;ak|P#WA(i zhqp)N&|u}h#n1Jk9!VTcVcc?l?`_N1^(5vWcX`poJBZr8Nxvo$K#*o6aW9o9elM44 z70+<*snzjxY)_lt?Ef~siI9cN`Bi+K<}R<k0<q^L{2ZT&en@nXOzEo&dDEMwj98eB zeTCd7vSs6pl)QR;%CPmOI}xANQ>|1EJSDXFi!*z4uuU}bw^usVmNd0+|G@602zv$t z_8%<4tgM;lWtx(Q?5(bW)NURlIrIo>km97tGnW+WsUBvD@%GWgWF2wAwP+mB+N>)! zAD?cndJA=bO2cDzgMvbf*v$Z;;SLVnYxaWoF%A*9$;<}Pqq_Z*<Z_X8hB!X0+$aM5 zZLA9e!pOhg%2fNE4A2VymFLFlO9HBIc)ozr^t6!8P@DrMC1)O`qq@tycoJq*3e&!Z zc)x{{+|bvcv|U)*UeSZeZ)&6x1diqeTx|=jd+h0m5`kTyXQ-*d8WNX=gQ;*IIwiBI z73CAxsdDf8#8s~`*I(~b3Uq0VV^9|Y8lP68PszLyNls}+Y_p5RnA(!f{N$m<T&oi{ zqE+1j^~o5zNl>;!sC4l`=rTanza$c^2@vHxyeRG}g8GW{a*CFlV;lPNRs$X5KKR># zHg&M15a+8r*pjlIN0F~ENru>*^K_{B8D5`i3|U8JHI4y;8uOfN>sf(`Y=DTHCir1a zyu=$J?WG^An&B~svakHtyy@BQaBa8*EjHbTwN~P`3>y9mtuA;G&_TZV5p@I6CDD<I z5yjEk4D>0M|2Xu!-hqypsWA+LDv7RJYXBtKj}h}w3gUg%i9wE&kqci$t&;4c$H3@d z*+2q8p;5n9naGXh`RgxRgfA0_1S<*UsHZ@OxR3bFqh$eQC~3C2NC9_DoDtiVl2GS; z;Ovo`MQplVkJ)()lu7>+*c`O|5etZI(=5hRa&79$2DKK0z!PX87&TABov;v@`)2}a z+FIE<wr>Oi&6jKCw{}p3jkh*9whCuY@2W?zqQMRD`TJ-4gG9CV1x)PdSS2F#cHo*j zmH=FfW;-HtmG0A{AEnLVaR}7Q3?qD?v)!xFQzS&Mb1vR;0q6o5%rFPy?>B+^vS*YG z7Q7VhNHcJ*I8Wmt?<65kXQZkP&6+(U*5xR#Af6N6YKqeQqvys2JSD<Rgw#4Y0(ndt z6?iphiZb}+zYi>Qr<s%jc(L5ebvRU0hFR;h4N5A^-@R=4X~&}bA_}|c<5CoL3$yQi z9_E5hMQ9A32m5gmW>s>5M48gISPOsMw2yi$CFL{_v&x!AKX4d@B>T|>zuHvCH?ZRP zE_g$SdPsx{akV53+tL1_HsL;RyBqG=*_z!yVTS=-=?F=>JDJXHmtweL7D<fYGg4bW zg$qTnNR0(}dsWh1K+Qr1DEHOsO7*~=C2{rCNcCD~-}pn&O5aRbc+*fw^@Z@$DtDZ1 z=HE4>E4Mu0<0kEGvZ`*GK>}asqXo+HX#*suNu`_x0c>)(I*9c|6O!cZTCe~qY>qn@ zaf2Ys?`^0(c-pYMU%T;+S0-=L<EoJ3+_$eyChiq+K*-b)$NUAbhf3MsbmmXoqWMto zaWdBBu`6A%4dN*SKQQIyBc7p7Q`k|Tk4+SOsB^a-dEZbDFI;a2olku6Sl835p+mPk z%l>oC(CoTN4+jY{HHvp~)fbbCjgc#Fc}ZNt%#^)c$sw12D4WXQzfbz?;*!5FX}&V| zZ%^Gz^-M`<2Uw4$Ovv$yW2ZeUHbS|yn`hR0uq8=P{0`hmQoj$w$jFGrle8Pec1?u1 zi{<+b!>8QEF9Y?>ocA64s~#sE0{JIGqYo)USpm)cSqyw)#qxyTSdbxhUASb{!~j=z zVV;TxkkZ)$mW@fL6t?3%Equc4U*u=tMLXT8JRN0Fev*;9U=*pKs$>iW6=@$lPoij( zBpodsJ*cWallZ!s-uAr1O;`LxJ-6Kl{Fm{E`B%zKe}lL<9iohM%F-(5aTv~0>H%G# z3&(2m;E=-5xnQ!b4fGu7)<bim5Q`<>ebR*DJq0y-3F28lJ>f#MEI+H4Lhr!3ItSF1 zR@4;F4n(Pvi_etCs{N}ANqexGXbE1)>Wt3ZUD@R~uPp+2j(?e|@D^7Q0j3}N<EE|a zOv^<W=HEmta>Sqh%-K`@@rR!4b?s}Se(L%ZRn5wdVIFO;R;V=PV&Gv%C>pTd|8q0B z6>;1#x&jz71efaVMM;f8$n&^+|KZEJ`0vgpWB%VtlKa)}Xs@rvgZRI=&UCI25D?tK zeJ}7R*@w&NfVuO8P~>%Zsp6PM_%b>D%-p6yqo43-C|e3ca&j3YYvp5*1P6KGy<n5* zl-I=|Hp>*6owtQf8e$t`Aj9`v$4f7spo7r)rQ6RP>Ik1qs`V<eZ)HNPht0~Oov-qg z^o|^sjMy%9Mi1jLM6kFE?-!^#;ZPNGMe8jHbB9>$2`Z1L;SseGaj<!Rexjk`j`;Sz zdGj9$avk&u&K2y@M;Q6rm4OTAFWiT?4tQy(z@YnXc#4ndeOjyEO??%rK6O?2DfU}Q zP?ijD`X;6FRD6k|90YicR|%;g#f%mJ{j95XnvF%aF5I{<?ea|nFa=95PrdzCL@P}V zs7#xlCu);#e{~0p%)}tS=sAIg`E-p(N2P3x#k}GJjm07d-C!3gYyDig;YT#`izC*6 zCa(k9F$NzaWBAlPS--Sb1UYz#g01eHTypmdyp*XM50nh(Z`~Lq<q+B?d>dbc;IOh# z-slGZg?VxmxU}9wU0t{ak)d{J6tW<eIrP`8A#e7w{peoKCyy_txNn*5+Bp$$Mvo(8 zhFjlKnpP!G*$T~l{Va)CM1qCHuaK?qZ3oG)b^}uVXWSr+7<d7XA$uo>!ghP_*VFx( zL=M#fb<M}4eM;lmpxg`R)1U@a6(7xVPX!{cD&qM0rIjZ`bLCu#xRrl`W(=*MsIyu{ zT^d>HIJyJ#Xk}waSuXuivdU9~)-sNmiBJ%xrWt}So?+h5D1~XaALT9IxXNc5NqdUi z_YcIqgi_%JLD>3|8`gLNl!PatP<gWkz>A-0LF?qI_#olE`5HIXMO04VSJmIR_H<Wq zOl@R;L~5`p&L~kU_jxv$i(`JDtT()PN0o&BiG?|SNt|NsYWFCN-ev|3sI0_5C}(MW z=x~()&H~;eSS;g$Wz;dOC8aTW#a#{#SN?kX-iO_agzaDNdBxf{L_Z)`sXJy_paLg5 zs3WKfhrR$MZTNpH7JsqAj!`O1Bg<e`%3s(~&iimFN_|O8NDwAMK$O|pVtUoRzn_$~ z&*EEm9iGLdPR(GJCD9mGYK3*L7jhG#R4Qm}ATwO^ExqbKVWb9x)~gQ(OxPb*H*}uL z<$llE60V*&#%!qQWQ$rJIe2Agrkz*M5-KL<L3vZm2}fT<4hI>j9vR$439Ioax>|Ad z0MB-NkX8&l>MZuJJaZeKv8CyQc0VTM|G8zu$>1{F=F+g*k<`PX2nsZaNuRr27zp(; zvlE0P&2%H-|9fi#-CwfbU3ZAU7~dpQj2?@CaTIREzHv*E4m<Xr5l4aX>3eA^SUt0m z=ctV&(~yb0V(pLbz5#1fe=TxS+C-wrB*BqlJ)b(N*Sh4WY*)s?xMH=wwXP<I+#PLD z^L_XtQT1BHzSlY@S-ke;Po~_&(5nS{pj5P;qJ80oQ6}mw9<@}6rAwsxb3=|81h*-~ z1W_%n@SZ&k&Qy5>N*&^ZYf-e9vw%Z1yDc>Yc}~YM7N(kxmnnyX=ws8WZn=VUcOal1 zXY2wl+W-br52jvjO0~6+&Sqn->)XL5oPqM60pe)vL&glB$g*+Wxpv2QTA^%kh*^3~ zsxf1VxclH4(LIkpWY;g3CZb@z<S-@<V{G9#>Ye1D2z;yq+_M3A1laLp@f0BS-<_}j z(U$06+$2JRrhnLxoDyiI>;>{rAZ*@F6Sp#>wC<Z4K~HUQM4lJywt!InClxWy2`rs} zg0-+6V>q!8L*iQa&TxF!(l1hm{z?6;C|SgEj2{(gfEK(&a^c-&%fx}cB{nU<7s2$g zMEKt{1r}jHDN8CCTW+`1IB~ON7{xgOFDAA+u(dk?5s`glDiyjVL(-;Ug0);ED0Qml zq|(9Bv%pft?}R$FK{C*UlXMnjZHI-<nrG)GN%(w^!HElvNaR`HR&yGB1Pf5L?;N1~ z^3NacwU)n6hm#Ik2u8q2r)q{ibm!lA7xf%px6W>INli9K`sPwXHM!ywv0{YOTgi|C zWXNi(pRM7(cQY<Wj=vK+wL0c-ujPwN_aW~t#)bgOX@sJg&GR)Aa@#9068S2Fz@yyY zAdpw<G?V8rJP%V07?X}BwYqgw#SrniG^$A4*oSCm)RzcRoP;E~x#mmM^hQusZmVz$ zNb$Za*>+R|EGb=Ty|w<3+90b7;bQyR@lcYw2K@BA;7J%C!Pbr3qg(1zU%V}q@YHTl zAakE<6HLLWr>0Xs$6YuYG3Dj`!*c~SWg$6HAZ?|DqcB@FFD6tCIrS0Kw}^%qA>KKh z#O*d(Lb{nM%)^1WlU9fNTtYt5Akl%#_#qJJliy=h2u&rrm-ah9VfIIYj|o0|T)Qov z10;6>^Vllj@E?l!X(np4lxh%;A}NR*b=Bhb*z1H|WRdu8K|xKgXQC))Dej-l0MZ^a zDpYYq$`$4Z!-HSY<~7U`{;cgOb-$6=H}*R-)CxEg$H!3WgIPuOiJUl<UJxe<Oxa;m zq@9LTS$~Nt_WU3N67j!f3%_AaZ?l_3MN^S=<s|SiuZ#_IJ97^^gcIW)+Qh<6^WLv1 zO2LC8gJ?0`tnjv>KLKCWb+0#^EZRP`ZdK4*u<B%=OnwKLmt+CpgotMY=HD67Jv7rM zdBn76#A$lP{SmSv5FXn^Y_`7eK9i+iA0OSEM5$UDid_iydFzW5u%I@D9<`6uRQiH{ zan!Xe5ZxQ)W0m`<E%7Zh>(j4nSST_94JK%k8n-gh?yd_=WShL+Eb)+A&ej^~JYAbc zX~%zNa^Jy4Jb9koZi|S`M&+e(eMq3QT&y>h`|TN<jtm9mj0U~RW0iu*_Zcy;Y1<;o z8u=#&7f7KT`+}B#@@wmGY38VvEQ9c2pJNEbgscQt>=B2R`SZv>;^L%`qFn?ziT!H& zw?CudkyVk4Y`?TW&S%wA7iy!*ryHfZFO{@XjhWIa!>5zXh4YcxwzW<@MqKK$6aOj8 z!Kw=jP>DyrkbHG_;#;{|nqy6`Fq{*gR1u1I1NRppgRq~}E;64_xa7}#On&uS#vmv9 zp~RlG)_;uyYE=eU(KD!2FK}EL@w7(w?%kYc!-B}%L3a!M`-J1j{}iqiO-Dle4`6CV zZ?|?F6|jafhNbl+jA={b`&umO{@ZFzCv_hF6{OO0^%BPL=|eO_h(<fV_MIn|E&Fdx z8MfWV=CQ-)8uA}}v~lC9Mn>4pz?{r}pAholAGmyB%LBZoYL}*Rj@ZuA;Y|Ei37AaZ z7(9Q!16I>8I5f{?$Ky$+e^6v_)Y_CQexp}{LG6qAY&1E@H3~v12T({%+dw;U+m^~W zY>`~7@Lt*oPK$d_wS%#GUha{{x1vFrO4=j&BmX_<btl-$SY!=2El)-end!1TK#0BT z2<H`t;4aI%&scXovapHsUY~jlp8?M3EIM<;p}V#k>1!4{|4&*<*G6ShpUqwP>ASBe z#M36EO&JU(`q6jqaAKF+DM<S*)|WYjEFgx5FyNmXia#APD!E!rmt?|q<+JUAK7{c( zVXNni_kZ6clgG7<f0y8qhU%Jv=|rS7I+-kW_!DeKwMKIX!sQorGx#5xt$vWaoGg#q z?`nLkBViMQnVQS>Pet5V<7uy6NbXOkWK)xxI0{C=g_=+-ul;q6v78A+UE%-dXc{}F z__jQ*@BV`&Pe&@hPmJ{ZoA&jH^A-2i{(A;j)fh?^3Y)y9b^6Zu5dr}|ohWR7IDkb- zMMp`iCC>XGcU6=y5g!&2Rz}D3m-O3@w;6Z*pkdo#i3tt1dzp7IGB%@|y?QjA`;)Bf zZA59OAyDng(=;udVArpMh58ohzHq{ZQPqG0>-LNvKt^rf+1PqrpGHi1@b;`e(L{i* zAuq$ShB<y7K?2sNTmvec=`v}e3}_jn8HV8fVUh)Ez+r0})cV#!V&^M$LNNMcKZ++( zV8Wco@y1nKV=S{_ff9f_x1K0v5H;tC?p+rl6MB^dIoWKP&*|EYN2$P<uR*>66rdfU zqu#D=Nw;1t%$Yiy(oDC7Ig`)XrlI4&(WI6y5(~2PvxzE_`~pg;sa-7=G+KfEoxXUy zo&A~;XxM})ylGfrzGuJ=kW8o8fp(u)h%5&y&jo87eo*K_p}~VEO_Z5K<Y=Le1GF+m z%8m!|Rlt_ZyPCoxHH#lR($*XIEih8jtaD^$=b1J;R)Y&-M3cOfvLlKb2#JyyQ!FVq zlT36kJSnF__=Q*f*w?$NyIh(_mBLV>N19u-dK=oKOvCsn^l;k|9_H;UaZO_m&+k(+ zY*GHZ#?oP}e@ucOU-7dNlMiB)x>O!H>EOsMPCJsgZ~pJ{(IE`>i@L;!tk0k2h){e2 z3w`LZ`MVRaZj}dTdz6CI+e@kB&Pc}<TR;P{TpOQV8FFxs1ccEH>z|Su;jsBBkVk@F zs=1M;em<q>>|8wR&$4VZ{5n(Y|F6vy2xkhQ^J?I}&c{y!qJGb>-*wAHkj$CK(tn{A z<cguuhU|;W#;$=_NT}VV0F>{2dEVMM9cl`G%*A}0P?AO_K#ho(*~+Q<>wv3eZNtXO z%^?%+jvym;UKWUOFn*!R3jdr|dG;76b+(STZ1iWerP#joKuFhd_QvUvI7{%hW?Ld& zrJF7=p2jQQca}fUv}XbC=jrDG?vIv#BZjL+%Y0V;@_olGlwk<4{D_I^QX8kx8;W_$ z@A(G*7qk5u=oQ&F6v+<d;sCa^HmBx(s7!TP{@2cLap|jd8WyzYG>5;`F-KBE<Q<A$ zo{C1>m_v7&GP7k(E>%J;`TB69GEIYz!6i~@sBf1#Hi*+11xjl|bzm&Ug^GJs7w1uu zJ#NeAP_i16V?7js0LFx-M6yqW#5TeR{12>OWKeCWKT<a^KDkrT@#Tpj8Gy{wQK&O$ zkdR|y%t>G$Fs}qt23}o<b7G+Bb~0iWrvH#Cq9uJtgaH{wVdAEiqH30WDa@ODN-_26 zd$CH>=^ZcP?+j@6Zl^vdtRf3=LbZHb909ZbAnO6SmN><BG?ClNWDIEmtq>+jJQ|#$ zRCK<?qda<(S;2TE>!h;uGS`p{$=q)om%<^~>iYK@t7ZdUz2f!x4J3j|t?gj0Tjuat zg0RA<Rgvyd{W8Ry!I?a1I)8l&k8XK~o`Iac!01NBuMas`j*B92s|^Z|GAGiqt@7<t zX96(n?qIoJT&E#b+EJzJHk3JJSGK_ktcZH(-Czg9A)eRtP&+UQZY8|XYA&7tF<jFR zBZe3*OorK0CHfg_7=jo#@9|Qt`%Hm!M)mqVrj6t%f~W!DjsHuKQDsMkJ&P&d=>`>& z3e)Epg`~f649EX-#m?od>!@jF(gXRLDgQ2qcAb4Pu1lu|dC-=1H--|%(+E?~O}c9a zId(n{^&6ec{Q8WWwDEahXlmFeG@Ozu^3}|6>Jgc2yoR6jtXw(ZjteH^WvS!(5Vx#b zAvQ9XvmOxY_`%F}UrG~8LvAR}LX|<W;uP>AUQ8dI$qU$uGG}C|NUn-09fr%CgpXpf zh&?dvl(HZ23${AxO$m1H=W4~!-uDM76Wwrzci|{(74<N2%>Kt45IHjY35N3s%Dbi% zI<Shzs9YxDAou&i8daM_kc*HwM?I${$pVGA;RYrY>00q4w|L=k%5N_zT5q5DvP5LC zWG{}>Sa$_lCAK0xq{&P9)1g`@gm>Z)XU|BJEWsgK2*WffyoBpNxlUhne3!5x8_Rr` z9PK+6?KL&!CX6W_o9cg+ly~A^GPL6Z%^WHG{>j5aEI`k_6*F0zhs=Jybhp?lxG1De zzK^Eka!9<<-vJc}v06|iAGL{3`da}y)W2OK<j^Bg9-K)0j8HkTUeFw~zYYv76P69O z++yMFeV8UfL{>7%mD8gGRr7}r+Isa!UnWvv@RX&EP16<78jvNsFiei2Z{K!Bx}eHq zTpk0@*N{|W2+<=qnX32Jro9jZILV*}NbTAkFw=+=_^HVK_7n67UoUted-0!YJf)}; zxE2OOIL1t=a$4GS1?(vK&l#6x51BXF(SMNFd9$9`h7yZ+(qn|IHjmmBs#74Tw7Hp2 z3Y@$)shk%ha!tPfmfp?F4GWg|eXBIVl73upWDO&PNg6dNL+Xa1#^rh4It`Y|LM_IG zT2Lg0iCp-QR_(SASNqbHG&oa4aWM|I`5;T(afgiO(8%2%QC1o=RahVHbe8CFMJo)w z*q(6K&s<GgByfAzs0J$4KB&E&Dp&FmGpDt0F?_6rx>rlTpU<~pkwRt9Ee(X-zJJtQ zcy0+A{zK}cprP()RGt5H!SZ1qBMxrm6tAb-_)``MMxUJbUoq3#{)i&EqBu<K6YA#( z%d6I6lLTl3FkaqS;0Hx!V8ze4q|J0D(tVeSo|8>a%jf8Ff$&R$bGLT9%CAh6g1?3N z#1`1(?KmI0WlmrClA(@QYxgnPX94|Uok7pu@^c(VgT)d9))oUK^F2tdc292wB|@)e zP7?H^U5Lno(pne*HGXRwBx(p`N}j44wS(()x`BDRGXhM^FmC|qvEZ8PPa<bNKstNB z9yJ)JGM&bVkRjlA79sH_ZgHsm*j9~&2q0(zH?<f@wM48TM}***{YaOf@fa}6ZM0Ik zr6E9BEw1P6@Lg~1(f>0YN;6pX3gZBv{P=h08FTT5@%_&p&TtjGd_(z0H{=fu%LgC8 z>~>LtK_{2nyAS8AWg8tNBA>7V)5$Smu>hXokLARURfM!@Y!3b&mPDI*qxobY!eqct zVfJ*qzu!9$K6Wt)`VW&!e=0pY0i5+>?7f+qDFWHp-a98Lakz4A3@c@9t*wT-5YZMB ze|@aZw<pCa)kq(~Ope2$-#>fed!&)gO+o=}lwgr$k)?Dsyz(e)%xr5MbKPD&&87<f zW+ZV?yMd}9+Qct@j5uFdPO6<pvnbTXo&N+vbKA={3#kzsC<j3nUl3KvrO{>$csU0I zoO5~b6@#j?4&0Xv5h_v;$b)nsF}Yu}q=qg$F6056Q4ym9(4(Gm&GP*36EF&On?G`s zRnC)UOu+Fda>Mq8ez^qN*!@4_T8+4rV>{<yIs^D2P9}A!?q!xNm|Jc{lVH4X{DLTe z)*8Zbz6;5vL(d@M+QG$q^d6jN;0zPrIK(jyZDA$zQ%a-9E2cH8PyjO@;nSjyjlEuP z<l4F_wn&uWTSEV;2`p$TRuBJ#bYjlbx?Uj4*3sqYFUxUf<hPT7`8umOCO88nCM7TV zrI|Pcq@UDxBvX&nD&+0qb8=J}S>(*Mv-v!KxPDYqqjnnjErqWnc-@phv#iI4ub4s7 zJdmS|u!Y8-kgI=Cp7fb*{9UkXhLZE>)L@Zju7B(tg1?<BuxOfsh!GB{oWNlDBn-{3 z;L^(UVN?tHbB?A-xr@*)pzNC89hM;4feBL|@6!_Zqv{v6*@P%sWaL<LKZcZ!$L8?) zYO$jWg*&ki!mrR)PzIqt-cfv==8wIoNar#@Fl7WC<BVl)I5_)PEDxn~qG_gZ);RcP z5N>luQkNatyFBaPi!$Mwj5g|$GtW%O2mBEG=39;i(>c)c=g-bJZ-GyZa@m&`r|q7( z%!+}9$id<R%u;qzpLBT$sa?Y4HDKJ?(?<Z8Nm)^lEsD|TKUKKJU|W>M8rK@5z*J4e zEhI$xBsjEq$=?vZ12{tUlYy087Dnq=CAT(!a~}iAg6A+fyO>3SkYAb9L0RAqVg@!k z&h@qK6PjC9g?*?ET*5c+)4(5ow12but*B;M7O=Mk_+ZSnXqNKibQ0;#dRd&u{q;T2 z5cqy`0}oa6`N>h#6Z4Jt*gkCH$_~?Jtg^#`9G-jS{?4GamY+T!BhVc-!U%cW3okD! z`8MxTu^;A{KP~=ikT&_vEENj+K+;EeIm~>O8}6{OX&G^nB2G*+YGY~)wji4QPJmXC zq9JB9#uy+;pm1~=60&>;2q8J&x?SRv8Rq@LMaLUrY6OFatT*sS(z*}iM)CSsOqDLz z`{?)chZGY(#V)j@N9fj&Aqx@^6<2V?cSbE@gL;ZAduwd|R7GG|YE-4Dt1&)O9_1Os zws;9m(MS;g<BNZWR3*?ieP48yKtagWO!WY-64dhGpoXrtIyYWJjm6QF)AUlG4<0-4 zVv4{u<!$!-fq-Yq_>vznA(2Dk4+9|mJepl8dNtgYBtz$YLDPXZ*Bu*$QM*L!Rs;S+ z_libB<{7g)RByH9&oq{mlR@-_I}-7L*TwPkex2m$Q|gO`#hQ89!q2SIRR*ZYx2ebV z(gu?KYxEi#((_7>mYfs%Y?S7}oe`E06`Y<a>S3x}`(_aSyFwo?)YAokW_xuAYW%cM zV}?s57h7pB&Dn>Q>}$L;0Q{xDsab&AXJdP+tJ<7(r@z|Y=56GfWL!P}5fD+kSn3n0 zKB8erWwne|uH<26PS!6-bPztrOo>vohbV{*lya7q&-EgJYWu45r22BIm!6w<ccs9z zc1_VS!qtaS#-9R>O&f)h#Ce|f&98TVnf^C`272Mw<?m+BSa)q{s=d>6XNaF)zLvKC zyFainj1RvFdqqfpm8BAl!UogX{h0Xn&6SJ?W1buiysVeRt1<lslO45B;l$pW?ig^R z28og630H$dzFv}BvUn+<1wXl)>_Y5H^6<Yv;7xLONM`77jCX5u*C~?QDwTGWE7?)h z6$fJ!Zfg*+BfcUYN5bK&)V6jor}p=ZmVa~fh6Or(i5*$1?|L`z95u9RpM+j%yRImk z+r8~*bTEqh<G+g*HupGpnUd1|?wa9dcd1%cG$`){((gB6ve&(F(TS)eR6U<3H({9o znvjY;X?mMPL#Ly(D%|;)q=Jusq*&*$@x3Qei%4nPYV|`7k@5}=P@5sO1Ny<~MIMNS zt~FPG51CE>@?m@@D)$QgO>>(%#Xvu#N)!5WKHr^MHLT7}6}|_^qC#EdIR$=Y$mTM{ zW&r0!5Cq9g?WySW)WIc!qzb2~`#q{lXsmXTAAY)zFc0Q^E<&Ny!?Z#_!b1K%AQ~{c zcf!j>J@75J9f7pZXBKst|0+YAak!7ta0LTTK!%Z1`D9lOxUZnAW-6JYoRRK0@6_UE z;6$>E_M~bUE#aLQZxH@{q}-|1mTm2<w7<GFJiGJ@&dsHDftKQn=giWE8GYtFNib#J z{KweT6>{d_Qop!Ud#Dwx|1zeoXXvV&$@=!sugxJNU+MWY3x08&7SXkazo?t0Xi%F6 zBUe6_p7E3M(;mr4M5W(|UZ>(L6d^!2fKLRH+q7imyNRg~6m!1e?9>ViX_98SvuBt2 z*k^QyH$z${E<S>pqv*S1<o?Bx{bs5_ol8_zO3Tuj(r736lsquG{Sg|cE8+uP%^t<d z1Ld-U%)c8`!ll=+308gKs(pvX1kpzQHs5t()ox<0Z!r)P#BLy^**9aLiqqK?vp_S0 zPt3wYWjqW=gglznu$+S$_)d3Ar>TC-RyX0GvVg8Mbgn(;NwYsh!(HLhpR^%_6lcMp zLnR;5I5`a2L`3yp!6W`_E^OjDkunn|7`X+K@VyqNzeLP6L_B4LCA9eoP&rWAeOhe! zi=!DtejB8rIh*cANG9yb5H<c2CAhuhWX0QSN&FBt9chGI9><BI`0HCcYzpqWYd6j! zr}BvQrodOW@W6-c4ajE?o8LXI4_i+VWzG3sVwk_eS`qLm!{AJ#cR%fmygcm*L)uGE z#|idRe;SvA0fxYMFH#hPm>hi#Gbkr}6=2g$#+eVNthiv<AeaL&eepsVBWW@)JQS9* z{7rW3*_yiLB=3!SSvM0(^_drm6L}ZbHKkgZC@)2zcQ-8lF?cHUI-_4wPX|C-PXUp+ zoX~bGzJ)ydd33#T*7@ES$pDCWRnSlNIIVE=)$Jb*qM8sIPq-GrA^W>t{RvB5s0Cw! zp1E9@O|qM*X?cq$6@{0cSa0vU%aF2W;bHJsxobixH}Uca2v6Ei{fM@oprn|W_KyeU zEb^L+pFbmqD`1OZe5fIHeT~<u@<r@$>;LZc7>Vl&V~2D3MgN=33vqYq*Vi1}@fo=P zdJiDFW&^3;%;+FqhAfA^Bt@J!EjSfK8r4mI#kIa;f41{yBF<_Nc39)6ySgVNiok{r zKV*)FHI~A<NWSDfKnmV^f@}2L{{gtfkqTtvis9z+lRXNj1g4BAF#=}p;3LGlcAMa< zkLgqgMP0hS1GI1}c$Oso*lLfg7IH*MM@44G=!B=F=2EWO>H+cF+Hkeyac;|)oKdpq z1gYv`L(*dE7AR2=K4RCtm)5Fevjs&EJ8UDR^R{9Z^5*;KVig5%G$IU#__5uKw2fPc zXLFT>MW&(Sjv$=+s&SgOW&9zgj9i}}!Bv7>+!iZoB<|rPBncyUr|Fw0RWTs$#<)}R z*g&Hur`Gk(fr*9rV}DiqkH){@HZd+>twFXJN`n6_+K@fCS?H`a3W8?hlWyQHRpv5s z(i8@q74fm^JT;h^B2wY0whNE^;PFE=+K)?zkVCQ{eJ$Z+m8xY`k~na`LRJ3zWXD&P z<4yZ?o138?@MZs1Tr<ZODF3L9;fsODelZOTEd3p<fz@g8b3UjxyR)BWS!o2ddf$JB z#(Zzk@#=JtaKO?QgMhXTQ%dvnhk=U1C^r)qwZFD$TgN%l?1O3Xp?##Mko%6fl|!%q z2`{Kw#VxOaAc6y5!1X)DEiZJ2A|PhJvDc_+h-9@pDt3~)$YnDhoAT~Ak97FkKXW5E zyKjgL{xw{x8<93OJ3hAPJh8IzWO~5<pTuVc+Od%WR*hu`2<V#9M3~>$n|areWfA~_ z#iGcDaaPXlNHif;w6P*P@(lUXP2nggVF?SNh8#s;JXsD~r5^B%9$SZVaS4@(>syH| zTAd=_DE--QHUea--T~c-<Qcwq2pHabtPL;tyaj=RD{{uGJp<7?1KC_ht78p&E|h!+ zNm?>58L5JEsYfd&;~o$*5V~*`VKTfntUZ3u7hVRGx)m$!6t*>xcNH*ISSoQ}F3bnJ z0l&i5zwE6saEw$nPQuy}KY&s8Vp@`=VtSxuzDx8`lNoE{0IA(k=IiGRmW7~bh$6cg zO1F$3B(RZEWx>nFl-S!}@+ubHEywIzd20|mS<kZq#!JCfHC;bSU_#M~SFq?mAd6Hm z%_`Md!go=s8M%<sQ6mfWrM87;>b&1Xali~F+dx`oZde9qOr`dm1yS_}rte6zsN^zN z%ng)cz1<eQwG%hMt^m0hy)PF4Oyv#yu(_sPPm7<aT}H|!PAlizn1_Z`dBEFRHl&&m z<TNaz-BCof*+n8N0f*4NI5w=1`Z>)0#z;c%pkiZ}>QgX!VYE+W&%i0ZhX1$k_*?i^ zE1wLE(<^?!I~>Rbm%WfH^uukHrZF?=0QtGlc=RgLIxfvQGxR&S$CRHJAuv7-TREQp z##}K`FZP+ftmw&pT$B*0fN;ijNu^FM3j}|(dXH&H{UrJegG}1v-nbosjx-`K>)Tnj zAA&L`d4@3~x~(^=_Y-D92*XJ_L<j*1kG-Ose3~VdH%|LFH>Nqtvob?c6qke7{|s$F zk}aH@kNp6PaM=0`k82WB8@eh#qJ!1B(^Q@ahmxWwk3Fs^u_26hV%`5K?F-s~e0{3` z9?lye2<ewxh1ceIlXDkT27;u71p8rtzG1oE`R*3*gBhu&rkx$OGReS!B@rsbDN|%h zORQ)OEMMhGnnsed*Mt+P76z@)WK_!tgO)y+N#ruKabfqfr$y=L_1lzN(Yy&fnGJ}u zNPNeYU)*(0Me&j0-j!BJ39ZaR>t{#NE)S(Pke>o`%4FYH(Lv42dECR1C#8Nea9xfs zc!xPsE-V+)|E~b}2?zFBs(CL{f|-Lb2%{NzD0%>mID!N+4P-r#jSThiE%?U;*|5s! zL8cZyT`?<6LSn+x6w?ujgctlU*@ECR^iU~8C{-@$nhl8#X7cZrcXQwI2@Jzo8hzsi zE!e#r^hS>H1B;Wd5F|_1XF_Wvy<Q0dX+m+y3@hr8xeP7trU6s84s{d-!4Q3K5gXV` zVc~lSm_G7j7706(;B+D0UNsD3f2KK5isHbM8?s0|2-rRih_U(L0|j_nc`;Y{_Uibq z2zae4&BDK!9>IIdqxlzzeBY1`0x{#rL-$MYt5AQl_XIs$Ku|L?*#AX>aIFDvW3Uw} z%byW1ri$4?=|SAK4v;fN|C%G4Tm-jz@*_me$B%8pctrj)_WLZyVLBgZ`2)J197`V^ zkpic^(nMzJl|OKd$5%)=((p`nS0oPW0)v6x=FKiX;eLl`W^ivrX9qu8Yfj*eZ1>0c zd?Hms>ci444!8jU%Y)lj@B2OLkoXF+x3`@FG_|RFSfa}bEU;bLn8V}881E{QO(h6# zu{=v`3VMjH{w++Bz4Z~~Bg0hkv`V;!rHU;4s*GACKhN5Q%YGDotCPig;usBds1P=G zvedTf4x@^+MLwh`Bmq(=)2ejs$vHHU2y2O7;BbJTchb-pJ@-}w?>Iojb)zo`iG@nC z`U;5&YM34n)9SYs{d-tXA1oc6)Db{ubCaa3!w&@x^IStw<qiu<h+<=4I4NZ+-U(KW zNI-xIk>IRE34*?$-Hl#-cpzX*fOecCv~Zv?I%?(j7Po@v2PPj1(EEiFCDEE9Nt~l! z212ZnyH6k(QtZ+Qhf^!=h2qBaiv&WxSv*5~TUYW{@dk%wL|xw#vY6<psAtHys<9n* z>c0R+!NVe9EjH9LqJ<bd9E!TtV93sn69+oNtg;Adab(DCTXMe#D<UsKJPVIv_XEs0 zOc6TC*fdPUR)pZw%5w&bJpMeq9HK?MEnkUHJo+(nLP9wAqNDP^!CLlyR)#=|hzglg z^ki3-B~?67os;&Jy*^l0vk?ugA9j-CE@Ug{4AC(dSv%pU5o^Kec((g7vJbI9*lD3f zXeQ!lbB9Hlb7dHbM*B2DtfF7IVPtXCd?`x=+5NC6o38jwBfh3yQ_Q_2AqfkyJ@`TJ zt?iNTp|#YMV1=B)p@_-h8WTdfVOA)E_St#{qj}+Sqi{|;i3zUy3aU9qMY0J=grLCR zZ^nR`XWN14@JLg;zfV}rTzkiUmNiz8;c}bU8*ptp$m9`x0)#fe73#|kp28D~H|Ey? zByTfMK{q`NbFMlP@G6RffDld(%Sfwb=uPNn1d@;mKBGI9X9;2x#>J5YK7pWyz|DW0 zb_j4z52VmMICdHXU>*r4Ut!<zvGbCGbr)6vY8;uy%{2~mu@{e8?i(dG1DDw-!2KIF z4kXTOWudD;>Z)$e@>&w017^|4aU5S4vHhimPMH|T8-rKs#X+GadM1WJRF-GB3V@fk zfz*Tn;PEknF9*=hQ>D{D>K-L6U9ejSE%c)w2aiX-%s{1UGR$-AEVw;900&afI^rYY zRkNO22Dr{giZ}2v@EmoPD`}jLsAwZ66^EYd6`IIAvityKB|$j)&P9U(9jeP{B<|=4 z7SiE>t4qqO7p!ONL;4ts9I=H+Hk*c;8RQAIT_D+*-3UFJCW-<E({rG3Bpaj^dP&ER zgO_3-J8>xM$(L{0#OyS1mbj0-;H(L*CJBB3viJ4%cNdNr(9+m65qNu8fzzHKB+y5a z>$uGxQpEjLS=sb~O|_1A+80)e8$m{OS`n!nF4?pxMvb9D#-iA0R?(}IhzdKL+^Ucs z=Tdj)#6>I@nf)Wa;-U=D1m<Td54PP|2Z-^ICuy?a;~Cw8kOKF{vZK3?u$>9!0Jh1! z6QLe?^kgNquo&ztLlMy0=50(+P}KA*^-@@iXO-<1U6;@&0Z7XXb!x!)i2)CuvRHXn zJ5kLfEsI|*0)EtEB0A8~>J^Gsqv}?qpJie<c+W%lh&P67&?8JRxo+*N$im4LQt+qH zJwJdk#Keg48gG>MyF=|Xa?U)1qM<tEm05&^3o7G^ME#5l0TyKKBQ~nX^*Tt0fvVE* zer{L=L#DPr8DNu2J^YMU#g@eZaj7JLvDz{Wx%lF;#_8X!Q=}N^Q-R0oQPEF|yQeNp z`#})~^zsj(D`ZFn>%>?JNhbhJ;j^@5km=(`Q_~{CQkD<r+b$~9xv`O8v&`Y%6cq5- zkZo5FMkW{+Z|Qg!y%2=Dy`sSylZ=G(jQ%0zDv0_KVRi;meY4W!&j~*nnHV96gbMwQ z9FuSWe_VmWLdVSnxYeJzzBUtVZ!Nv2oJ7M2jUqc2h&EX&vmNhnV<3OI@q%xl3Im}G ztQ$dapKRTmZ)rzhB?v(iixq=%3u32fuo2qy-M}HS@YF_BahTFc8Id9%a0rTI^J~}w z9_My&@<&@QLXhzB)kz=2h)}(9ZdrE<T*N4*LkT!9p@T$_6VNv7hgGt&PW6c(VZim2 zvVa3=cf8<vTa&Dhcx92sMu~_kofC6NlU;pG9(oS7JFSW=6ks^5ol?EP$WtOqp0W_& z90oj_*@`e6g`SEClhA+&ZnJ@oz70O0jbGqqD=oZq38LUFB^#kShA}2hawns9YdQ~+ zFKN*R4U@SZYD8ha5?-^Ws!`<SB&N-Fd}A!hBY3KB_E$4GoSar~;6ksM)hi&BX#*lS zzhD{*b1;O1Kq3M14x1soQc`!ELuT~bqSFy%!uE6X=GA4_6Fk15KmrDY7gBi;&^#ku zMgFC0PSBhk=z^P7h)>S5yNV`LDZqSQO&D7Oz!2Z&<eT{n5R;{mMckc6b|2%ZNe$s$ zZ<}~oMSn4n7v5&U3H4k89HWSp5K(AG)b<lCsA}F|7bMM+d@$980^ri90SJE6h5zzo zI<m2(WfZFG8itVIWO$0|7*^1hO*&Z-qIbArW9uvoEXI#hV?a3QOVt~Tfiohg{+37~ zK*fXseVMPC+y#5*R+Bj*5R%>FV=7`Se7-x~>KOt*mN3r%-QWsb4m_sU!All8MqQ0} zYE`A?7<Qf<g<QOg<QHAt7NRZ-r~4j*EVQF-OOswa!JNI0Foci2n8q~~>R0M*W%CfM zqWLSa6{#Ia$&YPLB5-KZF@6Dw8B(2~rRE6K;zMjbQJD09B_ft!4(05Iv95D5^)3h- z>7L61%mH?PnV$EgvIp8w>z8PapNN>DxFON0O`sD9K?4ZQ2O$j9ZFz)(5(Dj0O?4&} z;Ghf_S}qhdHqS)Sf6qVS6^HFPOYAAC1LB<sf}IA2b<_YSpx(71Omskw>FF+(lXCq% Wt3sj5!iJbQTFSV0ZaU~PzH|T^@$I|- literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/marvel/marvel-400-normal-webfont.svg b/app/design/frontend/magento_plushe/fonts/marvel/marvel-400-normal-webfont.svg new file mode 100644 index 00000000000..864d374918c --- /dev/null +++ b/app/design/frontend/magento_plushe/fonts/marvel/marvel-400-normal-webfont.svg @@ -0,0 +1,213 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="marvelregular" horiz-adv-x="856" > +<font-face units-per-em="2048" ascent="1638" descent="-410" /> +<missing-glyph horiz-adv-x="430" /> +<glyph horiz-adv-x="2048" /> +<glyph horiz-adv-x="2048" /> +<glyph unicode="
" horiz-adv-x="1024" /> +<glyph unicode=" " horiz-adv-x="430" /> +<glyph unicode="	" horiz-adv-x="430" /> +<glyph unicode=" " horiz-adv-x="430" /> +<glyph unicode="!" horiz-adv-x="391" d="M141 2v184h109v-184h-109zM143 289v1145h107v-1145h-107z" /> +<glyph unicode=""" horiz-adv-x="638" d="M76 1163q35 16 61.5 54t26.5 112v105h119v-107q0 -115 -47.5 -184.5t-124.5 -102.5zM344 1163q35 16 61.5 54t26.5 112v105h119v-107q0 -115 -47 -184.5t-125 -102.5z" /> +<glyph unicode="$" horiz-adv-x="964" d="M96 133l41 113q104 -47 167 -73t98.5 -38t54 -15t39.5 -3q57 0 106 21.5t86 58t57.5 88t20.5 112.5q0 63 -24.5 110.5t-63.5 79t-88 47t-98 15.5q-82 0 -154 28t-126 78t-85 118.5t-31 150.5q0 76 24.5 143.5t67.5 120.5t102.5 89t127.5 48v140h112v-142q23 -4 45.5 -11 t38.5 -13l174 -72l-38 -115q-23 10 -58 26.5t-73.5 33t-76.5 28t-69 11.5q-55 0 -102 -22.5t-81 -61.5t-53.5 -90.5t-19.5 -106.5q0 -63 23.5 -111.5t61.5 -80t87 -47t103 -15.5q82 0 153.5 -27.5t124.5 -76.5t84 -119t31 -152q0 -80 -27 -150.5t-75 -123.5t-112.5 -87 t-140.5 -40v-150h-112v156q-49 16 -99.5 34.5t-93.5 36t-76.5 33t-52.5 23.5z" /> +<glyph unicode="&" horiz-adv-x="1226" d="M63 391q0 111 52.5 188.5t146.5 133.5l115 67l-107 119q-53 59 -76.5 114.5t-23.5 125.5q0 68 25.5 127t70.5 102t108.5 68.5t137.5 25.5q72 0 135.5 -22.5t110.5 -64.5t74.5 -102.5t27.5 -133.5q0 -104 -47 -173t-131 -118l-152 -90l385 -416q45 80 60.5 177t15.5 216 h99q0 -57 -5.5 -120.5t-16.5 -126t-31.5 -121t-51.5 -103.5l225 -264h-131l-149 182q-78 -92 -188.5 -146t-247.5 -54q-90 0 -168 28.5t-136.5 81.5t-92.5 129t-34 170zM176 393q0 -68 25.5 -124t68.5 -95t100.5 -60.5t123.5 -21.5q123 0 209 46t149 126l-408 436l-112 -65 q-72 -43 -114 -101.5t-42 -140.5zM279 1139q0 -27 8 -51.5t28.5 -58.5t57.5 -80t94 -115l162 100q59 37 93 88t34 117q0 104 -70 164.5t-174 60.5q-47 0 -90 -16.5t-75 -45t-50 -70.5t-18 -93zM930 182l149 -182z" /> +<glyph unicode="'" horiz-adv-x="370" d="M76 1163q35 16 61.5 54t26.5 112v105h119v-107q0 -115 -47.5 -184.5t-124.5 -102.5z" /> +<glyph unicode="(" horiz-adv-x="473" d="M125 168v1100q0 72 18.5 123t51 82.5t76.5 47t96 15.5h36v-111h-26q-59 0 -101.5 -31.5t-42.5 -115.5v-1120q0 -84 42 -116t102 -32h26v-110h-36q-51 0 -95.5 15t-77 47t-51 83t-18.5 123z" /> +<glyph unicode=")" horiz-adv-x="473" d="M68 8h26q57 0 100.5 32t43.5 116l2 1122q0 84 -43 115.5t-101 31.5h-26v111h36q51 0 95.5 -15.5t77 -47t51 -83t18.5 -122.5l-2 -1102q0 -72 -18.5 -123t-51 -83t-76.5 -47t-96 -15h-36v110z" /> +<glyph unicode="*" horiz-adv-x="815" d="M104 537l226 122l-226 123l46 76l219 -131l-7 258h91l-9 -258l224 131l43 -76l-226 -123l226 -122l-43 -78l-224 133l9 -258h-91l7 258l-219 -133z" /> +<glyph unicode="+" horiz-adv-x="878" d="M92 481v133h281v281h133v-281h280v-133h-280v-280h-133v280h-281z" /> +<glyph unicode="," horiz-adv-x="350" d="M31 -66q35 16 61.5 54.5t26.5 111.5v105h119v-107q0 -115 -47.5 -184.5t-124.5 -101.5z" /> +<glyph unicode="-" horiz-adv-x="741" d="M125 662v131h491v-131h-491z" /> +<glyph unicode="." horiz-adv-x="370" d="M115 10v180h141v-180h-141z" /> +<glyph unicode="/" horiz-adv-x="528" d="M100 2l207 1430h123l-207 -1430h-123z" /> +<glyph unicode="0" horiz-adv-x="892" d="M141 262v799q0 59 21.5 110.5t58.5 89t86 59t107 21.5h67q55 0 104.5 -21.5t86.5 -59t58.5 -89t21.5 -110.5v-799q0 -59 -21.5 -110.5t-58.5 -89t-86 -59t-107 -21.5h-67q-57 0 -106.5 21.5t-86.5 59t-57.5 89t-20.5 110.5zM246 268q0 -74 48 -126t120 -52h65 q70 0 119 52.5t49 125.5v793q0 82 -57.5 126t-132.5 44q-43 0 -81 -8.5t-66.5 -28.5t-46 -52t-17.5 -81v-793z" /> +<glyph unicode="1" horiz-adv-x="430" d="M160 2v1274l108 55v-1329h-108z" /> +<glyph unicode="2" horiz-adv-x="813" d="M70 1249l155 64q31 12 73 20t73 10q72 0 133 -30.5t105 -82.5t70 -121t26 -148q0 -72 -13.5 -131.5t-62.5 -124.5q-55 -96 -122 -201t-124 -191q-68 -102 -135 -198h452v-115h-569v133l401 617q35 47 47.5 96t14.5 108q-2 55 -19.5 105.5t-46 88.5t-69.5 60.5t-92 22.5 q-10 0 -23.5 -3t-40.5 -12.5t-72 -27t-114 -45.5z" /> +<glyph unicode="3" horiz-adv-x="845" d="M94 1249l146 60q31 14 80 24t77 10q74 -2 133.5 -30.5t101.5 -77.5t64.5 -116.5t22.5 -147.5q0 -84 -28.5 -148.5t-106.5 -134.5q47 -35 73.5 -75t40 -82t16.5 -86t3 -85q0 -80 -25.5 -148.5t-69.5 -119.5t-105.5 -81.5t-133.5 -30.5q-31 2 -72 10t-73 20l-142 56l29 110 l168 -72q20 -8 42.5 -14t43.5 -6q51 0 93 23.5t72.5 63.5t49 91t20.5 107q0 55 -13 104t-39.5 87t-69.5 60.5t-103 22.5h-117v100h119q121 0 171 69t52 177q-2 55 -23.5 100.5t-53 77t-70.5 49t-76 17.5q-20 0 -51 -5t-51 -16l-150 -67z" /> +<glyph unicode="4" horiz-adv-x="804" d="M66 399v121l309 811h112l-303 -821h400v233h108v-743h-108v399h-518z" /> +<glyph unicode="5" horiz-adv-x="872" d="M125 63l37 117q51 -23 102 -39q43 -14 92.5 -25.5t89.5 -11.5q57 0 97.5 24t67 64.5t39 94t12.5 112.5v60q0 59 -12.5 112.5t-39 93.5t-67.5 63.5t-99 23.5h-315v579h533v-106h-412v-363h196q82 0 143.5 -30.5t102.5 -85t62.5 -128t21.5 -159.5v-60q0 -86 -20.5 -160.5 t-61.5 -132t-102.5 -90t-140.5 -32.5q-41 0 -97.5 12t-107.5 26.5t-86 27.5z" /> +<glyph unicode="6" horiz-adv-x="858" d="M141 266v766q0 68 24.5 125t67.5 99t101.5 64.5t124.5 22.5q10 0 40.5 -6t65.5 -14q39 -8 86 -20l-28 -97q-39 10 -74 19q-29 6 -55.5 12t-34.5 6q-88 0 -152.5 -57.5t-64.5 -153.5v-244q25 20 59.5 31.5t69.5 18t63.5 7.5t44.5 1q57 0 106.5 -22.5t86.5 -62.5 t58.5 -92.5t21.5 -111.5v-291q0 -59 -21.5 -110.5t-58.5 -89t-86.5 -59t-106.5 -21.5h-67q-55 0 -104.5 21.5t-86.5 59t-58.5 89t-21.5 110.5zM246 258q0 -88 60.5 -130t142.5 -42q39 0 74.5 9t63 30.5t44 53.5t16.5 79v305q0 74 -49 126t-119 52h-65q-70 0 -119 -52 t-49 -126v-305z" /> +<glyph unicode="7" horiz-adv-x="737" d="M70 1227v104h598v-133l-379 -1198h-117l383 1227h-485z" /> +<glyph unicode="8" horiz-adv-x="886" d="M137 256v174q0 78 38 139.5t99 92.5q-61 35 -99 99t-38 142v176q0 74 26.5 124t71 81t102.5 44t122 13q57 0 110.5 -18t93 -52t63.5 -82t24 -110v-176q0 -80 -39 -144.5t-103 -99.5q63 -33 102.5 -91t39.5 -138v-174q0 -55 -19.5 -105.5t-54.5 -88t-82 -59t-100 -21.5 h-99q-53 0 -100 21.5t-82 59t-55.5 88t-20.5 105.5zM242 262q0 -76 49 -129t121 -53h65q72 0 121 53t49 129v156q0 43 -17.5 75.5t-46 54t-65.5 32t-78 10.5q-80 0 -139 -41t-59 -131v-156zM242 909q0 -76 49 -129t121 -53h65q72 0 121 53.5t49 128.5v160q0 82 -57.5 127 t-134.5 45q-43 0 -81 -9t-68 -28.5t-47 -52.5t-17 -82v-160z" /> +<glyph unicode="9" horiz-adv-x="872" d="M121 797v266q0 59 21.5 110.5t58.5 89t86 59t106 21.5h68q55 0 104 -21.5t86 -59t58.5 -89t21.5 -110.5v-774q0 -68 -25.5 -125.5t-68.5 -99t-100.5 -64.5t-122.5 -23q-10 0 -56.5 10.5t-99.5 22.5q-61 14 -135 33l29 96q68 -18 122 -30q47 -12 89.5 -21.5t50.5 -9.5 q88 0 152.5 57.5t64.5 153.5v276q-20 -18 -53 -29.5t-68 -17.5t-66.5 -8t-50.5 -2q-57 0 -106 22.5t-86 62.5t-58.5 92t-21.5 112zM225 791q0 -74 48 -126.5t120 -52.5h66q70 0 119 52.5t49 126.5v280q0 82 -57.5 126t-133.5 44q-43 0 -81 -8t-66.5 -28.5t-46 -52.5 t-17.5 -81v-280z" /> +<glyph unicode=":" horiz-adv-x="393" d="M125 2v180h141v-180h-141zM127 657v185h141v-185h-141z" /> +<glyph unicode=";" horiz-adv-x="442" d="M63 -74q35 16 66 56.5t31 113.5v105h141v-107q0 -115 -47 -184.5t-125 -102.5zM160 657v185h141v-185h-141z" /> +<glyph unicode="<" horiz-adv-x="1005" d="M109 532v175l749 174v-113l-340 -74q-31 -8 -77 -17t-89 -20q-51 -10 -104 -22v-41l32 -7q31 -7 74 -15.5t89 -18.5t77 -16l338 -76v-111z" /> +<glyph unicode="=" horiz-adv-x="985" d="M141 358v131h703v-131h-703zM141 758v131h703v-131h-703z" /> +<glyph unicode=">" horiz-adv-x="1003" d="M147 360v111l338 76q31 6 77 16t89 18.5t75 15.5l32 7v41q-53 12 -105 23q-43 10 -89 19t-77 18l-340 73v113l750 -174v-174z" /> +<glyph unicode="?" horiz-adv-x="870" d="M72 1346l172 71q35 14 84 25.5t82 11.5q74 0 143.5 -25.5t121.5 -71.5t84 -110.5t32 -142.5q0 -66 -19.5 -113t-42.5 -82l-293 -440q-20 -29 -34.5 -60.5t-14.5 -78.5v-43h-119v41q0 72 17.5 119t42.5 81l278 418q23 35 45.5 76t22.5 80q0 53 -26.5 96t-66.5 72.5t-86 46 t-83 16.5q-25 0 -50.5 -6t-50.5 -16l-200 -76zM260 0h141v184h-141v-184z" /> +<glyph unicode="@" horiz-adv-x="1767" d="M92 668q0 188 59.5 344.5t169 269.5t264 175.5t345.5 62.5q158 0 295 -47.5t239.5 -137.5t162 -220t59.5 -294q0 -96 -24 -194.5t-71 -178t-121.5 -131t-175.5 -51.5q-70 0 -121 45t-63 117q-18 -35 -48 -64.5t-64.5 -50t-74.5 -32t-79 -11.5q-78 0 -138.5 30t-100.5 79 t-60.5 114.5t-20.5 137.5q0 84 25.5 163.5t74 143t119 101.5t162.5 38q72 0 134.5 -33.5t90.5 -101.5l27 117h76l-41 -541v-18q0 -66 28.5 -106t84.5 -40q70 0 124 40t88.5 106.5t53 150.5t18.5 170q0 143 -51 256t-140 191t-210 117.5t-258 39.5q-170 0 -306.5 -56 t-231.5 -156.5t-147 -239.5t-52 -305q0 -147 49 -278.5t139 -227.5t216 -152.5t277 -56.5q135 0 264.5 23.5t254.5 76.5v-96q-133 -57 -257 -77.5t-268 -20.5q-174 0 -317 62.5t-244.5 172t-158 257t-56.5 317.5zM623 631q0 -57 14 -107.5t42 -87.5t70 -58.5t99 -21.5 q72 0 122 35t81.5 87t46 116t14.5 123q0 53 -11 102t-38 87t-69 60.5t-103 22.5q-66 0 -116 -32.5t-84 -84t-51 -115t-17 -126.5z" /> +<glyph unicode="A" horiz-adv-x="940" d="M55 2l328 1434h174l328 -1434h-109l-92 399h-428l-90 -399h-111zM289 522h364l-168 778h-26z" /> +<glyph unicode="B" horiz-adv-x="968" d="M160 0v1374q78 31 136 47.5t83 20.5q60 12 113 12q74 0 108.5 -18.5t44.5 -24.5q47 -29 88 -79t65.5 -119.5t24.5 -145.5q0 -92 -22.5 -180t-108.5 -160q55 -37 89 -77t52.5 -81t25.5 -86t7 -94q0 -80 -20.5 -150.5t-46 -103.5t-35.5 -45q-37 -37 -91.5 -63.5 t-140.5 -26.5h-372zM274 119h258q61 0 102.5 21.5t66 58.5t34.5 86t10 104q0 57 -10 108.5t-34.5 89.5t-65.5 60.5t-103 22.5h-258v-551zM274 788h211q61 0 102.5 21.5t66 58.5t34.5 86.5t10 104.5q-2 55 -18 105t-39 81t-45 49q-4 4 -10 6q-2 0 -2 3q-2 0 -4 2 q-10 6 -32 18t-73 12q-20 0 -67.5 -8t-133.5 -45v-494z" /> +<glyph unicode="C" horiz-adv-x="894" d="M137 375v20v641q0 86 30 161t66 114q37 41 59.5 60.5t47.5 33.5q20 10 61 29.5t121 19.5q29 0 70 -10t74 -21l159 -63l-37 -107l-178 70q-20 8 -42.5 14t-43.5 6q-55 0 -104 -25.5t-87 -68.5t-59.5 -98t-21.5 -115l-4 -651q0 -66 22.5 -119t59.5 -90t86 -58.5t102 -23.5 q16 0 33.5 3t45.5 13.5t72 28t115 45.5l45 -116l-165 -60q-35 -12 -76 -20t-70 -8q-78 0 -146.5 27.5t-120.5 78.5t-83 124t-31 165z" /> +<glyph unicode="D" horiz-adv-x="976" d="M150 55v1319q123 51 205.5 65.5t111.5 14.5q80 0 148.5 -34t117.5 -90t78 -132t29 -160v-659q0 -86 -33 -159t-87 -127t-126 -83.5t-150 -29.5q-16 0 -37.5 2t-56.5 9t-84 22.5t-116 41.5zM264 150q45 -20 78 -30.5t55.5 -15t38 -4.5h25.5q51 0 98 25t83 65.5t57.5 94 t21.5 112.5l-4 641q0 92 -42 161t-93 101q-63 35 -115 35q-47 0 -102.5 -20.5t-100.5 -38.5v-1126z" /> +<glyph unicode="E" horiz-adv-x="831" d="M162 2v1432h577v-117h-460v-537h360v-118h-360v-541h464v-119h-581z" /> +<glyph unicode="F" horiz-adv-x="790" d="M160 0v1434h577v-117h-461v-539h361v-116h-361v-662h-116z" /> +<glyph unicode="G" horiz-adv-x="915" d="M137 391v651q8 193 110.5 302.5t268.5 109.5q29 -2 70 -10t73 -21l129 -49l-40 -117l-144 56q-51 20 -88 20q-53 0 -101 -23.5t-84 -63.5t-56.5 -93.5t-20.5 -110.5v-680q0 -57 21.5 -106t58.5 -86t85 -58.5t99 -21.5q20 0 58 8t116 49v388h115v-461 q-117 -61 -191.5 -77.5t-103.5 -16.5q-82 0 -150.5 32.5t-118.5 89t-78 131t-28 158.5z" /> +<glyph unicode="H" horiz-adv-x="1054" d="M162 2v1432h114v-650h500v650h117v-1432h-117v662h-500v-662h-114z" /> +<glyph unicode="I" horiz-adv-x="425" d="M160 0v1434h106v-1434h-106z" /> +<glyph unicode="J" horiz-adv-x="626" d="M31 -2l22 121q8 -2 34 -5t52.5 -5.5t49 -4.5t26.5 -2q27 0 51.5 5.5t43 22.5t29.5 49t11 85v1170h115v-1155q0 -86 -9.5 -143.5t-36 -92.5t-74.5 -49t-124 -14q-8 0 -33.5 1t-56.5 4t-58.5 6t-41.5 7z" /> +<glyph unicode="K" horiz-adv-x="798" d="M160 0v1434h114v-658h56l295 654h127l-314 -717l310 -713h-127l-289 653h-58v-653h-114z" /> +<glyph unicode="L" horiz-adv-x="770" d="M160 0v1434h116v-1319h455v-115h-571z" /> +<glyph unicode="M" horiz-adv-x="1245" d="M160 0v1434h178l266 -891h33l270 891h178v-1434h-110v1192h-27l-239 -770h-179l-237 770h-25v-1192h-108z" /> +<glyph unicode="N" horiz-adv-x="1134" d="M160 0v1434h147l535 -1293h26v1293h107v-1434h-199l-487 1192h-25v-1192h-104z" /> +<glyph unicode="O" horiz-adv-x="1064" d="M139 352v717q0 45 17.5 110.5t62.5 126t121 103.5t192 43q115 0 191 -43t121 -102.5t63.5 -125t18.5 -110.5v-719q0 -45 -17.5 -108.5t-62.5 -122t-122 -99t-194 -40.5q-115 0 -190.5 40.5t-119.5 99t-62.5 122t-18.5 108.5zM250 350q0 -82 31.5 -130t76.5 -73.5 t93.5 -33t80.5 -7.5q33 0 81.5 8.5t92.5 34t75.5 73.5t31.5 130v719q0 82 -31.5 132t-75.5 78t-92.5 37t-81.5 9t-81 -10t-93 -38t-76.5 -78t-31.5 -132v-719z" /> +<glyph unicode="P" horiz-adv-x="1009" d="M160 0v1374q53 20 112 39q51 16 113.5 28.5t128.5 12.5q84 0 162 -29.5t137 -85t94 -134.5t35 -175q0 -98 -32.5 -180t-90 -140.5t-136.5 -91t-171 -32.5h-244v-586h-108zM270 705h228q147 0 237 81.5t90 243.5q0 160 -91 232.5t-236 72.5q-37 0 -76 -9t-74 -19 q-39 -12 -78 -27v-575z" /> +<glyph unicode="Q" horiz-adv-x="1064" d="M139 352v715q0 45 17.5 110.5t62.5 127t121 104.5t192 43q115 0 191 -43t121 -104.5t63.5 -127t18.5 -110.5v-717q0 -41 -14.5 -96t-48.5 -108.5t-91 -96.5t-145 -59q20 -49 69 -72l-34 -125q-59 25 -102.5 71t-61.5 118q-104 6 -173 48t-111 99t-58.5 118.5t-16.5 104.5 zM254 350q0 -82 31.5 -130t76 -73.5t91.5 -33t79 -7.5q33 0 80 7.5t91.5 33t75 73.5t30.5 130v717q0 82 -30.5 133t-75 81t-91.5 41t-80 11t-79.5 -11t-91 -40t-76 -80t-31.5 -133v-719z" /> +<glyph unicode="R" horiz-adv-x="1030" d="M160 0v1374q55 20 114 39q51 16 114 28.5t126 12.5q84 0 162 -27.5t137 -80t94 -128t35 -174.5q0 -70 -16.5 -136t-47 -121.5t-74.5 -97t-97 -64.5l254 -625h-115l-254 594q-37 -6 -80 -6h-244v-588h-108zM270 707h228q147 0 237 88t90 249q0 80 -24.5 135.5t-67.5 90.5 t-103 50t-132 15q-37 0 -76 -8t-74 -18q-39 -12 -78 -27v-575z" /> +<glyph unicode="S" horiz-adv-x="956" d="M88 135l41 113q70 -37 137 -64q59 -23 125 -42t119 -19q57 0 107.5 22.5t87 62.5t57 93t20.5 115q0 63 -28.5 105t-72.5 69.5t-97.5 43t-104.5 23.5q-76 12 -142.5 43t-116.5 80t-78.5 115t-28.5 147q0 84 29.5 159t81.5 131.5t122 89t148 32.5q49 0 101 -11t97 -24 q51 -16 101 -35l-39 -114q-45 18 -92 33q-41 12 -86.5 22t-86.5 10q-55 0 -103 -23.5t-83 -63.5t-55.5 -92t-20.5 -107q0 -63 26 -111.5t65.5 -81.5t89 -52.5t94.5 -27.5q84 -14 156.5 -40.5t127 -68.5t85 -103.5t30.5 -143.5q0 -86 -29.5 -162t-82 -132t-124 -90 t-153.5 -34q-80 0 -155.5 20.5t-135.5 45.5q-70 29 -133 67z" /> +<glyph unicode="T" d="M39 1323v111h778v-111h-328v-1323h-110v1323h-340z" /> +<glyph unicode="U" horiz-adv-x="1093" d="M158 354v1082h106v-1082q0 -82 29 -133t71 -80.5t91 -41t92 -11.5q37 0 86 11.5t93 41t73.5 80.5t29.5 133v1082h107v-1082q0 -59 -18.5 -123.5t-62.5 -119t-120 -90t-188 -35.5q-113 0 -187.5 35.5t-119.5 90t-63.5 119t-18.5 123.5z" /> +<glyph unicode="V" horiz-adv-x="933" d="M55 1434h113l285 -1299h26q23 94 45 203q20 92 46 208t55 238q63 285 143 650h115l-332 -1434h-174z" /> +<glyph unicode="W" horiz-adv-x="1247" d="M70 1434h106l189 -1301h16l166 741h155l164 -741h17l188 1301h107l-209 -1432h-176l-160 741h-17l-161 -741h-176z" /> +<glyph unicode="X" horiz-adv-x="925" d="M51 0l299 711l-299 723h115l280 -660h35l281 660h115l-299 -723l296 -711h-116l-271 651h-49l-272 -651h-115z" /> +<glyph unicode="Y" horiz-adv-x="886" d="M31 1434h114l281 -660h35l280 660h115l-324 -783h-28v-651h-123v651h-25z" /> +<glyph unicode="Z" horiz-adv-x="927" d="M68 0v135l612 1149v29h-565v121h716v-119l-612 -1161v-33h645v-121h-796z" /> +<glyph unicode="[" horiz-adv-x="485" d="M137 -172v1763h285v-100h-182v-1563h182v-100h-285z" /> +<glyph unicode="\" horiz-adv-x="784" d="M61 1573h111l551 -1690h-109z" /> +<glyph unicode="]" horiz-adv-x="485" d="M63 -74h183v1563h-183v100h285v-1763h-285v100z" /> +<glyph unicode="_" horiz-adv-x="430" /> +<glyph unicode="`" horiz-adv-x="745" d="M205 1507h125l198 -301h-106z" /> +<glyph unicode="a" horiz-adv-x="825" d="M96 272v115q0 59 20.5 111.5t57.5 91.5t87 61.5t108 22.5q14 0 43.5 -2t63.5 -8.5t69 -17.5t59 -30v70q0 47 -17.5 93t-46 83t-67.5 59.5t-84 22.5q-16 0 -58 -10t-87 -21q-53 -12 -115 -28l-29 96q68 16 125 31q49 12 96.5 22t67.5 10q66 0 123 -30.5t100 -80.5 t68 -114.5t25 -132.5l2 -586l38 -37l-73 -73l-56 55q-66 -37 -136 -51t-111 -14q-57 0 -107.5 23.5t-87.5 63t-57.5 93t-20.5 112.5zM199 264q0 -37 13 -68.5t35.5 -55t53.5 -38t66 -14.5q31 0 70.5 11.5t76.5 25.5q43 16 88 37v336q0 2 -18.5 13t-50 24.5t-74.5 24.5 t-90 11q-35 0 -67 -14t-54.5 -38.5t-35.5 -56.5t-13 -69v-129z" /> +<glyph unicode="b" d="M92 66l39 40v1328h102v-447q82 43 141.5 50t94.5 7q57 0 106.5 -22.5t86 -62t58 -92t21.5 -111.5v-484q0 -59 -21.5 -112.5t-58 -92t-86 -61t-106.5 -22.5q-45 0 -113.5 13t-136.5 50l-55 -53zM236 162q6 -18 36.5 -31.5t68.5 -23t75 -14.5t55 -5q35 0 65.5 14.5t53 38 t36 55t13.5 68.5v498q0 74 -49 126t-121 52q-18 0 -48 -4t-62.5 -13.5t-65.5 -22.5t-57 -32v-706z" /> +<glyph unicode="c" horiz-adv-x="706" d="M113 303v428q0 70 25.5 128.5t68.5 99t101.5 64.5t125.5 24q33 0 69 -8.5t66 -18.5q37 -10 72 -25l-25 -88q-31 10 -63 19q-29 8 -59.5 14t-59.5 6q-90 0 -154.5 -58.5t-64.5 -156.5v-428q0 -49 17.5 -89t48 -68.5t70.5 -44t85 -15.5q20 0 51 5t60 11q35 8 71 19l33 -94 q-41 -14 -78 -23q-33 -8 -70.5 -14t-66.5 -6q-68 0 -126 23.5t-102 66.5t-69.5 101t-25.5 128z" /> +<glyph unicode="d" horiz-adv-x="858" d="M115 270v484q0 59 21.5 111.5t58 92t86 62t106.5 22.5q35 0 94.5 -7t141.5 -50v447h102v-1334l45 -45l-74 -71l-61 61q-66 -37 -135.5 -49t-112.5 -12q-57 0 -106.5 22.5t-86 61t-58 92t-21.5 112.5zM217 262q0 -37 13.5 -68.5t36 -55t53 -38t65.5 -14.5q18 0 55 5 t75 14.5t69 23t37 31.5v706q-72 47 -135.5 59.5t-98.5 12.5q-72 0 -121 -52t-49 -126v-498z" /> +<glyph unicode="e" horiz-adv-x="833" d="M113 301v453q0 61 21.5 114.5t59 92t88 61t109.5 22.5h70q57 0 108.5 -22.5t90 -61t60 -92t21.5 -114.5v-68q0 -86 -30.5 -144.5t-84 -95t-124 -52t-150.5 -15.5q-33 0 -65.5 2t-67.5 6v-123q14 -82 76.5 -130t142.5 -48q8 0 52.5 9t93.5 20q57 12 127 28l24 -108 q-76 -16 -137 -27q-53 -10 -101 -18t-59 -8q-66 0 -125 23.5t-104 66.5t-70.5 101t-25.5 128zM219 496l242 -2h4q37 0 67.5 15t53 40.5t36 58.5t13.5 70v86q0 49 -18.5 83t-48 54.5t-69.5 29.5t-83 9q-39 0 -75 -12.5t-62.5 -35t-43 -55t-16.5 -73.5v-268z" /> +<glyph unicode="f" horiz-adv-x="583" d="M51 924v100h182v160q0 72 18.5 123t50.5 82.5t76 47t95 15.5h37v-111h-27q-57 0 -101 -30.5t-44 -112.5v-174h197v-100h-195v-924h-109v924h-180z" /> +<glyph unicode="g" horiz-adv-x="858" d="M115 270v486q0 59 21.5 112.5t58 92t86 61t106.5 22.5q47 0 109.5 -13t138.5 -48l61 61l74 -73l-45 -43v-1168q0 -76 -25.5 -131t-68.5 -90t-101.5 -52t-123.5 -17q-31 0 -80.5 10t-96.5 22q-55 14 -114 33l28 96q55 -18 109 -32q43 -12 87 -21.5t67 -9.5q88 0 152.5 47 t64.5 143v275q-72 -37 -125.5 -44t-87.5 -7h-23q-57 0 -106.5 22.5t-86 62t-58 92t-21.5 111.5zM217 264q0 -74 49 -126t121 -52q18 0 50 5t68 14.5t67.5 22.5t48.5 30v708q-6 18 -37 31.5t-69 23t-75 14.5t-55 5q-35 0 -65.5 -14.5t-53 -38t-36 -55t-13.5 -68.5v-500z" /> +<glyph unicode="h" horiz-adv-x="868" d="M131 0v1434h102v-447q82 43 141.5 50t94.5 7q57 0 106.5 -22.5t86 -62t58 -92t21.5 -111.5v-756h-102v762q0 74 -49 126t-121 52q-18 0 -45 -3t-59.5 -11t-65.5 -22.5t-63 -35.5v-868h-105z" /> +<glyph unicode="i" horiz-adv-x="370" d="M131 0v1024h109v-1024h-109zM131 1274v160h109v-160h-109z" /> +<glyph unicode="j" horiz-adv-x="372" d="M-37 -389h27q29 0 55.5 7t46 24.5t31.5 45t12 70.5l-6 1268h113v-1257q0 -72 -18.5 -123.5t-51.5 -83t-77 -47t-95 -15.5h-37v111zM129 1280v152h113v-152h-113z" /> +<glyph unicode="k" horiz-adv-x="684" d="M131 0v1434h105v-820h65l219 408h117l-252 -473l254 -549h-117l-219 489h-67v-489h-105z" /> +<glyph unicode="l" horiz-adv-x="434" d="M143 270v1164h107v-1174q0 -84 42 -115.5t101 -31.5h27v-111h-37q-51 0 -95 15.5t-76 47t-50.5 83t-18.5 122.5z" /> +<glyph unicode="m" horiz-adv-x="1411" d="M88 971l74 71l61 -63q53 29 107.5 47t105.5 18q92 0 170 -38.5t109 -120.5q29 49 65.5 79.5t76.5 48t80 24.5t77 7q74 0 126 -26.5t84.5 -68.5t47 -92t14.5 -99v-758h-106v743q0 39 -9.5 74t-29 61.5t-53 43t-82.5 16.5q-129 0 -186.5 -72.5t-57.5 -203.5v-662h-107v770 q0 37 -17 67.5t-47 53t-67 36t-73 13.5q-18 0 -48 -6t-61 -16.5t-58.5 -22.5t-45.5 -27v-868h-105v926z" /> +<glyph unicode="n" horiz-adv-x="884" d="M88 967l74 73l61 -61q113 63 213 63q92 0 172 -38t121 -130q25 -51 29 -103t4 -107v-664h-109v727q0 104 -55 159.5t-125 55.5q-39 0 -99.5 -12t-135.5 -62v-868h-105v924z" /> +<glyph unicode="o" d="M115 281v473q0 94 34.5 151.5t84 88t102.5 40.5t92 10t92 -10t102.5 -40.5t84 -88t34.5 -151.5v-473q0 -94 -34.5 -151.5t-84 -89.5t-102.5 -42t-92 -10t-92 10t-102.5 42t-84 89t-34.5 152zM207 295q0 -68 24.5 -108t59.5 -62.5t72.5 -29.5t64.5 -7t64.5 7t71.5 29.5 t58.5 62.5t24.5 108v444q0 68 -24.5 108t-58.5 61.5t-71.5 28.5t-64.5 7t-64.5 -7t-72.5 -28.5t-59.5 -61.5t-24.5 -108v-444z" /> +<glyph unicode="p" horiz-adv-x="858" d="M88 971l72 73l63 -61q70 35 135.5 48t112.5 13q57 0 106.5 -22.5t86 -61t58 -92t21.5 -112.5v-488q0 -59 -21.5 -111.5t-58 -92t-86 -62t-106.5 -22.5q-35 0 -94 7t-141 50v-549h-103v1440zM238 156q25 -16 57.5 -28.5t65 -23t62.5 -15.5t48 -5q72 0 121 52t49 126v502 q0 37 -13.5 68.5t-36 55t-53 38t-65.5 14.5q-18 0 -47 -3t-60.5 -12.5t-64.5 -23.5t-63 -35v-710z" /> +<glyph unicode="q" horiz-adv-x="858" d="M115 268v486q0 59 21.5 112.5t58 92t86 61t106.5 22.5q45 0 111.5 -13t136.5 -48l63 61l72 -73l-45 -43v-1438h-102v545l-39 -19q-59 -29 -107.5 -30.5t-83.5 -3.5q-57 0 -107 22.5t-88 62t-60.5 92t-22.5 111.5zM217 262q0 -74 49 -125t121 -51q18 0 47 4t61.5 12.5 t66.5 21.5t59 34v706q-78 51 -137.5 62.5t-98.5 11.5q-35 0 -65.5 -14.5t-53 -38t-36 -55t-13.5 -68.5v-500z" /> +<glyph unicode="r" horiz-adv-x="675" d="M84 961l72 73l71 -69q59 53 113.5 66t93.5 13q41 0 90.5 -16t137.5 -65l-58 -86q-35 20 -57.5 31.5t-42 17.5t-36.5 7t-38 1q-31 0 -84 -17.5t-106 -66.5v-848h-103v905z" /> +<glyph unicode="s" horiz-adv-x="739" d="M92 741q0 150 81 226.5t200 76.5q35 0 72.5 -9t78.5 -23l68 -25l-39 -88q-49 18 -79 27.5t-47 13.5t-26.5 5t-19.5 1h-10q-72 0 -126.5 -56t-54.5 -159q0 -43 18.5 -75.5t47.5 -56.5t60.5 -35t60.5 -11q63 0 120.5 -11.5t99.5 -41t66.5 -82.5t24.5 -135 q0 -152 -75.5 -227.5t-194.5 -75.5q-37 0 -76 6t-78 22l-170 68l41 90l168 -68q31 -12 60.5 -17t56.5 -5q72 0 121 55t49 160q0 43 -17.5 73.5t-43 50t-57.5 29t-58 9.5q-74 0 -133.5 13t-101.5 47t-64.5 89t-22.5 139z" /> +<glyph unicode="t" horiz-adv-x="546" d="M39 924v102h174v408h109v-408h188v-102h-188v-668q0 -84 42 -115.5t101 -31.5h45v-111h-55q-51 0 -95.5 15.5t-77 47t-51 82.5t-18.5 123v658h-174z" /> +<glyph unicode="u" horiz-adv-x="884" d="M125 362v662h106v-725q0 -53 15.5 -93t41 -66.5t58.5 -41t68 -14.5q66 0 132 23.5t103 50.5v866h105v-922l45 -43l-74 -73l-61 61q-59 -33 -127 -48t-121 -15q-74 0 -145.5 38t-112.5 130q-25 51 -29 103t-4 107z" /> +<glyph unicode="v" horiz-adv-x="743" d="M47 1024h103l153 -614q8 -31 17.5 -77t17.5 -89t14 -74l6 -31h41q12 55 23 107q10 43 18.5 89t16.5 77l135 612h104l-231 -1024h-174z" /> +<glyph unicode="w" horiz-adv-x="1089" d="M59 1024h103l123 -889h18l152 887h178l149 -889h17l129 891h102l-164 -1024h-151l-160 893h-23l-159 -893h-150z" /> +<glyph unicode="x" horiz-adv-x="745" d="M51 0l217 510l-217 514h105l200 -451h33l191 451h108l-209 -514l215 -508h-108l-195 449h-43l-192 -451h-105z" /> +<glyph unicode="y" horiz-adv-x="768" d="M45 1024h105q53 -225 95 -382t70 -257q33 -117 56 -192h24q18 76 49 192q27 100 69 257t105 382h105l-274 -1024h-13l-84 -512h-104l84 512h-15z" /> +<glyph unicode="z" horiz-adv-x="831" d="M72 0v106l518 771v38h-500v105h645v-107l-518 -772v-37h553v-104h-698z" /> +<glyph unicode="{" horiz-adv-x="477" d="M133 80v1274q0 72 12.5 110.5t40.5 67.5q27 27 69 40t112 13h47v-100h-37q-47 0 -71.5 -3t-41.5 -20q-18 -18 -23 -51t-5 -82v-1233q0 -49 5 -78.5t23 -46.5q16 -16 41 -19t72 -3h37v-101h-47q-70 0 -112 13.5t-69 40.5q-29 29 -41 67.5t-12 110.5z" /> +<glyph unicode="|" horiz-adv-x="380" d="M139 -20v1454h103v-1454h-103z" /> +<glyph unicode="}" horiz-adv-x="487" d="M66 -47h43h26q35 0 54.5 3t33.5 17q16 16 22.5 46t6.5 79v1243q0 49 -6 79t-23 46q-16 16 -41.5 19.5t-72.5 3.5h-43v100h53q70 0 111.5 -13t70.5 -40q29 -29 41 -67.5t12 -110.5v-1274q0 -72 -12 -111t-41 -67q-29 -27 -71 -40t-111 -13h-53v100z" /> +<glyph unicode="~" horiz-adv-x="942" d="M94 539q37 37 64.5 59.5t53.5 34.5t50.5 17t52.5 5q43 0 82 -15t78 -33.5t77 -34t81 -15.5q37 0 66.5 13.5t80.5 64.5l70 -55q-37 -37 -65.5 -59.5t-53 -35t-49.5 -17.5t-53 -5q-39 0 -79 15.5t-80 33.5t-80 33.5t-81 15.5q-37 0 -66.5 -13t-80.5 -65z" /> +<glyph unicode="¡" horiz-adv-x="389" d="M139 1249v185h109v-185h-109zM141 2v1145h107v-1145h-107z" /> +<glyph unicode="¢" horiz-adv-x="727" d="M106 305v428q0 121 70 202.5t176 104.5v265h103v-258q31 -4 62.5 -12.5t57.5 -16.5q31 -10 60 -21l-25 -88q-31 10 -63 19q-29 8 -59.5 14t-59.5 6q-90 0 -154.5 -58.5t-64.5 -156.5v-428q0 -49 17.5 -89t48 -68.5t70.5 -44t85 -15.5q20 0 51 5t60 11q35 8 71 19l33 -94 q-33 -10 -65 -19q-29 -8 -63 -14t-62 -8v-256h-103v262q-106 25 -176 108.5t-70 202.5z" /> +<glyph unicode="£" horiz-adv-x="1032" d="M98 662v120h80v295q0 82 25.5 150.5t75 119t118 78t154.5 27.5q84 0 154.5 -27.5t121 -78t79 -119t28.5 -150.5h-113q0 84 -28.5 136.5t-69.5 81t-89 37.5t-85 9q-41 0 -86 -10t-84 -39.5t-63.5 -80t-24.5 -130.5v-299h452v-120h-452v-551h641v-111h-754v662h-80z" /> +<glyph unicode="¥" horiz-adv-x="985" d="M80 1436h115l280 -660h35l281 660h114l-225 -545h164v-131h-219l-43 -107h-29v-161h291v-132h-291v-358h-123v358h-289v132h289v161h-24l-46 107h-219v131h166z" /> +<glyph unicode="¦" horiz-adv-x="389" d="M141 0v639h107v-639h-107zM141 795v639h107v-639h-107z" /> +<glyph unicode="¨" horiz-adv-x="923" d="M213 1229v157h119v-157h-119zM618 1229v157h119v-157h-119z" /> +<glyph unicode="©" horiz-adv-x="1636" d="M84 715q0 152 57.5 286t157.5 233t234.5 157.5t285.5 58.5q152 0 286 -58.5t233.5 -157.5t156.5 -233t57 -286t-57 -286t-156.5 -234.5t-233.5 -157.5t-286 -57t-286 57t-234 157.5t-157.5 234.5t-57.5 286zM186 715q0 -133 50.5 -248t136.5 -201t200.5 -135t245.5 -49 t246 49t201 135t135 201t49 248q0 131 -49 246.5t-135 201.5t-201 135.5t-246 49.5t-245.5 -49.5t-200.5 -135.5t-136.5 -201.5t-50.5 -246.5zM586 555v346q0 55 19.5 100.5t54 78t80.5 51t100 18.5q25 0 53.5 -6t52.5 -15q29 -8 55 -20l-18 -70q-25 6 -49 15 q-23 6 -47.5 11t-46.5 5q-72 0 -123 -46t-51 -122v-346q0 -78 52 -125t124 -47q16 0 39.5 4t46.5 10q27 6 57 15l25 -74q-31 -10 -62 -19q-27 -6 -55.5 -11t-50.5 -5q-53 0 -99.5 18.5t-81 52.5t-55 80t-20.5 101z" /> +<glyph unicode="­" horiz-adv-x="741" d="M125 662v131h491v-131h-491z" /> +<glyph unicode="®" horiz-adv-x="1636" d="M84 723q0 152 57.5 286t157.5 233t234.5 157.5t285.5 58.5q152 0 286 -58.5t233.5 -157.5t156.5 -233t57 -286t-57 -286t-156.5 -234.5t-233.5 -157.5t-286 -57t-286 57t-234 157.5t-157.5 234.5t-57.5 286zM186 723q0 -133 50.5 -248t136.5 -201t200.5 -135t245.5 -49 t246 49t201 135t135 201t49 248q0 131 -49 246.5t-135 201.5t-201 135.5t-246 49.5t-245.5 -49.5t-200.5 -135.5t-136.5 -201.5t-50.5 -246.5zM606 301v815q31 12 68 23q31 10 67.5 17t75.5 7q49 0 95 -16.5t82 -47t56.5 -76.5t20.5 -103q0 -82 -39 -152.5t-100 -95.5 l149 -371h-69l-150 352q-10 -4 -22.5 -4h-24.5h-145v-348h-64zM670 721h137q86 0 139 51t53 148q0 96 -53 134t-139 38q-23 0 -46.5 -5.5t-43.5 -11.5q-23 -8 -47 -14v-340z" /> +<glyph unicode="°" horiz-adv-x="675" d="M82 1200q0 53 20.5 99.5t54 81t80 55t99.5 20.5t100 -19.5t82 -54t55.5 -82t20.5 -100.5t-20.5 -99t-55.5 -81t-82 -55.5t-100 -20.5t-99.5 20.5t-80 55.5t-54 81t-20.5 99zM174 1200q0 -66 48 -113t114 -47q68 0 116 47t48 113q0 68 -48.5 115t-115.5 47q-66 0 -114 -47 t-48 -115z" /> +<glyph unicode="´" horiz-adv-x="948" d="M420 1208l198 301h125l-217 -301h-106z" /> +<glyph unicode="¸" horiz-adv-x="806" d="M305 -381q35 16 55.5 62.5t20.5 119.5v105h98v-107q0 -115 -30.5 -172t-83.5 -82z" /> +<glyph unicode="¿" d="M74 -156q0 66 19.5 113t41.5 82l293 440q20 29 34.5 60.5t14.5 78.5v44h119v-41q0 -72 -17.5 -119t-41.5 -82l-279 -418q-23 -35 -45.5 -76t-22.5 -80q0 -53 27 -96t67 -72.5t86 -46t83 -16.5q25 0 50 6t50 17l201 75l39 -110l-172 -72q-35 -14 -84.5 -25.5t-81.5 -11.5 q-74 0 -143.5 25.5t-122 72t-84 110.5t-31.5 142zM463 764v184h141v-184h-141z" /> +<glyph unicode="À" horiz-adv-x="940" d="M55 2l328 1434h174l328 -1434h-109l-92 399h-428l-90 -399h-111zM182 1917h125l198 -301h-106zM289 522h364l-168 778h-26z" /> +<glyph unicode="Á" horiz-adv-x="940" d="M55 2l328 1434h174l328 -1434h-109l-92 399h-428l-90 -399h-111zM289 522h364l-168 778h-26zM420 1618l198 301h125l-217 -301h-106z" /> +<glyph unicode="Â" horiz-adv-x="940" d="M55 2l328 1434h174l328 -1434h-109l-92 399h-428l-90 -399h-111zM209 1692l205 256h113l205 -256h-101l-159 166l-160 -166h-103zM289 522h364l-168 778h-26z" /> +<glyph unicode="Ã" horiz-adv-x="940" d="M55 2l328 1434h174l328 -1434h-109l-92 399h-428l-90 -399h-111zM168 1751h561l47 -102h-557zM289 522h364l-168 778h-26z" /> +<glyph unicode="Ä" horiz-adv-x="940" d="M55 2l328 1434h174l328 -1434h-109l-92 399h-428l-90 -399h-111zM213 1639v157h119v-157h-119zM289 522h364l-168 778h-26zM618 1639v157h119v-157h-119z" /> +<glyph unicode="Æ" horiz-adv-x="1501" d="M29 2l655 1432h725v-117h-465v-537h365v-118h-365v-541h469v-119h-579v399h-512l-183 -399h-110zM381 522l453 -2l2 778l-107 2z" /> +<glyph unicode="Ç" horiz-adv-x="894" d="M137 375v20v641q0 86 30 161t66 114q37 41 59.5 60.5t47.5 33.5q20 10 61 29.5t121 19.5q29 0 70 -10t74 -21l159 -63l-37 -107l-178 70q-20 8 -42.5 14t-43.5 6q-55 0 -104 -25.5t-87 -68.5t-59.5 -98t-21.5 -115l-4 -651q0 -66 22.5 -119t59.5 -90t86 -58.5t102 -23.5 q16 0 33.5 3t45.5 13.5t72 28t115 45.5l45 -116l-165 -60q-35 -12 -76 -20t-70 -8q-78 0 -146.5 27.5t-120.5 78.5t-83 124t-31 165zM387 -381q35 16 55.5 62.5t20.5 119.5v105h98v-107q0 -115 -30.5 -172t-83.5 -82z" /> +<glyph unicode="È" horiz-adv-x="831" d="M162 2v1432h577v-117h-460v-537h360v-118h-360v-541h464v-119h-581zM170 1917h125l198 -301h-106z" /> +<glyph unicode="É" horiz-adv-x="831" d="M162 2v1432h577v-117h-460v-537h360v-118h-360v-541h464v-119h-581zM367 1605l198 301h125l-217 -301h-106z" /> +<glyph unicode="Ê" horiz-adv-x="831" d="M141 1692l205 256h113l205 -256h-101l-159 166l-160 -166h-103zM162 2v1432h577v-117h-460v-537h360v-118h-360v-541h464v-119h-581z" /> +<glyph unicode="Ë" horiz-adv-x="831" d="M162 2v1432h577v-117h-460v-537h360v-118h-360v-541h464v-119h-581zM182 1639v157h119v-157h-119zM587 1639v157h119v-157h-119z" /> +<glyph unicode="Ì" horiz-adv-x="425" d="M-57 1917h125l198 -301h-106zM160 0v1434h106v-1434h-106z" /> +<glyph unicode="Í" horiz-adv-x="425" d="M160 0v1434h106v-1434h-106zM180 1618l198 301h125l-217 -301h-106z" /> +<glyph unicode="Î" horiz-adv-x="425" d="M-45 1692l205 256h113l205 -256h-101l-159 166l-160 -166h-103zM160 0v1434h106v-1434h-106z" /> +<glyph unicode="Ï" horiz-adv-x="425" d="M-47 1639v157h119v-157h-119zM160 0v1434h106v-1434h-106zM358 1639v157h119v-157h-119z" /> +<glyph unicode="Ñ" horiz-adv-x="1134" d="M160 0v1434h147l535 -1293h26v1293h107v-1434h-199l-487 1192h-25v-1192h-104zM262 1751h561l47 -102h-557z" /> +<glyph unicode="Ò" horiz-adv-x="1064" d="M139 352v717q0 45 17.5 110.5t62.5 126t121 103.5t192 43q115 0 191 -43t121 -102.5t63.5 -125t18.5 -110.5v-719q0 -45 -17.5 -108.5t-62.5 -122t-122 -99t-194 -40.5q-115 0 -190.5 40.5t-119.5 99t-62.5 122t-18.5 108.5zM250 350q0 -82 31.5 -130t76.5 -73.5 t93.5 -33t80.5 -7.5q33 0 81.5 8.5t92.5 34t75.5 73.5t31.5 130v719q0 82 -31.5 132t-75.5 78t-92.5 37t-81.5 9t-81 -10t-93 -38t-76.5 -78t-31.5 -132v-719zM273 1917h125l198 -301h-106z" /> +<glyph unicode="Ó" horiz-adv-x="1064" d="M139 352v717q0 45 17.5 110.5t62.5 126t121 103.5t192 43q115 0 191 -43t121 -102.5t63.5 -125t18.5 -110.5v-719q0 -45 -17.5 -108.5t-62.5 -122t-122 -99t-194 -40.5q-115 0 -190.5 40.5t-119.5 99t-62.5 122t-18.5 108.5zM250 350q0 -82 31.5 -130t76.5 -73.5 t93.5 -33t80.5 -7.5q33 0 81.5 8.5t92.5 34t75.5 73.5t31.5 130v719q0 82 -31.5 132t-75.5 78t-92.5 37t-81.5 9t-81 -10t-93 -38t-76.5 -78t-31.5 -132v-719zM492 1618l198 301h125l-217 -301h-106z" /> +<glyph unicode="Ô" horiz-adv-x="1064" d="M139 352v717q0 45 17.5 110.5t62.5 126t121 103.5t192 43q115 0 191 -43t121 -102.5t63.5 -125t18.5 -110.5v-719q0 -45 -17.5 -108.5t-62.5 -122t-122 -99t-194 -40.5q-115 0 -190.5 40.5t-119.5 99t-62.5 122t-18.5 108.5zM250 350q0 -82 31.5 -130t76.5 -73.5 t93.5 -33t80.5 -7.5q33 0 81.5 8.5t92.5 34t75.5 73.5t31.5 130v719q0 82 -31.5 132t-75.5 78t-92.5 37t-81.5 9t-81 -10t-93 -38t-76.5 -78t-31.5 -132v-719zM270 1692l205 256h113l205 -256h-101l-159 166l-160 -166h-103z" /> +<glyph unicode="Õ" horiz-adv-x="1064" d="M139 352v717q0 45 17.5 110.5t62.5 126t121 103.5t192 43q115 0 191 -43t121 -102.5t63.5 -125t18.5 -110.5v-719q0 -45 -17.5 -108.5t-62.5 -122t-122 -99t-194 -40.5q-115 0 -190.5 40.5t-119.5 99t-62.5 122t-18.5 108.5zM230 1751h561l47 -102h-557zM250 350 q0 -82 31.5 -130t76.5 -73.5t93.5 -33t80.5 -7.5q33 0 81.5 8.5t92.5 34t75.5 73.5t31.5 130v719q0 82 -31.5 132t-75.5 78t-92.5 37t-81.5 9t-81 -10t-93 -38t-76.5 -78t-31.5 -132v-719z" /> +<glyph unicode="Ö" horiz-adv-x="1064" d="M139 352v717q0 45 17.5 110.5t62.5 126t121 103.5t192 43q115 0 191 -43t121 -102.5t63.5 -125t18.5 -110.5v-719q0 -45 -17.5 -108.5t-62.5 -122t-122 -99t-194 -40.5q-115 0 -190.5 40.5t-119.5 99t-62.5 122t-18.5 108.5zM250 350q0 -82 31.5 -130t76.5 -73.5 t93.5 -33t80.5 -7.5q33 0 81.5 8.5t92.5 34t75.5 73.5t31.5 130v719q0 82 -31.5 132t-75.5 78t-92.5 37t-81.5 9t-81 -10t-93 -38t-76.5 -78t-31.5 -132v-719zM276 1639v157h119v-157h-119zM681 1639v157h119v-157h-119z" /> +<glyph unicode="×" horiz-adv-x="925" d="M113 274l278 279l-278 278l71 72l279 -278l278 278l72 -72l-278 -278l278 -279l-72 -71l-278 278l-279 -278z" /> +<glyph unicode="Ø" horiz-adv-x="1064" d="M139 352v717q0 45 17.5 110.5t62.5 126t121 103.5t192 43q115 0 191 -43t121 -102.5t63.5 -125t18.5 -110.5v-719q0 -45 -17.5 -108.5t-62.5 -122t-122 -99t-194 -40.5q-115 0 -190.5 40.5t-119.5 99t-62.5 122t-18.5 108.5zM250 350q0 -82 31.5 -130t76.5 -73.5 t93.5 -33t80.5 -7.5q33 0 81.5 8.5t92.5 34t75.5 73.5t31.5 130v719q0 82 -31.5 132t-75.5 78t-92.5 37t-81.5 9t-81 -10t-93 -38t-76.5 -78t-31.5 -132v-719zM346 -135l250 1704h123l-250 -1704h-123z" /> +<glyph unicode="Ù" horiz-adv-x="1093" d="M158 354v1082h106v-1082q0 -82 29 -133t71 -80.5t91 -41t92 -11.5q37 0 86 11.5t93 41t73.5 80.5t29.5 133v1082h107v-1082q0 -59 -18.5 -123.5t-62.5 -119t-120 -90t-188 -35.5q-113 0 -187.5 35.5t-119.5 90t-63.5 119t-18.5 123.5zM289 1917h125l198 -301h-106z" /> +<glyph unicode="Ú" horiz-adv-x="1093" d="M158 354v1082h106v-1082q0 -82 29 -133t71 -80.5t91 -41t92 -11.5q37 0 86 11.5t93 41t73.5 80.5t29.5 133v1082h107v-1082q0 -59 -18.5 -123.5t-62.5 -119t-120 -90t-188 -35.5q-113 0 -187.5 35.5t-119.5 90t-63.5 119t-18.5 123.5zM483 1618l198 301h125l-217 -301 h-106z" /> +<glyph unicode="Û" horiz-adv-x="1093" d="M158 354v1082h106v-1082q0 -82 29 -133t71 -80.5t91 -41t92 -11.5q37 0 86 11.5t93 41t73.5 80.5t29.5 133v1082h107v-1082q0 -59 -18.5 -123.5t-62.5 -119t-120 -90t-188 -35.5q-113 0 -187.5 35.5t-119.5 90t-63.5 119t-18.5 123.5zM284 1692l205 256h113l205 -256 h-101l-159 166l-160 -166h-103z" /> +<glyph unicode="Ü" horiz-adv-x="1093" d="M158 354v1082h106v-1082q0 -82 29 -133t71 -80.5t91 -41t92 -11.5q37 0 86 11.5t93 41t73.5 80.5t29.5 133v1082h107v-1082q0 -59 -18.5 -123.5t-62.5 -119t-120 -90t-188 -35.5q-113 0 -187.5 35.5t-119.5 90t-63.5 119t-18.5 123.5zM281 1639v157h119v-157h-119z M686 1639v157h119v-157h-119z" /> +<glyph unicode="Ý" horiz-adv-x="886" d="M31 1434h114l281 -660h35l280 660h115l-324 -783h-28v-651h-123v651h-25zM377 1618l198 301h125l-217 -301h-106z" /> +<glyph unicode="Þ" horiz-adv-x="878" d="M160 -510v1944h2h100h2v-447q82 43 141.5 50t94.5 7q57 0 106 -22.5t86 -62t58.5 -92t21.5 -111.5v-484q0 -59 -21.5 -111t-58.5 -91t-86 -61.5t-106 -22.5q-43 0 -107.5 10t-130.5 43v-549h-102zM266 145q59 -31 114.5 -45t121.5 -14q35 0 65.5 14.5t53 39t36 56 t13.5 68.5v498q0 74 -49.5 126t-120.5 52q-49 0 -118 -17.5t-116 -54.5v-723z" /> +<glyph unicode="ß" horiz-adv-x="1036" d="M131 0v1081q0 45 15.5 109.5t56.5 123t115.5 100.5t195.5 42q117 0 190.5 -42t114.5 -101.5t55.5 -125t14.5 -110.5q0 -86 -38 -166t-120 -108q70 -25 111 -67t63.5 -89t29.5 -93t7 -79v-94q0 -47 -14.5 -112.5t-55.5 -125t-114.5 -101.5t-190.5 -42h-106v111h102 q37 0 83 9t87 38.5t68.5 83t27.5 139.5v88q0 88 -25.5 141.5t-62 82t-80 37.5t-79.5 9h-47v111h45h8q94 0 141 60.5t47 164.5q0 88 -27.5 141.5t-67.5 82t-86 38t-81 9.5q-37 0 -83 -9.5t-88 -38t-70.5 -82t-28.5 -141.5v-1075h-113z" /> +<glyph unicode="à" horiz-adv-x="825" d="M96 272v115q0 59 20.5 111.5t57.5 91.5t87 61.5t108 22.5q14 0 43.5 -2t63.5 -8.5t69 -17.5t59 -30v70q0 47 -17.5 93t-46 83t-67.5 59.5t-84 22.5q-16 0 -58 -10t-87 -21q-53 -12 -115 -28l-29 96q68 16 125 31q49 12 96.5 22t67.5 10q66 0 123 -30.5t100 -80.5 t68 -114.5t25 -132.5l2 -586l38 -37l-73 -73l-56 55q-66 -37 -136 -51t-111 -14q-57 0 -107.5 23.5t-87.5 63t-57.5 93t-20.5 112.5zM158 1507h125l198 -301h-106zM199 264q0 -37 13 -68.5t35.5 -55t53.5 -38t66 -14.5q31 0 70.5 11.5t76.5 25.5q43 16 88 37v336 q0 2 -18.5 13t-50 24.5t-74.5 24.5t-90 11q-35 0 -67 -14t-54.5 -38.5t-35.5 -56.5t-13 -69v-129z" /> +<glyph unicode="á" horiz-adv-x="825" d="M96 272v115q0 59 20.5 111.5t57.5 91.5t87 61.5t108 22.5q14 0 43.5 -2t63.5 -8.5t69 -17.5t59 -30v70q0 47 -17.5 93t-46 83t-67.5 59.5t-84 22.5q-16 0 -58 -10t-87 -21q-53 -12 -115 -28l-29 96q68 16 125 31q49 12 96.5 22t67.5 10q66 0 123 -30.5t100 -80.5 t68 -114.5t25 -132.5l2 -586l38 -37l-73 -73l-56 55q-66 -37 -136 -51t-111 -14q-57 0 -107.5 23.5t-87.5 63t-57.5 93t-20.5 112.5zM199 264q0 -37 13 -68.5t35.5 -55t53.5 -38t66 -14.5q31 0 70.5 11.5t76.5 25.5q43 16 88 37v336q0 2 -18.5 13t-50 24.5t-74.5 24.5 t-90 11q-35 0 -67 -14t-54.5 -38.5t-35.5 -56.5t-13 -69v-129zM359 1208l198 301h125l-217 -301h-106z" /> +<glyph unicode="â" horiz-adv-x="825" d="M96 272v115q0 59 20.5 111.5t57.5 91.5t87 61.5t108 22.5q14 0 43.5 -2t63.5 -8.5t69 -17.5t59 -30v70q0 47 -17.5 93t-46 83t-67.5 59.5t-84 22.5q-16 0 -58 -10t-87 -21q-53 -12 -115 -28l-29 96q68 16 125 31q49 12 96.5 22t67.5 10q66 0 123 -30.5t100 -80.5 t68 -114.5t25 -132.5l2 -586l38 -37l-73 -73l-56 55q-66 -37 -136 -51t-111 -14q-57 0 -107.5 23.5t-87.5 63t-57.5 93t-20.5 112.5zM159 1282l205 256h113l205 -256h-101l-159 166l-160 -166h-103zM199 264q0 -37 13 -68.5t35.5 -55t53.5 -38t66 -14.5q31 0 70.5 11.5 t76.5 25.5q43 16 88 37v336q0 2 -18.5 13t-50 24.5t-74.5 24.5t-90 11q-35 0 -67 -14t-54.5 -38.5t-35.5 -56.5t-13 -69v-129z" /> +<glyph unicode="ã" horiz-adv-x="825" d="M96 272v115q0 59 20.5 111.5t57.5 91.5t87 61.5t108 22.5q14 0 43.5 -2t63.5 -8.5t69 -17.5t59 -30v70q0 47 -17.5 93t-46 83t-67.5 59.5t-84 22.5q-16 0 -58 -10t-87 -21q-53 -12 -115 -28l-29 96q68 16 125 31q49 12 96.5 22t67.5 10q66 0 123 -30.5t100 -80.5 t68 -114.5t25 -132.5l2 -586l38 -37l-73 -73l-56 55q-66 -37 -136 -51t-111 -14q-57 0 -107.5 23.5t-87.5 63t-57.5 93t-20.5 112.5zM115 1341h561l47 -102h-557zM199 264q0 -37 13 -68.5t35.5 -55t53.5 -38t66 -14.5q31 0 70.5 11.5t76.5 25.5q43 16 88 37v336 q0 2 -18.5 13t-50 24.5t-74.5 24.5t-90 11q-35 0 -67 -14t-54.5 -38.5t-35.5 -56.5t-13 -69v-129z" /> +<glyph unicode="ä" horiz-adv-x="825" d="M96 272v115q0 59 20.5 111.5t57.5 91.5t87 61.5t108 22.5q14 0 43.5 -2t63.5 -8.5t69 -17.5t59 -30v70q0 47 -17.5 93t-46 83t-67.5 59.5t-84 22.5q-16 0 -58 -10t-87 -21q-53 -12 -115 -28l-29 96q68 16 125 31q49 12 96.5 22t67.5 10q66 0 123 -30.5t100 -80.5 t68 -114.5t25 -132.5l2 -586l38 -37l-73 -73l-56 55q-66 -37 -136 -51t-111 -14q-57 0 -107.5 23.5t-87.5 63t-57.5 93t-20.5 112.5zM147 1229v157h119v-157h-119zM199 264q0 -37 13 -68.5t35.5 -55t53.5 -38t66 -14.5q31 0 70.5 11.5t76.5 25.5q43 16 88 37v336 q0 2 -18.5 13t-50 24.5t-74.5 24.5t-90 11q-35 0 -67 -14t-54.5 -38.5t-35.5 -56.5t-13 -69v-129zM552 1229v157h119v-157h-119z" /> +<glyph unicode="æ" horiz-adv-x="1320" d="M96 272v115q0 59 20.5 111.5t57.5 91.5t87 61.5t108 22.5q14 0 41.5 -2t61.5 -8.5t68.5 -16.5t59.5 -29v97q-6 43 -24.5 85t-46 73.5t-63.5 51t-77 19.5q-16 0 -58 -10t-87 -21q-53 -12 -115 -28l-29 96q68 16 125 31q49 12 96.5 22t67.5 10q76 0 140.5 -39.5 t107.5 -103.5q35 66 99.5 104.5t142.5 38.5h69q57 0 108.5 -22.5t90.5 -61t60.5 -92t21.5 -114.5v-68q0 -86 -31 -144.5t-84 -95t-123.5 -52t-150.5 -15.5q-33 0 -66 2t-67 6v-123q14 -82 76.5 -130t142.5 -48q8 0 52 9t93 20q57 12 127 28l25 -108q-76 -16 -138 -27 q-53 -10 -101 -18t-58 -8q-37 0 -76 9t-73 24.5t-61.5 35t-41.5 39.5q-8 -4 -17 -12q-8 -6 -18.5 -13.5t-24.5 -15.5q-66 -41 -135 -55t-110 -14q-57 0 -107.5 23.5t-87.5 63t-57.5 93t-20.5 112.5zM199 264q0 -37 13 -68.5t35.5 -55t53.5 -38t66 -14.5q31 0 70.5 11.5 t76.5 25.5q43 16 88 37v98q-2 10 -2 20.5v20.5v199q-6 4 -25.5 15t-50 23.5t-70.5 22.5t-85 10q-35 0 -67 -14t-54.5 -38.5t-35.5 -56.5t-13 -69v-129zM707 496h241q37 -2 69 12t55.5 39.5t36.5 59.5t13 71v86q0 49 -18.5 83t-48 54.5t-69.5 29.5t-83 9q-39 0 -74.5 -12.5 t-62.5 -35t-43 -55t-16 -73.5v-268z" /> +<glyph unicode="ç" horiz-adv-x="706" d="M113 303v428q0 70 25.5 128.5t68.5 99t101.5 64.5t125.5 24q33 0 69 -8.5t66 -18.5q37 -10 72 -25l-25 -88q-31 10 -63 19q-29 8 -59.5 14t-59.5 6q-90 0 -154.5 -58.5t-64.5 -156.5v-428q0 -49 17.5 -89t48 -68.5t70.5 -44t85 -15.5q20 0 51 5t60 11q35 8 71 19l33 -94 q-41 -14 -78 -23q-33 -8 -70.5 -14t-66.5 -6q-68 0 -126 23.5t-102 66.5t-69.5 101t-25.5 128zM305 -381q35 16 55.5 62.5t20.5 119.5v105h98v-107q0 -115 -30.5 -172t-83.5 -82z" /> +<glyph unicode="è" horiz-adv-x="833" d="M113 301v453q0 61 21.5 114.5t59 92t88 61t109.5 22.5h70q57 0 108.5 -22.5t90 -61t60 -92t21.5 -114.5v-68q0 -86 -30.5 -144.5t-84 -95t-124 -52t-150.5 -15.5q-33 0 -65.5 2t-67.5 6v-123q14 -82 76.5 -130t142.5 -48q8 0 52.5 9t93.5 20q57 12 127 28l24 -108 q-76 -16 -137 -27q-53 -10 -101 -18t-59 -8q-66 0 -125 23.5t-104 66.5t-70.5 101t-25.5 128zM166 1507h125l198 -301h-106zM219 496l242 -2h4q37 0 67.5 15t53 40.5t36 58.5t13.5 70v86q0 49 -18.5 83t-48 54.5t-69.5 29.5t-83 9q-39 0 -75 -12.5t-62.5 -35t-43 -55 t-16.5 -73.5v-268z" /> +<glyph unicode="é" horiz-adv-x="833" d="M113 301v453q0 61 21.5 114.5t59 92t88 61t109.5 22.5h70q57 0 108.5 -22.5t90 -61t60 -92t21.5 -114.5v-68q0 -86 -30.5 -144.5t-84 -95t-124 -52t-150.5 -15.5q-33 0 -65.5 2t-67.5 6v-123q14 -82 76.5 -130t142.5 -48q8 0 52.5 9t93.5 20q57 12 127 28l24 -108 q-76 -16 -137 -27q-53 -10 -101 -18t-59 -8q-66 0 -125 23.5t-104 66.5t-70.5 101t-25.5 128zM219 496l242 -2h4q37 0 67.5 15t53 40.5t36 58.5t13.5 70v86q0 49 -18.5 83t-48 54.5t-69.5 29.5t-83 9q-39 0 -75 -12.5t-62.5 -35t-43 -55t-16.5 -73.5v-268zM375 1208l198 301 h125l-217 -301h-106z" /> +<glyph unicode="ê" horiz-adv-x="833" d="M113 301v453q0 61 21.5 114.5t59 92t88 61t109.5 22.5h70q57 0 108.5 -22.5t90 -61t60 -92t21.5 -114.5v-68q0 -86 -30.5 -144.5t-84 -95t-124 -52t-150.5 -15.5q-33 0 -65.5 2t-67.5 6v-123q14 -82 76.5 -130t142.5 -48q8 0 52.5 9t93.5 20q57 12 127 28l24 -108 q-76 -16 -137 -27q-53 -10 -101 -18t-59 -8q-66 0 -125 23.5t-104 66.5t-70.5 101t-25.5 128zM155 1282l205 256h113l205 -256h-101l-159 166l-160 -166h-103zM219 496l242 -2h4q37 0 67.5 15t53 40.5t36 58.5t13.5 70v86q0 49 -18.5 83t-48 54.5t-69.5 29.5t-83 9 q-39 0 -75 -12.5t-62.5 -35t-43 -55t-16.5 -73.5v-268z" /> +<glyph unicode="ë" horiz-adv-x="833" d="M113 301v453q0 61 21.5 114.5t59 92t88 61t109.5 22.5h70q57 0 108.5 -22.5t90 -61t60 -92t21.5 -114.5v-68q0 -86 -30.5 -144.5t-84 -95t-124 -52t-150.5 -15.5q-33 0 -65.5 2t-67.5 6v-123q14 -82 76.5 -130t142.5 -48q8 0 52.5 9t93.5 20q57 12 127 28l24 -108 q-76 -16 -137 -27q-53 -10 -101 -18t-59 -8q-66 0 -125 23.5t-104 66.5t-70.5 101t-25.5 128zM172 1229v157h119v-157h-119zM219 496l242 -2h4q37 0 67.5 15t53 40.5t36 58.5t13.5 70v86q0 49 -18.5 83t-48 54.5t-69.5 29.5t-83 9q-39 0 -75 -12.5t-62.5 -35t-43 -55 t-16.5 -73.5v-268zM577 1229v157h119v-157h-119z" /> +<glyph unicode="ì" horiz-adv-x="370" d="M-92 1507h125l198 -301h-106zM131 0v1024h109v-1024h-109z" /> +<glyph unicode="í" horiz-adv-x="370" d="M131 0v1024h109v-1024h-109zM133 1208l199 301h125l-217 -301h-107z" /> +<glyph unicode="î" horiz-adv-x="370" d="M-74 1282l205 256h113l205 -256h-101l-159 166l-160 -166h-103zM131 0v1024h109v-1024h-109zM131 1274v160h109v-160h-109z" /> +<glyph unicode="ï" horiz-adv-x="370" d="M-76 1229v157h119v-157h-119zM131 0v1024h109v-1024h-109zM330 1229v157h119v-157h-119z" /> +<glyph unicode="ñ" horiz-adv-x="884" d="M88 967l74 73l61 -61q113 63 213 63q92 0 172 -38t121 -130q25 -51 29 -103t4 -107v-664h-109v727q0 104 -55 159.5t-125 55.5q-39 0 -99.5 -12t-135.5 -62v-868h-105v924zM129 1341h561l47 -102h-557z" /> +<glyph unicode="ò" d="M115 281v473q0 94 34.5 151.5t84 88t102.5 40.5t92 10t92 -10t102.5 -40.5t84 -88t34.5 -151.5v-473q0 -94 -34.5 -151.5t-84 -89.5t-102.5 -42t-92 -10t-92 10t-102.5 42t-84 89t-34.5 152zM160 1507h125l198 -301h-106zM207 295q0 -68 24.5 -108t59.5 -62.5t72.5 -29.5 t64.5 -7t64.5 7t71.5 29.5t58.5 62.5t24.5 108v444q0 68 -24.5 108t-58.5 61.5t-71.5 28.5t-64.5 7t-64.5 -7t-72.5 -28.5t-59.5 -61.5t-24.5 -108v-444z" /> +<glyph unicode="ó" d="M115 281v473q0 94 34.5 151.5t84 88t102.5 40.5t92 10t92 -10t102.5 -40.5t84 -88t34.5 -151.5v-473q0 -94 -34.5 -151.5t-84 -89.5t-102.5 -42t-92 -10t-92 10t-102.5 42t-84 89t-34.5 152zM207 295q0 -68 24.5 -108t59.5 -62.5t72.5 -29.5t64.5 -7t64.5 7t71.5 29.5 t58.5 62.5t24.5 108v444q0 68 -24.5 108t-58.5 61.5t-71.5 28.5t-64.5 7t-64.5 -7t-72.5 -28.5t-59.5 -61.5t-24.5 -108v-444zM365 1208l198 301h125l-217 -301h-106z" /> +<glyph unicode="ô" d="M115 281v473q0 94 34.5 151.5t84 88t102.5 40.5t92 10t92 -10t102.5 -40.5t84 -88t34.5 -151.5v-473q0 -94 -34.5 -151.5t-84 -89.5t-102.5 -42t-92 -10t-92 10t-102.5 42t-84 89t-34.5 152zM166 1282l205 256h113l205 -256h-101l-159 166l-160 -166h-103zM207 295 q0 -68 24.5 -108t59.5 -62.5t72.5 -29.5t64.5 -7t64.5 7t71.5 29.5t58.5 62.5t24.5 108v444q0 68 -24.5 108t-58.5 61.5t-71.5 28.5t-64.5 7t-64.5 -7t-72.5 -28.5t-59.5 -61.5t-24.5 -108v-444z" /> +<glyph unicode="õ" d="M115 281v473q0 94 34.5 151.5t84 88t102.5 40.5t92 10t92 -10t102.5 -40.5t84 -88t34.5 -151.5v-473q0 -94 -34.5 -151.5t-84 -89.5t-102.5 -42t-92 -10t-92 10t-102.5 42t-84 89t-34.5 152zM127 1341h561l47 -102h-557zM207 295q0 -68 24.5 -108t59.5 -62.5t72.5 -29.5 t64.5 -7t64.5 7t71.5 29.5t58.5 62.5t24.5 108v444q0 68 -24.5 108t-58.5 61.5t-71.5 28.5t-64.5 7t-64.5 -7t-72.5 -28.5t-59.5 -61.5t-24.5 -108v-444z" /> +<glyph unicode="ö" d="M115 281v473q0 94 34.5 151.5t84 88t102.5 40.5t92 10t92 -10t102.5 -40.5t84 -88t34.5 -151.5v-473q0 -94 -34.5 -151.5t-84 -89.5t-102.5 -42t-92 -10t-92 10t-102.5 42t-84 89t-34.5 152zM166 1229v157h119v-157h-119zM207 295q0 -68 24.5 -108t59.5 -62.5t72.5 -29.5 t64.5 -7t64.5 7t71.5 29.5t58.5 62.5t24.5 108v444q0 68 -24.5 108t-58.5 61.5t-71.5 28.5t-64.5 7t-64.5 -7t-72.5 -28.5t-59.5 -61.5t-24.5 -108v-444zM571 1229v157h119v-157h-119z" /> +<glyph unicode="÷" horiz-adv-x="931" d="M116 369v131h703v-131h-703zM404 2v180h141v-180h-141zM406 657v185h141v-185h-141z" /> +<glyph unicode="ø" horiz-adv-x="858" d="M115 281v473q0 94 34.5 151.5t84 88t102.5 40.5t92 10t92 -10t102.5 -40.5t84 -88t34.5 -151.5v-473q0 -94 -34.5 -151.5t-84 -89.5t-102.5 -42t-92 -10t-92 10t-102.5 42t-84 89t-34.5 152zM207 295q0 -68 24.5 -108t59.5 -62.5t72.5 -29.5t64.5 -7t64.5 7t71.5 29.5 t58.5 62.5t24.5 108v444q0 68 -24.5 108t-58.5 61.5t-71.5 28.5t-64.5 7t-64.5 -7t-72.5 -28.5t-59.5 -61.5t-24.5 -108v-444zM262 -180l207 1430h123l-207 -1430h-123z" /> +<glyph unicode="ù" horiz-adv-x="884" d="M125 362v662h106v-725q0 -53 15.5 -93t41 -66.5t58.5 -41t68 -14.5q66 0 132 23.5t103 50.5v866h105v-922l45 -43l-74 -73l-61 61q-59 -33 -127 -48t-121 -15q-74 0 -145.5 38t-112.5 130q-25 51 -29 103t-4 107zM166 1507h125l198 -301h-106z" /> +<glyph unicode="ú" horiz-adv-x="884" d="M125 362v662h106v-725q0 -53 15.5 -93t41 -66.5t58.5 -41t68 -14.5q66 0 132 23.5t103 50.5v866h105v-922l45 -43l-74 -73l-61 61q-59 -33 -127 -48t-121 -15q-74 0 -145.5 38t-112.5 130q-25 51 -29 103t-4 107zM367 1208l198 301h125l-217 -301h-106z" /> +<glyph unicode="û" horiz-adv-x="884" d="M125 362v662h106v-725q0 -53 15.5 -93t41 -66.5t58.5 -41t68 -14.5q66 0 132 23.5t103 50.5v866h105v-922l45 -43l-74 -73l-61 61q-59 -33 -127 -48t-121 -15q-74 0 -145.5 38t-112.5 130q-25 51 -29 103t-4 107zM176 1282l205 256h113l205 -256h-101l-159 166l-160 -166 h-103z" /> +<glyph unicode="ü" horiz-adv-x="884" d="M125 362v662h106v-725q0 -53 15.5 -93t41 -66.5t58.5 -41t68 -14.5q66 0 132 23.5t103 50.5v866h105v-922l45 -43l-74 -73l-61 61q-59 -33 -127 -48t-121 -15q-74 0 -145.5 38t-112.5 130q-25 51 -29 103t-4 107zM182 1229v157h119v-157h-119zM587 1229v157h119v-157 h-119z" /> +<glyph unicode="ý" horiz-adv-x="768" d="M45 1024h105q53 -225 95 -382t70 -257q33 -117 56 -192h24q18 76 49 192q27 100 69 257t105 382h105l-274 -1024h-13l-84 -512h-104l84 512h-15zM316 1208l198 301h125l-217 -301h-106z" /> +<glyph unicode="þ" horiz-adv-x="858" d="M131 -512v1944h2h100h3v-447q82 43 141 50t94 7q57 0 106.5 -22.5t86 -62t58 -92t21.5 -111.5v-484q0 -59 -21.5 -111.5t-58 -91t-86 -61t-106.5 -22.5q-43 0 -107.5 10t-130.5 43v-549h-102zM238 143q59 -31 114.5 -45t120.5 -14q35 0 65.5 14.5t53 39t36 56t13.5 68.5 v498q0 74 -49 126t-121 52q-49 0 -117.5 -17.5t-115.5 -54.5v-723z" /> +<glyph unicode="ÿ" horiz-adv-x="768" d="M45 1024h105q53 -225 95 -382t70 -257q33 -117 56 -192h24q18 76 49 192q27 100 69 257t105 382h105l-274 -1024h-13l-84 -512h-104l84 512h-15zM125 1229v157h119v-157h-119zM530 1229v157h119v-157h-119z" /> +<glyph unicode="Œ" horiz-adv-x="1480" d="M139 373v717q0 45 17.5 110.5t62.5 125.5t121 103.5t192 43.5q96 0 164 -31t115 -78v90h578v-117h-461v-536h360v-119h-360v-541h465v-118h-582v79q-47 -43 -114.5 -71.5t-166.5 -28.5q-115 0 -190.5 41t-119.5 99.5t-62.5 122t-18.5 108.5zM250 371q0 -82 31.5 -130 t76.5 -74t93.5 -33t80.5 -7q31 0 75 7t87 28.5t76 62.5t41 111v792q-8 70 -41 113t-76 66.5t-87 32t-75 8.5q-33 0 -81 -10.5t-93 -38t-76.5 -78t-31.5 -131.5v-719z" /> +<glyph unicode="œ" horiz-adv-x="1368" d="M115 276v474q0 94 34.5 151t84 88t102.5 41t92 10t92 -10t102.5 -41t84 -88t34.5 -151v-474q0 -94 -34.5 -151t-84 -89t-102.5 -42t-92 -10t-92 10t-102.5 42t-84 89t-34.5 151zM207 291q0 -68 24.5 -108t59.5 -62.5t72.5 -29.5t64.5 -7t64.5 7t71.5 29.5t58.5 62.5 t24.5 108v444q0 68 -24.5 108t-58.5 61.5t-71.5 28.5t-64.5 7t-64.5 -7t-72.5 -28.5t-59.5 -61.5t-24.5 -108v-444zM647 301v453q0 61 21.5 114.5t59.5 92t88 61t110 22.5h69q57 0 108.5 -22.5t90.5 -61t60.5 -92t21.5 -114.5v-68q0 -86 -31 -144.5t-84 -95t-123.5 -52 t-150.5 -15.5q-33 0 -66 2t-67 6v-123q14 -82 76.5 -130t142.5 -48q20 0 65 8t92 19q53 12 115 28l25 -106q-66 -16 -123 -27q-49 -10 -98.5 -18t-75.5 -8q-66 0 -125.5 23.5t-104.5 66.5t-70.5 101t-25.5 128zM754 496l241 -2h4q37 0 68 15t53.5 40.5t35.5 58.5t13 70v86 q0 49 -18 83t-48 54.5t-70 29.5t-83 9q-39 0 -74.5 -12.5t-62.5 -35t-43 -55t-16 -73.5v-268z" /> +<glyph unicode="Ÿ" horiz-adv-x="886" d="M31 1434h114l281 -660h35l280 660h115l-324 -783h-28v-651h-123v651h-25zM188 1639v157h119v-157h-119zM593 1639v157h119v-157h-119z" /> +<glyph unicode="ˆ" horiz-adv-x="811" d="M143 1282l205 256h113l205 -256h-101l-159 166l-160 -166h-103z" /> +<glyph unicode="˜" horiz-adv-x="1017" d="M205 1341h561l47 -102h-557z" /> +<glyph unicode=" " horiz-adv-x="974" /> +<glyph unicode=" " horiz-adv-x="1948" /> +<glyph unicode=" " horiz-adv-x="974" /> +<glyph unicode=" " horiz-adv-x="1948" /> +<glyph unicode=" " horiz-adv-x="649" /> +<glyph unicode=" " horiz-adv-x="487" /> +<glyph unicode=" " horiz-adv-x="324" /> +<glyph unicode=" " horiz-adv-x="324" /> +<glyph unicode=" " horiz-adv-x="243" /> +<glyph unicode=" " horiz-adv-x="389" /> +<glyph unicode=" " horiz-adv-x="108" /> +<glyph unicode="‐" horiz-adv-x="741" d="M125 662v131h491v-131h-491z" /> +<glyph unicode="‑" horiz-adv-x="741" d="M125 662v131h491v-131h-491z" /> +<glyph unicode="‒" horiz-adv-x="741" d="M125 662v131h491v-131h-491z" /> +<glyph unicode="–" horiz-adv-x="948" d="M121 428v111h702v-111h-702z" /> +<glyph unicode="—" horiz-adv-x="1503" d="M121 428v111h1257v-111h-1257z" /> +<glyph unicode="‚" horiz-adv-x="382" d="M84 756q35 16 61.5 54t26.5 112v104h119v-106q0 -115 -47 -184.5t-125 -102.5z" /> +<glyph unicode="“" horiz-adv-x="647" d="M100 1044v107q0 115 47.5 184.5t124.5 102.5l35 -123q-35 -16 -61.5 -54t-26.5 -112v-105h-119zM369 1044v107q0 115 47 184.5t125 102.5l34 -123q-35 -16 -61.5 -54t-26.5 -112v-105h-118z" /> +<glyph unicode="”" horiz-adv-x="638" d="M76 1163q35 16 61.5 54t26.5 112v105h119v-107q0 -115 -47.5 -184.5t-124.5 -102.5zM344 1163q35 16 61.5 54t26.5 112v105h119v-107q0 -115 -47 -184.5t-125 -102.5z" /> +<glyph unicode="•" horiz-adv-x="606" d="M92 506q0 43 16.5 82t45 68.5t67.5 46t82 16.5t82 -16.5t68.5 -46t46 -68.5t16.5 -82t-16.5 -82t-46 -68.5t-68.5 -46t-82 -16.5t-82 16.5t-67.5 46t-45 68.5t-16.5 82z" /> +<glyph unicode="…" horiz-adv-x="1030" d="M115 10v180h141v-180h-141zM444 10v180h142v-180h-142zM774 10v180h141v-180h-141z" /> +<glyph unicode=" " horiz-adv-x="389" /> +<glyph unicode=" " horiz-adv-x="487" /> +<glyph unicode="€" horiz-adv-x="952" d="M86 512v90h147v156h-147v90h147v231q0 59 21.5 110.5t58.5 89.5t86.5 59.5t106.5 21.5h67q55 0 104.5 -21.5t86.5 -59.5t58.5 -89t21.5 -111v-47h-105v47q0 82 -57 126t-133 44q-43 0 -81 -8t-66.5 -28.5t-46 -52.5t-17.5 -81v-231h313v-90h-313v-156h313v-90h-313v-225 q0 -74 48 -126t120 -52h65q70 0 119 52t49 126v47h105v-53q0 -59 -21.5 -110.5t-58.5 -89.5t-86 -59.5t-107 -21.5h-67q-57 0 -106.5 21.5t-86.5 59.5t-57.5 89t-20.5 111v231h-147z" /> +<glyph unicode="™" horiz-adv-x="1138" d="M117 1384v50h348v-50h-148v-591h-49v591h-151zM575 793v641h80l119 -400h14l121 400h80v-641h-49v532h-12l-107 -344h-80l-106 344h-12v-532h-48z" /> +<glyph unicode="" horiz-adv-x="1024" d="M0 0v1024h1024v-1024h-1024z" /> +<glyph unicode="fi" horiz-adv-x="948" d="M51 924v100h182v160q0 72 18.5 123t50.5 82.5t76 47t95 15.5h37v-111h-27q-57 0 -101 -30.5t-44 -112.5v-174h479v-1024h-108v924h-369v-924h-109v924h-180zM709 1274v160h108v-160h-108z" /> +<glyph unicode="fl" horiz-adv-x="999" d="M51 924v100h182v160q0 72 18.5 123t50.5 82.5t76 47t95 15.5h37v-111h-27q-57 0 -101 -30.5t-44 -112.5v-174h371v410h106v-1174q0 -84 42 -115.5t101 -31.5h27v-111h-37q-51 0 -95 15.5t-76 47t-50 82.5t-18 123v654h-369v-924h-109v924h-180z" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/fonts/marvel/marvel-400-normal-webfont.ttf b/app/design/frontend/magento_plushe/fonts/marvel/marvel-400-normal-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d5a74aa443599e53c460081f4b2324fab92944f4 GIT binary patch literal 42136 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 literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/marvel/marvel-400-normal-webfont.woff b/app/design/frontend/magento_plushe/fonts/marvel/marvel-400-normal-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..ed785d30386afa962bc77e1d6a080d98e0ffc5ad GIT binary patch literal 21960 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 literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.eot b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..e22984c8074248543b6c0886af2e8037ca751861 GIT binary patch literal 24029 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 literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.svg b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.svg new file mode 100644 index 00000000000..6cdfecda080 --- /dev/null +++ b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.svg @@ -0,0 +1,245 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="source_sans_prolight" horiz-adv-x="980" > +<font-face units-per-em="2048" ascent="1536" descent="-512" /> +<missing-glyph horiz-adv-x="407" /> +<glyph horiz-adv-x="0" /> +<glyph horiz-adv-x="682" /> +<glyph horiz-adv-x="0" /> +<glyph horiz-adv-x="0" /> +<glyph unicode="
" horiz-adv-x="407" /> +<glyph unicode=" " horiz-adv-x="407" /> +<glyph unicode="	" horiz-adv-x="407" /> +<glyph unicode=" " horiz-adv-x="407" /> +<glyph unicode="!" horiz-adv-x="530" d="M178 68q0 45 26.5 69.5t61.5 24.5t60.5 -24.5t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68zM219 1227v145h94l-2 -145l-12 -860h-68z" /> +<glyph unicode=""" horiz-adv-x="737" d="M170 1419h104v-141l-18 -301h-68l-16 301zM459 1419h104v-141l-18 -301h-68l-16 301z" /> +<glyph unicode="#" d="M74 438v74h178l43 348h-180v74h188l51 397h72l-51 -397h305l53 397h70l-51 -397h168v-74h-175l-43 -348h177v-74h-187l-51 -438h-72l52 438h-306l-53 -438h-72l54 438h-170zM324 512h307l43 348h-307z" /> +<glyph unicode="$" d="M121 135l49 64q59 -53 141 -98.5t189 -45.5q129 0 197.5 70t68.5 182q0 100 -44 162.5t-109.5 107t-142.5 79t-142.5 79.5t-109.5 109.5t-44 169.5q0 63 21.5 118.5t59.5 97.5t91 68.5t117 32.5v203h80v-203q100 -6 163.5 -47t116.5 -96l-53 -58q-29 29 -56.5 51.5 t-58 39t-67.5 24.5t-84 8q-106 0 -172 -66.5t-66 -168.5q0 -90 44 -144.5t109.5 -94.5t142.5 -73.5t142.5 -82t109.5 -121t44 -189.5q0 -147 -89 -235t-226 -101v-202h-80v202q-106 8 -194.5 54.5t-147.5 103.5z" /> +<glyph unicode="%" horiz-adv-x="1648" d="M82 952q0 205 77 313.5t212 108.5t211.5 -108.5t76.5 -313.5q0 -207 -76.5 -316.5t-211.5 -109.5t-212 110t-77 316zM162 952q0 -172 56.5 -265t152.5 -93t152.5 93t56.5 265t-56.5 263.5t-152.5 91.5t-152.5 -91.5t-56.5 -263.5zM405 -25l754 1399h78l-752 -1399h-80z M989 401q0 205 77 313.5t212 108.5t211.5 -108.5t76.5 -313.5q0 -207 -76.5 -316.5t-211.5 -109.5t-212 110t-77 316zM1069 401q0 -172 56.5 -265t152.5 -93t152.5 93t56.5 265t-56.5 263.5t-152.5 91.5t-152.5 -91.5t-56.5 -263.5z" /> +<glyph unicode="&" horiz-adv-x="1177" d="M74 342q0 68 23.5 123t61.5 103t88 90t103 81q-41 86 -65.5 171t-24.5 163q0 66 20.5 121t57.5 95t88 62.5t113 22.5q111 0 168 -69.5t57 -176.5q0 -66 -26.5 -121t-70.5 -103t-100.5 -92t-113.5 -87q72 -129 171 -250t203 -213q72 92 125.5 204t87.5 241h88 q-41 -139 -99 -265.5t-140 -230.5q72 -57 137.5 -95t124.5 -61l-31 -80q-133 47 -289 170q-74 -76 -163.5 -123t-204.5 -47q-80 0 -151.5 26t-124 74t-83 115.5t-30.5 151.5zM166 348q0 -68 24.5 -122t65.5 -92t97.5 -59.5t117.5 -21.5q84 0 160 40t139 106 q-109 98 -210 221t-173 254q-45 -35 -85 -72t-70.5 -77t-48 -84t-17.5 -93zM344 1077q0 -68 20.5 -140.5t55.5 -145.5q51 37 98 73.5t84 77.5t58.5 85t21.5 97q0 33 -8 65t-25.5 56.5t-45.5 39.5t-68 15q-90 0 -140.5 -65.5t-50.5 -157.5z" /> +<glyph unicode="'" horiz-adv-x="448" d="M170 1419h104v-141l-18 -301h-68l-16 301z" /> +<glyph unicode="(" horiz-adv-x="571" d="M180 569q0 270 72 496.5t199 431.5l55 -33q-123 -195 -184.5 -423t-61.5 -472t61.5 -472t184.5 -423l-55 -32q-127 205 -199 431t-72 496z" /> +<glyph unicode=")" horiz-adv-x="571" d="M66 -326q123 195 184 423.5t61 471.5q0 244 -61.5 472.5t-183.5 422.5l55 33q125 -205 197.5 -431t72.5 -497q0 -270 -72.5 -496.5t-197.5 -430.5z" /> +<glyph unicode="*" horiz-adv-x="808" d="M143 1241l19 62l194 -54l15 209h65l15 -207l194 52l21 -62l-185 -74l111 -180l-55 -41l-131 170l-136 -170l-55 41l113 180z" /> +<glyph unicode="+" d="M70 637v78h379v411h83v-411h379v-78h-379v-412h-83v412h-379z" /> +<glyph unicode="," horiz-adv-x="448" d="M98 -256q70 37 113 99.5t45 148.5q-8 -2 -25 -2q-35 0 -60.5 22.5t-25.5 63.5t27 63.5t61 22.5q47 0 76 -39t29 -107q0 -113 -59.5 -198.5t-151.5 -134.5z" /> +<glyph unicode="-" horiz-adv-x="612" d="M82 471v80h450v-80h-450z" /> +<glyph unicode="." horiz-adv-x="448" d="M137 68q0 45 26.5 69.5t61.5 24.5t60.5 -24.5t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68z" /> +<glyph unicode="/" horiz-adv-x="731" d="M18 -328l625 1782h78l-623 -1782h-80z" /> +<glyph unicode="0" d="M98 659q0 328 101.5 501t289.5 173t290 -173t102 -501q0 -330 -102 -507t-290 -177t-289.5 177.5t-101.5 506.5zM190 659q0 -301 82 -453.5t217 -152.5q137 0 218 152.5t81 453.5t-80.5 448.5t-218.5 147.5q-135 0 -217 -147t-82 -449z" /> +<glyph unicode="1" d="M172 0v80h307v1085h-233v62q80 14 142.5 34.5t109.5 47.5h73v-1229h285v-80h-684z" /> +<glyph unicode="2" d="M80 1141q74 82 163 137t210 55q176 0 272 -100t96 -266q0 -98 -43 -195.5t-120.5 -205t-189.5 -229.5t-247 -265q53 4 109.5 7t109.5 3h447v-82h-803v57q162 164 282.5 294t201.5 237.5t121 199t40 177.5q0 123 -68.5 206.5t-216.5 83.5q-90 0 -167.5 -49t-137.5 -123z " /> +<glyph unicode="3" d="M59 160l54 63q29 -33 63.5 -62.5t78.5 -53t98.5 -38t121.5 -14.5q66 0 122 20.5t97 58.5t63.5 91.5t22.5 118.5q0 68 -25.5 123t-81 95t-141.5 62.5t-208 22.5v80q113 0 191.5 22.5t126.5 60.5t69.5 90t21.5 112q0 111 -71.5 177t-192.5 66q-92 0 -168 -42t-133 -101 l-53 62q68 66 153.5 112.5t200.5 46.5q76 0 141.5 -21.5t113.5 -61.5t75.5 -98t27.5 -134q0 -129 -70.5 -208t-178.5 -116v-8q61 -12 114 -42t94 -73t64.5 -99t23.5 -126q0 -86 -30.5 -154.5t-84.5 -116.5t-127 -74t-157 -26q-78 0 -141.5 16.5t-113.5 43t-90 59.5t-71 66z " /> +<glyph unicode="4" d="M33 391v53l608 865h82v-840h195v-78h-195v-391h-88v391h-602zM143 469h492v479q0 45 2 112.5t6 113.5h-8q-25 -41 -51.5 -80t-55.5 -84z" /> +<glyph unicode="5" d="M53 152l51 63q29 -31 64 -59.5t78 -51t96 -36t121 -13.5q66 0 125 25.5t103 72t70.5 111t26.5 144.5q0 160 -86 248.5t-233 88.5q-76 0 -130 -23.5t-114 -64.5l-63 39l47 613h604v-80h-522l-41 -473q51 31 106.5 50t126.5 19q82 0 156 -24.5t127 -74.5t85 -129t32 -185 q0 -104 -36 -185.5t-94.5 -137.5t-133 -85t-154.5 -29q-78 0 -140.5 15.5t-112.5 41t-89 57.5t-70 63z" /> +<glyph unicode="6" d="M106 594q0 205 40 346t106.5 229t154 126t181.5 38q92 0 158.5 -34.5t117.5 -92.5l-55 -61q-43 53 -100.5 80.5t-120.5 27.5q-78 0 -147.5 -32.5t-123 -108.5t-85 -200t-33.5 -304q68 84 152.5 133.5t176.5 49.5q174 0 269.5 -103.5t95.5 -302.5q0 -90 -28.5 -165 t-78 -129t-114 -85t-137.5 -31q-199 0 -314 160t-115 459zM201 516q6 -104 29.5 -189t64.5 -145.5t101.5 -94.5t140.5 -34q57 0 105 25.5t83 71t55.5 105.5t20.5 130t-16.5 130t-50.5 104.5t-88 69t-128 24.5q-70 0 -153.5 -44t-163.5 -153z" /> +<glyph unicode="7" d="M90 1229v80h805v-54q-117 -156 -193.5 -299t-123 -291.5t-66.5 -310t-29 -354.5h-98q8 199 33.5 363.5t73 311t119 281t169.5 273.5h-690z" /> +<glyph unicode="8" d="M82 336q0 66 23.5 123t61.5 103t84 82t93 61v8q-37 25 -70.5 54.5t-59.5 67t-42 82t-16 97.5q0 70 26.5 129t72.5 101t108.5 65.5t134.5 23.5q84 0 149.5 -25.5t111.5 -71.5t69.5 -108.5t23.5 -136.5q0 -53 -18.5 -103t-46 -93t-60.5 -78t-61 -58v-8q43 -27 84 -57.5 t72.5 -69.5t52 -90t20.5 -117q0 -72 -28.5 -134t-81 -108t-126 -73t-161.5 -27q-90 0 -166 28t-131.5 76t-87 113.5t-31.5 143.5zM172 340q0 -61 24.5 -113.5t67.5 -91.5t102.5 -61.5t131.5 -22.5q70 0 126 20.5t96 57.5t61.5 86t21.5 104q0 76 -34 128.5t-90 92.5 t-128 69.5t-148 60.5q-100 -59 -165.5 -140t-65.5 -190zM246 1014q0 -70 29.5 -120t78.5 -88t111.5 -66.5t128.5 -53.5q84 68 128 142.5t44 160.5q0 55 -18.5 103.5t-52 85t-84 58t-113.5 21.5q-55 0 -101.5 -18t-80 -50t-52 -77t-18.5 -98z" /> +<glyph unicode="9" d="M88 926q0 88 28.5 163.5t78 129t114 84t137.5 30.5q197 0 311.5 -158.5t114.5 -457.5q0 -207 -39.5 -348.5t-105 -228.5t-154 -126t-182.5 -39q-92 0 -159.5 35t-116.5 92l55 62q43 -53 100.5 -81t122.5 -28q78 0 147.5 33t123 108.5t85 199.5t33.5 304 q-68 -82 -153.5 -131t-177.5 -49q-172 0 -267.5 103.5t-95.5 302.5zM178 926q0 -72 16.5 -132.5t51.5 -104.5t88 -68.5t129 -24.5q70 0 153.5 46t163.5 153q-6 104 -29.5 189t-65.5 145.5t-102.5 93t-140.5 32.5q-55 0 -104 -25.5t-84 -69.5t-55.5 -104.5t-20.5 -129.5z" /> +<glyph unicode=":" horiz-adv-x="448" d="M137 68q0 45 26.5 69.5t61.5 24.5t60.5 -24.5t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68zM137 850q0 45 26.5 69.5t61.5 24.5t60.5 -24.5t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68z" /> +<glyph unicode=";" horiz-adv-x="448" d="M98 -256q70 37 113 99.5t45 148.5q-8 -2 -25 -2q-35 0 -60.5 22.5t-25.5 63.5t27 63.5t61 22.5q47 0 76 -39t29 -107q0 -113 -59.5 -198.5t-151.5 -134.5zM137 850q0 45 26.5 69.5t61.5 24.5t60.5 -24.5t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68z" /> +<glyph unicode="<" d="M70 635v90l841 336v-88l-475 -185l-272 -104v-8l272 -105l475 -184v-88z" /> +<glyph unicode="=" d="M70 430v78h841v-78h-841zM70 846v78h841v-78h-841z" /> +<glyph unicode=">" d="M70 299v88l475 184l272 105v8l-272 104l-475 185v88l841 -336v-90z" /> +<glyph unicode="?" horiz-adv-x="823" d="M76 1237q59 68 139 114t186 46q76 0 135.5 -23.5t100.5 -65.5t62.5 -99.5t21.5 -125.5q0 -70 -25.5 -128t-62.5 -111t-79 -105.5t-76 -109t-53 -121t-9 -141.5h-82q-12 84 5 152.5t50 127t74 109.5t78 101t61.5 103.5t24.5 116.5q0 47 -13.5 91t-42 77t-72.5 52.5 t-104 19.5q-76 0 -144.5 -34t-119.5 -97zM295 68q0 45 25.5 69.5t60.5 24.5t61.5 -24.5t26.5 -69.5q0 -43 -26.5 -68t-61.5 -25t-60.5 25t-25.5 68z" /> +<glyph unicode="@" horiz-adv-x="1667" d="M106 414q0 201 67 363.5t178.5 278t259 178t309.5 62.5q147 0 267 -47t203 -132t128 -204.5t45 -265.5q0 -131 -35 -230.5t-90.5 -167t-122 -101t-129.5 -33.5q-82 0 -136.5 37.5t-62.5 117.5h-4q-53 -59 -115.5 -101t-134.5 -42q-47 0 -90 17.5t-74.5 52t-50 87 t-18.5 122.5q0 74 25.5 155.5t74.5 149t120 111.5t161 44q109 0 170 -98h4l18 82h70l-74 -387q-70 -276 123 -277q49 0 101.5 31t94.5 89.5t69.5 142t27.5 192.5q0 131 -40 239.5t-114 184.5t-179 118t-239 42q-141 0 -272 -57.5t-232.5 -163t-163 -254t-61.5 -330.5 q0 -150 45 -269.5t126 -202.5t195 -128t251 -45q102 0 186 26.5t158 71.5l33 -61q-176 -111 -383 -111q-147 0 -273.5 48t-218.5 139.5t-144.5 223.5t-52.5 302zM582 412q0 -117 47 -164t116 -47q102 0 222 137l63 354q-37 57 -70.5 79t-80.5 22q-70 0 -125.5 -36t-93 -91.5 t-58 -123t-20.5 -130.5z" /> +<glyph unicode="A" horiz-adv-x="1062" d="M8 0l477 1350h95l475 -1350h-101l-157 463h-535l-158 -463h-96zM291 543h479l-86 252q-41 121 -78 231.5t-71 235.5h-9q-35 -125 -71.5 -236t-77.5 -231z" /> +<glyph unicode="B" horiz-adv-x="1169" d="M193 0v1350h364q203 0 323.5 -80t120.5 -248q0 -106 -59 -185t-180 -110v-8q150 -23 236.5 -103.5t86.5 -222.5q0 -98 -35.5 -172t-101 -123t-158 -73.5t-206.5 -24.5h-391zM287 78h272q203 0 317.5 75.5t114.5 239.5q0 145 -112.5 216t-319.5 71h-272v-602zM287 756h231 q209 0 299 67.5t90 200.5q0 131 -95 189.5t-282 58.5h-243v-516z" /> +<glyph unicode="C" horiz-adv-x="1140" d="M104 678q0 160 42 289t118 220t182.5 139t235.5 48q119 0 208 -49t142 -113l-55 -61q-55 61 -129 99t-166 38q-111 0 -200 -43t-150.5 -122t-95 -191.5t-33.5 -253.5t32.5 -255t94 -193.5t148.5 -124t196 -44.5q104 0 186 41t156 125l55 -59q-78 -90 -173 -141.5 t-228 -51.5q-125 0 -228.5 49.5t-178.5 140.5t-117 221t-42 292z" /> +<glyph unicode="D" horiz-adv-x="1226" d="M193 0v1350h311q156 0 271.5 -47.5t191 -135.5t113.5 -210.5t38 -276.5t-38 -280t-113.5 -215t-190 -137t-270.5 -48h-313zM287 80h207q137 0 236 44t163.5 124t95.5 189.5t31 242.5q0 131 -31 239.5t-95.5 186.5t-163.5 121t-236 43h-207v-1190z" /> +<glyph unicode="E" horiz-adv-x="1038" d="M193 0v1350h737v-82h-643v-510h540v-82h-540v-594h663v-82h-757z" /> +<glyph unicode="F" horiz-adv-x="960" d="M193 0v1350h735v-82h-641v-537h540v-82h-540v-649h-94z" /> +<glyph unicode="G" horiz-adv-x="1222" d="M104 678q0 160 43 289t122 220t189.5 139t243.5 48q68 0 124.5 -14t101.5 -38t79.5 -52.5t61.5 -57.5l-55 -61q-53 57 -127 97t-185 40q-117 0 -209 -43t-156.5 -122t-99 -191.5t-34.5 -253.5t32.5 -255t96 -193.5t155 -124t205.5 -44.5q92 0 172 27t129 76v420h-321v80 h411v-535q-63 -68 -164.5 -111t-234.5 -43q-129 0 -236.5 49.5t-183.5 140.5t-118 221t-42 292z" /> +<glyph unicode="H" horiz-adv-x="1294" d="M193 0v1350h94v-592h721v592h94v-1350h-94v676h-721v-676h-94z" /> +<glyph unicode="I" horiz-adv-x="477" d="M193 0v1350h94v-1350h-94z" /> +<glyph unicode="J" horiz-adv-x="931" d="M76 174l71 47q51 -86 113 -123t148 -37q123 0 183 75t60 241v973h94v-983q0 -82 -18 -153t-58 -124t-103.5 -84t-155.5 -31q-115 0 -198 51.5t-136 147.5z" /> +<glyph unicode="K" horiz-adv-x="1128" d="M193 0v1350h94v-750h4l653 750h111l-430 -500l489 -850h-108l-445 778l-274 -313v-465h-94z" /> +<glyph unicode="L" horiz-adv-x="942" d="M193 0v1350h94v-1268h620v-82h-714z" /> +<glyph unicode="M" horiz-adv-x="1431" d="M193 0v1350h131l282 -793l107 -299h8l104 299l281 793h133v-1350h-92v887q0 84 4 181t8 183h-8l-104 -297l-291 -807h-82l-291 807l-107 297h-8q4 -86 7.5 -183t3.5 -181v-887h-86z" /> +<glyph unicode="N" horiz-adv-x="1288" d="M193 0v1350h98l567 -953l154 -268h8q-4 98 -8 196.5t-4 196.5v828h88v-1350h-99l-567 952l-154 269h-8q4 -98 8.5 -191.5t4.5 -191.5v-838h-88z" /> +<glyph unicode="O" horiz-adv-x="1320" d="M104 680q0 160 41 288t115 219t176.5 139t225.5 48q121 0 223 -48t176 -139t115 -219t41 -288t-41 -290t-115 -222t-176 -142.5t-223 -50.5q-123 0 -225.5 50.5t-176.5 142.5t-115 222t-41 290zM203 680q0 -141 32.5 -255t93 -194.5t146 -125t187.5 -44.5t186 44.5 t144.5 125t93 194.5t32.5 255q0 139 -32.5 251.5t-93 191.5t-144.5 122t-186 43t-187.5 -43t-146 -122t-93 -191.5t-32.5 -251.5z" /> +<glyph unicode="P" horiz-adv-x="1128" d="M193 0v1350h368q113 0 202 -19.5t150.5 -64.5t94 -117t32.5 -176q0 -199 -127 -296t-352 -97h-274v-580h-94zM287 659h250q209 0 308 74t99 240q0 86 -25.5 142t-75.5 91t-127 49.5t-179 14.5h-250v-611z" /> +<glyph unicode="Q" horiz-adv-x="1320" d="M104 680q0 160 41 288t115 219t176.5 139t222.5 48q123 0 225.5 -48t176.5 -139t115 -219t41 -288q0 -152 -37 -276.5t-103.5 -216t-160 -145.5t-205.5 -65q47 -102 136 -155t216 -53q47 0 79 5t58 13l21 -82q-27 -8 -71 -15t-95 -7q-170 0 -284 83.5t-165 210.5 q-111 10 -203 64.5t-158.5 146t-103.5 216t-37 276.5zM203 680q0 -141 32.5 -255t92 -194.5t144.5 -125t187 -44.5t186.5 44.5t145 125t93 194.5t32.5 255q0 139 -32.5 251.5t-93 191.5t-144.5 122t-187 43q-102 0 -187 -43t-144.5 -122t-92 -191.5t-32.5 -251.5z" /> +<glyph unicode="R" horiz-adv-x="1132" d="M193 0v1350h385q100 0 182 -19.5t140 -62.5t90 -110.5t32 -164.5q0 -162 -93 -253t-253 -113l371 -627h-109l-365 621h-286v-621h-94zM287 698h266q180 0 275.5 73t95.5 222q0 152 -95.5 214.5t-275.5 62.5h-266v-572z" /> +<glyph unicode="S" horiz-adv-x="1052" d="M88 178l59 66q74 -84 176.5 -133.5t221.5 -49.5q154 0 245 75t91 196q0 63 -19.5 106t-52.5 75t-78 55.5t-94 45.5l-205 93q-43 18 -91 44.5t-88 66.5t-66.5 94.5t-26.5 129.5q0 74 29.5 134.5t82 104.5t124 68.5t155.5 24.5q123 0 219 -48t158 -114l-56 -63 q-59 63 -139 101t-182 38q-135 0 -216 -65.5t-81 -175.5q0 -59 22.5 -100.5t57.5 -71t76 -51t77 -38.5l205 -90q55 -25 106.5 -55.5t90.5 -71.5t62.5 -97t23.5 -134t-31 -144.5t-87 -114.5t-136 -76t-178 -28q-147 0 -261 56.5t-194 146.5z" /> +<glyph unicode="T" horiz-adv-x="1058" d="M53 1268v82h953v-82h-428v-1268h-95v1268h-430z" /> +<glyph unicode="U" horiz-adv-x="1284" d="M186 518v832h95v-822q0 -135 29.5 -224t78.5 -143.5t114.5 -77t137.5 -22.5q74 0 139.5 22.5t116.5 77t81 143.5t30 224v822h90v-832q0 -158 -39 -262t-102.5 -166.5t-146.5 -88.5t-169 -26q-88 0 -170 26t-145.5 88.5t-101.5 166.5t-38 262z" /> +<glyph unicode="V" horiz-adv-x="991" d="M2 1350h100l250 -789q18 -61 36 -116.5t34 -109.5t33.5 -109.5t38.5 -116.5h8q41 123 72.5 226t70.5 226l250 789h94l-440 -1350h-103z" /> +<glyph unicode="W" horiz-adv-x="1562" d="M49 1350h101l167 -795q25 -111 48.5 -220.5t46.5 -219.5h8q23 111 49.5 220t52.5 220l213 795h94l213 -795q27 -111 53.5 -220.5t53.5 -219.5h8q23 111 45.5 220t44.5 220l168 795h94l-303 -1350h-104l-246 926q-18 80 -35.5 152.5t-36.5 152.5h-8q-16 -80 -35.5 -152.5 t-38.5 -152.5l-241 -926h-105z" /> +<glyph unicode="X" horiz-adv-x="972" d="M29 0l403 698l-377 652h103l223 -398q27 -47 50.5 -88t57.5 -96h9q29 55 51 96t49 88l221 398h96l-376 -656l405 -694h-102l-236 414q-29 51 -58.5 102t-64.5 113h-8q-33 -61 -60.5 -112.5t-56.5 -102.5l-233 -414h-96z" /> +<glyph unicode="Y" horiz-adv-x="901" d="M-2 1350h100l205 -422q35 -74 70 -145.5t73 -145.5h9q39 74 75.5 145.5t71.5 145.5l205 422h96l-405 -803v-547h-95v547z" /> +<glyph unicode="Z" horiz-adv-x="1087" d="M94 0v55l778 1213h-708v82h825v-56l-776 -1212h784v-82h-903z" /> +<glyph unicode="[" horiz-adv-x="571" d="M201 -311v1761h327v-64h-256v-1638h256v-59h-327z" /> +<glyph unicode="\" horiz-adv-x="731" d="M10 1454h78l627 -1782h-82z" /> +<glyph unicode="]" horiz-adv-x="571" d="M43 -252h256v1638h-256v64h328v-1761h-328v59z" /> +<glyph unicode="^" d="M135 594l307 778h95l309 -778h-88l-158 416l-106 272h-9l-104 -272l-158 -416h-88z" /> +<glyph unicode="_" horiz-adv-x="1024" d="M25 -162h974v-78h-974v78z" /> +<glyph unicode="`" horiz-adv-x="1095" d="M367 1450h106l189 -279h-78z" /> +<glyph unicode="a" horiz-adv-x="1021" d="M133 246q0 162 153.5 248t481.5 122v20q0 46 -7 92q-9 56 -35 100t-72 72t-117 28q-100 0 -182.5 -39t-131.5 -76l-41 68q27 18 65 40.5t84 41t101 32t115 13.5q88 0 147.5 -30t96 -81t52 -119.5t15.5 -148.5v-629h-76l-10 127h-4q-76 -59 -163 -105.5t-185 -46.5 q-59 0 -110.5 16.5t-91.5 49.5t-62.5 84t-22.5 121zM227 250q0 -106 61.5 -151.5t145.5 -45.5q86 0 164 41t170 119v334q-152 -18 -255 -45t-166.5 -64t-91.5 -84t-28 -104z" /> +<glyph unicode="b" horiz-adv-x="1114" d="M188 0v1473h91v-426l-5 -193q76 63 162 108.5t178 45.5q197 0 295.5 -136.5t98.5 -365.5q0 -125 -35 -223.5t-95.5 -167t-139.5 -104.5t-165 -36q-72 0 -148.5 32t-145.5 85h-5l-10 -92h-76zM279 182q82 -70 157.5 -98.5t132.5 -28.5q74 0 137.5 33t108.5 92.5 t70.5 142.5t25.5 183q0 90 -17 168t-54 134t-96.5 88t-143.5 32q-74 0 -153.5 -42t-167.5 -120v-584z" /> +<glyph unicode="c" horiz-adv-x="919" d="M106 489q0 123 37 220.5t98.5 163t142.5 100.5t171 35q102 0 171 -37t118 -84l-53 -64q-47 45 -104.5 75t-129.5 30q-76 0 -140.5 -32t-112.5 -90t-75.5 -138t-27.5 -179q0 -96 25.5 -176t71.5 -137t112.5 -89t146.5 -32q78 0 144.5 33t117.5 80l47 -62q-63 -57 -141 -94 t-172 -37q-96 0 -177 35t-141.5 100.5t-94.5 160.5t-34 218z" /> +<glyph unicode="d" horiz-adv-x="1114" d="M106 489q0 119 35 215.5t95.5 164t139.5 103.5t167 36q90 0 156.5 -32t140.5 -89l-4 180v406h90v-1473h-78l-8 127h-6q-59 -59 -140.5 -105.5t-179.5 -46.5q-186 0 -297 132t-111 382zM203 489q0 -98 21.5 -178t62.5 -136t101.5 -88t137.5 -32q82 0 157 42t153 120v584 q-78 70 -146.5 98.5t-140.5 28.5q-74 0 -137.5 -34t-109.5 -92.5t-72.5 -139.5t-26.5 -173z" /> +<glyph unicode="e" horiz-adv-x="989" d="M106 489q0 121 36 217.5t96.5 163t137.5 102.5t159 36q176 0 276 -119t100 -336v-36.5t-4 -37.5h-708q2 -92 28.5 -171t74.5 -135t115.5 -88t151.5 -32q80 0 144.5 23.5t120.5 64.5l36 -69q-59 -35 -129.5 -66t-179.5 -31q-94 0 -177 35t-144.5 101.5t-97.5 161.5 t-36 216zM199 549h626q0 190 -77.5 285.5t-210.5 95.5q-63 0 -121 -26.5t-104 -76t-75.5 -120t-37.5 -158.5z" /> +<glyph unicode="f" horiz-adv-x="538" d="M68 905v70l135 8v219q0 147 63.5 221t179.5 74q72 0 144 -33l-25 -73q-31 16 -60.5 22t-58.5 6q-78 0 -115.5 -58t-37.5 -165v-213h227v-78h-227v-905h-90v905h-135z" /> +<glyph unicode="g" horiz-adv-x="997" d="M106 -201q0 66 39 127.5t107 110.5v8q-37 23 -61.5 61.5t-24.5 96.5q0 66 37 111.5t69 68.5v8q-47 41 -84.5 110.5t-37.5 160.5q0 76 26.5 139t73.5 109t110.5 72t135.5 26q41 0 73.5 -7.5t55.5 -17.5h333v-76h-229q47 -41 78 -105.5t31 -142.5q0 -76 -27 -139t-73 -109 t-108.5 -72t-133.5 -26q-41 0 -85 10.5t-79 30.5q-33 -27 -56.5 -59.5t-23.5 -81.5q0 -53 39 -91t149 -38h211q166 0 245 -54.5t79 -170.5q0 -63 -33 -124t-93.5 -107t-146.5 -73.5t-192 -27.5q-186 0 -295 73.5t-109 198.5zM193 -193q0 -92 84.5 -149t242.5 -57 q82 0 149.5 21.5t114.5 56t73 78.5t26 91q0 82 -58.5 116t-169.5 34h-211q-16 0 -50 3t-72 13q-68 -47 -98.5 -100.5t-30.5 -106.5zM240 662q0 -61 20.5 -112.5t56 -88.5t82 -56.5t97.5 -19.5t97 19.5t81 56.5t55.5 88t20.5 113q0 61 -20.5 112t-54.5 86t-81 54.5t-98 19.5 q-53 0 -99.5 -19.5t-81 -54.5t-55 -85t-20.5 -113z" /> +<glyph unicode="h" horiz-adv-x="1081" d="M188 0v1473h91v-426v-218q78 78 157.5 128.5t181.5 50.5q154 0 225.5 -92.5t71.5 -284.5v-631h-90v618q0 158 -52 233t-173 75q-88 0 -159.5 -46t-161.5 -139v-741h-91z" /> +<glyph unicode="i" horiz-adv-x="468" d="M154 1300q0 39 23.5 60.5t58.5 21.5t58 -21.5t23 -60.5q0 -35 -23 -57t-58 -22t-58.5 22.5t-23.5 56.5zM188 0v983h91v-983h-91z" /> +<glyph unicode="j" horiz-adv-x="468" d="M-68 -444l23 73q18 -6 46 -13t56 -7q82 0 106.5 60.5t24.5 154.5v1159h93v-1165q0 -145 -53.5 -216t-168.5 -71q-35 0 -69.5 7t-57.5 18zM154 1300q0 39 24.5 60.5t57.5 21.5q35 0 59 -21.5t24 -60.5q0 -35 -24 -57t-59 -22q-33 0 -57.5 22.5t-24.5 56.5z" /> +<glyph unicode="k" horiz-adv-x="950" d="M188 0v1473h91v-1086h4l485 596h104l-319 -389l373 -594h-101l-325 526l-221 -258v-268h-91z" /> +<glyph unicode="l" horiz-adv-x="485" d="M188 131v1342h91v-1354q0 -33 12 -48.5t31 -15.5h13t23 4l17 -73q-14 -4 -28.5 -7.5t-37.5 -3.5q-121 0 -121 156z" /> +<glyph unicode="m" horiz-adv-x="1662" d="M188 0v983h78l8 -152h7q66 76 146.5 126.5t162.5 50.5q119 0 182.5 -54.5t89.5 -146.5q86 92 167 146.5t167 54.5q295 0 295 -377v-631h-92v618q0 158 -53.5 233t-165.5 75q-133 0 -295 -185v-741h-90v618q0 158 -53.5 233t-168.5 75q-133 0 -294 -185v-741h-91z" /> +<glyph unicode="n" horiz-adv-x="1089" d="M188 0v983h78l8 -152h7q76 76 155.5 126.5t181.5 50.5q154 0 225.5 -92.5t71.5 -284.5v-631h-90v618q0 158 -52 233t-173 75q-88 0 -159.5 -46t-161.5 -139v-741h-91z" /> +<glyph unicode="o" horiz-adv-x="1095" d="M106 489q0 123 36 220.5t96.5 163t140.5 100.5t168 35t169 -35t141.5 -100.5t96 -163t35.5 -220.5t-35.5 -218t-96 -160.5t-141.5 -100.5t-169 -35t-168 35t-140.5 100.5t-96.5 160.5t-36 218zM201 489q0 -96 26.5 -176t72.5 -137t109.5 -89t137.5 -32t138.5 32t110.5 89 t72.5 137t26.5 176q0 98 -26.5 178.5t-72.5 138.5t-110.5 90t-138.5 32t-137.5 -32t-109.5 -90t-72.5 -138.5t-26.5 -178.5z" /> +<glyph unicode="p" horiz-adv-x="1114" d="M188 -444v1427h78l8 -123h7q72 57 156.5 102.5t176.5 45.5q197 0 295.5 -136.5t98.5 -365.5q0 -125 -35 -223.5t-95.5 -167t-139.5 -104.5t-165 -36q-70 0 -143.5 32t-150.5 89v-182v-358h-91zM279 182q86 -70 159.5 -98.5t130.5 -28.5q74 0 137.5 33t108.5 92.5 t70.5 142.5t25.5 183q0 90 -17 168t-54 134t-96.5 88t-143.5 32q-74 0 -152.5 -42t-168.5 -120v-584z" /> +<glyph unicode="q" horiz-adv-x="1099" d="M106 489q0 119 35 215.5t95.5 164t139.5 103.5t167 36q90 0 156.5 -31t136.5 -84h4l10 90h76v-1427h-90v378l4 191q-66 -59 -147 -104.5t-179 -45.5q-186 0 -297 132t-111 382zM203 489q0 -98 21.5 -178t62.5 -136t101.5 -88t137.5 -32q82 0 157 42t153 120v584 q-78 70 -146.5 98.5t-140.5 28.5q-74 0 -137.5 -34t-109.5 -92.5t-72.5 -139.5t-26.5 -173z" /> +<glyph unicode="r" horiz-adv-x="649" d="M188 0v983h78l8 -182h7q49 92 119.5 149.5t158.5 57.5q29 0 51.5 -5t46.5 -16l-20 -82q-25 10 -43.5 13.5t-46.5 3.5q-66 0 -138.5 -56.5t-129.5 -195.5v-670h-91z" /> +<glyph unicode="s" horiz-adv-x="829" d="M66 111l53 67q63 -53 135 -89t178 -36q117 0 175.5 58.5t58.5 136.5q0 45 -21.5 79.5t-56.5 59.5t-77 43.5t-85 34.5q-55 20 -111.5 42.5t-101.5 54.5t-72.5 76t-27.5 107q0 53 20.5 101.5t61.5 84.5t99 56.5t136 20.5t152.5 -29t128.5 -74l-49 -63q-49 37 -104.5 62.5 t-131.5 25.5q-57 0 -98 -15.5t-69 -40t-41 -57.5t-13 -65q0 -41 19.5 -71t52 -53.5t74.5 -41t85 -33.5q57 -23 114.5 -45.5t103.5 -55t75 -80.5t29 -120q0 -55 -21.5 -105.5t-64.5 -88.5t-104.5 -60.5t-141.5 -22.5q-111 0 -203 40t-157 96z" /> +<glyph unicode="t" horiz-adv-x="638" d="M57 905v70l156 8l12 285h78v-285h285v-78h-285v-641q0 -47 7 -85t25.5 -65.5t50.5 -43t83 -15.5q29 0 62.5 9.5t60.5 21.5l24 -74q-43 -16 -86 -26.5t-73 -10.5q-72 0 -119 21.5t-76 60.5t-40 94.5t-11 120.5v633h-154z" /> +<glyph unicode="u" horiz-adv-x="1083" d="M174 352v631h90v-618q0 -158 52.5 -233t170.5 -75q88 0 160 48.5t158 152.5v725h90v-983h-76l-10 164h-4q-72 -86 -152 -137.5t-182 -51.5q-154 0 -225.5 92.5t-71.5 284.5z" /> +<glyph unicode="v" horiz-adv-x="888" d="M25 983h98l221 -616q23 -72 49.5 -143.5t48.5 -139.5h9q25 68 50 139.5t50 143.5l221 616h92l-364 -983h-107z" /> +<glyph unicode="w" horiz-adv-x="1402" d="M49 983h98l177 -637q18 -68 34.5 -132t32.5 -130h8q16 66 35 130.5t37 131.5l178 637h109l178 -637q18 -68 36.5 -132t37.5 -130h8q16 66 34.5 130.5t34.5 131.5l175 637h92l-283 -983h-119l-172 610q-23 72 -38 140.5t-37 140.5h-9q-16 -72 -35.5 -142.5t-42.5 -142.5 l-169 -606h-109z" /> +<glyph unicode="x" horiz-adv-x="833" d="M29 0l333 514l-307 469h101l159 -250q25 -41 50.5 -81t54.5 -81h8q27 41 50.5 81t49.5 81l154 250h94l-305 -477l334 -506h-100l-175 268q-29 47 -57.5 92.5t-58.5 88.5h-8q-29 -43 -56.5 -88.5t-56.5 -92.5l-168 -268h-96z" /> +<glyph unicode="y" horiz-adv-x="892" d="M25 983h98l237 -618q23 -61 50.5 -135t56.5 -140h8q23 66 46.5 139.5t43.5 135.5l211 618h92l-389 -1106q-20 -61 -50 -119.5t-70 -104.5t-92 -74t-117 -28q-55 0 -101 21l21 80q16 -6 36.5 -11.5t43.5 -5.5q92 0 153.5 74t97.5 187l27 86z" /> +<glyph unicode="z" horiz-adv-x="827" d="M55 0v49l582 856h-518v78h635v-47l-580 -856h600v-80h-719z" /> +<glyph unicode="{" horiz-adv-x="571" d="M72 537v65q53 0 88 14.5t54 37t26.5 51t7.5 59.5q0 98 -8.5 208.5t-8.5 215.5q0 152 56.5 207t167.5 55h73v-64h-67q-92 0 -123 -49t-31 -157q0 -94 6 -194.5t6 -199.5q0 -92 -21.5 -143t-82.5 -70v-8q61 -18 82.5 -71.5t21.5 -141.5q0 -111 -6 -202t-6 -191 q0 -109 31 -160t123 -51h67v-59h-73q-55 0 -97.5 12t-70 42t-42 80t-14.5 128q0 115 8.5 214t8.5 206q0 31 -7.5 61.5t-26.5 53t-54 37t-88 14.5z" /> +<glyph unicode="|" horiz-adv-x="462" d="M195 -512v2048h73v-2048h-73z" /> +<glyph unicode="}" horiz-adv-x="571" d="M43 -252h63q94 0 126 51t32 160q0 100 -6 191.5t-6 201.5q0 88 22.5 141.5t81.5 71.5v8q-59 18 -81.5 69.5t-22.5 143.5q0 98 6 198.5t6 195.5q0 109 -31.5 157.5t-126.5 48.5h-63v64h70q113 0 170 -55.5t57 -206.5q0 -104 -8 -215t-8 -209q0 -31 7 -59.5t26.5 -51 t54 -37t88.5 -14.5v-65q-53 0 -88 -14.5t-54.5 -37t-26.5 -53.5t-7 -61q0 -106 8 -205.5t8 -214.5q0 -78 -14.5 -128t-43 -80t-70.5 -42t-99 -12h-70v59z" /> +<glyph unicode="~" d="M82 637q45 86 105.5 128t119.5 42t107.5 -28.5t92.5 -63.5t85 -63.5t86 -28.5q47 0 86 28.5t76 100.5l57 -41q-43 -84 -103.5 -125t-119.5 -41t-107.5 28.5t-92.5 63.5t-85 63.5t-86 28.5q-47 0 -86 -28.5t-76 -100.5z" /> +<glyph unicode="¡" horiz-adv-x="530" d="M178 918q0 41 26.5 65.5t61.5 24.5t60.5 -24.5t25.5 -65.5q0 -47 -25.5 -72t-60.5 -25t-61.5 24.5t-26.5 72.5zM219 -244l12 860h68l12 -860l2 -145h-94v145z" /> +<glyph unicode="¢" d="M127 637q0 106 30.5 189t85 143.5t126 95.5t153.5 43v227h70v-223q98 -4 163.5 -40t112.5 -83l-49 -57q-47 41 -102 68.5t-125 31.5v-788q76 4 139.5 34.5t112.5 75.5l47 -59q-59 -55 -134 -91t-165 -40v-221h-70v223q-86 8 -158.5 43t-125 95.5t-82 144t-29.5 188.5z M219 637q0 -160 81 -264.5t222 -124.5v780q-66 -10 -122 -43t-96 -83t-62.5 -117.5t-22.5 -147.5z" /> +<glyph unicode="£" d="M111 600v68l135 6h49q-23 78 -44.5 154.5t-21.5 156.5q0 162 93.5 255t255.5 93q106 0 176.5 -43t117.5 -102l-59 -55q-43 51 -98.5 85.5t-136.5 34.5q-63 0 -111.5 -20.5t-80.5 -57t-48 -86t-16 -104.5q0 -82 21.5 -156.5t43.5 -154.5h338v-74h-322q8 -35 12.5 -70.5 t4.5 -76.5q0 -127 -39 -211t-109 -152v-8h605v-82h-760v55q115 66 166 172.5t51 225.5q0 39 -5 75.5t-14 71.5h-204z" /> +<glyph unicode="¤" d="M61 291l136 137q-37 49 -57.5 110.5t-20.5 133.5q0 74 20.5 137t57.5 113l-136 139l56 57l135 -141q47 43 109.5 66.5t127.5 23.5q66 0 128.5 -23.5t109.5 -66.5l137 141l54 -57l-136 -139q37 -49 57.5 -113t20.5 -137q0 -72 -20.5 -133.5t-55.5 -110.5l134 -137l-54 -58 l-137 140q-47 -45 -109.5 -68.5t-128.5 -23.5q-135 0 -237 92l-135 -140zM209 672q0 -70 22.5 -128.5t60.5 -99.5t89 -64.5t108 -23.5t108.5 23.5t89.5 64.5t60.5 99.5t22.5 128.5t-22.5 129t-60.5 101t-89 65.5t-109 23.5q-57 0 -108 -23.5t-89 -65.5t-60.5 -101 t-22.5 -129z" /> +<glyph unicode="¥" d="M61 1309h99l192 -396l66 -136t69 -144h9q39 76 70.5 144.5t66.5 135.5l192 396h95l-357 -688h316v-68h-344v-145h344v-70h-344v-338h-93v338h-340v70h340v145h-340v68h312z" /> +<glyph unicode="¦" horiz-adv-x="462" d="M195 451h73v-963h-73v963zM195 571v965h73v-965h-73z" /> +<glyph unicode="§" d="M102 721q0 98 52.5 162.5t130.5 105.5q-31 31 -49.5 72t-18.5 94q0 43 16.5 86t51 77t86 55.5t123.5 21.5q86 0 157.5 -31t128.5 -78l-49 -63q-49 41 -103.5 67.5t-131.5 26.5q-51 0 -88 -13.5t-59.5 -35t-34 -50t-11.5 -57.5q0 -68 43 -109.5t106.5 -75.5t138.5 -63.5 t138.5 -71.5t106.5 -103.5t43 -155.5q0 -102 -50.5 -161t-128.5 -102q33 -33 51.5 -74.5t18.5 -97.5q0 -55 -23.5 -102t-63.5 -81t-93 -52t-113 -18q-106 0 -188 35.5t-142 93.5l62 57q53 -49 113.5 -80t154.5 -31t149.5 51.5t55.5 122.5q0 70 -43 114t-107.5 77 t-139.5 62.5t-139.5 70.5t-107.5 100.5t-43 153.5zM188 727q0 -80 46.5 -130t115 -86t146 -66.5t143.5 -73.5q74 35 114 78t40 126q0 82 -46.5 134.5t-115 89.5t-146 68.5t-141.5 72.5q-70 -41 -113 -88t-43 -125z" /> +<glyph unicode="¨" horiz-adv-x="1095" d="M311 1300q0 31 20.5 52.5t53.5 21.5t54.5 -21.5t21.5 -52.5q0 -33 -21.5 -54t-54.5 -21t-53.5 21.5t-20.5 53.5zM633 1300q0 31 21.5 52.5t54.5 21.5t53.5 -21.5t20.5 -52.5q0 -33 -20.5 -54t-53.5 -21t-54.5 21.5t-21.5 53.5z" /> +<glyph unicode="©" horiz-adv-x="1517" d="M104 659q0 154 52.5 279t142.5 213t209 136t252 48q131 0 249.5 -48t209 -136t142.5 -213t52 -279q0 -156 -52 -281.5t-142.5 -214.5t-209 -138.5t-249.5 -49.5q-133 0 -252 49.5t-209 138.5t-142.5 214.5t-52.5 281.5zM176 659q0 -139 47 -253.5t127 -195.5t185.5 -126 t224.5 -45q117 0 222 45t185 126t127 195.5t47 253.5q0 137 -47 251t-127 195t-185 125t-222 44q-119 0 -224.5 -44t-185.5 -125t-127 -195t-47 -251zM412 659q0 88 30.5 160t80.5 121t117 75.5t140 26.5q82 0 139.5 -31.5t106.5 -80.5l-47 -53q-47 45 -93 67.5t-108 22.5 q-123 0 -200.5 -84t-77.5 -224q0 -154 74.5 -241.5t199.5 -87.5q74 0 131.5 29.5t104.5 72.5l41 -57q-55 -49 -119 -85t-162 -36q-74 0 -138.5 27.5t-113.5 80t-77.5 127t-28.5 170.5z" /> +<glyph unicode="ª" horiz-adv-x="690" d="M86 702q0 109 100.5 165.5t321.5 76.5q0 39 -7 74t-23.5 60.5t-43 40t-69.5 14.5q-61 0 -123 -26t-97 -50l-30 55q41 29 109.5 58.5t148.5 29.5q119 0 165 -70.5t46 -187.5v-410h-62l-12 80h-8q-43 -37 -97 -66.5t-120 -29.5q-88 0 -143.5 49t-55.5 137zM166 709 q0 -66 37 -96.5t100 -30.5q96 0 205 100v209q-190 -20 -266 -66.5t-76 -115.5z" /> +<glyph unicode="«" horiz-adv-x="819" d="M88 477v78l281 330l51 -43l-252 -326l252 -330l-51 -39zM377 477v78l281 330l51 -43l-252 -326l252 -330l-51 -39z" /> +<glyph unicode="¬" d="M70 637v78h841v-490h-84v412h-757z" /> +<glyph unicode="­" horiz-adv-x="612" d="M82 471v80h450v-80h-450z" /> +<glyph unicode="®" horiz-adv-x="821" d="M37 1059q0 90 29.5 163.5t81 126t119 81t143.5 28.5t144.5 -28.5t118.5 -81t79.5 -126t29.5 -163.5t-29.5 -163t-79.5 -124t-118.5 -79.5t-144.5 -28.5t-143.5 28.5t-119 79.5t-81 124t-29.5 163zM100 1059q0 -74 25 -135.5t65.5 -105.5t97 -69.5t122.5 -25.5 q63 0 120.5 25.5t98.5 69.5t65.5 105.5t24.5 135.5t-24.5 136t-65.5 108.5t-98.5 72t-120.5 25.5q-66 0 -122.5 -25.5t-97 -72t-65.5 -108.5t-25 -136zM270 856v422h142q31 0 58.5 -6t50 -21.5t35.5 -40t13 -63.5t-23.5 -72t-58.5 -43l101 -176h-76l-80 156h-96v-156h-66z M336 1067h59q47 0 76 17.5t29 58.5q0 35 -21.5 56.5t-77.5 21.5h-65v-154z" /> +<glyph unicode="¯" horiz-adv-x="1095" d="M316 1241v74h462v-74h-462z" /> +<glyph unicode="°" horiz-adv-x="636" d="M86 1157q0 57 19.5 102.5t52 77t74.5 48t87 16.5t87.5 -16.5t75 -48t52 -77t19.5 -102.5t-19.5 -102t-52 -76t-75 -47.5t-87.5 -16.5t-87 16.5t-74.5 47.5t-52 76t-19.5 102zM156 1157q0 -76 45.5 -126t117.5 -50t118 50t46 126q0 78 -46 129t-118 51t-117.5 -51 t-45.5 -129z" /> +<glyph unicode="±" d="M70 0v76h841v-76h-841zM70 635v76h379v415h83v-415h379v-76h-379v-412h-83v412h-379z" /> +<glyph unicode="²" horiz-adv-x="741" d="M96 1575q37 61 103.5 105t142.5 44q111 0 179.5 -62.5t68.5 -189.5q0 -63 -25.5 -120.5t-70.5 -117t-110 -124t-140 -139.5h393v-70h-522v51q102 94 177 168t123 133.5t71.5 109.5t23.5 101q0 88 -48 139.5t-128 51.5q-55 0 -103.5 -37t-83.5 -90z" /> +<glyph unicode="³" horiz-adv-x="741" d="M82 1030l59 45q37 -59 95.5 -95t128.5 -36q76 0 131 44t55 126q0 78 -76 121t-207 43v57q121 0 185.5 51.5t64.5 120.5q0 66 -46 108t-124 42q-47 0 -95 -30t-87 -77l-51 45q43 55 103.5 92t137.5 37q100 0 171 -55t71 -156q0 -76 -44 -126t-110 -76q37 -6 70 -22.5 t59.5 -41t42 -58.5t15.5 -77q0 -55 -20.5 -99t-57.5 -74t-86 -46.5t-105 -16.5q-94 0 -166.5 46.5t-113.5 107.5z" /> +<glyph unicode="´" horiz-adv-x="1095" d="M432 1171l189 279h106l-217 -279h-78z" /> +<glyph unicode="µ" horiz-adv-x="1099" d="M188 -410v1393h91v-618q0 -158 53 -233t172 -75q88 0 158.5 48.5t158.5 152.5v725h90v-983h-77l-9 164h-6q-70 -86 -146.5 -136.5t-174.5 -50.5q-76 0 -129.5 23t-94.5 90l5 -184v-316h-91z" /> +<glyph unicode="¶" horiz-adv-x="1054" d="M86 924q0 115 35 195.5t98.5 132t151.5 75t192 23.5h90v-850h-57q-113 0 -207 23.5t-161.5 73.5t-104.5 131t-37 196zM764 -164v1514h94v-1514h-94z" /> +<glyph unicode="·" horiz-adv-x="448" d="M137 660q0 45 26.5 69.5t61.5 24.5t60.5 -24.5t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68z" /> +<glyph unicode="¸" horiz-adv-x="1095" d="M413 -365q86 12 138.5 37t52.5 68q0 47 -39 69.5t-98 38.5l82 156h71l-59 -115q49 -16 86 -47.5t37 -93.5q0 -41 -21.5 -70.5t-57.5 -50t-82 -34t-95 -19.5z" /> +<glyph unicode="¹" horiz-adv-x="741" d="M193 1565v55q59 12 101 31.5t77 48.5h67v-799h-78v664h-167z" /> +<glyph unicode="º" horiz-adv-x="737" d="M68 858q0 82 23.5 145.5t63.5 107.5t95 66.5t117 22.5q61 0 116.5 -22.5t95 -66.5t63.5 -107.5t24 -145.5q0 -80 -24 -143.5t-63.5 -107.5t-95 -67.5t-116.5 -23.5t-116.5 23.5t-95.5 67.5t-63.5 107.5t-23.5 143.5zM147 858q0 -123 61 -198.5t159 -75.5t158.5 75.5 t60.5 198.5t-60.5 199t-158.5 76t-159 -76t-61 -199z" /> +<glyph unicode="»" horiz-adv-x="819" d="M111 186l249 330l-249 326l49 43l282 -330v-78l-282 -330zM400 186l249 330l-249 326l49 43l282 -330v-78l-282 -330z" /> +<glyph unicode="¼" horiz-adv-x="1564" d="M152 1215v55q59 12 101 31.5t77 48.5h67v-799h-78v664h-167zM362 -25l754 1399h78l-752 -1399h-80zM917 233v43l363 523h73v-500h119v-66h-119v-233h-73v233h-363zM1016 299h264v178l8 213h-8l-115 -170z" /> +<glyph unicode="½" horiz-adv-x="1609" d="M152 1215v55q59 12 101 31.5t77 48.5h67v-799h-78v664h-167zM315 -25l754 1399h78l-752 -1399h-80zM964 674q37 61 103.5 105t142.5 44q111 0 179.5 -62.5t68.5 -189.5q0 -63 -25.5 -120.5t-70.5 -117t-110 -124t-140 -139.5h393v-70h-522v51q102 94 177 168t123 133.5 t71.5 109.5t23.5 101q0 88 -48 139.5t-128 51.5q-55 0 -103.5 -37t-83.5 -90z" /> +<glyph unicode="¾" horiz-adv-x="1603" d="M82 680l59 45q37 -59 95.5 -95t128.5 -36q76 0 131 44t55 126q0 78 -76 121t-207 43v57q121 0 185.5 51.5t64.5 120.5q0 66 -46 108t-124 42q-47 0 -95 -30t-87 -77l-51 45q43 55 103.5 92t137.5 37q100 0 171 -55t71 -156q0 -76 -44 -126t-110 -76q37 -6 70 -22.5 t59.5 -41t42 -58.5t15.5 -77q0 -55 -20.5 -99t-57.5 -74t-86 -46.5t-105 -16.5q-94 0 -166.5 46.5t-113.5 107.5zM459 -25l754 1399h78l-752 -1399h-80zM956 233v43l363 523h73v-500h119v-66h-119v-233h-73v233h-363zM1055 299h264v178l8 213h-8l-115 -170z" /> +<glyph unicode="¿" horiz-adv-x="823" d="M104 -100q0 70 26 128t62.5 112.5t78.5 105.5t76 107.5t52.5 121t8.5 141.5h84q10 -84 -7.5 -152.5t-50.5 -126.5t-74 -109.5t-77.5 -101.5t-61 -103.5t-24.5 -116.5q0 -47 13 -90t42 -77t73 -53.5t105 -19.5q74 0 142.5 35t119.5 96l58 -51q-59 -66 -140.5 -113 t-185.5 -47q-76 0 -135.5 23.5t-100.5 65.5t-62.5 99.5t-21.5 125.5zM356 918q0 41 26 65.5t60 24.5q35 0 60.5 -24.5t25.5 -65.5q0 -47 -25.5 -72t-60.5 -25t-60.5 24.5t-25.5 72.5z" /> +<glyph unicode="À" horiz-adv-x="1062" d="M8 0l477 1350h95l475 -1350h-101l-157 463h-535l-158 -463h-96zM291 543h479l-86 252q-41 121 -78 231.5t-71 235.5h-9q-35 -125 -71.5 -236t-77.5 -231zM299 1669h118l189 -217h-82z" /> +<glyph unicode="Á" horiz-adv-x="1062" d="M8 0l477 1350h95l475 -1350h-101l-157 463h-535l-158 -463h-96zM291 543h479l-86 252q-41 121 -78 231.5t-71 235.5h-9q-35 -125 -71.5 -236t-77.5 -231zM454 1452l189 217h118l-225 -217h-82z" /> +<glyph unicode="Â" horiz-adv-x="1062" d="M8 0l477 1350h95l475 -1350h-101l-157 463h-535l-158 -463h-96zM290 1452l197 217h86l197 -217h-82l-154 147h-8l-154 -147h-82zM291 543h479l-86 252q-41 121 -78 231.5t-71 235.5h-9q-35 -125 -71.5 -236t-77.5 -231z" /> +<glyph unicode="Ã" horiz-adv-x="1062" d="M8 0l477 1350h95l475 -1350h-101l-157 463h-535l-158 -463h-96zM264 1466q2 35 12 69t28.5 60.5t44 43t60.5 16.5q41 0 72 -18.5t58.5 -40t55 -39t58.5 -17.5q33 0 55.5 31t28.5 84h59q-2 -35 -12 -68t-28.5 -60.5t-44 -44t-60.5 -16.5q-41 0 -73 18.5t-59.5 40t-54 40 t-57.5 18.5q-33 0 -55.5 -31.5t-28.5 -85.5h-59zM291 543h479l-86 252q-41 121 -78 231.5t-71 235.5h-9q-35 -125 -71.5 -236t-77.5 -231z" /> +<glyph unicode="Ä" horiz-adv-x="1062" d="M8 0l477 1350h95l475 -1350h-101l-157 463h-535l-158 -463h-96zM291 543h479l-86 252q-41 121 -78 231.5t-71 235.5h-9q-35 -125 -71.5 -236t-77.5 -231zM294 1559q0 35 20.5 55t53.5 20t54.5 -20.5t21.5 -54.5q0 -35 -21.5 -54.5t-54.5 -19.5t-53.5 19.5t-20.5 54.5z M616 1559q0 35 21.5 55t54.5 20t53.5 -20.5t20.5 -54.5q0 -35 -20.5 -54.5t-53.5 -19.5t-54.5 19.5t-21.5 54.5z" /> +<glyph unicode="Å" horiz-adv-x="1062" d="M8 0l477 1350h95l475 -1350h-101l-157 463h-535l-158 -463h-96zM291 543h479l-86 252q-41 121 -78 231.5t-71 235.5h-9q-35 -125 -71.5 -236t-77.5 -231zM362 1602q0 76 48 121.5t120 45.5q70 0 119 -46t49 -121q0 -78 -49 -123t-119 -45q-72 0 -120 45t-48 123z M424 1602q0 -57 30.5 -86t75.5 -29q41 0 72.5 28.5t31.5 86.5q0 53 -31.5 83.5t-72.5 30.5q-45 0 -75.5 -30.5t-30.5 -83.5z" /> +<glyph unicode="Æ" horiz-adv-x="1642" d="M37 0l745 1350h752v-82h-606v-510h502v-82h-502v-594h626v-82h-720v444h-459l-244 -444h-94zM418 522h416v746h-9q-61 -115 -126.5 -232.5t-131.5 -240.5z" /> +<glyph unicode="Ç" horiz-adv-x="1140" d="M104 678q0 160 42 289t118 220t182.5 139t235.5 48q119 0 208 -49t142 -113l-55 -61q-55 61 -129 99t-166 38q-111 0 -200 -43t-150.5 -122t-95 -191.5t-33.5 -253.5t32.5 -255t94 -193.5t148.5 -124t196 -44.5q104 0 186 41t156 125l55 -59q-78 -90 -173 -141.5 t-228 -51.5q-125 0 -228.5 49.5t-178.5 140.5t-117 221t-42 292zM534 -365q86 12 138.5 37t52.5 68q0 47 -39 69.5t-98 38.5l82 156h71l-59 -115q49 -16 86 -47.5t37 -93.5q0 -41 -21.5 -70.5t-57.5 -50t-82 -34t-95 -19.5z" /> +<glyph unicode="È" horiz-adv-x="1038" d="M193 0v1350h737v-82h-643v-510h540v-82h-540v-594h663v-82h-757zM338 1669h118l189 -217h-82z" /> +<glyph unicode="É" horiz-adv-x="1038" d="M193 0v1350h737v-82h-643v-510h540v-82h-540v-594h663v-82h-757zM493 1452l189 217h118l-225 -217h-82z" /> +<glyph unicode="Ê" horiz-adv-x="1038" d="M193 0v1350h737v-82h-643v-510h540v-82h-540v-594h663v-82h-757zM329 1452l197 217h86l197 -217h-82l-154 147h-8l-154 -147h-82z" /> +<glyph unicode="Ë" horiz-adv-x="1038" d="M193 0v1350h737v-82h-643v-510h540v-82h-540v-594h663v-82h-757zM333 1559q0 35 20.5 55t53.5 20t54.5 -20.5t21.5 -54.5q0 -35 -21.5 -54.5t-54.5 -19.5t-53.5 19.5t-20.5 54.5zM655 1559q0 35 21.5 55t54.5 20t53.5 -20.5t20.5 -54.5q0 -35 -20.5 -54.5t-53.5 -19.5 t-54.5 19.5t-21.5 54.5z" /> +<glyph unicode="Ì" horiz-adv-x="477" d="M7 1669h118l189 -217h-82zM193 0v1350h94v-1350h-94z" /> +<glyph unicode="Í" horiz-adv-x="477" d="M162 1452l189 217h118l-225 -217h-82zM193 0v1350h94v-1350h-94z" /> +<glyph unicode="Î" horiz-adv-x="477" d="M-2 1452l197 217h86l197 -217h-82l-154 147h-8l-154 -147h-82zM193 0v1350h94v-1350h-94z" /> +<glyph unicode="Ï" horiz-adv-x="477" d="M2 1559q0 35 20.5 55t53.5 20t54.5 -20.5t21.5 -54.5q0 -35 -21.5 -54.5t-54.5 -19.5t-53.5 19.5t-20.5 54.5zM193 0v1350h94v-1350h-94zM324 1559q0 35 21.5 55t54.5 20t53.5 -20.5t20.5 -54.5q0 -35 -20.5 -54.5t-53.5 -19.5t-54.5 19.5t-21.5 54.5z" /> +<glyph unicode="Ð" horiz-adv-x="1261" d="M68 680v63l159 5v602h312q156 0 271.5 -47.5t191 -135.5t113.5 -210.5t38 -276.5t-38 -280t-113.5 -215t-190.5 -137t-270 -48h-314v680h-159zM322 80h206q137 0 236.5 44t164 124t95.5 189.5t31 242.5q0 131 -31 239.5t-95.5 186.5t-163.5 121t-237 43h-206v-522h340 v-68h-340v-600z" /> +<glyph unicode="Ñ" horiz-adv-x="1288" d="M193 0v1350h98l567 -953l154 -268h8q-4 98 -8 196.5t-4 196.5v828h88v-1350h-99l-567 952l-154 269h-8q4 -98 8.5 -191.5t4.5 -191.5v-838h-88zM387 1466q2 35 12 69t28.5 60.5t44 43t60.5 16.5q41 0 72 -18.5t58.5 -40t55 -39t58.5 -17.5q33 0 55.5 31t28.5 84h59 q-2 -35 -12 -68t-28.5 -60.5t-44 -44t-60.5 -16.5q-41 0 -73 18.5t-59.5 40t-54 40t-57.5 18.5q-33 0 -55.5 -31.5t-28.5 -85.5h-59z" /> +<glyph unicode="Ò" horiz-adv-x="1320" d="M104 680q0 160 41 288t115 219t176.5 139t225.5 48q121 0 223 -48t176 -139t115 -219t41 -288t-41 -290t-115 -222t-176 -142.5t-223 -50.5q-123 0 -225.5 50.5t-176.5 142.5t-115 222t-41 290zM203 680q0 -141 32.5 -255t93 -194.5t146 -125t187.5 -44.5t186 44.5 t144.5 125t93 194.5t32.5 255q0 139 -32.5 251.5t-93 191.5t-144.5 122t-186 43t-187.5 -43t-146 -122t-93 -191.5t-32.5 -251.5zM428 1669h118l189 -217h-82z" /> +<glyph unicode="Ó" horiz-adv-x="1320" d="M104 680q0 160 41 288t115 219t176.5 139t225.5 48q121 0 223 -48t176 -139t115 -219t41 -288t-41 -290t-115 -222t-176 -142.5t-223 -50.5q-123 0 -225.5 50.5t-176.5 142.5t-115 222t-41 290zM203 680q0 -141 32.5 -255t93 -194.5t146 -125t187.5 -44.5t186 44.5 t144.5 125t93 194.5t32.5 255q0 139 -32.5 251.5t-93 191.5t-144.5 122t-186 43t-187.5 -43t-146 -122t-93 -191.5t-32.5 -251.5zM583 1452l189 217h118l-225 -217h-82z" /> +<glyph unicode="Ô" horiz-adv-x="1320" d="M104 680q0 160 41 288t115 219t176.5 139t225.5 48q121 0 223 -48t176 -139t115 -219t41 -288t-41 -290t-115 -222t-176 -142.5t-223 -50.5q-123 0 -225.5 50.5t-176.5 142.5t-115 222t-41 290zM203 680q0 -141 32.5 -255t93 -194.5t146 -125t187.5 -44.5t186 44.5 t144.5 125t93 194.5t32.5 255q0 139 -32.5 251.5t-93 191.5t-144.5 122t-186 43t-187.5 -43t-146 -122t-93 -191.5t-32.5 -251.5zM419 1452l197 217h86l197 -217h-82l-154 147h-8l-154 -147h-82z" /> +<glyph unicode="Õ" horiz-adv-x="1320" d="M104 680q0 160 41 288t115 219t176.5 139t225.5 48q121 0 223 -48t176 -139t115 -219t41 -288t-41 -290t-115 -222t-176 -142.5t-223 -50.5q-123 0 -225.5 50.5t-176.5 142.5t-115 222t-41 290zM203 680q0 -141 32.5 -255t93 -194.5t146 -125t187.5 -44.5t186 44.5 t144.5 125t93 194.5t32.5 255q0 139 -32.5 251.5t-93 191.5t-144.5 122t-186 43t-187.5 -43t-146 -122t-93 -191.5t-32.5 -251.5zM393 1466q2 35 12 69t28.5 60.5t44 43t60.5 16.5q41 0 72 -18.5t58.5 -40t55 -39t58.5 -17.5q33 0 55.5 31t28.5 84h59q-2 -35 -12 -68 t-28.5 -60.5t-44 -44t-60.5 -16.5q-41 0 -73 18.5t-59.5 40t-54 40t-57.5 18.5q-33 0 -55.5 -31.5t-28.5 -85.5h-59z" /> +<glyph unicode="Ö" horiz-adv-x="1320" d="M104 680q0 160 41 288t115 219t176.5 139t225.5 48q121 0 223 -48t176 -139t115 -219t41 -288t-41 -290t-115 -222t-176 -142.5t-223 -50.5q-123 0 -225.5 50.5t-176.5 142.5t-115 222t-41 290zM203 680q0 -141 32.5 -255t93 -194.5t146 -125t187.5 -44.5t186 44.5 t144.5 125t93 194.5t32.5 255q0 139 -32.5 251.5t-93 191.5t-144.5 122t-186 43t-187.5 -43t-146 -122t-93 -191.5t-32.5 -251.5zM423 1559q0 35 20.5 55t53.5 20t54.5 -20.5t21.5 -54.5q0 -35 -21.5 -54.5t-54.5 -19.5t-53.5 19.5t-20.5 54.5zM745 1559q0 35 21.5 55 t54.5 20t53.5 -20.5t20.5 -54.5q0 -35 -20.5 -54.5t-53.5 -19.5t-54.5 19.5t-21.5 54.5z" /> +<glyph unicode="×" d="M104 334l332 342l-332 342l56 57l329 -346l332 346l53 -57l-329 -342l329 -342l-53 -58l-332 345l-329 -345z" /> +<glyph unicode="Ø" horiz-adv-x="1320" d="M104 680q0 160 41 288t115 219t176.5 139t225.5 48q109 0 200.5 -38t163.5 -109l127 170l57 -45l-137 -183q68 -90 106 -212.5t38 -276.5q0 -160 -41 -290t-115 -222t-176.5 -142.5t-222.5 -50.5q-219 0 -365 152l-131 -174l-60 45l140 188q-66 92 -104 216t-38 278z M203 680q0 -127 26.5 -232.5t75.5 -183.5l664 887q-59 66 -137 101.5t-170 35.5q-102 0 -187.5 -43t-146 -122t-93 -191.5t-32.5 -251.5zM352 203q59 -68 137 -105t173 -37q102 0 186 44.5t144.5 125t93 194.5t32.5 255q0 127 -26.5 229.5t-75.5 180.5z" /> +<glyph unicode="Ù" horiz-adv-x="1284" d="M186 518v832h95v-822q0 -135 29.5 -224t78.5 -143.5t114.5 -77t137.5 -22.5q74 0 139.5 22.5t116.5 77t81 143.5t30 224v822h90v-832q0 -158 -39 -262t-102.5 -166.5t-146.5 -88.5t-169 -26q-88 0 -170 26t-145.5 88.5t-101.5 166.5t-38 262zM410 1669h118l189 -217h-82z " /> +<glyph unicode="Ú" horiz-adv-x="1284" d="M186 518v832h95v-822q0 -135 29.5 -224t78.5 -143.5t114.5 -77t137.5 -22.5q74 0 139.5 22.5t116.5 77t81 143.5t30 224v822h90v-832q0 -158 -39 -262t-102.5 -166.5t-146.5 -88.5t-169 -26q-88 0 -170 26t-145.5 88.5t-101.5 166.5t-38 262zM565 1452l189 217h118 l-225 -217h-82z" /> +<glyph unicode="Û" horiz-adv-x="1284" d="M186 518v832h95v-822q0 -135 29.5 -224t78.5 -143.5t114.5 -77t137.5 -22.5q74 0 139.5 22.5t116.5 77t81 143.5t30 224v822h90v-832q0 -158 -39 -262t-102.5 -166.5t-146.5 -88.5t-169 -26q-88 0 -170 26t-145.5 88.5t-101.5 166.5t-38 262zM401 1452l197 217h86 l197 -217h-82l-154 147h-8l-154 -147h-82z" /> +<glyph unicode="Ü" horiz-adv-x="1284" d="M186 518v832h95v-822q0 -135 29.5 -224t78.5 -143.5t114.5 -77t137.5 -22.5q74 0 139.5 22.5t116.5 77t81 143.5t30 224v822h90v-832q0 -158 -39 -262t-102.5 -166.5t-146.5 -88.5t-169 -26q-88 0 -170 26t-145.5 88.5t-101.5 166.5t-38 262zM405 1559q0 35 20.5 55 t53.5 20t54.5 -20.5t21.5 -54.5q0 -35 -21.5 -54.5t-54.5 -19.5t-53.5 19.5t-20.5 54.5zM727 1559q0 35 21.5 55t54.5 20t53.5 -20.5t20.5 -54.5q0 -35 -20.5 -54.5t-53.5 -19.5t-54.5 19.5t-21.5 54.5z" /> +<glyph unicode="Ý" horiz-adv-x="901" d="M-2 1350h100l205 -422q35 -74 70 -145.5t73 -145.5h9q39 74 75.5 145.5t71.5 145.5l205 422h96l-405 -803v-547h-95v547zM375 1452l189 217h118l-225 -217h-82z" /> +<glyph unicode="Þ" horiz-adv-x="1150" d="M193 0v1350h94v-240h274q113 0 202 -20.5t151.5 -64.5t95 -115.5t32.5 -176.5q0 -199 -127 -296t-354 -97h-274v-340h-94zM287 420h250q209 0 308 73.5t99 239.5q0 168 -100.5 232.5t-306.5 64.5h-250v-610z" /> +<glyph unicode="ß" horiz-adv-x="1110" d="M188 0v1090q0 190 95.5 296.5t255.5 106.5q68 0 120 -21.5t88.5 -58.5t56 -87t19.5 -107q0 -80 -31.5 -136.5t-69.5 -104.5t-69.5 -96t-31.5 -110q0 -59 31.5 -96t79.5 -64.5t103.5 -54.5t103.5 -63.5t80 -92t32 -141.5q0 -61 -22.5 -112.5t-62.5 -90.5t-94.5 -60.5 t-119.5 -21.5q-80 0 -150 29t-129 76l45 67q59 -47 113.5 -70.5t120.5 -23.5q51 0 90 17.5t64.5 45t38.5 64.5t13 76q0 72 -31.5 117t-78.5 76.5t-103.5 57t-103.5 58.5t-79 79t-32 120t32 127t69 101t68.5 98.5t31.5 119.5q0 90 -48 147.5t-146 57.5q-117 0 -187.5 -86 t-70.5 -270v-1059h-91z" /> +<glyph unicode="à" horiz-adv-x="1021" d="M133 246q0 162 153.5 248t481.5 122q2 55 -7 111.5t-35 100.5t-72 72t-117 28q-100 0 -182.5 -39t-131.5 -76l-41 68q27 18 65 40.5t84 41t101 32t115 13.5q88 0 147.5 -30t96 -81t52 -119.5t15.5 -148.5v-629h-76l-10 127h-4q-76 -59 -163 -105.5t-185 -46.5 q-59 0 -110.5 16.5t-91.5 49.5t-62.5 84t-22.5 121zM227 250q0 -106 61.5 -151.5t145.5 -45.5q86 0 164 41t170 119v334q-152 -18 -255 -45t-166.5 -64t-91.5 -84t-28 -104zM357 1450h106l189 -279h-78z" /> +<glyph unicode="á" horiz-adv-x="1021" d="M133 246q0 162 153.5 248t481.5 122q2 55 -7 111.5t-35 100.5t-72 72t-117 28q-100 0 -182.5 -39t-131.5 -76l-41 68q27 18 65 40.5t84 41t101 32t115 13.5q88 0 147.5 -30t96 -81t52 -119.5t15.5 -148.5v-629h-76l-10 127h-4q-76 -59 -163 -105.5t-185 -46.5 q-59 0 -110.5 16.5t-91.5 49.5t-62.5 84t-22.5 121zM227 250q0 -106 61.5 -151.5t145.5 -45.5q86 0 164 41t170 119v334q-152 -18 -255 -45t-166.5 -64t-91.5 -84t-28 -104zM422 1171l189 279h106l-217 -279h-78z" /> +<glyph unicode="â" horiz-adv-x="1021" d="M133 246q0 162 153.5 248t481.5 122q2 55 -7 111.5t-35 100.5t-72 72t-117 28q-100 0 -182.5 -39t-131.5 -76l-41 68q27 18 65 40.5t84 41t101 32t115 13.5q88 0 147.5 -30t96 -81t52 -119.5t15.5 -148.5v-629h-76l-10 127h-4q-76 -59 -163 -105.5t-185 -46.5 q-59 0 -110.5 16.5t-91.5 49.5t-62.5 84t-22.5 121zM227 250q0 -106 61.5 -151.5t145.5 -45.5q86 0 164 41t170 119v334q-152 -18 -255 -45t-166.5 -64t-91.5 -84t-28 -104zM304 1171l194 279h78l194 -279h-75l-154 203h-8l-154 -203h-75z" /> +<glyph unicode="ã" horiz-adv-x="1021" d="M133 246q0 162 153.5 248t481.5 122q2 55 -7 111.5t-35 100.5t-72 72t-117 28q-100 0 -182.5 -39t-131.5 -76l-41 68q27 18 65 40.5t84 41t101 32t115 13.5q88 0 147.5 -30t96 -81t52 -119.5t15.5 -148.5v-629h-76l-10 127h-4q-76 -59 -163 -105.5t-185 -46.5 q-59 0 -110.5 16.5t-91.5 49.5t-62.5 84t-22.5 121zM227 250q0 -106 61.5 -151.5t145.5 -45.5q86 0 164 41t170 119v334q-152 -18 -255 -45t-166.5 -64t-91.5 -84t-28 -104zM283 1190q2 33 10 65.5t25.5 58t43 42t62.5 16.5t68 -17.5t57.5 -39t51 -38.5t51.5 -17 q33 0 51 29.5t27 82.5h61q-2 -33 -10 -65.5t-25.5 -58t-43 -42t-62.5 -16.5t-68 17.5t-56.5 39t-51 39t-52.5 17.5q-61 0 -78 -113h-61z" /> +<glyph unicode="ä" horiz-adv-x="1021" d="M133 246q0 162 153.5 248t481.5 122q2 55 -7 111.5t-35 100.5t-72 72t-117 28q-100 0 -182.5 -39t-131.5 -76l-41 68q27 18 65 40.5t84 41t101 32t115 13.5q88 0 147.5 -30t96 -81t52 -119.5t15.5 -148.5v-629h-76l-10 127h-4q-76 -59 -163 -105.5t-185 -46.5 q-59 0 -110.5 16.5t-91.5 49.5t-62.5 84t-22.5 121zM227 250q0 -106 61.5 -151.5t145.5 -45.5q86 0 164 41t170 119v334q-152 -18 -255 -45t-166.5 -64t-91.5 -84t-28 -104zM301 1300q0 31 20.5 52.5t53.5 21.5t54.5 -21.5t21.5 -52.5q0 -33 -21.5 -54t-54.5 -21t-53.5 21.5 t-20.5 53.5zM623 1300q0 31 21.5 52.5t54.5 21.5t53.5 -21.5t20.5 -52.5q0 -33 -20.5 -54t-53.5 -21t-54.5 21.5t-21.5 53.5z" /> +<glyph unicode="å" horiz-adv-x="1021" d="M133 246q0 162 153.5 248t481.5 122q2 55 -7 111.5t-35 100.5t-72 72t-117 28q-100 0 -182.5 -39t-131.5 -76l-41 68q27 18 65 40.5t84 41t101 32t115 13.5q88 0 147.5 -30t96 -81t52 -119.5t15.5 -148.5v-629h-76l-10 127h-4q-76 -59 -163 -105.5t-185 -46.5 q-59 0 -110.5 16.5t-91.5 49.5t-62.5 84t-22.5 121zM227 250q0 -106 61.5 -151.5t145.5 -45.5q86 0 164 41t170 119v334q-152 -18 -255 -45t-166.5 -64t-91.5 -84t-28 -104zM369 1280q0 80 48 129t120 49t120 -49t48 -129q0 -78 -48 -127t-120 -49t-120 49t-48 127z M431 1280q0 -55 30.5 -89t75.5 -34t75.5 34t30.5 89q0 57 -30.5 91t-75.5 34t-75.5 -34t-30.5 -91z" /> +<glyph unicode="æ" horiz-adv-x="1605" d="M133 244q0 164 153.5 250t471.5 122q0 55 -8.5 111.5t-34 100.5t-71.5 72t-118 28q-92 0 -173 -39t-130 -76l-41 68q27 18 64 40.5t83 41t98 32t108 13.5q121 0 191.5 -67t94.5 -179q53 113 142.5 179.5t199.5 66.5q174 0 269.5 -119t95.5 -336v-36.5t-4 -37.5h-680 q0 -92 26.5 -170t73.5 -134t111.5 -88t138.5 -32q80 0 140.5 23.5t115.5 64.5l39 -71q-29 -18 -59.5 -35t-67.5 -31t-80 -22.5t-96 -8.5q-66 0 -119 17.5t-96 46.5t-77 64.5t-60 74.5q-98 -94 -210 -148.5t-204 -54.5q-59 0 -110.5 16.5t-91.5 49.5t-62.5 83t-22.5 120z M227 250q0 -106 61.5 -151.5t145.5 -45.5q39 0 86 12.5t95.5 37t95.5 60.5t90 81q-23 45 -33 111.5t-10 136.5l-2 55q-143 -18 -243.5 -45t-164 -64t-92.5 -84t-29 -104zM844 549h600q0 190 -75 285.5t-208 95.5q-61 0 -115.5 -28t-96.5 -78t-69.5 -120.5t-35.5 -154.5z" /> +<glyph unicode="ç" horiz-adv-x="919" d="M106 489q0 123 37 220.5t98.5 163t142.5 100.5t171 35q102 0 171 -37t118 -84l-53 -64q-47 45 -104.5 75t-129.5 30q-76 0 -140.5 -32t-112.5 -90t-75.5 -138t-27.5 -179q0 -96 25.5 -176t71.5 -137t112.5 -89t146.5 -32q78 0 144.5 33t117.5 80l47 -62q-63 -57 -141 -94 t-172 -37q-96 0 -177 35t-141.5 100.5t-94.5 160.5t-34 218zM391 -365q86 12 138.5 37t52.5 68q0 47 -39 69.5t-98 38.5l82 156h71l-59 -115q49 -16 86 -47.5t37 -93.5q0 -41 -21.5 -70.5t-57.5 -50t-82 -34t-95 -19.5z" /> +<glyph unicode="è" horiz-adv-x="989" d="M106 489q0 121 36 217.5t96.5 163t137.5 102.5t159 36q176 0 276 -119t100 -336v-36.5t-4 -37.5h-708q2 -92 28.5 -171t74.5 -135t115.5 -88t151.5 -32q80 0 144.5 23.5t120.5 64.5l36 -69q-59 -35 -129.5 -66t-179.5 -31q-94 0 -177 35t-144.5 101.5t-97.5 161.5 t-36 216zM199 549h626q0 190 -77.5 285.5t-210.5 95.5q-63 0 -121 -26.5t-104 -76t-75.5 -120t-37.5 -158.5zM355 1450h106l189 -279h-78z" /> +<glyph unicode="é" horiz-adv-x="989" d="M106 489q0 121 36 217.5t96.5 163t137.5 102.5t159 36q176 0 276 -119t100 -336v-36.5t-4 -37.5h-708q2 -92 28.5 -171t74.5 -135t115.5 -88t151.5 -32q80 0 144.5 23.5t120.5 64.5l36 -69q-59 -35 -129.5 -66t-179.5 -31q-94 0 -177 35t-144.5 101.5t-97.5 161.5 t-36 216zM199 549h626q0 190 -77.5 285.5t-210.5 95.5q-63 0 -121 -26.5t-104 -76t-75.5 -120t-37.5 -158.5zM420 1171l189 279h106l-217 -279h-78z" /> +<glyph unicode="ê" horiz-adv-x="989" d="M106 489q0 121 36 217.5t96.5 163t137.5 102.5t159 36q176 0 276 -119t100 -336v-36.5t-4 -37.5h-708q2 -92 28.5 -171t74.5 -135t115.5 -88t151.5 -32q80 0 144.5 23.5t120.5 64.5l36 -69q-59 -35 -129.5 -66t-179.5 -31q-94 0 -177 35t-144.5 101.5t-97.5 161.5 t-36 216zM199 549h626q0 190 -77.5 285.5t-210.5 95.5q-63 0 -121 -26.5t-104 -76t-75.5 -120t-37.5 -158.5zM302 1171l194 279h78l194 -279h-75l-154 203h-8l-154 -203h-75z" /> +<glyph unicode="ë" horiz-adv-x="989" d="M106 489q0 121 36 217.5t96.5 163t137.5 102.5t159 36q176 0 276 -119t100 -336v-36.5t-4 -37.5h-708q2 -92 28.5 -171t74.5 -135t115.5 -88t151.5 -32q80 0 144.5 23.5t120.5 64.5l36 -69q-59 -35 -129.5 -66t-179.5 -31q-94 0 -177 35t-144.5 101.5t-97.5 161.5 t-36 216zM199 549h626q0 190 -77.5 285.5t-210.5 95.5q-63 0 -121 -26.5t-104 -76t-75.5 -120t-37.5 -158.5zM299 1300q0 31 20.5 52.5t53.5 21.5t54.5 -21.5t21.5 -52.5q0 -33 -21.5 -54t-54.5 -21t-53.5 21.5t-20.5 53.5zM621 1300q0 31 21.5 52.5t54.5 21.5t53.5 -21.5 t20.5 -52.5q0 -33 -20.5 -54t-53.5 -21t-54.5 21.5t-21.5 53.5z" /> +<glyph unicode="ì" horiz-adv-x="468" d="M53 1450h106l189 -279h-78zM188 0v983h91v-983h-91z" /> +<glyph unicode="í" horiz-adv-x="468" d="M118 1171l189 279h106l-217 -279h-78zM188 0v983h91v-983h-91z" /> +<glyph unicode="î" horiz-adv-x="468" d="M0 1171l194 279h78l194 -279h-75l-154 203h-8l-154 -203h-75zM188 0v983h91v-983h-91z" /> +<glyph unicode="ï" horiz-adv-x="468" d="M-3 1300q0 31 20.5 52.5t53.5 21.5t54.5 -21.5t21.5 -52.5q0 -33 -21.5 -54t-54.5 -21t-53.5 21.5t-20.5 53.5zM188 0v983h91v-983h-91zM319 1300q0 31 21.5 52.5t54.5 21.5t53.5 -21.5t20.5 -52.5q0 -33 -20.5 -54t-53.5 -21t-54.5 21.5t-21.5 53.5z" /> +<glyph unicode="ð" horiz-adv-x="1095" d="M123 449q0 100 30.5 185t87 144.5t134.5 93t172 33.5q88 0 166 -39t137 -116q-29 152 -90.5 260t-147.5 194l-290 -151l-31 57l270 139q-57 49 -120.5 91t-131.5 81l45 62q76 -41 146.5 -88t136.5 -107l291 152l30 -56l-272 -141q61 -61 111.5 -136t87.5 -164 t57.5 -195.5t20.5 -231.5q0 -123 -31 -223t-85 -171t-131 -109t-169 -38q-82 0 -159 33t-135 93.5t-94 148.5t-36 199zM213 449q0 -86 26.5 -159t71.5 -125t106.5 -81t129.5 -29q84 0 144.5 36t100 97.5t59 145.5t19.5 180q0 66 -6 127q-39 57 -79 94t-78.5 57.5t-77.5 27.5 t-78 7q-84 0 -146.5 -30.5t-105.5 -82.5t-64.5 -121t-21.5 -144z" /> +<glyph unicode="ñ" horiz-adv-x="1089" d="M188 0v983h78l8 -152h7q76 76 155.5 126.5t181.5 50.5q154 0 225.5 -92.5t71.5 -284.5v-631h-90v618q0 158 -52 233t-173 75q-88 0 -159.5 -46t-161.5 -139v-741h-91zM326 1190q2 33 10 65.5t25.5 58t43 42t62.5 16.5t68 -17.5t57.5 -39t51 -38.5t51.5 -17q33 0 51 29.5 t27 82.5h61q-2 -33 -10 -65.5t-25.5 -58t-43 -42t-62.5 -16.5t-68 17.5t-56.5 39t-51 39t-52.5 17.5q-61 0 -78 -113h-61z" /> +<glyph unicode="ò" horiz-adv-x="1095" d="M106 489q0 123 36 220.5t96.5 163t140.5 100.5t168 35t169 -35t141.5 -100.5t96 -163t35.5 -220.5t-35.5 -218t-96 -160.5t-141.5 -100.5t-169 -35t-168 35t-140.5 100.5t-96.5 160.5t-36 218zM201 489q0 -96 26.5 -176t72.5 -137t109.5 -89t137.5 -32t138.5 32t110.5 89 t72.5 137t26.5 176q0 98 -26.5 178.5t-72.5 138.5t-110.5 90t-138.5 32t-137.5 -32t-109.5 -90t-72.5 -138.5t-26.5 -178.5zM367 1450h106l189 -279h-78z" /> +<glyph unicode="ó" horiz-adv-x="1095" d="M106 489q0 123 36 220.5t96.5 163t140.5 100.5t168 35t169 -35t141.5 -100.5t96 -163t35.5 -220.5t-35.5 -218t-96 -160.5t-141.5 -100.5t-169 -35t-168 35t-140.5 100.5t-96.5 160.5t-36 218zM201 489q0 -96 26.5 -176t72.5 -137t109.5 -89t137.5 -32t138.5 32t110.5 89 t72.5 137t26.5 176q0 98 -26.5 178.5t-72.5 138.5t-110.5 90t-138.5 32t-137.5 -32t-109.5 -90t-72.5 -138.5t-26.5 -178.5zM432 1171l189 279h106l-217 -279h-78z" /> +<glyph unicode="ô" horiz-adv-x="1095" d="M106 489q0 123 36 220.5t96.5 163t140.5 100.5t168 35t169 -35t141.5 -100.5t96 -163t35.5 -220.5t-35.5 -218t-96 -160.5t-141.5 -100.5t-169 -35t-168 35t-140.5 100.5t-96.5 160.5t-36 218zM201 489q0 -96 26.5 -176t72.5 -137t109.5 -89t137.5 -32t138.5 32t110.5 89 t72.5 137t26.5 176q0 98 -26.5 178.5t-72.5 138.5t-110.5 90t-138.5 32t-137.5 -32t-109.5 -90t-72.5 -138.5t-26.5 -178.5zM314 1171l194 279h78l194 -279h-75l-154 203h-8l-154 -203h-75z" /> +<glyph unicode="õ" horiz-adv-x="1095" d="M106 489q0 123 36 220.5t96.5 163t140.5 100.5t168 35t169 -35t141.5 -100.5t96 -163t35.5 -220.5t-35.5 -218t-96 -160.5t-141.5 -100.5t-169 -35t-168 35t-140.5 100.5t-96.5 160.5t-36 218zM201 489q0 -96 26.5 -176t72.5 -137t109.5 -89t137.5 -32t138.5 32t110.5 89 t72.5 137t26.5 176q0 98 -26.5 178.5t-72.5 138.5t-110.5 90t-138.5 32t-137.5 -32t-109.5 -90t-72.5 -138.5t-26.5 -178.5zM293 1190q2 33 10 65.5t25.5 58t43 42t62.5 16.5t68 -17.5t57.5 -39t51 -38.5t51.5 -17q33 0 51 29.5t27 82.5h61q-2 -33 -10 -65.5t-25.5 -58 t-43 -42t-62.5 -16.5t-68 17.5t-56.5 39t-51 39t-52.5 17.5q-61 0 -78 -113h-61z" /> +<glyph unicode="ö" horiz-adv-x="1095" d="M106 489q0 123 36 220.5t96.5 163t140.5 100.5t168 35t169 -35t141.5 -100.5t96 -163t35.5 -220.5t-35.5 -218t-96 -160.5t-141.5 -100.5t-169 -35t-168 35t-140.5 100.5t-96.5 160.5t-36 218zM201 489q0 -96 26.5 -176t72.5 -137t109.5 -89t137.5 -32t138.5 32t110.5 89 t72.5 137t26.5 176q0 98 -26.5 178.5t-72.5 138.5t-110.5 90t-138.5 32t-137.5 -32t-109.5 -90t-72.5 -138.5t-26.5 -178.5zM311 1300q0 31 20.5 52.5t53.5 21.5t54.5 -21.5t21.5 -52.5q0 -33 -21.5 -54t-54.5 -21t-53.5 21.5t-20.5 53.5zM633 1300q0 31 21.5 52.5 t54.5 21.5t53.5 -21.5t20.5 -52.5q0 -33 -20.5 -54t-53.5 -21t-54.5 21.5t-21.5 53.5z" /> +<glyph unicode="÷" d="M70 637v78h841v-78h-841zM412 307q0 35 22.5 57.5t54.5 22.5q35 0 56.5 -22.5t21.5 -57.5q0 -39 -21.5 -61.5t-56.5 -22.5q-33 0 -55 22.5t-22 61.5zM412 1044q0 35 22.5 57.5t54.5 22.5q35 0 56.5 -22.5t21.5 -57.5q0 -39 -21.5 -61t-56.5 -22q-33 0 -55 22.5t-22 60.5z " /> +<glyph unicode="ø" horiz-adv-x="1095" d="M94 -2l119 143q-49 66 -78 152t-29 196q0 123 36 220.5t96.5 163t140.5 100.5t168 35q82 0 156.5 -29t134.5 -86l110 133l53 -43l-118 -141q49 -66 77.5 -154t28.5 -199q0 -123 -35.5 -218t-96 -160.5t-141.5 -100.5t-169 -35q-168 0 -289 115l-111 -135zM199 492 q0 -166 73 -281l510 614q-94 104 -235 105q-74 0 -138.5 -32t-110.5 -90t-72.5 -139t-26.5 -177zM313 156q96 -102 234 -103q74 0 138.5 32t111.5 89t73.5 137t26.5 176q0 168 -74 283z" /> +<glyph unicode="ù" horiz-adv-x="1083" d="M174 352v631h90v-618q0 -158 52.5 -233t170.5 -75q88 0 160 48.5t158 152.5v725h90v-983h-76l-10 164h-4q-72 -86 -152 -137.5t-182 -51.5q-154 0 -225.5 92.5t-71.5 284.5zM361 1450h106l189 -279h-78z" /> +<glyph unicode="ú" horiz-adv-x="1083" d="M174 352v631h90v-618q0 -158 52.5 -233t170.5 -75q88 0 160 48.5t158 152.5v725h90v-983h-76l-10 164h-4q-72 -86 -152 -137.5t-182 -51.5q-154 0 -225.5 92.5t-71.5 284.5zM426 1171l189 279h106l-217 -279h-78z" /> +<glyph unicode="û" horiz-adv-x="1083" d="M174 352v631h90v-618q0 -158 52.5 -233t170.5 -75q88 0 160 48.5t158 152.5v725h90v-983h-76l-10 164h-4q-72 -86 -152 -137.5t-182 -51.5q-154 0 -225.5 92.5t-71.5 284.5zM308 1171l194 279h78l194 -279h-75l-154 203h-8l-154 -203h-75z" /> +<glyph unicode="ü" horiz-adv-x="1083" d="M174 352v631h90v-618q0 -158 52.5 -233t170.5 -75q88 0 160 48.5t158 152.5v725h90v-983h-76l-10 164h-4q-72 -86 -152 -137.5t-182 -51.5q-154 0 -225.5 92.5t-71.5 284.5zM305 1300q0 31 20.5 52.5t53.5 21.5t54.5 -21.5t21.5 -52.5q0 -33 -21.5 -54t-54.5 -21 t-53.5 21.5t-20.5 53.5zM627 1300q0 31 21.5 52.5t54.5 21.5t53.5 -21.5t20.5 -52.5q0 -33 -20.5 -54t-53.5 -21t-54.5 21.5t-21.5 53.5z" /> +<glyph unicode="ý" horiz-adv-x="892" d="M25 983h98l237 -618q23 -61 50.5 -135t56.5 -140h8q23 66 46.5 139.5t43.5 135.5l211 618h92l-389 -1106q-20 -61 -50 -119.5t-70 -104.5t-92 -74t-117 -28q-55 0 -101 21l21 80q16 -6 36.5 -11.5t43.5 -5.5q92 0 153.5 74t97.5 187l27 86zM354 1171l189 279h106 l-217 -279h-78z" /> +<glyph unicode="þ" horiz-adv-x="1114" d="M188 -444v1917h91v-424v-187q74 57 157.5 101.5t175.5 44.5q98 0 173 -36t124 -101.5t74 -157.5t25 -207q0 -125 -35 -223.5t-95.5 -167t-139.5 -104.5t-165 -36q-72 0 -144.5 31t-149.5 88v-180v-358h-91zM279 182q86 -70 159.5 -98.5t130.5 -28.5q74 0 137.5 33 t108.5 92.5t70.5 142.5t25.5 183q0 90 -17 168t-54 134t-96.5 88t-143.5 32q-74 0 -152.5 -42t-168.5 -120v-584z" /> +<glyph unicode="ÿ" horiz-adv-x="892" d="M25 983h98l237 -618q23 -61 50.5 -135t56.5 -140h8q23 66 46.5 139.5t43.5 135.5l211 618h92l-389 -1106q-20 -61 -50 -119.5t-70 -104.5t-92 -74t-117 -28q-55 0 -101 21l21 80q16 -6 36.5 -11.5t43.5 -5.5q92 0 153.5 74t97.5 187l27 86zM233 1300q0 31 20.5 52.5 t53.5 21.5t54.5 -21.5t21.5 -52.5q0 -33 -21.5 -54t-54.5 -21t-53.5 21.5t-20.5 53.5zM555 1300q0 31 21.5 52.5t54.5 21.5t53.5 -21.5t20.5 -52.5q0 -33 -20.5 -54t-53.5 -21t-54.5 21.5t-21.5 53.5z" /> +<glyph unicode="Œ" horiz-adv-x="1691" d="M104 680q0 154 40 276.5t121 210.5t201 135.5t279 47.5h838v-82h-606v-510h502v-82h-502v-594h627v-82h-861q-160 0 -279.5 48t-199.5 137t-120 215t-40 280zM203 680q0 -133 33.5 -242.5t101.5 -189.5t172 -124t246 -44h127v1190h-127q-141 0 -245.5 -43t-172.5 -120 t-101.5 -186.5t-33.5 -240.5z" /> +<glyph unicode="œ" horiz-adv-x="1736" d="M106 489q0 123 35 220.5t95.5 163t138.5 100.5t164 35q119 0 223 -73t158 -218q53 135 150 213t216 78q174 0 274.5 -119t100.5 -336q0 -37 -6 -74h-690q0 -92 27.5 -170t74.5 -134t112.5 -88t139.5 -32q80 0 143.5 23.5t118.5 64.5l39 -71q-59 -35 -130 -66t-181 -31 q-129 0 -231.5 78t-155.5 211q-57 -143 -155.5 -216t-227.5 -73q-86 0 -164 35t-138.5 100.5t-95.5 160.5t-35 218zM201 489q0 -96 25.5 -176t70.5 -137t107.5 -89t134.5 -32q74 0 136 32t106 89t70 137t26 176q0 98 -26 178.5t-70 138.5t-106.5 90t-135.5 32 q-72 0 -134.5 -32t-107.5 -90t-70.5 -138.5t-25.5 -178.5zM965 549h610q0 190 -79 285.5t-210 95.5q-61 0 -116.5 -28t-98.5 -78t-70.5 -120.5t-35.5 -154.5z" /> +<glyph unicode="Ÿ" horiz-adv-x="901" d="M-2 1350h100l205 -422q35 -74 70 -145.5t73 -145.5h9q39 74 75.5 145.5t71.5 145.5l205 422h96l-405 -803v-547h-95v547zM215 1559q0 35 20.5 55t53.5 20t54.5 -20.5t21.5 -54.5q0 -35 -21.5 -54.5t-54.5 -19.5t-53.5 19.5t-20.5 54.5zM537 1559q0 35 21.5 55t54.5 20 t53.5 -20.5t20.5 -54.5q0 -35 -20.5 -54.5t-53.5 -19.5t-54.5 19.5t-21.5 54.5z" /> +<glyph unicode="ˆ" horiz-adv-x="1095" d="M314 1171l194 279h78l194 -279h-75l-154 203h-8l-154 -203h-75z" /> +<glyph unicode="˜" horiz-adv-x="1095" d="M293 1190q2 33 10 65.5t25.5 58t43 42t62.5 16.5t68 -17.5t57.5 -39t51 -38.5t51.5 -17q33 0 51 29.5t27 82.5h61q-2 -33 -10 -65.5t-25.5 -58t-43 -42t-62.5 -16.5t-68 17.5t-56.5 39t-51 39t-52.5 17.5q-61 0 -78 -113h-61z" /> +<glyph unicode=" " horiz-adv-x="884" /> +<glyph unicode=" " horiz-adv-x="1769" /> +<glyph unicode=" " horiz-adv-x="884" /> +<glyph unicode=" " horiz-adv-x="1769" /> +<glyph unicode=" " horiz-adv-x="589" /> +<glyph unicode=" " horiz-adv-x="442" /> +<glyph unicode=" " horiz-adv-x="294" /> +<glyph unicode=" " horiz-adv-x="294" /> +<glyph unicode=" " horiz-adv-x="221" /> +<glyph unicode=" " horiz-adv-x="353" /> +<glyph unicode=" " horiz-adv-x="98" /> +<glyph unicode="‐" horiz-adv-x="612" d="M82 471v80h450v-80h-450z" /> +<glyph unicode="‑" horiz-adv-x="612" d="M82 471v80h450v-80h-450z" /> +<glyph unicode="‒" horiz-adv-x="612" d="M82 471v80h450v-80h-450z" /> +<glyph unicode="–" horiz-adv-x="983" d="M82 475v74h819v-74h-819z" /> +<glyph unicode="—" horiz-adv-x="1638" d="M82 475v74h1474v-74h-1474z" /> +<glyph unicode="‘" horiz-adv-x="448" d="M119 1120q0 111 46 188.5t128 131.5l37 -47q-68 -55 -102.5 -110.5t-34.5 -143.5q4 2 16 2q31 0 56.5 -18.5t25.5 -57.5t-23.5 -60.5t-58.5 -21.5q-41 0 -65.5 36t-24.5 101z" /> +<glyph unicode="’" horiz-adv-x="448" d="M119 1024q68 55 102.5 110.5t34.5 143.5q-4 -2 -16 -2q-29 0 -54.5 18.5t-25.5 57.5t22.5 60.5t57.5 21.5q41 0 66.5 -36t25.5 -102q0 -111 -46 -188.5t-130 -130.5z" /> +<glyph unicode="‚" horiz-adv-x="448" d="M119 -219q68 55 102.5 110.5t34.5 143.5q-4 -2 -16 -2q-29 0 -54.5 18.5t-25.5 57.5t22.5 60.5t57.5 21.5q41 0 66.5 -36t25.5 -102q0 -111 -46 -188.5t-130 -130.5z" /> +<glyph unicode="“" horiz-adv-x="737" d="M119 1120q0 111 46 188.5t128 131.5l37 -47q-68 -55 -102.5 -110.5t-34.5 -143.5q4 2 16 2q31 0 56.5 -18.5t25.5 -57.5t-23.5 -60.5t-58.5 -21.5q-41 0 -65.5 36t-24.5 101zM408 1120q0 111 46 188.5t128 131.5l37 -47q-68 -55 -102.5 -110.5t-34.5 -143.5q4 2 16 2 q31 0 56.5 -18.5t25.5 -57.5t-23.5 -60.5t-58.5 -21.5q-41 0 -65.5 36t-24.5 101z" /> +<glyph unicode="”" horiz-adv-x="737" d="M119 1024q68 55 102.5 110.5t34.5 143.5q-4 -2 -16 -2q-29 0 -54.5 18.5t-25.5 57.5t22.5 60.5t57.5 21.5q41 0 66.5 -36t25.5 -102q0 -111 -46 -188.5t-130 -130.5zM408 1024q68 55 102.5 110.5t34.5 143.5q-4 -2 -16 -2q-29 0 -54.5 18.5t-25.5 57.5t22.5 60.5 t57.5 21.5q41 0 66.5 -36t25.5 -102q0 -111 -46 -188.5t-130 -130.5z" /> +<glyph unicode="„" horiz-adv-x="737" d="M119 -219q68 55 102.5 110.5t34.5 143.5q-4 -2 -16 -2q-29 0 -54.5 18.5t-25.5 57.5t22.5 60.5t57.5 21.5q41 0 66.5 -36t25.5 -102q0 -111 -46 -188.5t-130 -130.5zM408 -219q68 55 102.5 110.5t34.5 143.5q-4 -2 -16 -2q-29 0 -54.5 18.5t-25.5 57.5t22.5 60.5 t57.5 21.5q41 0 66.5 -36t25.5 -102q0 -111 -46 -188.5t-130 -130.5z" /> +<glyph unicode="•" horiz-adv-x="575" d="M82 541q0 51 17.5 93t46 70.5t65.5 45t76 16.5t76.5 -16.5t66.5 -45t46.5 -70.5t17.5 -93q0 -53 -17.5 -94t-46.5 -71t-66.5 -45.5t-76.5 -15.5t-76 15.5t-65.5 45.5t-46 70.5t-17.5 94.5z" /> +<glyph unicode="…" horiz-adv-x="1904" d="M213 68q0 45 26.5 69.5t61.5 24.5t60.5 -24.5t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68zM903 68q0 45 26.5 69.5t61.5 24.5t60.5 -24.5t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68zM1593 68q0 45 26.5 69.5t61.5 24.5t60.5 -24.5 t25.5 -69.5q0 -43 -25.5 -68t-60.5 -25t-61.5 25t-26.5 68z" /> +<glyph unicode=" " horiz-adv-x="353" /> +<glyph unicode="‹" horiz-adv-x="530" d="M88 477v78l281 330l51 -43l-252 -326l252 -330l-51 -39z" /> +<glyph unicode="›" horiz-adv-x="530" d="M111 186l249 330l-249 326l49 43l282 -330v-78l-282 -330z" /> +<glyph unicode=" " horiz-adv-x="442" /> +<glyph unicode="€" d="M49 504v59l127 8q-2 23 -2 43.5v42.5v37t2 35h-127v59l133 9q14 125 53 224t100.5 169t144.5 106.5t182 36.5q92 0 167.5 -47t120.5 -112l-59 -56q-45 61 -101.5 99t-127.5 38q-164 0 -262.5 -121.5t-120.5 -336.5h569v-68h-576q-2 -16 -2 -33.5v-36.5v-44t2 -44h494v-67 h-487q27 -209 118.5 -330t239.5 -121q86 0 150.5 41t123.5 125l60 -51q-66 -90 -146 -141.5t-194 -51.5q-90 0 -166 37t-133.5 105.5t-96 166t-53.5 220.5h-133z" /> +<glyph unicode="™" horiz-adv-x="1249" d="M4 1313v71h518v-71h-221v-557h-78v557h-219zM629 756v628h106l107 -256l63 -176h8l64 176l102 256h107v-628h-78v329l10 201h-8l-168 -432h-70l-167 432h-9l11 -201v-329h-78z" /> +<glyph unicode="" horiz-adv-x="983" d="M0 0v983h983v-983h-983z" /> +<glyph unicode="fi" horiz-adv-x="1044" d="M68 905v70l135 8v219q0 147 63.5 221t179.5 74q72 0 144 -33l-25 -73q-31 16 -60.5 22t-58.5 6q-78 0 -115.5 -58t-37.5 -165v-213h227v-78h-227v-905h-90v905h-135zM729 1300q0 39 23.5 60.5t58.5 21.5t58 -21.5t23 -60.5q0 -35 -23 -57t-58 -22t-58.5 22.5t-23.5 56.5z M763 0v983h91v-983h-91z" /> +<glyph unicode="fl" horiz-adv-x="1024" d="M68 905v70l135 8v219q0 147 63.5 221t179.5 74q72 0 144 -33l-25 -73q-31 16 -60.5 22t-58.5 6q-78 0 -115.5 -58t-37.5 -165v-213h227v-78h-227v-905h-90v905h-135zM727 131v1342h91v-1354q0 -33 12 -48.5t31 -15.5h13t23 4l17 -73q-14 -4 -28.5 -7.5t-37.5 -3.5 q-121 0 -121 156z" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.ttf b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b081effa23ca1217956e1334a938b0d3bb25b250 GIT binary patch literal 54196 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%0ARkbxReGw@nX;FLy9 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 K?0X+p>VE*a>!FVT literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.woff b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-200-normal-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..0cc7b8d7815bbd7ee728812f8d8db78a6842b641 GIT binary patch literal 26796 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 M0003|D}jsv06FP(n*aa+ literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.eot b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..3490416ce5062bb5fabc5ef50f3c9f411691650b GIT binary patch literal 24107 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 Qw%j?REebBx0_o=2u#snO3IG5A literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.svg b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.svg new file mode 100644 index 00000000000..83388d83b58 --- /dev/null +++ b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.svg @@ -0,0 +1,245 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="source_sans_proregular" horiz-adv-x="1017" > +<font-face units-per-em="2048" ascent="1536" descent="-512" /> +<missing-glyph horiz-adv-x="413" /> +<glyph horiz-adv-x="0" /> +<glyph horiz-adv-x="682" /> +<glyph horiz-adv-x="0" /> +<glyph horiz-adv-x="0" /> +<glyph unicode="
" horiz-adv-x="413" /> +<glyph unicode=" " horiz-adv-x="413" /> +<glyph unicode="	" horiz-adv-x="413" /> +<glyph unicode=" " horiz-adv-x="413" /> +<glyph unicode="!" horiz-adv-x="591" d="M174 102q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91t-85 -36q-51 0 -87 36t-36 91zM211 1372h170l-4 -192l-23 -774h-116l-23 774z" /> +<glyph unicode=""" horiz-adv-x="870" d="M164 1413h180l-6 -188l-33 -342h-102l-33 342zM524 1413h180l-6 -188l-33 -342h-102l-33 342z" /> +<glyph unicode="#" d="M72 418v117h178l37 303h-174v118h188l47 375h109l-47 -375h272l49 375h109l-49 -375h165v-118h-178l-37 -303h174v-117h-188l-51 -418h-109l49 418h-270l-51 -418h-111l52 418h-164zM360 535h271l37 303h-271z" /> +<glyph unicode="$" d="M106 135l78 117q66 -57 145 -97t173 -40q115 0 171 57t56 154q0 82 -42 136t-105.5 94t-138 75t-138 80t-105.5 109.5t-42 164.5q0 137 80.5 228.5t216.5 113.5v205h123v-203q98 -10 166.5 -53t123.5 -102l-90 -101q-57 55 -111.5 86t-138.5 31q-94 0 -149 -53.5 t-55 -143.5q0 -74 42 -121t105.5 -82.5t138 -69.5t138 -82t105.5 -118.5t42 -181.5q0 -147 -85 -241.5t-232 -114.5v-207h-123v202q-98 10 -190.5 54.5t-158.5 103.5z" /> +<glyph unicode="%" horiz-adv-x="1687" d="M72 946q0 203 83 312.5t222 109.5q137 0 221 -109.5t84 -312.5q0 -205 -84 -315.5t-221 -110.5q-139 0 -222 111t-83 315zM199 946q0 -160 49 -240.5t129 -80.5q78 0 127 81t49 240q0 160 -49 239t-127 79q-80 0 -129 -79t-49 -239zM414 -25l741 1393h115l-741 -1393 h-115zM1008 401q0 203 83 312.5t222 109.5q137 0 221 -109.5t84 -312.5q0 -205 -84 -315.5t-221 -110.5q-139 0 -222 111t-83 315zM1135 401q0 -160 49 -240.5t129 -80.5q78 0 127 81t49 240q0 160 -49 239t-127 79q-80 0 -129 -79t-49 -239z" /> +<glyph unicode="&" horiz-adv-x="1247" d="M66 348q0 68 21.5 123t58 102.5t85 87t99.5 74.5q-41 84 -64.5 163t-23.5 153q0 68 22.5 125t63.5 100t98 67.5t127 24.5q125 0 194.5 -73.5t69.5 -192.5q0 -66 -26.5 -121t-69.5 -103.5t-97.5 -90.5t-109.5 -82q66 -104 155 -200.5t185 -176.5q61 84 109.5 182t78.5 215 h158q-41 -133 -98.5 -254t-136.5 -227q70 -47 133 -80t119 -49l-46 -140q-72 20 -149.5 58.5t-159.5 95.5q-78 -70 -173 -112t-214 -42q-92 0 -167 28t-129 77t-83.5 117.5t-29.5 150.5zM229 358q0 -55 20.5 -101t56.5 -79t84 -50t104 -17q70 0 133 28.5t123 79.5 q-98 86 -189.5 188.5t-163.5 210.5q-72 -57 -120 -119.5t-48 -140.5zM387 1053q0 -55 17.5 -114.5t46.5 -121.5q45 31 87 62.5t73.5 65.5t50 72t18.5 83q0 59 -29.5 103t-97.5 44q-76 0 -121 -55t-45 -139z" /> +<glyph unicode="'" horiz-adv-x="509" d="M164 1413h180l-6 -188l-33 -342h-102l-33 342z" /> +<glyph unicode="(" horiz-adv-x="620" d="M168 569q0 270 71.5 496.5t198.5 433.5l105 -49q-119 -197 -177.5 -421t-58.5 -460t58.5 -460t177.5 -420l-105 -49q-127 205 -198.5 432t-71.5 497z" /> +<glyph unicode=")" horiz-adv-x="620" d="M78 -311q119 197 177 421t58 459q0 236 -58 460t-177 421l104 49q127 -207 199 -433t72 -497q0 -270 -72 -497.5t-199 -431.5z" /> +<glyph unicode="*" horiz-adv-x="856" d="M119 1194l31 94l208 -51l19 221h100l19 -219l211 49l30 -94l-198 -82l114 -192l-80 -60l-145 176l-145 -176l-82 60l116 192z" /> +<glyph unicode="+" d="M70 612v127h372v400h133v-400h373v-127h-373v-399h-133v399h-372z" /> +<glyph unicode="," horiz-adv-x="509" d="M96 -250q86 39 135.5 102.5t49.5 147.5q-6 -2 -21 -2q-49 0 -85 29.5t-36 87.5q0 55 37 86.5t88 31.5q66 0 104 -53t38 -145q0 -133 -72 -231.5t-197 -151.5z" /> +<glyph unicode="-" horiz-adv-x="636" d="M84 449v129h471v-129h-471z" /> +<glyph unicode="." horiz-adv-x="509" d="M133 102q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91t-85 -36q-51 0 -87 36t-36 91z" /> +<glyph unicode="/" horiz-adv-x="716" d="M20 -328l547 1782h123l-545 -1782h-125z" /> +<glyph unicode="0" d="M90 657q0 330 110.5 502t309.5 172q197 0 307.5 -172t110.5 -502t-110.5 -506t-307.5 -176q-199 0 -309.5 176.5t-110.5 505.5zM254 657q0 -287 70.5 -416.5t185.5 -129.5q57 0 103 31.5t80 98t52.5 170t18.5 246.5t-18.5 246t-52.5 167.5t-80 95t-103 30.5t-104.5 -30.5 t-81 -95t-52 -167t-18.5 -246.5z" /> +<glyph unicode="1" d="M162 0v139h299v963h-238v108q90 16 156.5 40t120.5 57h129v-1168h270v-139h-737z" /> +<glyph unicode="2" d="M74 1133q82 90 174 144t221 54q182 0 286.5 -105.5t104.5 -279.5q0 -92 -40 -185t-110.5 -192.5t-168 -207t-213.5 -228.5q53 4 110.5 8t108.5 4h379v-145h-844v100q147 147 262 266t192.5 220.5t118.5 186.5t41 165q0 113 -61.5 184.5t-185.5 71.5q-82 0 -152 -46 t-127 -112z" /> +<glyph unicode="3" d="M53 160l86 110q59 -61 138 -108t196 -47q119 0 194.5 64.5t75.5 174.5q0 57 -21.5 105.5t-70.5 83.5t-129 53t-196 18v129q104 0 174.5 18.5t114.5 51.5t62.5 78t18.5 96q0 96 -60.5 151.5t-164.5 55.5q-82 0 -150.5 -37t-127.5 -96l-91 106q76 72 167 118t208 46 q86 0 158 -22.5t124 -64.5t80.5 -103.5t28.5 -141.5q0 -119 -65.5 -194.5t-171.5 -116.5v-8q59 -14 110.5 -42t90 -70t60 -97t21.5 -123q0 -86 -33.5 -155.5t-92 -117.5t-136.5 -74t-168 -26q-78 0 -142.5 15.5t-117.5 41t-95 58.5t-75 70z" /> +<glyph unicode="4" d="M35 360v111l559 836h188v-811h179v-136h-179v-360h-159v360h-588zM213 496h410v378q0 53 3 126t7 126h-8q-25 -47 -51.5 -92t-55.5 -92z" /> +<glyph unicode="5" d="M51 154l82 110q57 -59 136 -104t194 -45q59 0 111.5 21.5t91.5 60.5t61.5 94t22.5 123q0 135 -76 210.5t-203 75.5q-68 0 -116 -20.5t-107 -58.5l-90 57l43 629h653v-146h-506l-35 -387q47 25 94.5 39t106.5 14q84 0 157.5 -24.5t129 -74.5t87.5 -127t32 -183t-37 -188.5 t-98.5 -138.5t-140.5 -86t-165 -30q-78 0 -142.5 15.5t-116.5 40t-94 56.5t-75 67z" /> +<glyph unicode="6" d="M98 604q0 197 41 335t110.5 225t159 127t187.5 40q106 0 183 -40t132 -99l-94 -105q-41 47 -97 75t-118 28q-68 0 -129 -28.5t-108.5 -94.5t-76 -171t-30.5 -261q61 76 143 120t162 44q170 0 271.5 -100.5t101.5 -303.5q0 -94 -31 -171t-84 -132t-122.5 -86t-149.5 -31 q-96 0 -178 39t-142.5 118t-95.5 196.5t-35 275.5zM262 500q16 -193 89 -292t198 -99q49 0 90 20.5t71.5 58t48 90t17.5 117.5q0 129 -59.5 203t-181.5 74q-61 0 -134 -40t-139 -132z" /> +<glyph unicode="7" d="M90 1161v146h842v-105q-117 -147 -189.5 -282.5t-115.5 -275.5t-62.5 -297t-27.5 -347h-175q8 184 33 338t69 292t112.5 267t164.5 264h-651z" /> +<glyph unicode="8" d="M84 334q0 63 21.5 117.5t55.5 98.5t78 78t91 58v8q-72 51 -127.5 124t-55.5 177q0 76 29 137.5t78 105.5t116.5 68.5t147.5 24.5q86 0 153.5 -25.5t116 -71.5t74 -110.5t25.5 -140.5q0 -51 -17.5 -98t-43 -88t-57.5 -74t-62 -55v-9q43 -25 83.5 -56.5t72.5 -71t51.5 -91 t19.5 -116.5q0 -74 -31 -137.5t-86 -110.5t-133 -74t-172 -27q-92 0 -171 27t-135 75t-89 113.5t-33 143.5zM236 350q0 -55 21.5 -100t59 -79t89 -52.5t110.5 -18.5q115 0 185.5 63.5t70.5 166.5q0 63 -28.5 108t-78 79t-114 61.5t-133.5 56.5q-78 -53 -130 -124t-52 -161z M303 995q0 -59 24.5 -101t66.5 -75t96.5 -58t113.5 -48q66 59 101.5 124.5t35.5 137.5q0 98 -59 164.5t-168 66.5q-92 0 -151.5 -57t-59.5 -154z" /> +<glyph unicode="9" d="M82 911q0 94 30.5 171t83 132.5t123 86t148.5 30.5q96 0 179 -39t143.5 -117.5t94.5 -196.5t34 -276q0 -197 -41 -335t-111 -225t-159 -127t-187 -40q-104 0 -183 39t-133 99l95 106q41 -47 97 -75.5t118 -28.5q70 0 131 28.5t108 95t76 173t31 264.5q-61 -78 -143 -123 t-164 -45q-170 0 -270.5 100.5t-100.5 302.5zM240 911q0 -129 59 -202.5t182 -73.5q63 0 136 40t139 134q-16 193 -90 291t-199 98q-47 0 -89 -20.5t-73 -58.5t-48 -91t-17 -117z" /> +<glyph unicode=":" horiz-adv-x="509" d="M133 102q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91t-85 -36q-51 0 -87 36t-36 91zM133 841q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91t-85 -36q-51 0 -87 36t-36 91z" /> +<glyph unicode=";" horiz-adv-x="509" d="M96 -250q86 39 135.5 102.5t49.5 147.5q-6 -2 -21 -2q-49 0 -85 29.5t-36 87.5q0 55 37 86.5t88 31.5q66 0 104 -53t38 -145q0 -133 -72 -231.5t-197 -151.5zM133 841q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91t-85 -36q-51 0 -87 36t-36 91z" /> +<glyph unicode="<" d="M70 612v136l878 344v-146l-432 -160l-274 -102v-8l274 -103l432 -159v-146z" /> +<glyph unicode="=" d="M70 395v127h878v-127h-878zM70 831v127h878v-127h-878z" /> +<glyph unicode=">" d="M70 268v146l432 159l274 103v8l-274 102l-432 160v146l878 -344v-136z" /> +<glyph unicode="?" horiz-adv-x="870" d="M78 1227q66 74 149.5 122t194.5 48q160 0 255 -87t95 -241q0 -68 -24.5 -123t-60.5 -104t-76 -97.5t-73.5 -99.5t-52 -109.5t-10.5 -129.5h-147q-12 80 5 144t48 118.5t71 101.5t74.5 93t58 93.5t23.5 102.5q0 82 -50 140t-148 58q-68 0 -128.5 -31.5t-107.5 -86.5z M285 102q0 59 34.5 95t86.5 36q51 0 86.5 -35.5t35.5 -95.5q0 -55 -35.5 -91t-86.5 -36t-86 36t-35 91z" /> +<glyph unicode="@" horiz-adv-x="1734" d="M104 416q0 205 69 372.5t186.5 286.5t272 183.5t326.5 64.5q156 0 280 -49t211 -138t134 -214t47 -277q0 -135 -38 -236.5t-97 -170t-132 -103.5t-142 -35q-84 0 -142.5 39t-68.5 117h-4q-51 -59 -117 -99t-133 -40q-104 0 -175 73.5t-71 215.5q0 82 27.5 166.5t79 153.5 t124 112t162.5 43q53 0 94 -23.5t70 -75.5h4l23 82h112l-80 -409q-61 -240 111 -240q49 0 97 28.5t88 83t64.5 133.5t24.5 179q0 123 -35.5 228.5t-107.5 181t-178.5 118.5t-245.5 43q-137 0 -266 -56t-229.5 -158.5t-161 -248t-60.5 -325.5q0 -150 46 -266.5t128 -196.5 t194 -122t243 -42q94 0 178 25.5t153 66.5l45 -100q-174 -104 -389 -104q-152 0 -282.5 47t-228 140t-154 230.5t-56.5 315.5zM645 416q0 -98 41 -141.5t102 -43.5q43 0 89.5 29t99.5 92l59 326q-29 47 -59.5 66.5t-71.5 19.5q-61 0 -109 -33t-82 -84t-51.5 -112.5 t-17.5 -118.5z" /> +<glyph unicode="A" horiz-adv-x="1101" d="M0 0l455 1343h192l455 -1343h-180l-129 410h-490l-129 -410h-174zM346 547h404l-64 205q-35 113 -67.5 224t-65.5 228h-8q-33 -117 -66 -228.5t-67 -223.5z" /> +<glyph unicode="B" horiz-adv-x="1193" d="M178 0v1343h400q102 0 187 -18t146.5 -57t95 -101.5t33.5 -150.5q0 -100 -57 -181t-178 -112v-8q147 -23 229 -103t82 -219q0 -98 -37 -172t-104.5 -123t-160.5 -73.5t-206 -24.5h-430zM350 135h234q174 0 269 64.5t95 201.5q0 125 -93 183.5t-271 58.5h-234v-508z M350 770h199q172 0 247.5 59.5t75.5 171.5q0 111 -79.5 159t-235.5 48h-207v-438z" /> +<glyph unicode="C" horiz-adv-x="1159" d="M100 672q0 162 45 291t126 219t190.5 138t238.5 48q121 0 214.5 -50t152.5 -116l-96 -108q-53 57 -119 91t-150 34q-96 0 -174.5 -38t-134 -109t-86.5 -171t-31 -225q0 -127 30 -228.5t84 -173t131 -110.5t173 -39t169 39t138 110l97 -104q-78 -92 -178.5 -143.5 t-229.5 -51.5q-127 0 -234.5 47.5t-186.5 136.5t-124 219t-45 294z" /> +<glyph unicode="D" horiz-adv-x="1253" d="M178 0v1343h336q311 0 473 -172t162 -493q0 -160 -41 -286t-121 -213t-196.5 -133t-268.5 -46h-344zM350 139h152q238 0 354.5 141.5t116.5 397.5t-117 391t-354 135h-152v-1065z" /> +<glyph unicode="E" horiz-adv-x="1069" d="M178 0v1343h774v-143h-602v-422h508v-145h-508v-488h623v-145h-795z" /> +<glyph unicode="F" horiz-adv-x="1001" d="M178 0v1343h776v-143h-604v-455h512v-143h-512v-602h-172z" /> +<glyph unicode="G" horiz-adv-x="1253" d="M100 672q0 162 46.5 291t129 219t196.5 138t249 48q137 0 231.5 -52t153.5 -114l-98 -108q-51 53 -118 89t-167 36q-102 0 -184 -38t-140.5 -109t-90.5 -171t-32 -225q0 -127 30 -228.5t86.5 -173t139 -110.5t191.5 -39q72 0 137.5 21.5t106.5 58.5v350h-285v141h440 v-565q-66 -66 -174 -111t-243 -45q-133 0 -244 47.5t-191 136.5t-125 219t-45 294z" /> +<glyph unicode="H" horiz-adv-x="1325" d="M178 0v1343h172v-563h625v563h170v-1343h-170v633h-625v-633h-172z" /> +<glyph unicode="I" horiz-adv-x="528" d="M178 0v1343h172v-1343h-172z" /> +<glyph unicode="J" horiz-adv-x="970" d="M59 190l121 86q47 -80 104.5 -115.5t129.5 -35.5q109 0 162 66.5t53 220.5v931h170v-948q0 -86 -20.5 -162.5t-65.5 -134t-116 -90.5t-169 -33q-250 0 -369 215z" /> +<glyph unicode="K" horiz-adv-x="1175" d="M178 0v1343h172v-673h4l559 673h195l-422 -512l485 -831h-190l-401 698l-230 -272v-426h-172z" /> +<glyph unicode="L" horiz-adv-x="985" d="M178 0v1343h172v-1198h586v-145h-758z" /> +<glyph unicode="M" horiz-adv-x="1478" d="M178 0v1343h203l260 -720l96 -275h8l95 275l258 720h200v-1343h-161v739q0 90 8 199t14 199h-8l-107 -299l-258 -703h-98l-258 703l-106 299h-9q6 -90 13.5 -199t7.5 -199v-739h-158z" /> +<glyph unicode="N" horiz-adv-x="1314" d="M178 0v1343h176l488 -843l145 -279h8q-6 102 -14 212t-8 216v694h162v-1343h-177l-485 846l-145 276h-9q6 -102 13.5 -207.5t7.5 -212.5v-702h-162z" /> +<glyph unicode="O" horiz-adv-x="1349" d="M100 678q0 162 42 290t119 217t182.5 136t232.5 47q125 0 230.5 -48t182 -137t118.5 -217t42 -288q0 -162 -42 -292t-118.5 -221t-182 -140.5t-230.5 -49.5q-127 0 -232.5 49.5t-182.5 140.5t-119 221t-42 292zM276 678q0 -127 29 -228.5t81 -174t126 -111.5t164 -39 t162.5 39t125 111.5t81 174t28.5 228.5q0 125 -28.5 225.5t-81 170t-125 107.5t-162.5 38t-164 -38t-126 -107.5t-81 -170t-29 -225.5z" /> +<glyph unicode="P" horiz-adv-x="1169" d="M178 0v1343h414q111 0 203 -20t156.5 -66.5t100 -122t35.5 -186.5q0 -106 -35.5 -184t-101 -129t-157 -77t-201.5 -26h-242v-532h-172zM350 672h219q178 0 263.5 66.5t85.5 209.5q0 145 -87.5 201.5t-261.5 56.5h-219v-534z" /> +<glyph unicode="Q" horiz-adv-x="1349" d="M98 678q0 162 42 290t118 217t181.5 136t232.5 47t232.5 -48t182 -137t118.5 -217t42 -288q0 -145 -33.5 -265t-96 -209t-150.5 -145.5t-195 -74.5q47 -90 133 -133.5t197 -43.5q45 0 78.5 6.5t62.5 14.5l33 -133q-31 -10 -82 -20.5t-111 -10.5q-186 0 -311 89t-184 229 q-111 14 -201 69t-154.5 145.5t-99.5 212t-35 269.5zM274 678q0 -127 29 -228.5t81 -174t125 -111.5t163 -39t162.5 39t125 111.5t81 174t28.5 228.5q0 125 -28.5 225.5t-81 170t-125 107.5t-162.5 38t-163 -38t-125 -107.5t-81 -170t-29 -225.5z" /> +<glyph unicode="R" horiz-adv-x="1179" d="M178 0v1343h422q102 0 188 -19t148.5 -64.5t97.5 -117t35 -175.5q0 -158 -82 -252t-219 -129l342 -586h-195l-323 567h-242v-567h-172zM350 707h225q158 0 241 64.5t83 195.5q0 133 -83 186t-241 53h-225v-499z" /> +<glyph unicode="S" horiz-adv-x="1083" d="M82 174l102 119q72 -76 168.5 -122t202.5 -46q133 0 207 60.5t74 158.5q0 51 -17.5 87t-48.5 61.5t-72 46t-88 43.5l-192 84q-47 20 -95.5 48.5t-88 69.5t-64.5 97.5t-25 130.5q0 76 32 141.5t89.5 113.5t134 74.5t168.5 26.5q121 0 222.5 -46t173.5 -120l-91 -110 q-61 59 -136.5 93t-168.5 34q-115 0 -183.5 -52.5t-68.5 -144.5q0 -49 20.5 -83t52.5 -59.5t72 -45t79 -35.5l192 -82q57 -25 108.5 -56.5t88.5 -73.5t58.5 -98.5t21.5 -130.5q0 -80 -32 -149.5t-91.5 -121.5t-144.5 -82t-191 -30q-141 0 -261 53.5t-208 145.5z" /> +<glyph unicode="T" horiz-adv-x="1087" d="M51 1200v143h985v-143h-407v-1200h-170v1200h-408z" /> +<glyph unicode="U" horiz-adv-x="1310" d="M172 555v788h172v-792q0 -121 24.5 -203t66.5 -131t98.5 -70.5t121.5 -21.5q68 0 126.5 21.5t101.5 70.5t67.5 131t24.5 203v792h164v-788q0 -162 -37 -272.5t-101.5 -179t-153.5 -98.5t-192 -30q-102 0 -191 30t-153.5 98.5t-101.5 179t-37 272.5z" /> +<glyph unicode="V" horiz-adv-x="1044" d="M-4 1343h180l217 -725q35 -121 63.5 -223t65.5 -221h8q18 59 35 113.5t32 108t30.5 108.5t31.5 114l215 725h175l-426 -1343h-199z" /> +<glyph unicode="W" horiz-adv-x="1599" d="M41 1343h176l141 -731q20 -111 40 -217t40 -217h8q23 111 46.5 218.5t48.5 215.5l186 731h156l186 -731q23 -106 47.5 -214.5t48.5 -219.5h9q20 111 38.5 218.5t36.5 215.5l142 731h165l-278 -1343h-207l-203 809q-16 78 -32.5 152.5t-30.5 152.5h-8q-16 -78 -34 -152.5 t-34 -152.5l-201 -809h-202z" /> +<glyph unicode="X" horiz-adv-x="1040" d="M27 0l391 694l-367 649h189l184 -344q25 -47 48.5 -91t55.5 -103h9q29 59 49 103t45 91l178 344h180l-364 -657l391 -686h-189l-198 362q-27 49 -54.5 101.5t-60.5 114.5h-8q-29 -61 -54.5 -113.5t-52.5 -102.5l-194 -362h-178z" /> +<glyph unicode="Y" horiz-adv-x="964" d="M-8 1343h184l172 -378q33 -74 64.5 -145.5t66.5 -147.5h8q35 76 69 147.5t65 145.5l174 378h176l-404 -823v-520h-170v520z" /> +<glyph unicode="Z" horiz-adv-x="1093" d="M86 0v102l709 1098h-645v143h856v-100l-709 -1098h715v-145h-926z" /> +<glyph unicode="[" horiz-adv-x="620" d="M193 -311v1761h366v-98h-240v-1567h240v-96h-366z" /> +<glyph unicode="\" horiz-adv-x="716" d="M29 1454h121l546 -1782h-123z" /> +<glyph unicode="]" horiz-adv-x="620" d="M63 -215h238v1567h-238v98h365v-1761h-365v96z" /> +<glyph unicode="^" d="M123 582l311 790h150l311 -790h-147l-134 360l-100 272h-8l-103 -272l-133 -360h-147z" /> +<glyph unicode="_" horiz-adv-x="1024" d="M25 -145h974v-113h-974v113z" /> +<glyph unicode="`" horiz-adv-x="1110" d="M328 1462h176l184 -288h-129z" /> +<glyph unicode="a" horiz-adv-x="1048" d="M119 258q0 164 146.5 251t465.5 122q0 47 -9 92t-32.5 80t-62.5 56.5t-101 21.5q-88 0 -162.5 -33t-134.5 -74l-67 117q70 45 170 87t221 42q182 0 264 -111.5t82 -298.5v-610h-139l-15 119h-4q-72 -59 -154.5 -101.5t-174.5 -42.5q-127 0 -210 74t-83 209zM285 270 q0 -86 50 -122.5t124 -36.5q72 0 136 33.5t136 99.5v276q-125 -16 -211 -38.5t-138 -53.5t-74.5 -71t-22.5 -87z" /> +<glyph unicode="b" horiz-adv-x="1136" d="M168 0v1458h168v-397l-4 -180q68 59 147.5 99t163.5 40q96 0 170 -36t124 -102.5t75.5 -159.5t25.5 -208q0 -127 -34.5 -227.5t-94 -170t-137.5 -105.5t-164 -36q-70 0 -144.5 32t-139.5 91h-7l-14 -98h-135zM336 221q66 -57 130 -80.5t114 -23.5q61 0 113 27.5t90 77.5 t59.5 124t21.5 166q0 82 -14 149.5t-46 115.5t-82 75t-120 27q-121 0 -266 -136v-522z" /> +<glyph unicode="c" horiz-adv-x="933" d="M94 496q0 125 39 222t104.5 164.5t152.5 102.5t183 35q98 0 169 -36t122 -83l-84 -108q-45 39 -93 63.5t-107 24.5q-68 0 -125.5 -28t-98.5 -79t-64.5 -121.5t-23.5 -156.5t22.5 -156t62.5 -120t97.5 -77.5t124.5 -27.5q72 0 130.5 29.5t103.5 70.5l76 -111 q-68 -59 -151 -94t-173 -35q-98 0 -184 35t-148.5 101.5t-98.5 164t-36 220.5z" /> +<glyph unicode="d" horiz-adv-x="1136" d="M96 496q0 121 36 218t95.5 164.5t137 104.5t163.5 37t149.5 -31t129.5 -84l-8 170v383h170v-1458h-140l-14 117h-6q-59 -57 -136 -99.5t-165 -42.5q-188 0 -300 135.5t-112 385.5zM270 498q0 -180 72 -280.5t203 -100.5q70 0 131 33.5t123 103.5v520q-63 57 -122 81 t-120 24q-59 0 -111.5 -28t-91.5 -78t-61.5 -119.5t-22.5 -155.5z" /> +<glyph unicode="e" horiz-adv-x="1015" d="M94 496q0 123 38 220t100.5 164.5t142.5 103.5t166 36q94 0 168.5 -33t125 -94.5t77 -147.5t26.5 -192q0 -55 -6 -92h-672q10 -162 99.5 -256t232.5 -94q72 0 132 21.5t116 55.5l59 -110q-66 -41 -145.5 -72t-182.5 -31q-100 0 -187 36t-151.5 102.5t-101.5 163 t-37 219.5zM258 571h533q0 154 -64.5 235t-181.5 81q-53 0 -101.5 -21.5t-87.5 -61.5t-64.5 -98.5t-33.5 -134.5z" /> +<glyph unicode="f" horiz-adv-x="598" d="M61 858v127l136 10v158q0 154 70.5 242t219.5 88q47 0 89 -9.5t77 -23.5l-37 -129q-55 25 -112 25q-139 0 -139 -193v-158h210v-137h-210v-858h-168v858h-136z" /> +<glyph unicode="g" horiz-adv-x="1032" d="M92 -190q0 63 39 120.5t107 104.5v8q-37 23 -62.5 62.5t-25.5 99.5q0 63 34.5 110t73.5 74v8q-49 41 -89 109.5t-40 159.5q0 82 29.5 147.5t81 111.5t120 70.5t144.5 24.5q41 0 76.5 -7t64.5 -18h346v-129h-205q35 -35 58.5 -88t23.5 -116q0 -80 -28.5 -144.5 t-77.5 -108.5t-115.5 -69t-142.5 -25q-37 0 -76 9.5t-74 25.5q-27 -23 -45 -50.5t-18 -68.5q0 -47 37 -77.5t139 -30.5h192q174 0 261.5 -56.5t87.5 -181.5q0 -70 -35 -132t-100.5 -109t-158.5 -75t-210 -28q-92 0 -168 17.5t-130 52.5t-84 84t-30 115zM240 -168 q0 -80 76.5 -127t211.5 -47q72 0 130.5 17.5t99.5 45t63.5 64.5t22.5 76q0 70 -51.5 96.5t-149.5 26.5h-172q-29 0 -62.5 3t-66.5 13q-53 -39 -77.5 -82t-24.5 -86zM293 666q0 -55 16.5 -99.5t46 -75t67.5 -47t81 -16.5t81 16.5t67.5 47t46 74.5t16.5 100q0 111 -61.5 171 t-149.5 60t-149.5 -60.5t-61.5 -170.5z" /> +<glyph unicode="h" horiz-adv-x="1114" d="M168 0v1458h168v-397l-6 -205q72 68 149.5 116t182.5 48q158 0 230.5 -98.5t72.5 -290.5v-631h-168v608q0 141 -45 203.5t-144 62.5q-78 0 -137 -38.5t-135 -114.5v-721h-168z" /> +<glyph unicode="i" horiz-adv-x="503" d="M137 1309q0 49 34 78.5t83 29.5t83 -29.5t34 -78.5q0 -47 -34 -78t-83 -31t-83 31t-34 78zM168 0v995h168v-995h-168z" /> +<glyph unicode="j" horiz-adv-x="505" d="M-82 -418l35 127q18 -6 42.5 -11t51.5 -5q74 0 98.5 51t24.5 143v1108h168v-1108q0 -152 -61.5 -241.5t-210.5 -89.5q-47 0 -84 8t-64 18zM139 1309q0 49 34 78.5t83 29.5q47 0 81 -29.5t34 -78.5q0 -47 -34 -78t-81 -31q-49 0 -83 31t-34 78z" /> +<glyph unicode="k" horiz-adv-x="1013" d="M168 0v1458h166v-987h6l424 524h186l-334 -399l379 -596h-184l-291 479l-186 -217v-262h-166z" /> +<glyph unicode="l" horiz-adv-x="522" d="M168 201v1257h168v-1270q0 -41 14.5 -57t32.5 -16h15.5t21.5 4l22 -127q-16 -8 -38.5 -12.5t-57.5 -4.5q-96 0 -137 57.5t-41 168.5z" /> +<glyph unicode="m" horiz-adv-x="1697" d="M168 0v995h139l15 -143h6q66 72 142.5 120t166.5 48q115 0 179.5 -50t94.5 -141q78 86 157 138.5t171 52.5q154 0 228.5 -98.5t74.5 -290.5v-631h-168v608q0 141 -45 203.5t-139 62.5q-113 0 -250 -153v-721h-168v608q0 141 -45 203.5t-141 62.5q-113 0 -250 -153v-721 h-168z" /> +<glyph unicode="n" horiz-adv-x="1120" d="M168 0v995h139l15 -143h6q72 72 150.5 120t183.5 48q158 0 230.5 -98.5t72.5 -290.5v-631h-168v608q0 141 -45 203.5t-144 62.5q-78 0 -137 -38.5t-135 -114.5v-721h-168z" /> +<glyph unicode="o" horiz-adv-x="1110" d="M94 496q0 125 38 222t101.5 164.5t146.5 102.5t175 35t175 -35t146.5 -102.5t101.5 -164.5t38 -222q0 -123 -38 -220.5t-101.5 -164t-146.5 -101.5t-175 -35t-175 35t-146.5 101.5t-101.5 164t-38 220.5zM268 496q0 -86 20.5 -156t58.5 -120t91.5 -77.5t116.5 -27.5 t116.5 27.5t91.5 77.5t58.5 120t20.5 156t-20.5 156.5t-58.5 121.5t-91.5 79t-116.5 28t-116.5 -28t-91.5 -79t-58.5 -121.5t-20.5 -156.5z" /> +<glyph unicode="p" horiz-adv-x="1136" d="M168 -420v1415h139l15 -114h6q68 57 148.5 98t168.5 41q96 0 170 -36t123 -102.5t74.5 -159.5t25.5 -210q0 -127 -34.5 -226.5t-94 -169t-137.5 -105.5t-164 -36q-70 0 -138.5 31t-137.5 84l4 -174v-336h-168zM336 221q68 -57 131 -80.5t113 -23.5q61 0 113 27.5t90 77.5 t59.5 124t21.5 166q0 82 -14 149.5t-46 115.5t-82 75t-120 27q-63 0 -127.5 -35t-138.5 -101v-522z" /> +<glyph unicode="q" horiz-adv-x="1126" d="M96 496q0 121 36 218t95.5 164.5t137 104.5t163.5 37t151.5 -29.5t133.5 -89.5h4l17 94h135v-1415h-170v354l8 177q-59 -55 -136 -95.5t-163 -40.5q-188 0 -300 135.5t-112 385.5zM270 498q0 -180 72 -280.5t203 -100.5q70 0 131 33.5t123 103.5v520q-63 57 -122 81 t-120 24q-59 0 -111.5 -28t-91.5 -78t-61.5 -119.5t-22.5 -155.5z" /> +<glyph unicode="r" horiz-adv-x="710" d="M168 0v995h139l15 -180h6q51 94 123.5 149.5t158.5 55.5q59 0 107 -21l-33 -147q-25 8 -45.5 12t-50.5 4q-63 0 -132 -51t-120 -178v-639h-168z" /> +<glyph unicode="s" horiz-adv-x="858" d="M57 113l84 112q66 -53 134.5 -86t158.5 -33q98 0 147.5 45.5t49.5 110.5q0 39 -20.5 67.5t-52.5 50t-73 38t-82 33.5q-53 18 -106 41.5t-95 57.5t-69 79t-27 108q0 59 24 111.5t68 90.5t107.5 59.5t143.5 21.5q94 0 172.5 -33t136.5 -80l-80 -106q-51 39 -106.5 63.5 t-120.5 24.5q-94 0 -138.5 -43t-44.5 -101q0 -35 18.5 -59t49.5 -44.5t70.5 -36t82.5 -32.5q53 -20 107.5 -42.5t97.5 -56.5t71 -83t28 -119q0 -61 -24 -114.5t-70 -94t-114.5 -64.5t-156.5 -24q-106 0 -202.5 39t-168.5 99z" /> +<glyph unicode="t" horiz-adv-x="692" d="M49 858v127l156 10l20 279h142v-279h268v-137h-268v-553q0 -92 33.5 -142t119.5 -50q27 0 57.5 8t55.5 18l33 -127q-41 -14 -89.5 -25.5t-95.5 -11.5q-80 0 -134 25t-88 68t-48 104t-14 135v551h-148z" /> +<glyph unicode="u" horiz-adv-x="1114" d="M154 365v630h170v-608q0 -141 44 -203.5t142 -62.5q78 0 137.5 40t130.5 128v706h168v-995h-139l-14 156h-7q-70 -82 -146.5 -131.5t-180.5 -49.5q-160 0 -232.5 98.5t-72.5 291.5z" /> +<glyph unicode="v" horiz-adv-x="956" d="M25 995h174l188 -565q23 -74 46.5 -147.5t45.5 -145.5h8q23 72 45.5 145.5t45.5 147.5l188 565h166l-352 -995h-197z" /> +<glyph unicode="w" horiz-adv-x="1470" d="M49 995h172l148 -575q16 -72 30.5 -139.5t28.5 -137.5h8q16 70 32.5 138.5t35.5 138.5l153 575h164l156 -575q18 -72 35.5 -139.5t34.5 -137.5h8q16 70 30.5 137.5t30.5 139.5l146 575h159l-266 -995h-205l-143 535q-18 72 -33.5 141t-34.5 145h-8q-16 -76 -32.5 -146.5 t-36.5 -142.5l-140 -532h-196z" /> +<glyph unicode="x" horiz-adv-x="913" d="M29 0l325 520l-301 475h183l133 -219q23 -41 47 -83t51 -83h8q23 41 45.5 83t44.5 83l121 219h176l-301 -493l324 -502h-183l-145 231q-27 45 -53.5 90.5t-54.5 88.5h-9q-27 -43 -51 -87t-49 -92l-135 -231h-176z" /> +<glyph unicode="y" horiz-adv-x="956" d="M25 995h174l202 -551q23 -66 48.5 -138.5t48.5 -141.5h8q23 68 43 141.5t41 138.5l178 551h164l-375 -1077q-27 -74 -59.5 -137.5t-77.5 -109.5t-102.5 -72.5t-133.5 -26.5q-35 0 -63.5 5t-52.5 15l32 134q16 -4 37 -9.5t39 -5.5q86 0 140.5 60.5t84.5 152.5l23 74z" /> +<glyph unicode="z" horiz-adv-x="870" d="M63 0v90l525 768h-467v137h680v-90l-525 -768h541v-137h-754z" /> +<glyph unicode="{" horiz-adv-x="620" d="M70 516v107q51 0 85.5 14t54 35.5t28 50.5t8.5 57q0 98 -9.5 194.5t-9.5 203.5q0 78 14.5 130t44 83.5t75 45t104.5 13.5h94v-98h-57q-82 0 -109.5 -42t-27.5 -143q0 -90 6 -183t6 -187q0 -100 -29 -152.5t-94 -71.5v-8q66 -18 94.5 -71.5t28.5 -151.5q0 -104 -6 -190 t-6 -181q0 -100 27.5 -143t109.5 -43h57v-96h-94q-59 0 -104.5 13t-75 44t-44 83t-14.5 132q0 55 3 105.5t6.5 97.5t6.5 94t3 98q0 31 -8.5 58.5t-28 50t-54 37t-85.5 14.5z" /> +<glyph unicode="|" horiz-adv-x="493" d="M188 -512v2048h119v-2048h-119z" /> +<glyph unicode="}" horiz-adv-x="620" d="M63 -215h54q84 0 111.5 43t27.5 143q0 94 -5 180.5t-5 190.5q0 98 27.5 151.5t93.5 71.5v8q-66 18 -93.5 70.5t-27.5 153.5q0 94 5 187t5 183q0 100 -27.5 142.5t-111.5 42.5h-54v98h91q123 0 181 -58.5t58 -213.5q0 -106 -9 -202.5t-9 -195.5q0 -59 37 -107t139 -50 v-107q-51 0 -85 -14.5t-54.5 -37t-28.5 -50t-8 -58.5q0 -51 3 -98l6 -94t6 -97.5t3 -105.5q0 -80 -14 -132t-44 -83t-75 -44t-106 -13h-91v96z" /> +<glyph unicode="~" d="M74 641q55 98 122.5 141t133.5 43q61 0 109 -26.5t90 -59t81 -59.5t82 -27q45 0 84 30t74 95l94 -69q-55 -98 -122.5 -140.5t-133.5 -42.5q-61 0 -109.5 27t-90.5 59.5t-80.5 59t-81.5 26.5q-45 0 -84 -29.5t-74 -95.5z" /> +<glyph unicode="¡" horiz-adv-x="591" d="M174 893q0 55 36 91t87 36q49 0 85 -36t36 -91q0 -59 -36 -95t-85 -36q-51 0 -87 36t-36 95zM211 -377l4 193l23 774h116l23 -774l4 -193h-170z" /> +<glyph unicode="¢" d="M125 635q0 106 31.5 190t87 145.5t131.5 99.5t162 50v217h106v-211q90 -4 155.5 -38.5t112.5 -79.5l-82 -107q-41 37 -87 59.5t-99 26.5v-704q66 4 119 31.5t94 64.5l74 -107q-59 -53 -133 -87.5t-154 -41.5v-211h-106v213q-92 10 -168 48t-130.5 99.5t-84 147.5 t-29.5 195zM293 635q0 -137 63.5 -227.5t180.5 -116.5v686q-113 -27 -178.5 -117t-65.5 -225z" /> +<glyph unicode="£" d="M109 584v106l137 8h37q-20 66 -38 128.5t-18 127.5q0 86 28 156t78 119t119.5 75.5t155.5 26.5q111 0 187.5 -44t130.5 -109l-99 -97q-39 47 -88 78t-118 31q-111 0 -169.5 -66.5t-58.5 -173.5q0 -66 15.5 -126t33.5 -126h326v-114h-299q4 -29 7 -56.5t3 -58.5 q0 -109 -32.5 -180.5t-94.5 -134.5v-9h576v-145h-817v102q104 57 160.5 154.5t56.5 214.5q0 29 -4.5 56.5t-10.5 56.5h-204z" /> +<glyph unicode="¤" d="M53 303l131 133q-35 47 -54 106.5t-19 131.5t19.5 132t53.5 107l-131 136l90 92l140 -144q98 76 227 76q59 0 118.5 -19.5t106.5 -56.5l139 144l91 -92l-134 -136q35 -47 55.5 -107.5t20.5 -131.5q0 -72 -20.5 -131.5t-55.5 -106.5l134 -133l-91 -92l-139 141 q-47 -39 -106.5 -58.5t-118.5 -19.5q-131 0 -227 78l-140 -141zM266 674q0 -61 19.5 -111.5t52.5 -87.5t78 -56.5t94 -19.5t93 19.5t77 56.5t52.5 87t19.5 112q0 61 -19.5 111.5t-52.5 87t-77 56t-93 19.5t-94 -19.5t-78 -56t-52.5 -87t-19.5 -111.5z" /> +<glyph unicode="¥" d="M47 1307h176l160 -351q31 -68 60.5 -136t62.5 -140h8q35 72 64.5 140.5t60.5 135.5l160 351h172l-336 -656h291v-96h-334v-133h334v-98h-334v-324h-168v324h-332v98h332v133h-332v96h289z" /> +<glyph unicode="¦" horiz-adv-x="493" d="M188 438h119v-950h-119v950zM188 596v940h119v-940h-119z" /> +<glyph unicode="§" d="M92 702q0 90 49 156t127 109q-31 33 -48 73.5t-17 94.5q0 53 19.5 101t59.5 85t97 58.5t135 21.5q98 0 177 -35t138 -82l-81 -108q-49 41 -104.5 67.5t-123.5 26.5q-86 0 -124 -38t-38 -91q0 -55 42 -92t105.5 -68t136.5 -61.5t136.5 -74.5t105.5 -106.5t42 -156.5 q0 -98 -48.5 -159t-125.5 -106q29 -35 45 -74.5t16 -92.5q0 -61 -24.5 -112.5t-68.5 -88.5t-104.5 -58.5t-132.5 -21.5q-111 0 -200.5 39t-153.5 106l102 92q51 -49 110.5 -77.5t141.5 -28.5t128 41t46 100q0 57 -42 96t-104 70t-136 60.5t-136.5 72.5t-104.5 105.5 t-42 156.5zM240 713q0 -68 41 -112t103 -76.5t135 -62.5t136 -67q59 29 91 68t32 106q0 70 -41 115t-102.5 79t-134 62.5t-135.5 65.5q-59 -33 -92 -74t-33 -104z" /> +<glyph unicode="¨" horiz-adv-x="1110" d="M279 1305q0 43 27.5 71.5t72.5 28.5q43 0 71.5 -28.5t28.5 -71.5t-28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM631 1305q0 43 28.5 71.5t71.5 28.5q45 0 72.5 -28.5t27.5 -71.5t-27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> +<glyph unicode="©" horiz-adv-x="1523" d="M100 662q0 156 53.5 280.5t143.5 212.5t211 135t254 47t253 -47t211 -135t144 -213t53 -280q0 -158 -53 -284t-144 -215t-211 -137.5t-253 -48.5t-254 48.5t-211 137.5t-143.5 215t-53.5 284zM197 662q0 -135 45 -245t121.5 -188.5t179 -122t219.5 -43.5t219 43.5 t179 122t122 188t45 245.5q0 133 -45 242.5t-122 187t-179 119.5t-219 42t-219.5 -42t-179 -119.5t-121.5 -187t-45 -242.5zM406 662q0 88 31.5 159.5t83.5 122.5t121 78t142 27q86 0 146.5 -34t109.5 -83l-71 -80q-41 41 -83 62.5t-95 21.5q-113 0 -181.5 -77t-68.5 -197 q0 -135 66.5 -214t176.5 -79q66 0 115 25.5t94 64.5l62 -86q-57 -49 -121 -83t-156 -34q-78 0 -145.5 27.5t-118.5 80t-79.5 127.5t-28.5 171z" /> +<glyph unicode="ª" horiz-adv-x="706" d="M76 709q0 109 97 166t310 77q-2 66 -28.5 109t-98.5 43q-53 0 -109.5 -22.5t-96.5 -47.5l-48 86q51 33 122 60.5t151 27.5q123 0 179 -71.5t56 -202.5v-402h-102l-14 76h-9q-41 -37 -92 -64.5t-114 -27.5q-92 0 -147.5 53.5t-55.5 139.5zM201 719q0 -53 30.5 -77 t83.5 -24q80 0 168 82v172q-158 -16 -220 -56t-62 -97z" /> +<glyph unicode="«" horiz-adv-x="878" d="M92 453v127l279 317l73 -61l-241 -320l241 -323l-73 -58zM416 453v127l279 317l73 -61l-241 -320l241 -323l-73 -58z" /> +<glyph unicode="¬" d="M70 612v127h878v-526h-135v399h-743z" /> +<glyph unicode="­" horiz-adv-x="636" d="M84 449v129h471v-129h-471z" /> +<glyph unicode="®" horiz-adv-x="866" d="M47 1057q0 90 31 163.5t83 127t121.5 83t149.5 29.5t150.5 -29.5t123 -83t83 -127t30.5 -163.5t-30.5 -164t-83 -127t-123 -83t-150.5 -30t-149.5 30t-121.5 83t-83 127t-31 164zM129 1057q0 -74 23.5 -134.5t63.5 -103.5t95 -66.5t121 -23.5q63 0 119.5 23.5t97.5 66.5 t64.5 103.5t23.5 134.5q0 72 -23.5 132t-64.5 104t-97 68.5t-120 24.5q-66 0 -121 -24.5t-95 -68.5t-63.5 -104.5t-23.5 -131.5zM285 854v416h155q66 0 113 -30t47 -103q0 -37 -20.5 -69t-55.5 -44l94 -170h-94l-71 143h-84v-143h-84zM369 1063h53q88 0 88 70q0 31 -18.5 49 t-65.5 18h-57v-137z" /> +<glyph unicode="¯" horiz-adv-x="1110" d="M303 1231v117h504v-117h-504z" /> +<glyph unicode="°" horiz-adv-x="677" d="M84 1139q0 61 20.5 109t56.5 83t82 53.5t97 18.5t97 -18.5t82 -53.5t56.5 -83t20.5 -109q0 -59 -20.5 -107.5t-56.5 -82.5t-82 -52t-97 -18t-97 18t-82 52t-56.5 82t-20.5 108zM186 1139q0 -72 43 -119t111 -47t111 47t43 119q0 76 -43 123t-111 47t-111 -47.5 t-43 -122.5z" /> +<glyph unicode="±" d="M70 0v127h878v-127h-878zM70 623v127h372v389h133v-389h373v-127h-373v-363h-133v363h-372z" /> +<glyph unicode="²" horiz-adv-x="751" d="M82 1569q47 70 115.5 112.5t150.5 42.5q121 0 193.5 -65.5t72.5 -192.5q0 -57 -22.5 -110.5t-62.5 -107.5t-94 -111.5t-118 -122.5h338v-113h-549v76q92 84 164 150.5t119 121.5t71.5 103.5t24.5 93.5q0 78 -41 123t-112 45q-51 0 -94 -34t-78 -83z" /> +<glyph unicode="³" horiz-adv-x="751" d="M72 1032l88 68q37 -55 88 -87t114 -32q66 0 113 37t47 106q0 70 -65.5 106t-182.5 36v84q104 0 161 40.5t57 102.5q0 57 -40 92t-106 35q-45 0 -86 -27.5t-76 -68.5l-80 69q53 59 116 95t147 36q51 0 97 -14t81 -42t55.5 -68t20.5 -91q0 -72 -39 -120t-101 -76 q68 -16 120 -66.5t52 -130.5q0 -55 -22.5 -99t-61.5 -76t-91 -48.5t-109 -16.5q-98 0 -174 44t-123 112z" /> +<glyph unicode="´" horiz-adv-x="1110" d="M422 1174l184 288h176l-231 -288h-129z" /> +<glyph unicode="µ" horiz-adv-x="1126" d="M168 -410v1405h168v-608q0 -141 45 -203.5t143 -62.5q78 0 136.5 40t130.5 128v706h167v-995h-139l-14 156h-4q-59 -80 -130 -126t-157 -46q-59 0 -106.5 17t-81.5 71l10 -185v-297h-168z" /> +<glyph unicode="¶" horiz-adv-x="1146" d="M84 907q0 121 37 204t103.5 135t156.5 74.5t197 22.5h90v-880h-68q-111 0 -206 25.5t-163.5 80t-107.5 138.5t-39 200zM778 -164v1507h172v-1507h-172z" /> +<glyph unicode="·" horiz-adv-x="509" d="M133 657q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91t-85 -36q-51 0 -87 36t-36 91z" /> +<glyph unicode="¸" horiz-adv-x="1110" d="M393 -352q82 10 132 33.5t50 64.5t-33.5 62.5t-95.5 37.5l82 160h109l-52 -108q49 -16 85 -49t36 -97q0 -45 -24.5 -77.5t-65.5 -55t-95 -36t-112 -19.5z" /> +<glyph unicode="¹" horiz-adv-x="751" d="M178 1532v86q68 12 113 31.5t86 50.5h106v-799h-131v631h-174z" /> +<glyph unicode="º" horiz-adv-x="747" d="M61 862q0 82 25 146.5t68 108.5t99 67.5t120 23.5q63 0 119.5 -23.5t99.5 -67.5t67.5 -108.5t24.5 -146.5t-24.5 -146.5t-67.5 -108.5t-99.5 -67.5t-119.5 -23.5t-119.5 23.5t-99.5 67.5t-68 108.5t-25 146.5zM190 862q0 -109 48.5 -175t134.5 -66t133 66.5t47 174.5 q0 111 -47 176.5t-133 65.5t-134.5 -65.5t-48.5 -176.5z" /> +<glyph unicode="»" horiz-adv-x="878" d="M111 193l241 323l-241 320l71 61l281 -317v-127l-281 -318zM435 193l241 323l-241 320l71 61l281 -317v-127l-281 -318z" /> +<glyph unicode="¼" horiz-adv-x="1599" d="M131 1176v86q68 12 113 31.5t86 50.5h106v-799h-131v631h-174zM369 -25l741 1393h115l-741 -1393h-115zM932 213v68l336 518h147v-492h119v-94h-119v-213h-118v213h-365zM1069 307h228v144l8 223h-8l-103 -166z" /> +<glyph unicode="½" horiz-adv-x="1654" d="M131 1176v86q68 12 113 31.5t86 50.5h106v-799h-131v631h-174zM326 -25l741 1393h115l-741 -1393h-115zM985 668q47 70 115.5 112.5t150.5 42.5q121 0 193.5 -65.5t72.5 -192.5q0 -57 -22.5 -110.5t-62.5 -107.5t-94 -111.5t-118 -122.5h338v-113h-549v76 q92 84 164 150.5t119 121.5t71.5 103.5t24.5 93.5q0 78 -41 123t-112 45q-51 0 -94 -34t-78 -83z" /> +<glyph unicode="¾" horiz-adv-x="1630" d="M72 676l88 68q37 -55 88 -87t114 -32q66 0 113 37t47 106q0 70 -65.5 106t-182.5 36v84q104 0 161 40.5t57 102.5q0 57 -40 92t-106 35q-45 0 -86 -27.5t-76 -68.5l-80 69q53 59 116 95t147 36q51 0 97 -14t81 -42t55.5 -68t20.5 -91q0 -72 -39 -120t-101 -76 q68 -16 120 -66.5t52 -130.5q0 -55 -22.5 -99t-61.5 -76t-91 -48.5t-109 -16.5q-98 0 -174 44t-123 112zM444 -25l741 1393h115l-741 -1393h-115zM963 213v68l336 518h147v-492h119v-94h-119v-213h-118v213h-365zM1100 307h228v144l8 223h-8l-103 -166z" /> +<glyph unicode="¿" horiz-adv-x="870" d="M98 -74q0 68 24.5 123t60.5 104.5t76 97.5t73 99t51 109.5t10 130.5h150q10 -80 -6.5 -144.5t-47 -119t-70.5 -101.5t-75 -93t-58.5 -94t-23.5 -101q0 -82 49 -139.5t150 -57.5q68 0 127 30.5t106 86.5l99 -88q-66 -72 -150 -121t-194 -49q-160 0 -255.5 87t-95.5 240z M342 893q0 55 36 91t87 36q49 0 85 -36t36 -91q0 -59 -36 -95t-85 -36q-51 0 -87 36t-36 95z" /> +<glyph unicode="À" horiz-adv-x="1101" d="M0 0l455 1343h192l455 -1343h-180l-129 410h-490l-129 -410h-174zM281 1675h192l180 -229h-141zM346 547h404l-64 205q-35 113 -67.5 224t-65.5 228h-8q-33 -117 -66 -228.5t-67 -223.5z" /> +<glyph unicode="Á" horiz-adv-x="1101" d="M0 0l455 1343h192l455 -1343h-180l-129 410h-490l-129 -410h-174zM346 547h404l-64 205q-35 113 -67.5 224t-65.5 228h-8q-33 -117 -66 -228.5t-67 -223.5zM445 1446l180 229h192l-231 -229h-141z" /> +<glyph unicode="Â" horiz-adv-x="1101" d="M0 0l455 1343h192l455 -1343h-180l-129 410h-490l-129 -410h-174zM270 1446l197 229h164l197 -229h-138l-137 139h-8l-137 -139h-138zM346 547h404l-64 205q-35 113 -67.5 224t-65.5 228h-8q-33 -117 -66 -228.5t-67 -223.5z" /> +<glyph unicode="Ã" horiz-adv-x="1101" d="M0 0l455 1343h192l455 -1343h-180l-129 410h-490l-129 -410h-174zM252 1456q10 96 55 158.5t119 62.5q41 0 74 -16t60.5 -36.5t54 -37t55.5 -16.5t51.5 27.5t30.5 78.5h94q-10 -94 -55 -157.5t-119 -63.5q-41 0 -74 16.5t-60.5 37t-54 37t-55.5 16.5t-51.5 -27t-30.5 -80 h-94zM346 547h404l-64 205q-35 113 -67.5 224t-65.5 228h-8q-33 -117 -66 -228.5t-67 -223.5z" /> +<glyph unicode="Ä" horiz-adv-x="1101" d="M0 0l455 1343h192l455 -1343h-180l-129 410h-490l-129 -410h-174zM273 1565q0 45 27.5 72.5t72.5 27.5q43 0 71.5 -27.5t28.5 -72.5q0 -43 -28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM346 547h404l-64 205q-35 113 -67.5 224t-65.5 228h-8q-33 -117 -66 -228.5 t-67 -223.5zM625 1565q0 45 28.5 72.5t71.5 27.5q45 0 72.5 -27.5t27.5 -72.5q0 -43 -27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> +<glyph unicode="Å" horiz-adv-x="1101" d="M0 0l455 1343h192l455 -1343h-180l-129 410h-490l-129 -410h-174zM346 547h404l-64 205q-35 113 -67.5 224t-65.5 228h-8q-33 -117 -66 -228.5t-67 -223.5zM359 1612q0 82 53 131t137 49q82 0 136 -49t54 -131q0 -84 -54 -132t-136 -48q-84 0 -137 48t-53 132zM451 1612 q0 -51 28.5 -79t69.5 -28q39 0 67.5 28t28.5 79q0 47 -28.5 75.5t-67.5 28.5q-41 0 -69.5 -28.5t-28.5 -75.5z" /> +<glyph unicode="Æ" horiz-adv-x="1673" d="M12 0l705 1343h842v-143h-572v-422h477v-145h-477v-488h592v-145h-762v391h-426l-203 -391h-176zM463 528h354v680h-8q-53 -111 -110.5 -219t-110.5 -219z" /> +<glyph unicode="Ç" horiz-adv-x="1159" d="M100 672q0 162 45 291t126 219t190.5 138t238.5 48q121 0 214.5 -50t152.5 -116l-96 -108q-53 57 -119 91t-150 34q-96 0 -174.5 -38t-134 -109t-86.5 -171t-31 -225q0 -127 30 -228.5t84 -173t131 -110.5t173 -39t169 39t138 110l97 -104q-78 -92 -178.5 -143.5 t-229.5 -51.5q-127 0 -234.5 47.5t-186.5 136.5t-124 219t-45 294zM524 -352q82 10 132 33.5t50 64.5t-33.5 62.5t-95.5 37.5l82 160h109l-52 -108q49 -16 85 -49t36 -97q0 -45 -24.5 -77.5t-65.5 -55t-95 -36t-112 -19.5z" /> +<glyph unicode="È" horiz-adv-x="1069" d="M178 0v1343h774v-143h-602v-422h508v-145h-508v-488h623v-145h-795zM310 1675h192l180 -229h-141z" /> +<glyph unicode="É" horiz-adv-x="1069" d="M178 0v1343h774v-143h-602v-422h508v-145h-508v-488h623v-145h-795zM474 1446l180 229h192l-231 -229h-141z" /> +<glyph unicode="Ê" horiz-adv-x="1069" d="M178 0v1343h774v-143h-602v-422h508v-145h-508v-488h623v-145h-795zM299 1446l197 229h164l197 -229h-138l-137 139h-8l-137 -139h-138z" /> +<glyph unicode="Ë" horiz-adv-x="1069" d="M178 0v1343h774v-143h-602v-422h508v-145h-508v-488h623v-145h-795zM302 1565q0 45 27.5 72.5t72.5 27.5q43 0 71.5 -27.5t28.5 -72.5q0 -43 -28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM654 1565q0 45 28.5 72.5t71.5 27.5q45 0 72.5 -27.5t27.5 -72.5 q0 -43 -27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> +<glyph unicode="Ì" horiz-adv-x="528" d="M-4 1675h192l180 -229h-141zM178 0v1343h172v-1343h-172z" /> +<glyph unicode="Í" horiz-adv-x="528" d="M160 1446l180 229h192l-231 -229h-141zM178 0v1343h172v-1343h-172z" /> +<glyph unicode="Î" horiz-adv-x="528" d="M-15 1446l197 229h164l197 -229h-138l-137 139h-8l-137 -139h-138zM178 0v1343h172v-1343h-172z" /> +<glyph unicode="Ï" horiz-adv-x="528" d="M-12 1565q0 45 27.5 72.5t72.5 27.5q43 0 71.5 -27.5t28.5 -72.5q0 -43 -28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM178 0v1343h172v-1343h-172zM340 1565q0 45 28.5 72.5t71.5 27.5q45 0 72.5 -27.5t27.5 -72.5q0 -43 -27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z " /> +<glyph unicode="Ð" horiz-adv-x="1292" d="M61 657v88l158 9v589h336q311 0 473 -172t162 -493q0 -160 -41 -286t-121 -213t-196.5 -133t-268.5 -46h-344v657h-158zM389 139h154q236 0 353.5 141.5t117.5 397.5t-118 391t-353 135h-154v-450h311v-97h-311v-518z" /> +<glyph unicode="Ñ" horiz-adv-x="1314" d="M178 0v1343h176l488 -843l145 -279h8q-6 102 -14 212t-8 216v694h162v-1343h-177l-485 846l-145 276h-9q6 -102 13.5 -207.5t7.5 -212.5v-702h-162zM367 1456q10 96 55 158.5t119 62.5q41 0 74 -16t60.5 -36.5t54 -37t55.5 -16.5t51.5 27.5t30.5 78.5h94 q-10 -94 -55 -157.5t-119 -63.5q-41 0 -74 16.5t-60.5 37t-54 37t-55.5 16.5t-51.5 -27t-30.5 -80h-94z" /> +<glyph unicode="Ò" horiz-adv-x="1349" d="M100 678q0 162 42 290t119 217t182.5 136t232.5 47q125 0 230.5 -48t182 -137t118.5 -217t42 -288q0 -162 -42 -292t-118.5 -221t-182 -140.5t-230.5 -49.5q-127 0 -232.5 49.5t-182.5 140.5t-119 221t-42 292zM276 678q0 -127 29 -228.5t81 -174t126 -111.5t164 -39 t162.5 39t125 111.5t81 174t28.5 228.5q0 125 -28.5 225.5t-81 170t-125 107.5t-162.5 38t-164 -38t-126 -107.5t-81 -170t-29 -225.5zM406 1675h192l180 -229h-141z" /> +<glyph unicode="Ó" horiz-adv-x="1349" d="M100 678q0 162 42 290t119 217t182.5 136t232.5 47q125 0 230.5 -48t182 -137t118.5 -217t42 -288q0 -162 -42 -292t-118.5 -221t-182 -140.5t-230.5 -49.5q-127 0 -232.5 49.5t-182.5 140.5t-119 221t-42 292zM276 678q0 -127 29 -228.5t81 -174t126 -111.5t164 -39 t162.5 39t125 111.5t81 174t28.5 228.5q0 125 -28.5 225.5t-81 170t-125 107.5t-162.5 38t-164 -38t-126 -107.5t-81 -170t-29 -225.5zM570 1446l180 229h192l-231 -229h-141z" /> +<glyph unicode="Ô" horiz-adv-x="1349" d="M100 678q0 162 42 290t119 217t182.5 136t232.5 47q125 0 230.5 -48t182 -137t118.5 -217t42 -288q0 -162 -42 -292t-118.5 -221t-182 -140.5t-230.5 -49.5q-127 0 -232.5 49.5t-182.5 140.5t-119 221t-42 292zM276 678q0 -127 29 -228.5t81 -174t126 -111.5t164 -39 t162.5 39t125 111.5t81 174t28.5 228.5q0 125 -28.5 225.5t-81 170t-125 107.5t-162.5 38t-164 -38t-126 -107.5t-81 -170t-29 -225.5zM395 1446l197 229h164l197 -229h-138l-137 139h-8l-137 -139h-138z" /> +<glyph unicode="Õ" horiz-adv-x="1349" d="M100 678q0 162 42 290t119 217t182.5 136t232.5 47q125 0 230.5 -48t182 -137t118.5 -217t42 -288q0 -162 -42 -292t-118.5 -221t-182 -140.5t-230.5 -49.5q-127 0 -232.5 49.5t-182.5 140.5t-119 221t-42 292zM276 678q0 -127 29 -228.5t81 -174t126 -111.5t164 -39 t162.5 39t125 111.5t81 174t28.5 228.5q0 125 -28.5 225.5t-81 170t-125 107.5t-162.5 38t-164 -38t-126 -107.5t-81 -170t-29 -225.5zM377 1456q10 96 55 158.5t119 62.5q41 0 74 -16t60.5 -36.5t54 -37t55.5 -16.5t51.5 27.5t30.5 78.5h94q-10 -94 -55 -157.5t-119 -63.5 q-41 0 -74 16.5t-60.5 37t-54 37t-55.5 16.5t-51.5 -27t-30.5 -80h-94z" /> +<glyph unicode="Ö" horiz-adv-x="1349" d="M100 678q0 162 42 290t119 217t182.5 136t232.5 47q125 0 230.5 -48t182 -137t118.5 -217t42 -288q0 -162 -42 -292t-118.5 -221t-182 -140.5t-230.5 -49.5q-127 0 -232.5 49.5t-182.5 140.5t-119 221t-42 292zM276 678q0 -127 29 -228.5t81 -174t126 -111.5t164 -39 t162.5 39t125 111.5t81 174t28.5 228.5q0 125 -28.5 225.5t-81 170t-125 107.5t-162.5 38t-164 -38t-126 -107.5t-81 -170t-29 -225.5zM398 1565q0 45 27.5 72.5t72.5 27.5q43 0 71.5 -27.5t28.5 -72.5q0 -43 -28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM750 1565 q0 45 28.5 72.5t71.5 27.5q45 0 72.5 -27.5t27.5 -72.5q0 -43 -27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> +<glyph unicode="×" d="M102 350l318 326l-318 323l91 93l317 -326l315 326l90 -93l-317 -323l317 -326l-90 -92l-315 328l-317 -328z" /> +<glyph unicode="Ø" horiz-adv-x="1349" d="M96 12l142 185q-66 90 -102 210.5t-36 270.5q0 162 42 290t119 217t182.5 136t232.5 47q106 0 198.5 -34t163.5 -99l129 170l97 -72l-146 -188q63 -88 97 -205t34 -262q0 -162 -42 -292t-118.5 -221t-182 -140.5t-230.5 -49.5q-209 0 -357 129l-126 -165zM276 678 q0 -203 72 -340l590 768q-102 113 -262 113q-90 0 -164 -38t-126 -107.5t-81 -170t-29 -225.5zM420 233q102 -109 256 -108q90 0 162.5 39t125 111.5t81 174t28.5 228.5q0 193 -65 323z" /> +<glyph unicode="Ù" horiz-adv-x="1310" d="M172 555v788h172v-792q0 -121 24.5 -203t66.5 -131t98.5 -70.5t121.5 -21.5q68 0 126.5 21.5t101.5 70.5t67.5 131t24.5 203v792h164v-788q0 -162 -37 -272.5t-101.5 -179t-153.5 -98.5t-192 -30q-102 0 -191 30t-153.5 98.5t-101.5 179t-37 272.5zM387 1675h192 l180 -229h-141z" /> +<glyph unicode="Ú" horiz-adv-x="1310" d="M172 555v788h172v-792q0 -121 24.5 -203t66.5 -131t98.5 -70.5t121.5 -21.5q68 0 126.5 21.5t101.5 70.5t67.5 131t24.5 203v792h164v-788q0 -162 -37 -272.5t-101.5 -179t-153.5 -98.5t-192 -30q-102 0 -191 30t-153.5 98.5t-101.5 179t-37 272.5zM551 1446l180 229h192 l-231 -229h-141z" /> +<glyph unicode="Û" horiz-adv-x="1310" d="M172 555v788h172v-792q0 -121 24.5 -203t66.5 -131t98.5 -70.5t121.5 -21.5q68 0 126.5 21.5t101.5 70.5t67.5 131t24.5 203v792h164v-788q0 -162 -37 -272.5t-101.5 -179t-153.5 -98.5t-192 -30q-102 0 -191 30t-153.5 98.5t-101.5 179t-37 272.5zM376 1446l197 229h164 l197 -229h-138l-137 139h-8l-137 -139h-138z" /> +<glyph unicode="Ü" horiz-adv-x="1310" d="M172 555v788h172v-792q0 -121 24.5 -203t66.5 -131t98.5 -70.5t121.5 -21.5q68 0 126.5 21.5t101.5 70.5t67.5 131t24.5 203v792h164v-788q0 -162 -37 -272.5t-101.5 -179t-153.5 -98.5t-192 -30q-102 0 -191 30t-153.5 98.5t-101.5 179t-37 272.5zM379 1565 q0 45 27.5 72.5t72.5 27.5q43 0 71.5 -27.5t28.5 -72.5q0 -43 -28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM731 1565q0 45 28.5 72.5t71.5 27.5q45 0 72.5 -27.5t27.5 -72.5q0 -43 -27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> +<glyph unicode="Ý" horiz-adv-x="964" d="M-8 1343h184l172 -378q33 -74 64.5 -145.5t66.5 -147.5h8q35 76 69 147.5t65 145.5l174 378h176l-404 -823v-520h-170v520zM377 1446l180 229h192l-231 -229h-141z" /> +<glyph unicode="Þ" horiz-adv-x="1193" d="M182 0v1343h170v-225h242q111 0 203 -20.5t156.5 -67.5t100.5 -121.5t36 -185.5q0 -106 -36 -185t-101.5 -130.5t-156.5 -76t-202 -24.5h-242v-307h-170zM352 446h221q176 0 261.5 66t85.5 211t-86 200.5t-261 55.5h-221v-533z" /> +<glyph unicode="ß" horiz-adv-x="1179" d="M168 0v1055q0 193 104.5 308.5t296.5 115.5q80 0 142.5 -23.5t105.5 -64.5t64.5 -95.5t21.5 -115.5q0 -78 -28.5 -132.5t-64.5 -99.5t-64.5 -87t-28.5 -95q0 -49 29.5 -82t74.5 -58.5t97.5 -52t97.5 -63.5t74.5 -92.5t29.5 -136.5q0 -66 -22.5 -121.5t-65.5 -96 t-103.5 -64.5t-135.5 -24q-86 0 -156 27t-133 74l67 119q53 -45 105.5 -67t111.5 -22q86 0 129.5 49.5t43.5 114.5q0 59 -30 98.5t-75 68t-97 54t-97.5 58.5t-75 79t-29.5 117q0 70 27.5 119t61.5 94.5t62.5 92.5t28.5 112q0 78 -42 128t-128 50q-111 0 -171 -78.5 t-60 -238.5v-1024h-168z" /> +<glyph unicode="à" horiz-adv-x="1048" d="M119 258q0 164 146.5 251t465.5 122q0 47 -9 92t-32.5 80t-62.5 56.5t-101 21.5q-88 0 -162.5 -33t-134.5 -74l-67 117q70 45 170 87t221 42q182 0 264 -111.5t82 -298.5v-610h-139l-15 119h-4q-72 -59 -154.5 -101.5t-174.5 -42.5q-127 0 -210 74t-83 209zM285 270 q0 -86 50 -122.5t124 -36.5q72 0 136 33.5t136 99.5v276q-125 -16 -211 -38.5t-138 -53.5t-74.5 -71t-22.5 -87zM324 1462h176l184 -288h-129z" /> +<glyph unicode="á" horiz-adv-x="1048" d="M119 258q0 164 146.5 251t465.5 122q0 47 -9 92t-32.5 80t-62.5 56.5t-101 21.5q-88 0 -162.5 -33t-134.5 -74l-67 117q70 45 170 87t221 42q182 0 264 -111.5t82 -298.5v-610h-139l-15 119h-4q-72 -59 -154.5 -101.5t-174.5 -42.5q-127 0 -210 74t-83 209zM285 270 q0 -86 50 -122.5t124 -36.5q72 0 136 33.5t136 99.5v276q-125 -16 -211 -38.5t-138 -53.5t-74.5 -71t-22.5 -87zM418 1174l184 288h176l-231 -288h-129z" /> +<glyph unicode="â" horiz-adv-x="1048" d="M119 258q0 164 146.5 251t465.5 122q0 47 -9 92t-32.5 80t-62.5 56.5t-101 21.5q-88 0 -162.5 -33t-134.5 -74l-67 117q70 45 170 87t221 42q182 0 264 -111.5t82 -298.5v-610h-139l-15 119h-4q-72 -59 -154.5 -101.5t-174.5 -42.5q-127 0 -210 74t-83 209zM285 270 q0 -86 50 -122.5t124 -36.5q72 0 136 33.5t136 99.5v276q-125 -16 -211 -38.5t-138 -53.5t-74.5 -71t-22.5 -87zM287 1174l194 288h140l194 -288h-123l-137 186h-8l-137 -186h-123z" /> +<glyph unicode="ã" horiz-adv-x="1048" d="M119 258q0 164 146.5 251t465.5 122q0 47 -9 92t-32.5 80t-62.5 56.5t-101 21.5q-88 0 -162.5 -33t-134.5 -74l-67 117q70 45 170 87t221 42q182 0 264 -111.5t82 -298.5v-610h-139l-15 119h-4q-72 -59 -154.5 -101.5t-174.5 -42.5q-127 0 -210 74t-83 209zM266 1186 q8 92 49 154.5t117 62.5q39 0 72 -16.5t60.5 -36t52 -36t49.5 -16.5q57 0 75 105h95q-8 -92 -49 -154.5t-117 -62.5q-39 0 -71 16.5t-59.5 35.5t-52 35.5t-51.5 16.5q-57 0 -75 -104h-95zM285 270q0 -86 50 -122.5t124 -36.5q72 0 136 33.5t136 99.5v276 q-125 -16 -211 -38.5t-138 -53.5t-74.5 -71t-22.5 -87z" /> +<glyph unicode="ä" horiz-adv-x="1048" d="M119 258q0 164 146.5 251t465.5 122q0 47 -9 92t-32.5 80t-62.5 56.5t-101 21.5q-88 0 -162.5 -33t-134.5 -74l-67 117q70 45 170 87t221 42q182 0 264 -111.5t82 -298.5v-610h-139l-15 119h-4q-72 -59 -154.5 -101.5t-174.5 -42.5q-127 0 -210 74t-83 209zM275 1305 q0 43 27.5 71.5t72.5 28.5q43 0 71.5 -28.5t28.5 -71.5t-28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM285 270q0 -86 50 -122.5t124 -36.5q72 0 136 33.5t136 99.5v276q-125 -16 -211 -38.5t-138 -53.5t-74.5 -71t-22.5 -87zM627 1305q0 43 28.5 71.5t71.5 28.5 q45 0 72.5 -28.5t27.5 -71.5t-27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> +<glyph unicode="å" horiz-adv-x="1048" d="M119 258q0 164 146.5 251t465.5 122q0 47 -9 92t-32.5 80t-62.5 56.5t-101 21.5q-88 0 -162.5 -33t-134.5 -74l-67 117q70 45 170 87t221 42q182 0 264 -111.5t82 -298.5v-610h-139l-15 119h-4q-72 -59 -154.5 -101.5t-174.5 -42.5q-127 0 -210 74t-83 209zM285 270 q0 -86 50 -122.5t124 -36.5q72 0 136 33.5t136 99.5v276q-125 -16 -211 -38.5t-138 -53.5t-74.5 -71t-22.5 -87zM361 1300q0 86 53 137.5t137 51.5t137 -51.5t53 -137.5t-53 -138t-137 -52t-137 52t-53 138zM453 1300q0 -53 28.5 -83.5t69.5 -30.5t69.5 30.5t28.5 83.5 q0 51 -28.5 82t-69.5 31t-69.5 -30.5t-28.5 -82.5z" /> +<glyph unicode="æ" horiz-adv-x="1607" d="M119 258q0 164 145.5 251t456.5 122q0 47 -8 92t-32 80t-62.5 56.5t-100.5 21.5q-82 0 -155.5 -33t-133.5 -74l-67 117q70 45 168 87t209 42t182.5 -56.5t101.5 -154.5q59 98 142.5 154.5t185.5 56.5q92 0 162.5 -33t119 -94.5t73 -148.5t24.5 -193q0 -57 -6 -94h-645 q2 -78 27.5 -141.5t66.5 -108.5t96 -69.5t119 -24.5q72 0 129 23.5t113 58.5l61 -117q-66 -41 -143.5 -72t-180.5 -31q-125 0 -209 56.5t-141 130.5q-102 -92 -205.5 -139.5t-199.5 -47.5q-127 0 -210 74t-83 209zM285 270q0 -86 50 -122.5t124 -36.5q70 0 151.5 39.5 t149.5 113.5q-16 39 -26.5 93.5t-12.5 111.5v51q-119 -16 -202 -38.5t-135 -53.5t-75.5 -71t-23.5 -87zM879 569h503q0 154 -60 236t-175 82q-104 0 -179 -85t-89 -233z" /> +<glyph unicode="ç" horiz-adv-x="933" d="M94 496q0 125 39 222t104.5 164.5t152.5 102.5t183 35q98 0 169 -36t122 -83l-84 -108q-45 39 -93 63.5t-107 24.5q-68 0 -125.5 -28t-98.5 -79t-64.5 -121.5t-23.5 -156.5t22.5 -156t62.5 -120t97.5 -77.5t124.5 -27.5q72 0 130.5 29.5t103.5 70.5l76 -111 q-68 -59 -151 -94t-173 -35q-98 0 -184 35t-148.5 101.5t-98.5 164t-36 220.5zM383 -352q82 10 132 33.5t50 64.5t-33.5 62.5t-95.5 37.5l82 160h109l-52 -108q49 -16 85 -49t36 -97q0 -45 -24.5 -77.5t-65.5 -55t-95 -36t-112 -19.5z" /> +<glyph unicode="è" horiz-adv-x="1015" d="M94 496q0 123 38 220t100.5 164.5t142.5 103.5t166 36q94 0 168.5 -33t125 -94.5t77 -147.5t26.5 -192q0 -55 -6 -92h-672q10 -162 99.5 -256t232.5 -94q72 0 132 21.5t116 55.5l59 -110q-66 -41 -145.5 -72t-182.5 -31q-100 0 -187 36t-151.5 102.5t-101.5 163 t-37 219.5zM258 571h533q0 154 -64.5 235t-181.5 81q-53 0 -101.5 -21.5t-87.5 -61.5t-64.5 -98.5t-33.5 -134.5zM316 1462h176l184 -288h-129z" /> +<glyph unicode="é" horiz-adv-x="1015" d="M94 496q0 123 38 220t100.5 164.5t142.5 103.5t166 36q94 0 168.5 -33t125 -94.5t77 -147.5t26.5 -192q0 -55 -6 -92h-672q10 -162 99.5 -256t232.5 -94q72 0 132 21.5t116 55.5l59 -110q-66 -41 -145.5 -72t-182.5 -31q-100 0 -187 36t-151.5 102.5t-101.5 163 t-37 219.5zM258 571h533q0 154 -64.5 235t-181.5 81q-53 0 -101.5 -21.5t-87.5 -61.5t-64.5 -98.5t-33.5 -134.5zM410 1174l184 288h176l-231 -288h-129z" /> +<glyph unicode="ê" horiz-adv-x="1015" d="M94 496q0 123 38 220t100.5 164.5t142.5 103.5t166 36q94 0 168.5 -33t125 -94.5t77 -147.5t26.5 -192q0 -55 -6 -92h-672q10 -162 99.5 -256t232.5 -94q72 0 132 21.5t116 55.5l59 -110q-66 -41 -145.5 -72t-182.5 -31q-100 0 -187 36t-151.5 102.5t-101.5 163 t-37 219.5zM258 571h533q0 154 -64.5 235t-181.5 81q-53 0 -101.5 -21.5t-87.5 -61.5t-64.5 -98.5t-33.5 -134.5zM279 1174l194 288h140l194 -288h-123l-137 186h-8l-137 -186h-123z" /> +<glyph unicode="ë" horiz-adv-x="1015" d="M94 496q0 123 38 220t100.5 164.5t142.5 103.5t166 36q94 0 168.5 -33t125 -94.5t77 -147.5t26.5 -192q0 -55 -6 -92h-672q10 -162 99.5 -256t232.5 -94q72 0 132 21.5t116 55.5l59 -110q-66 -41 -145.5 -72t-182.5 -31q-100 0 -187 36t-151.5 102.5t-101.5 163 t-37 219.5zM258 571h533q0 154 -64.5 235t-181.5 81q-53 0 -101.5 -21.5t-87.5 -61.5t-64.5 -98.5t-33.5 -134.5zM267 1305q0 43 27.5 71.5t72.5 28.5q43 0 71.5 -28.5t28.5 -71.5t-28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM619 1305q0 43 28.5 71.5t71.5 28.5 q45 0 72.5 -28.5t27.5 -71.5t-27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> +<glyph unicode="ì" horiz-adv-x="503" d="M25 1462h176l184 -288h-129zM168 0v995h168v-995h-168z" /> +<glyph unicode="í" horiz-adv-x="503" d="M119 1174l184 288h176l-231 -288h-129zM168 0v995h168v-995h-168z" /> +<glyph unicode="î" horiz-adv-x="503" d="M-12 1174l194 288h140l194 -288h-123l-137 186h-8l-137 -186h-123zM168 0v995h168v-995h-168z" /> +<glyph unicode="ï" horiz-adv-x="503" d="M-24 1305q0 43 27.5 71.5t72.5 28.5q43 0 71.5 -28.5t28.5 -71.5t-28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM168 0v995h168v-995h-168zM328 1305q0 43 28.5 71.5t71.5 28.5q45 0 72.5 -28.5t27.5 -71.5t-27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> +<glyph unicode="ð" horiz-adv-x="1116" d="M109 455q0 104 32.5 189t89 145.5t133 93t166.5 32.5q78 0 150 -32.5t125 -102.5q-29 127 -85 221.5t-134 172.5l-289 -150l-49 84l260 133q-106 82 -229 148l77 106q74 -41 145.5 -86t137.5 -100l291 149l49 -84l-264 -135q123 -125 200.5 -297t77.5 -416 q0 -123 -31.5 -224t-90 -174t-139.5 -113t-181 -40q-86 0 -166 33t-141.5 95.5t-98 151.5t-36.5 200zM268 455q0 -78 22.5 -140.5t62.5 -106.5t91.5 -68.5t110.5 -24.5q70 0 121 29.5t86 83t52 128t17 164.5q0 29 -1 57.5t-3 55.5q-68 90 -135 120.5t-137 30.5 q-68 0 -121 -24.5t-90 -69.5t-56.5 -105.5t-19.5 -129.5z" /> +<glyph unicode="ñ" horiz-adv-x="1120" d="M168 0v995h139l15 -143h6q72 72 150.5 120t183.5 48q158 0 230.5 -98.5t72.5 -290.5v-631h-168v608q0 141 -45 203.5t-144 62.5q-78 0 -137 -38.5t-135 -114.5v-721h-168zM313 1186q8 92 49 154.5t117 62.5q39 0 72 -16.5t60.5 -36t52 -36t49.5 -16.5q57 0 75 105h95 q-8 -92 -49 -154.5t-117 -62.5q-39 0 -71 16.5t-59.5 35.5t-52 35.5t-51.5 16.5q-57 0 -75 -104h-95z" /> +<glyph unicode="ò" horiz-adv-x="1110" d="M94 496q0 125 38 222t101.5 164.5t146.5 102.5t175 35t175 -35t146.5 -102.5t101.5 -164.5t38 -222q0 -123 -38 -220.5t-101.5 -164t-146.5 -101.5t-175 -35t-175 35t-146.5 101.5t-101.5 164t-38 220.5zM268 496q0 -86 20.5 -156t58.5 -120t91.5 -77.5t116.5 -27.5 t116.5 27.5t91.5 77.5t58.5 120t20.5 156t-20.5 156.5t-58.5 121.5t-91.5 79t-116.5 28t-116.5 -28t-91.5 -79t-58.5 -121.5t-20.5 -156.5zM328 1462h176l184 -288h-129z" /> +<glyph unicode="ó" horiz-adv-x="1110" d="M94 496q0 125 38 222t101.5 164.5t146.5 102.5t175 35t175 -35t146.5 -102.5t101.5 -164.5t38 -222q0 -123 -38 -220.5t-101.5 -164t-146.5 -101.5t-175 -35t-175 35t-146.5 101.5t-101.5 164t-38 220.5zM268 496q0 -86 20.5 -156t58.5 -120t91.5 -77.5t116.5 -27.5 t116.5 27.5t91.5 77.5t58.5 120t20.5 156t-20.5 156.5t-58.5 121.5t-91.5 79t-116.5 28t-116.5 -28t-91.5 -79t-58.5 -121.5t-20.5 -156.5zM422 1174l184 288h176l-231 -288h-129z" /> +<glyph unicode="ô" horiz-adv-x="1110" d="M94 496q0 125 38 222t101.5 164.5t146.5 102.5t175 35t175 -35t146.5 -102.5t101.5 -164.5t38 -222q0 -123 -38 -220.5t-101.5 -164t-146.5 -101.5t-175 -35t-175 35t-146.5 101.5t-101.5 164t-38 220.5zM268 496q0 -86 20.5 -156t58.5 -120t91.5 -77.5t116.5 -27.5 t116.5 27.5t91.5 77.5t58.5 120t20.5 156t-20.5 156.5t-58.5 121.5t-91.5 79t-116.5 28t-116.5 -28t-91.5 -79t-58.5 -121.5t-20.5 -156.5zM291 1174l194 288h140l194 -288h-123l-137 186h-8l-137 -186h-123z" /> +<glyph unicode="õ" horiz-adv-x="1110" d="M94 496q0 125 38 222t101.5 164.5t146.5 102.5t175 35t175 -35t146.5 -102.5t101.5 -164.5t38 -222q0 -123 -38 -220.5t-101.5 -164t-146.5 -101.5t-175 -35t-175 35t-146.5 101.5t-101.5 164t-38 220.5zM268 496q0 -86 20.5 -156t58.5 -120t91.5 -77.5t116.5 -27.5 t116.5 27.5t91.5 77.5t58.5 120t20.5 156t-20.5 156.5t-58.5 121.5t-91.5 79t-116.5 28t-116.5 -28t-91.5 -79t-58.5 -121.5t-20.5 -156.5zM270 1186q8 92 49 154.5t117 62.5q39 0 72 -16.5t60.5 -36t52 -36t49.5 -16.5q57 0 75 105h95q-8 -92 -49 -154.5t-117 -62.5 q-39 0 -71 16.5t-59.5 35.5t-52 35.5t-51.5 16.5q-57 0 -75 -104h-95z" /> +<glyph unicode="ö" horiz-adv-x="1110" d="M94 496q0 125 38 222t101.5 164.5t146.5 102.5t175 35t175 -35t146.5 -102.5t101.5 -164.5t38 -222q0 -123 -38 -220.5t-101.5 -164t-146.5 -101.5t-175 -35t-175 35t-146.5 101.5t-101.5 164t-38 220.5zM268 496q0 -86 20.5 -156t58.5 -120t91.5 -77.5t116.5 -27.5 t116.5 27.5t91.5 77.5t58.5 120t20.5 156t-20.5 156.5t-58.5 121.5t-91.5 79t-116.5 28t-116.5 -28t-91.5 -79t-58.5 -121.5t-20.5 -156.5zM279 1305q0 43 27.5 71.5t72.5 28.5q43 0 71.5 -28.5t28.5 -71.5t-28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM631 1305 q0 43 28.5 71.5t71.5 28.5q45 0 72.5 -28.5t27.5 -71.5t-27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> +<glyph unicode="÷" d="M70 612v127h878v-127h-878zM397 307q0 47 33 78t80 31t79 -31t32 -78q0 -49 -32 -79.5t-79 -30.5t-80 30.5t-33 79.5zM397 1044q0 47 33 78t80 31t79 -30.5t32 -78.5q0 -49 -32 -79.5t-79 -30.5t-80 30.5t-33 79.5z" /> +<glyph unicode="ø" horiz-adv-x="1110" d="M94 12l111 133q-51 66 -81 153t-30 198q0 125 38 222t101.5 164.5t146.5 102.5t175 35q78 0 151.5 -25.5t133.5 -76.5l102 124l74 -59l-111 -133q51 -66 81 -155t30 -199q0 -123 -38 -220.5t-101.5 -164t-146.5 -101.5t-175 -35q-162 0 -285 101l-100 -123zM260 504 q0 -137 47 -232l438 531q-76 82 -190 82q-63 0 -117.5 -28t-93.5 -78t-61.5 -120.5t-22.5 -154.5zM365 190q80 -80 190 -79q63 0 117.5 27.5t94.5 77.5t61.5 120t21.5 153q0 137 -49 234z" /> +<glyph unicode="ù" horiz-adv-x="1114" d="M154 365v630h170v-608q0 -141 44 -203.5t142 -62.5q78 0 137.5 40t130.5 128v706h168v-995h-139l-14 156h-7q-70 -82 -146.5 -131.5t-180.5 -49.5q-160 0 -232.5 98.5t-72.5 291.5zM330 1462h176l184 -288h-129z" /> +<glyph unicode="ú" horiz-adv-x="1114" d="M154 365v630h170v-608q0 -141 44 -203.5t142 -62.5q78 0 137.5 40t130.5 128v706h168v-995h-139l-14 156h-7q-70 -82 -146.5 -131.5t-180.5 -49.5q-160 0 -232.5 98.5t-72.5 291.5zM424 1174l184 288h176l-231 -288h-129z" /> +<glyph unicode="û" horiz-adv-x="1114" d="M154 365v630h170v-608q0 -141 44 -203.5t142 -62.5q78 0 137.5 40t130.5 128v706h168v-995h-139l-14 156h-7q-70 -82 -146.5 -131.5t-180.5 -49.5q-160 0 -232.5 98.5t-72.5 291.5zM293 1174l194 288h140l194 -288h-123l-137 186h-8l-137 -186h-123z" /> +<glyph unicode="ü" horiz-adv-x="1114" d="M154 365v630h170v-608q0 -141 44 -203.5t142 -62.5q78 0 137.5 40t130.5 128v706h168v-995h-139l-14 156h-7q-70 -82 -146.5 -131.5t-180.5 -49.5q-160 0 -232.5 98.5t-72.5 291.5zM281 1305q0 43 27.5 71.5t72.5 28.5q43 0 71.5 -28.5t28.5 -71.5t-28.5 -72t-71.5 -29 q-45 0 -72.5 29t-27.5 72zM633 1305q0 43 28.5 71.5t71.5 28.5q45 0 72.5 -28.5t27.5 -71.5t-27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> +<glyph unicode="ý" horiz-adv-x="956" d="M25 995h174l202 -551q23 -66 48.5 -138.5t48.5 -141.5h8q23 68 43 141.5t41 138.5l178 551h164l-375 -1077q-27 -74 -59.5 -137.5t-77.5 -109.5t-102.5 -72.5t-133.5 -26.5q-35 0 -63.5 5t-52.5 15l32 134q16 -4 37 -9.5t39 -5.5q86 0 140.5 60.5t84.5 152.5l23 74z M363 1174l184 288h176l-231 -288h-129z" /> +<glyph unicode="þ" horiz-adv-x="1136" d="M168 -420v1878h168v-397l-2 -170q66 53 143.5 91t159.5 38q98 0 173 -36t126 -102.5t76.5 -159.5t25.5 -210q0 -127 -34.5 -226.5t-94 -169t-137.5 -105.5t-164 -36q-72 0 -139.5 29t-134.5 82l2 -170v-336h-168zM336 221q68 -57 131 -80.5t113 -23.5q61 0 113 27.5 t90 77.5t59.5 124t21.5 166q0 82 -14 149.5t-46 115.5t-82 75t-120 27q-63 0 -127.5 -35t-138.5 -101v-522z" /> +<glyph unicode="ÿ" horiz-adv-x="956" d="M25 995h174l202 -551q23 -66 48.5 -138.5t48.5 -141.5h8q23 68 43 141.5t41 138.5l178 551h164l-375 -1077q-27 -74 -59.5 -137.5t-77.5 -109.5t-102.5 -72.5t-133.5 -26.5q-35 0 -63.5 5t-52.5 15l32 134q16 -4 37 -9.5t39 -5.5q86 0 140.5 60.5t84.5 152.5l23 74z M220 1305q0 43 27.5 71.5t72.5 28.5q43 0 71.5 -28.5t28.5 -71.5t-28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM572 1305q0 43 28.5 71.5t71.5 28.5q45 0 72.5 -28.5t27.5 -71.5t-27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> +<glyph unicode="Œ" horiz-adv-x="1724" d="M100 678q0 322 172 493.5t486 171.5h852v-143h-570v-422h476v-145h-476v-488h590v-145h-880q-154 0 -274 46t-204 133t-128 213t-44 286zM276 678q0 -258 125 -398.5t369 -140.5h98v1065h-98q-244 0 -369 -135t-125 -391z" /> +<glyph unicode="œ" horiz-adv-x="1718" d="M94 496q0 125 37 222t98.5 164.5t143.5 102.5t172 35q115 0 211 -63.5t149 -186.5q57 117 148.5 183.5t201.5 66.5q92 0 164 -33t121 -94.5t74.5 -148.5t25.5 -193q0 -57 -6 -94h-653q2 -78 27.5 -141.5t67.5 -108.5t98.5 -69.5t119.5 -24.5q72 0 131.5 23.5t114.5 58.5 l62 -117q-66 -41 -146 -72t-182 -31q-117 0 -213 65.5t-154 182.5q-117 -248 -366 -248q-90 0 -171 35t-142.5 101.5t-97.5 164t-36 220.5zM266 496q0 -86 20.5 -156t57.5 -120t88 -77.5t113 -27.5q61 0 112.5 27.5t88 77.5t57 120t20.5 156t-20.5 156.5t-57 121.5t-88 79 t-112.5 28t-112.5 -28t-88.5 -79t-57.5 -121.5t-20.5 -156.5zM981 569h512q0 154 -63.5 236t-178.5 82q-104 0 -180 -85t-90 -233z" /> +<glyph unicode="Ÿ" horiz-adv-x="964" d="M-8 1343h184l172 -378q33 -74 64.5 -145.5t66.5 -147.5h8q35 76 69 147.5t65 145.5l174 378h176l-404 -823v-520h-170v520zM205 1565q0 45 27.5 72.5t72.5 27.5q43 0 71.5 -27.5t28.5 -72.5q0 -43 -28.5 -72t-71.5 -29q-45 0 -72.5 29t-27.5 72zM557 1565q0 45 28.5 72.5 t71.5 27.5q45 0 72.5 -27.5t27.5 -72.5q0 -43 -27.5 -72t-72.5 -29q-43 0 -71.5 29t-28.5 72z" /> +<glyph unicode="ˆ" horiz-adv-x="1110" d="M291 1174l194 288h140l194 -288h-123l-137 186h-8l-137 -186h-123z" /> +<glyph unicode="˜" horiz-adv-x="1110" d="M270 1186q8 92 49 154.5t117 62.5q39 0 72 -16.5t60.5 -36t52 -36t49.5 -16.5q57 0 75 105h95q-8 -92 -49 -154.5t-117 -62.5q-39 0 -71 16.5t-59.5 35.5t-52 35.5t-51.5 16.5q-57 0 -75 -104h-95z" /> +<glyph unicode=" " horiz-adv-x="896" /> +<glyph unicode=" " horiz-adv-x="1792" /> +<glyph unicode=" " horiz-adv-x="896" /> +<glyph unicode=" " horiz-adv-x="1792" /> +<glyph unicode=" " horiz-adv-x="597" /> +<glyph unicode=" " horiz-adv-x="448" /> +<glyph unicode=" " horiz-adv-x="298" /> +<glyph unicode=" " horiz-adv-x="298" /> +<glyph unicode=" " horiz-adv-x="224" /> +<glyph unicode=" " horiz-adv-x="358" /> +<glyph unicode=" " horiz-adv-x="99" /> +<glyph unicode="‐" horiz-adv-x="636" d="M84 449v129h471v-129h-471z" /> +<glyph unicode="‑" horiz-adv-x="636" d="M84 449v129h471v-129h-471z" /> +<glyph unicode="‒" horiz-adv-x="636" d="M84 449v129h471v-129h-471z" /> +<glyph unicode="–" horiz-adv-x="983" d="M84 457v116h815v-116h-815z" /> +<glyph unicode="—" horiz-adv-x="1638" d="M84 457v116h1470v-116h-1470z" /> +<glyph unicode="‘" horiz-adv-x="509" d="M117 1061q0 123 55 213t162 151l49 -79q-78 -51 -117 -108.5t-39 -145.5q6 2 19 2q41 0 74.5 -27t33.5 -78q0 -53 -30.5 -82.5t-77.5 -29.5q-61 0 -95 47t-34 137z" /> +<glyph unicode="’" horiz-adv-x="509" d="M129 961q78 51 116 108t38 148q-6 -2 -17 -3q-43 0 -75.5 27t-32.5 76q0 53 30.5 84t77.5 31q59 0 94 -48.5t35 -138.5q0 -123 -56 -212t-163 -150z" /> +<glyph unicode="‚" horiz-adv-x="509" d="M129 -217q78 51 116 108t38 148q-6 -2 -17 -3q-43 0 -75.5 27t-32.5 76q0 53 30.5 84t77.5 31q59 0 94 -48.5t35 -138.5q0 -123 -56 -212t-163 -150z" /> +<glyph unicode="“" horiz-adv-x="870" d="M117 1061q0 123 55 213t162 151l49 -79q-78 -51 -117 -108.5t-39 -145.5q6 2 19 2q41 0 74.5 -27t33.5 -78q0 -53 -30.5 -82.5t-77.5 -29.5q-61 0 -95 47t-34 137zM477 1061q0 123 55 213t162 151l49 -79q-78 -51 -117 -108.5t-39 -145.5q6 2 19 2q41 0 74.5 -27 t33.5 -78q0 -53 -30.5 -82.5t-77.5 -29.5q-61 0 -95 47t-34 137z" /> +<glyph unicode="”" horiz-adv-x="870" d="M129 961q78 51 116 108t38 148q-6 -2 -17 -3q-43 0 -75.5 27t-32.5 76q0 53 30.5 84t77.5 31q59 0 94 -48.5t35 -138.5q0 -123 -56 -212t-163 -150zM489 961q78 51 116 108t38 148q-6 -2 -17 -3q-43 0 -75.5 27t-32.5 76q0 53 30.5 84t77.5 31q59 0 94 -48.5t35 -138.5 q0 -123 -56 -212t-163 -150z" /> +<glyph unicode="„" horiz-adv-x="870" d="M129 -217q78 51 116 108t38 148q-6 -2 -17 -3q-43 0 -75.5 27t-32.5 76q0 53 30.5 84t77.5 31q59 0 94 -48.5t35 -138.5q0 -123 -56 -212t-163 -150zM489 -217q78 51 116 108t38 148q-6 -2 -17 -3q-43 0 -75.5 27t-32.5 76q0 53 30.5 84t77.5 31q59 0 94 -48.5t35 -138.5 q0 -123 -56 -212t-163 -150z" /> +<glyph unicode="•" horiz-adv-x="622" d="M82 539q0 55 18.5 101t50 78t72.5 50t88 18q45 0 87 -18t74 -50t50.5 -78t18.5 -101t-18.5 -100.5t-50.5 -78t-74 -50t-87 -17.5q-47 0 -88 17.5t-72.5 50t-50 77.5t-18.5 101z" /> +<glyph unicode="…" horiz-adv-x="1941" d="M192 102q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91t-85 -36q-51 0 -87 36t-36 91zM878 102q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91t-85 -36q-51 0 -87 36t-36 91zM1565 102q0 59 36 95t87 36q49 0 85 -35.5t36 -95.5q0 -55 -36 -91 t-85 -36q-51 0 -87 36t-36 91z" /> +<glyph unicode=" " horiz-adv-x="358" /> +<glyph unicode="‹" horiz-adv-x="555" d="M92 453v127l279 317l73 -61l-241 -320l241 -323l-73 -58z" /> +<glyph unicode="›" horiz-adv-x="555" d="M111 193l241 323l-241 320l71 61l281 -317v-127l-281 -318z" /> +<glyph unicode=" " horiz-adv-x="448" /> +<glyph unicode="€" d="M47 481v88l121 9q-2 18 -2 36.5v36.5v32.5t2 33.5h-121v90l131 10q18 121 61.5 216t108 162t149.5 101.5t185 34.5q92 0 172 -46t133 -114l-100 -96q-43 53 -94.5 87t-116.5 34q-135 0 -218 -100.5t-108 -278.5h520v-100h-528q-2 -14 -2 -28.5v-31.5v-39.5t2 -37.5h446 v-99h-436q27 -174 106 -272t206 -98q76 0 132 36.5t109 108.5l101 -90q-68 -90 -154 -140.5t-199 -50.5q-92 0 -171 34t-140 99.5t-103 158.5t-61 214h-131z" /> +<glyph unicode="™" horiz-adv-x="1304" d="M6 1274v110h531v-110h-205v-524h-123v524h-203zM635 750v634h153l95 -229l55 -162h8l55 162l93 229h151v-634h-117v280l13 215h-8l-146 -397h-92l-147 397h-9l15 -215v-280h-119z" /> +<glyph unicode="" horiz-adv-x="993" d="M0 0v993h993v-993h-993z" /> +<glyph unicode="fi" horiz-adv-x="1138" d="M61 858v127l136 10v158q0 154 70.5 242t219.5 88q47 0 89 -9.5t77 -23.5l-37 -129q-55 25 -112 25q-139 0 -139 -193v-158h210v-137h-210v-858h-168v858h-136zM772 1309q0 49 34 78.5t83 29.5t83 -29.5t34 -78.5q0 -47 -34 -78t-83 -31t-83 31t-34 78zM803 0v995h168 v-995h-168z" /> +<glyph unicode="fl" horiz-adv-x="1120" d="M61 858v127l136 10v158q0 154 70.5 242t219.5 88q47 0 89 -9.5t77 -23.5l-37 -129q-55 25 -112 25q-139 0 -139 -193v-158h210v-137h-210v-858h-168v858h-136zM766 201v1257h168v-1270q0 -41 14.5 -57t32.5 -16h15.5t21.5 4l22 -127q-16 -8 -38.5 -12.5t-57.5 -4.5 q-96 0 -137 57.5t-41 168.5z" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.ttf b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fe5d758dce70b7b25183b7dd064ffd52ca60fc88 GIT binary patch literal 54820 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 Sy|h22fI7muDDCDlrT!ZU6N=9O literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.woff b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-400-normal-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..9799be38b24ef0223e78cf7cfaf0b5af9a895049 GIT binary patch literal 26984 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�N@j;D{GMjiA#<QS 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 CfJn~( literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.eot b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..1f11e3af0d468258e96734126358b5f84c825ebc GIT binary patch literal 24228 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 Nl;8RTy<QCRKEVA4bP50f literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.svg b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.svg new file mode 100644 index 00000000000..ca699f72cc4 --- /dev/null +++ b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.svg @@ -0,0 +1,245 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="source_sans_prosemibold" horiz-adv-x="1050" > +<font-face units-per-em="2048" ascent="1536" descent="-512" /> +<missing-glyph horiz-adv-x="419" /> +<glyph horiz-adv-x="0" /> +<glyph horiz-adv-x="682" /> +<glyph horiz-adv-x="0" /> +<glyph horiz-adv-x="0" /> +<glyph unicode="
" horiz-adv-x="419" /> +<glyph unicode=" " horiz-adv-x="419" /> +<glyph unicode="	" horiz-adv-x="419" /> +<glyph unicode=" " horiz-adv-x="419" /> +<glyph unicode="!" horiz-adv-x="645" d="M170 135q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45q-66 0 -110 45t-44 115zM205 1372h237l-8 -233l-33 -699h-157l-33 699z" /> +<glyph unicode=""" horiz-adv-x="987" d="M160 1409h241l-6 -231l-47 -375h-135l-45 375zM584 1409h241l-6 -231l-47 -375h-135l-45 375z" /> +<glyph unicode="#" d="M72 399v156h174l33 264h-166v156h186l45 356h141l-43 -356h240l47 356h139l-43 -356h164v-156h-182l-33 -264h174v-156h-192l-47 -399h-144l47 399h-239l-49 -399h-144l49 399h-157zM389 555h242l33 264h-242z" /> +<glyph unicode="$" d="M92 135l107 160q72 -57 145.5 -92t157.5 -35q100 0 149 46t49 130q0 68 -41 113t-103 81.5t-134 70.5t-134.5 80t-103.5 110.5t-41 161.5q0 143 82 238t221 120v209h164v-205q98 -12 169 -56t128 -104l-121 -137q-57 53 -110 81t-127 28q-84 0 -131 -42t-47 -122 q0 -61 41 -101.5t103.5 -74t134 -67.5t134 -81t103.5 -115.5t41 -171.5q0 -147 -82 -246.5t-236 -127.5v-211h-164v205q-94 10 -189 50t-165 105z" /> +<glyph unicode="%" horiz-adv-x="1722" d="M61 942q0 203 89.5 312.5t230.5 109.5t230 -109.5t89 -312.5t-89 -314.5t-230 -111.5t-230.5 112t-89.5 314zM231 942q0 -152 42 -220t108 -68t107.5 68.5t41.5 219.5q0 152 -42 218.5t-107 66.5q-66 0 -108 -66.5t-42 -218.5zM422 -25l731 1389h143l-729 -1389h-145z M1022 401q0 203 89.5 312.5t230.5 109.5t230 -109.5t89 -312.5t-89 -314.5t-230 -111.5t-230.5 112t-89.5 314zM1192 401q0 -152 42 -220t108 -68t107.5 68.5t41.5 219.5q0 152 -42 218.5t-107 66.5q-66 0 -108 -66.5t-42 -218.5z" /> +<glyph unicode="&" horiz-adv-x="1308" d="M57 352q0 70 20.5 125t56.5 101.5t82 84t97 72.5q-41 78 -63.5 152t-22.5 143q0 70 23.5 130.5t69 105.5t106.5 71.5t139 26.5q137 0 216 -78t79 -207q0 -66 -24.5 -121t-65.5 -101t-93 -87t-108 -80q61 -84 140 -162.5t165 -144.5q55 74 98.5 163t71.5 193h218 q-37 -127 -94.5 -243.5t-135.5 -221.5q66 -41 127.5 -68.5t114.5 -37.5l-60 -193q-78 18 -159.5 54.5t-165.5 89.5q-80 -66 -180.5 -105t-223.5 -39q-100 0 -179 30t-134 80t-85 118.5t-30 148.5zM283 367q0 -94 65.5 -151.5t165.5 -57.5q55 0 109.5 21.5t105.5 58.5 q-90 76 -171 160.5t-146 176.5q-57 -47 -93 -97t-36 -111zM424 1032q0 -47 14.5 -95t38.5 -101q84 53 141.5 108t57.5 133q0 53 -24.5 90t-84.5 37q-63 0 -103 -47t-40 -125z" /> +<glyph unicode="'" horiz-adv-x="563" d="M160 1409h241l-6 -231l-47 -375h-135l-45 375z" /> +<glyph unicode="(" horiz-adv-x="663" d="M158 569q0 272 70.5 497.5t199.5 436.5l147 -65q-117 -199 -171 -420t-54 -449q0 -227 54.5 -448t170.5 -420l-147 -66q-129 211 -199.5 436.5t-70.5 497.5z" /> +<glyph unicode=")" horiz-adv-x="663" d="M88 -299q117 199 171 420t54 448t-54 448.5t-171 420.5l148 65q129 -211 199.5 -436t70.5 -498q0 -272 -70.5 -497.5t-199.5 -436.5z" /> +<glyph unicode="*" horiz-adv-x="897" d="M98 1155l39 123l223 -51l23 231h129l23 -231l225 51l39 -123l-211 -92l119 -201l-105 -76l-153 179l-156 -179l-105 76l119 201z" /> +<glyph unicode="+" d="M70 590v172h366v387h178v-387h367v-172h-367v-387h-178v387h-366z" /> +<glyph unicode="," horiz-adv-x="563" d="M96 -244q98 39 152.5 104.5t54.5 143.5h-18q-59 0 -105.5 38t-46.5 108q0 66 46 105.5t112 39.5q84 0 130 -63.5t46 -178.5q0 -152 -83 -262t-237 -164z" /> +<glyph unicode="-" horiz-adv-x="659" d="M86 430v172h487v-172h-487z" /> +<glyph unicode="." horiz-adv-x="563" d="M129 135q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45q-66 0 -110 45t-44 115z" /> +<glyph unicode="/" horiz-adv-x="704" d="M25 -328l477 1782h160l-478 -1782h-159z" /> +<glyph unicode="0" d="M82 657q0 332 118.5 501t323.5 169t324 -170t119 -500q0 -332 -119 -507t-324 -175t-323.5 175.5t-118.5 506.5zM307 657q0 -139 16.5 -233t45 -153.5t68.5 -85t87 -25.5t87 25.5t69 85t45 153.5t16 233q0 137 -16 230.5t-45 151t-69 81t-87 23.5t-87 -23.5t-68.5 -81 t-45 -150.5t-16.5 -231z" /> +<glyph unicode="1" d="M152 0v193h290v856h-239v147q98 18 168.5 44t132.5 63h176v-1110h256v-193h-784z" /> +<glyph unicode="2" d="M68 1126q90 96 185 148.5t230 52.5q94 0 170 -28.5t129.5 -81t83 -126t29.5 -163.5q0 -86 -38 -175t-102.5 -180.5t-150.5 -187.5t-182 -199q51 4 110.5 9.5t106.5 5.5h319v-201h-880v137q135 131 244.5 241.5t186.5 205t118 176.5t41 155q0 104 -55.5 165t-159.5 61 q-76 0 -138.5 -43t-115.5 -103z" /> +<glyph unicode="3" d="M49 160l113 151q59 -59 135 -101t174 -42q106 0 173 52t67 145q0 51 -18.5 92t-62.5 69.5t-118 44t-184 15.5v172q96 0 160.5 15t104.5 43t57.5 67t17.5 84q0 82 -51.5 128t-141.5 46q-78 0 -140.5 -34t-121.5 -89l-121 145q84 74 179.5 119t211.5 45q94 0 172 -22.5 t133.5 -66.5t86 -108.5t30.5 -146.5q0 -111 -60.5 -184.5t-166.5 -114.5v-8q117 -31 193.5 -113t76.5 -211q0 -90 -35.5 -159.5t-98 -117.5t-145.5 -74t-177 -26q-160 0 -266.5 53.5t-176.5 131.5z" /> +<glyph unicode="4" d="M37 336v160l516 807h281v-785h163v-182h-163v-336h-222v336h-575zM270 518h342v295q0 57 3 135t8 135h-9q-25 -51 -51 -100t-55 -102z" /> +<glyph unicode="5" d="M49 156l109 151q59 -55 133 -97t172 -42q111 0 181.5 65.5t70.5 184.5q0 117 -65.5 180.5t-174.5 63.5q-63 0 -106 -17.5t-103 -56.5l-112 71l39 644h696v-199h-492l-26 -316q41 20 81 31.5t91 11.5q84 0 158.5 -24.5t130 -74.5t88 -127t32.5 -181q0 -106 -37.5 -190 t-101 -141.5t-146.5 -87.5t-173 -30q-158 0 -265.5 54.5t-179.5 126.5z" /> +<glyph unicode="6" d="M90 612q0 190 43 325.5t113.5 221.5t163 127t192.5 41q119 0 204 -43t144 -104l-127 -144q-35 43 -91 71t-116 28q-61 0 -115.5 -25t-95 -81t-66.5 -148.5t-30 -227.5q57 72 134 113t149 41q84 0 154.5 -24.5t121 -75t78 -126t27.5 -178.5q0 -98 -33 -177t-88 -134 t-130 -86t-159 -31q-96 0 -182 38t-150.5 116t-102.5 199t-38 284zM315 485q18 -174 83 -251.5t161 -77.5q82 0 138.5 63.5t56.5 183.5q0 117 -53.5 174.5t-151.5 57.5q-55 0 -116.5 -34t-117.5 -116z" /> +<glyph unicode="7" d="M90 1104v199h875v-144q-115 -141 -185.5 -269t-111.5 -262t-58.5 -286t-25.5 -342h-240q8 174 30.5 318.5t64.5 275.5t107.5 255t160.5 255h-617z" /> +<glyph unicode="8" d="M84 334q0 61 19.5 111.5t52 91.5t74.5 73.5t89 57.5v8q-76 53 -128 127t-52 178q0 80 30 143.5t82 108.5t125 69.5t156 24.5q88 0 159 -25.5t121 -71.5t76.5 -110.5t26.5 -144.5q0 -49 -15 -93t-39.5 -82t-56.5 -70t-63 -54v-8q45 -25 86 -56.5t72 -72.5t49.5 -92.5 t18.5 -116.5q0 -76 -32 -140.5t-89.5 -112.5t-139 -75t-180.5 -27q-96 0 -177 27t-139 74t-92 112.5t-34 145.5zM291 358q0 -98 69.5 -156.5t169.5 -58.5q94 0 154.5 51.5t60.5 143.5q0 53 -24.5 91t-66.5 67.5t-99 54t-123 51.5q-61 -45 -101 -106.5t-40 -137.5zM350 981 q0 -49 20.5 -86t56.5 -64.5t83 -51.5t102 -44q53 53 81 108.5t28 117.5q0 86 -50 142t-143 56q-76 0 -127 -46t-51 -132z" /> +<glyph unicode="9" d="M76 901q0 98 32.5 177t88 134.5t130 85t158.5 29.5q94 0 180.5 -38t151 -115.5t102 -197.5t37.5 -284q0 -190 -42 -325.5t-112.5 -222.5t-163.5 -128t-194 -41q-117 0 -202.5 43t-145.5 105l127 143q37 -43 93.5 -70.5t115.5 -27.5q61 0 115.5 24.5t95.5 81t66.5 148.5 t29.5 227q-57 -72 -135 -111.5t-149 -39.5q-84 0 -154 24.5t-120 74.5t-77.5 126t-27.5 178zM293 901q0 -117 54.5 -175t152.5 -58q55 0 117.5 34.5t115.5 116.5q-18 172 -84.5 250t-161.5 78q-80 0 -137 -63.5t-57 -182.5z" /> +<glyph unicode=":" horiz-adv-x="563" d="M129 135q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45q-66 0 -110 45t-44 115zM129 835q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45q-66 0 -110 45t-44 115z" /> +<glyph unicode=";" horiz-adv-x="563" d="M96 -244q98 39 152.5 104.5t54.5 143.5h-18q-59 0 -105.5 38t-46.5 108q0 66 46 105.5t112 39.5q84 0 130 -63.5t46 -178.5q0 -152 -83 -262t-237 -164zM129 835q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45q-66 0 -110 45t-44 115z" /> +<glyph unicode="<" d="M70 594v172l911 354v-198l-395 -140l-277 -98v-8l277 -98l395 -140v-198z" /> +<glyph unicode="=" d="M70 363v172h911v-172h-911zM70 819v172h911v-172h-911z" /> +<glyph unicode=">" d="M70 240v198l395 140l276 98v8l-276 98l-395 140v198l911 -354v-172z" /> +<glyph unicode="?" horiz-adv-x="909" d="M82 1219q66 78 156 128t202 50q82 0 152 -21.5t121 -64.5t78.5 -106.5t27.5 -147.5q0 -66 -23.5 -118t-58.5 -99t-74.5 -90t-71.5 -90.5t-51.5 -100.5t-11.5 -119h-206q-10 74 5 135.5t44.5 112.5t67.5 95t72 86t56.5 83t22.5 88q0 74 -44 119t-122 45 q-63 0 -114.5 -28.5t-96.5 -77.5zM274 135q0 70 43 115t109 45t110 -45t44 -115t-44 -115t-110 -45t-109 45t-43 115z" /> +<glyph unicode="@" horiz-adv-x="1792" d="M102 418q0 211 72 382t192.5 292.5t282.5 188.5t342 67q160 0 290 -51.5t221 -144.5t140.5 -223t49.5 -286q0 -137 -40 -240.5t-103.5 -173t-141.5 -104.5t-154 -35q-88 0 -149.5 39t-75.5 117h-4q-47 -61 -114.5 -100.5t-133.5 -39.5q-113 0 -185.5 79t-72.5 221 q0 88 30 175t83 156.5t126.5 113.5t164.5 44q106 0 159 -100h4l27 84h150l-88 -433q-51 -207 102 -206q47 0 94 27.5t84 78.5t59.5 124t22.5 165q0 117 -34 219t-102.5 179t-175 122t-251.5 45q-135 0 -262 -55t-225.5 -156.5t-159 -244t-60.5 -318.5q0 -152 47 -266.5 t129 -191.5t192.5 -115.5t235.5 -38.5q86 0 170 23.5t152 60.5l55 -131q-180 -102 -395 -103q-152 0 -288 47t-238.5 142.5t-163 236t-60.5 328.5zM700 420q0 -84 34 -122t91 -38q37 0 76 24.5t86 82.5l53 301q-45 72 -112 71q-53 0 -95 -30.5t-72 -77.5t-45.5 -103.5 t-15.5 -107.5z" /> +<glyph unicode="A" horiz-adv-x="1136" d="M-8 0l438 1339h279l436 -1339h-252l-105 362h-448l-104 -362h-244zM393 549h342l-47 164q-31 106 -61.5 218.5t-59.5 223.5h-8q-29 -113 -57.5 -224.5t-61.5 -217.5z" /> +<glyph unicode="B" horiz-adv-x="1216" d="M168 0v1339h428q102 0 190 -17t151.5 -55t99.5 -101.5t36 -155.5q0 -96 -55 -178t-174 -113v-8q145 -25 223 -104t78 -214q0 -100 -39 -174t-107.5 -123t-163 -72.5t-204.5 -23.5h-463zM406 184h200q147 0 226 55.5t79 170.5q0 104 -77.5 154t-227.5 50h-200v-430z M406 784h167q141 0 204 51.5t63 145.5q0 92 -64.5 133t-195.5 41h-174v-371z" /> +<glyph unicode="C" horiz-adv-x="1173" d="M96 666q0 164 48.5 294t132 220t196.5 137t242 47q123 0 220 -51t161 -119l-131 -147q-53 51 -111.5 80.5t-136.5 29.5q-82 0 -151.5 -33.5t-120 -96t-78 -153t-27.5 -202.5q0 -229 100.5 -359.5t268.5 -130.5q90 0 157.5 35t124.5 98l131 -145q-82 -94 -185 -144.5 t-232 -50.5q-127 0 -239 45.5t-194 133.5t-129 217t-47 295z" /> +<glyph unicode="D" horiz-adv-x="1275" d="M168 0v1339h356q307 0 480.5 -165.5t173.5 -497.5q0 -166 -44 -293t-127 -212t-202 -128t-268 -43h-369zM406 193h102q205 0 315.5 117.5t110.5 365.5q0 246 -111.5 358.5t-314.5 112.5h-102v-954z" /> +<glyph unicode="E" horiz-adv-x="1093" d="M168 0v1339h805v-200h-567v-342h481v-201h-481v-395h587v-201h-825z" /> +<glyph unicode="F" horiz-adv-x="1036" d="M168 0v1339h809v-200h-571v-379h485v-201h-485v-559h-238z" /> +<glyph unicode="G" horiz-adv-x="1277" d="M96 666q0 164 49.5 294t135.5 220t202.5 137t251.5 47q70 0 129.5 -14.5t108.5 -38t90 -54t72 -63.5l-131 -147q-51 49 -112 79.5t-155 30.5q-90 0 -162.5 -33.5t-125 -96t-81 -153t-28.5 -202.5q0 -229 104.5 -359.5t307.5 -130.5q55 0 106 15.5t84 44.5v288h-252v195 h465v-590q-70 -66 -182.5 -113t-249.5 -47q-133 0 -248 45.5t-198.5 133.5t-132 217t-48.5 295z" /> +<glyph unicode="H" horiz-adv-x="1351" d="M168 0v1339h238v-538h540v538h238v-1339h-238v594h-540v-594h-238z" /> +<glyph unicode="I" horiz-adv-x="571" d="M168 0v1339h238v-1339h-238z" /> +<glyph unicode="J" horiz-adv-x="1005" d="M45 203l164 121q41 -74 94 -108t115 -34q94 0 142 57.5t48 200.5v899h238v-919q0 -92 -23.5 -173t-72 -141.5t-124 -95.5t-180.5 -35q-141 0 -238 57.5t-163 170.5z" /> +<glyph unicode="K" horiz-adv-x="1216" d="M168 0v1339h238v-608h6l477 608h262l-412 -522l482 -817h-263l-360 631l-192 -240v-391h-238z" /> +<glyph unicode="L" horiz-adv-x="1021" d="M168 0v1339h238v-1138h555v-201h-793z" /> +<glyph unicode="M" horiz-adv-x="1519" d="M168 0v1339h260l242 -659l88 -254h8l88 254l236 659h262v-1339h-224v612q0 47 3.5 102.5t7.5 112t10 110.5t10 101h-8l-109 -305l-231 -608h-109l-231 608l-106 305h-9q4 -47 9.5 -101t9.5 -110.5t7 -112t3 -102.5v-612h-217z" /> +<glyph unicode="N" horiz-adv-x="1337" d="M168 0v1339h244l415 -753l140 -285h8q-10 104 -20.5 224t-10.5 233v581h225v-1339h-243l-416 754l-139 284h-9q10 -106 20.5 -223t10.5 -229v-586h-225z" /> +<glyph unicode="O" horiz-adv-x="1374" d="M96 676q0 162 43 290t122 216t187.5 135t239.5 47t239.5 -47t186.5 -135t121 -216t43 -290q0 -164 -43 -293t-121 -220t-186.5 -139.5t-239.5 -48.5t-239.5 48.5t-187.5 139.5t-122 220t-43 293zM340 676q0 -113 24.5 -204t70.5 -155.5t109.5 -99.5t143.5 -35 q78 0 142.5 35t109.5 99.5t69.5 155.5t24.5 204q0 225 -94 353t-252 128q-160 0 -254 -128t-94 -353z" /> +<glyph unicode="P" horiz-adv-x="1204" d="M168 0v1339h450q111 0 204 -20.5t161 -69.5t105.5 -128t37.5 -195q0 -111 -38.5 -193t-107.5 -136t-162 -79.5t-200 -25.5h-212v-492h-238zM406 682h192q152 0 223.5 60.5t71.5 183.5q0 127 -74 175t-221 48h-192v-467z" /> +<glyph unicode="Q" horiz-adv-x="1374" d="M92 676q0 162 43 290t121 216t186.5 135t239.5 47t239.5 -47t187.5 -135t122 -216t43 -290q0 -139 -32 -255t-91 -204t-142 -145.5t-186 -79.5q47 -80 130 -115t182 -35q45 0 80.5 6.5t64.5 16.5l43 -178q-35 -16 -90 -26.5t-125 -10.5q-201 0 -336 94t-201 242 q-109 18 -196.5 74.5t-151 144.5t-97.5 206.5t-34 264.5zM336 676q0 -113 24.5 -204t69.5 -155.5t108.5 -99.5t143.5 -35t143.5 35t108.5 99.5t69.5 155.5t24.5 204q0 225 -93 353t-253 128t-253 -128t-93 -353z" /> +<glyph unicode="R" horiz-adv-x="1220" d="M168 0v1339h450q104 0 194.5 -20.5t157 -66.5t104.5 -121.5t38 -188.5q0 -154 -72.5 -248t-195.5 -135l319 -559h-266l-289 524h-202v-524h-238zM406 713h188q139 0 211 57t72 172q0 117 -72 162t-211 45h-188v-436z" /> +<glyph unicode="S" horiz-adv-x="1110" d="M76 172l137 162q72 -68 164 -110t186 -42q113 0 173.5 47t60.5 125q0 41 -15.5 70t-43 50.5t-66.5 39.5t-84 37l-182 80q-49 20 -98.5 51t-87.5 74t-61.5 100t-23.5 131q0 80 34 148.5t93.5 120t141 80t180.5 28.5q119 0 227.5 -46t185.5 -124l-123 -152 q-63 53 -133.5 84t-156.5 31q-96 0 -152.5 -42t-56.5 -116q0 -39 17.5 -66.5t47 -49t68.5 -39t80 -33.5l180 -76q59 -25 109.5 -57.5t86 -75.5t55 -99.5t19.5 -129.5q0 -82 -32.5 -154t-95 -126t-151.5 -86t-202 -32q-135 0 -260 51.5t-221 145.5z" /> +<glyph unicode="T" horiz-adv-x="1112" d="M51 1139v200h1010v-200h-385v-1139h-238v1139h-387z" /> +<glyph unicode="U" horiz-adv-x="1335" d="M160 588v751h237v-770q0 -109 19.5 -183.5t55.5 -119.5t86 -64.5t112 -19.5q61 0 112.5 19.5t87 64.5t56 120t20.5 183v770h230v-751q0 -166 -36 -282t-101.5 -189.5t-159 -107.5t-209.5 -34q-117 0 -211 34t-161 107.5t-102.5 189.5t-35.5 282z" /> +<glyph unicode="V" horiz-adv-x="1091" d="M-10 1339h252l188 -673q33 -115 57.5 -217.5t59.5 -219.5h8q35 117 60.5 219.5t58.5 217.5l186 673h242l-414 -1339h-282z" /> +<glyph unicode="W" horiz-adv-x="1632" d="M33 1339h246l114 -675q16 -109 33.5 -215.5t34.5 -212.5h8q20 106 41.5 213.5t44.5 214.5l166 675h205l166 -675q23 -104 44 -212t44 -216h8q16 109 32.5 215t32.5 213l115 675h229l-258 -1339h-295l-165 705q-16 78 -30.5 154.5t-29.5 154.5h-8q-14 -78 -28.5 -155 t-30.5 -154l-162 -705h-291z" /> +<glyph unicode="X" horiz-adv-x="1101" d="M25 0l378 690l-356 649h264l150 -297q23 -47 46 -96t54 -108h8q25 59 46.5 108t43.5 96l142 297h252l-357 -659l381 -680h-264l-164 315q-27 53 -52.5 105.5t-53.5 114.5h-8q-27 -61 -51.5 -113.5t-49.5 -106.5l-158 -315h-251z" /> +<glyph unicode="Y" horiz-adv-x="1019" d="M-12 1339h254l145 -342q29 -76 58.5 -146.5t60.5 -148.5h8q33 78 64.5 149t60.5 146l145 342h248l-403 -841v-498h-238v498z" /> +<glyph unicode="Z" horiz-adv-x="1099" d="M78 0v143l649 996h-588v200h881v-143l-647 -995h653v-201h-948z" /> +<glyph unicode="[" horiz-adv-x="663" d="M184 -311v1761h402v-131h-224v-1501h224v-129h-402z" /> +<glyph unicode="\" horiz-adv-x="704" d="M43 1454h160l479 -1782h-162z" /> +<glyph unicode="]" horiz-adv-x="663" d="M78 -182h223v1501h-223v131h401v-1761h-401v129z" /> +<glyph unicode="^" d="M113 571l313 801h197l315 -801h-199l-112 310l-99 276h-8l-96 -276l-113 -310h-198z" /> +<glyph unicode="_" horiz-adv-x="1024" d="M25 -131h974v-141h-974v141z" /> +<glyph unicode="`" horiz-adv-x="1124" d="M295 1473h233l185 -299h-177z" /> +<glyph unicode="a" horiz-adv-x="1071" d="M106 270q0 162 141.5 250t450.5 123q0 39 -10 75t-31.5 63.5t-55.5 43t-85 15.5q-76 0 -146.5 -29t-136.5 -70l-86 158q84 53 187.5 92t224.5 39q190 0 282.5 -111.5t92.5 -322.5v-596h-193l-18 111h-6q-68 -57 -144.5 -96.5t-166.5 -39.5q-133 0 -216.5 81t-83.5 214z M336 289q0 -68 40 -98.5t103 -30.5q61 0 112.5 28.5t106.5 81.5v226q-102 -12 -171.5 -33t-111.5 -46.5t-60.5 -58t-18.5 -69.5z" /> +<glyph unicode="b" horiz-adv-x="1155" d="M150 0v1446h235v-373l-6 -168q63 55 138 90t153 35q94 0 167.5 -36t125 -102.5t78 -160.5t26.5 -211q0 -129 -36 -230.5t-95 -171t-137 -106.5t-162 -37q-70 0 -140.5 33t-134.5 94h-6l-20 -102h-186zM385 254q53 -47 105.5 -65.5t97.5 -18.5q100 0 167.5 87t67.5 259 q0 152 -51 236t-166 84q-106 0 -221 -113v-469z" /> +<glyph unicode="c" horiz-adv-x="946" d="M84 502q0 125 41 223t110.5 165.5t160.5 103.5t192 36q98 0 170.5 -33.5t124.5 -83.5l-113 -149q-41 35 -82 54.5t-88 19.5q-123 0 -198.5 -91.5t-75.5 -244.5q0 -152 74.5 -243t193.5 -91q61 0 113.5 25.5t93.5 60.5l98 -150q-72 -63 -158 -96t-172 -33q-102 0 -191 35 t-154.5 102.5t-102.5 166t-37 223.5z" /> +<glyph unicode="d" horiz-adv-x="1155" d="M88 502q0 123 36 221t95.5 165.5t136 104.5t158.5 37q86 0 145.5 -29.5t118.5 -80.5l-8 161v365h236v-1446h-195l-16 109h-9q-55 -55 -128.5 -94.5t-155.5 -39.5q-190 0 -302 138.5t-112 388.5zM332 504q0 -164 58.5 -249t168.5 -85q113 0 211 113v469 q-53 47 -103.5 65.5t-101.5 18.5q-98 0 -165.5 -86t-67.5 -246z" /> +<glyph unicode="e" horiz-adv-x="1038" d="M84 502q0 123 39 221t103.5 165.5t148.5 104.5t172 37q102 0 180 -34.5t130 -98t79 -152t27 -192.5q0 -70 -11 -111h-639q16 -137 95 -210.5t202 -73.5q66 0 122 19.5t112 53.5l80 -147q-72 -47 -160 -78t-184 -31q-104 0 -194.5 36t-158 103.5t-105.5 165t-38 222.5z M311 592h447q0 121 -50.5 188.5t-154.5 67.5q-90 0 -157.5 -64.5t-84.5 -191.5z" /> +<glyph unicode="f" horiz-adv-x="649" d="M55 819v176l135 11v104q0 78 18.5 144.5t59.5 114.5t103.5 74.5t152.5 26.5q53 0 101.5 -10t83.5 -24l-45 -176q-53 24 -107 24h-4q-127 0 -127 -170v-108h197v-187h-197v-819h-236v819h-135z" /> +<glyph unicode="g" horiz-adv-x="1064" d="M82 -182q0 63 37 117.5t106 97.5v8q-39 25 -64.5 65.5t-25.5 102.5q0 59 34 107.5t77 78.5v8q-51 39 -91 108t-40 159q0 86 32.5 153.5t87 113.5t126 69.5t151.5 23.5q41 0 79 -7t68 -17h361v-175h-184q25 -29 41 -72.5t16 -96.5q0 -84 -29.5 -147.5t-81 -106.5t-121 -66 t-149.5 -23q-33 0 -67.5 6.5t-69.5 20.5q-23 -20 -36 -40.5t-13 -55.5q0 -43 35.5 -67.5t127.5 -24.5h179q182 0 275 -58.5t93 -189.5q0 -74 -37.5 -139.5t-107.5 -112.5t-169 -74.5t-222 -27.5q-90 0 -167 16t-132.5 49t-87 82t-31.5 115zM279 -147q0 -68 68.5 -106 t189.5 -38q123 0 197.5 48t74.5 114q0 59 -46 79.5t-132 20.5h-137q-82 0 -138 15q-77 -59 -77 -133zM336 670q0 -98 51 -150.5t125 -52.5q72 0 123 52t51 151q0 94 -50 146t-124 52t-125 -51t-51 -147z" /> +<glyph unicode="h" horiz-adv-x="1142" d="M150 0v1446h235v-373l-8 -194q63 59 140 105t181 46q162 0 236 -103.5t74 -295.5v-631h-236v600q0 125 -37 176t-121 51q-66 0 -115.5 -31.5t-113.5 -93.5v-702h-235z" /> +<glyph unicode="i" horiz-adv-x="536" d="M123 1315q0 59 41 97t104 38t104.5 -38t41.5 -97t-41.5 -96t-104.5 -37t-104 36.5t-41 96.5zM150 0v1006h235v-1006h-235z" /> +<glyph unicode="j" horiz-adv-x="538" d="M-94 -395l45 176q20 -6 41.5 -11.5t44.5 -5.5q68 0 91.5 46.5t23.5 134.5v1061h237v-1057q0 -80 -16.5 -147.5t-54 -118t-99 -78t-149.5 -27.5q-55 0 -95.5 8t-68.5 19zM125 1315q0 59 42 97t103 38q63 0 105.5 -38t42.5 -97t-42.5 -96t-105.5 -37q-61 0 -103 36.5 t-42 96.5z" /> +<glyph unicode="k" horiz-adv-x="1069" d="M150 0v1446h231v-903h6l373 463h258l-344 -410l379 -596h-256l-258 436l-158 -180v-256h-231z" /> +<glyph unicode="l" horiz-adv-x="555" d="M150 258v1188h235v-1200q0 -43 16.5 -60.5t34.5 -17.5h15.5t21.5 4l31 -176q-47 -20 -125 -21q-127 0 -178 76t-51 207z" /> +<glyph unicode="m" horiz-adv-x="1726" d="M150 0v1006h194l16 -138h9q63 68 138 115t169 47q111 0 177.5 -47t100.5 -133q72 78 150 129t174 51q160 0 235.5 -103.5t75.5 -295.5v-631h-237v600q0 125 -38 176t-116 51q-94 0 -211 -125v-702h-235v600q0 125 -38 176t-118 51q-94 0 -211 -125v-702h-235z" /> +<glyph unicode="n" horiz-adv-x="1146" d="M150 0v1006h194l16 -136h9q68 66 146.5 113t182.5 47q162 0 236 -103.5t74 -295.5v-631h-236v600q0 125 -37 176t-121 51q-66 0 -115.5 -31.5t-113.5 -93.5v-702h-235z" /> +<glyph unicode="o" horiz-adv-x="1124" d="M84 502q0 125 39 223t105.5 165.5t152.5 103.5t180 36t181 -36t153 -103.5t105.5 -165.5t39.5 -223t-39.5 -223.5t-105.5 -166t-153 -102.5t-181 -35t-180 35t-152.5 102.5t-105.5 166t-39 223.5zM326 502q0 -152 62.5 -243t172.5 -91q111 0 174.5 91t63.5 243 q0 154 -63.5 245t-174.5 91t-173 -91t-62 -245z" /> +<glyph unicode="p" horiz-adv-x="1155" d="M150 -397v1403h194l16 -107h9q63 53 141 92t162 39q94 0 166.5 -36t124 -103.5t78 -161.5t26.5 -211q0 -129 -36 -230.5t-95 -170t-137 -105.5t-162 -37q-66 0 -131.5 29t-126.5 82l6 -168v-315h-235zM385 254q55 -47 106.5 -65.5t96.5 -18.5q100 0 167.5 87t67.5 259 q0 152 -51 236t-166 84q-106 0 -221 -113v-469z" /> +<glyph unicode="q" horiz-adv-x="1148" d="M88 502q0 123 36 221t95.5 165.5t136 104.5t158.5 37q86 0 150.5 -29.5t128.5 -91.5h6l20 97h187v-1403h-236v329l8 166q-55 -53 -126.5 -88t-149.5 -35q-190 0 -302 138.5t-112 388.5zM332 504q0 -164 58.5 -249t168.5 -85q113 0 211 113v469q-53 47 -103.5 65.5 t-101.5 18.5q-98 0 -165.5 -86t-67.5 -246z" /> +<glyph unicode="r" horiz-adv-x="763" d="M150 0v1006h194l16 -179h9q53 98 128.5 150.5t155.5 52.5q72 0 115 -20l-41 -205q-27 8 -49.5 12t-54.5 4q-59 0 -125 -46t-113 -161v-614h-235z" /> +<glyph unicode="s" horiz-adv-x="882" d="M49 115l111 151q68 -53 134 -82.5t144 -29.5q82 0 121 33.5t39 86.5q0 31 -18.5 54.5t-49 42t-69.5 34t-78 31.5q-49 18 -100.5 43t-91 59.5t-65.5 81t-26 109.5q0 133 98.5 217t268.5 84q104 0 188 -37t146 -84l-109 -143q-53 39 -107.5 62.5t-113.5 23.5 q-76 0 -111.5 -32t-35.5 -79q0 -29 17 -50t46 -38.5t67 -32t78 -28.5q51 -18 102.5 -42t93.5 -58.5t67.5 -85t25.5 -119.5q0 -66 -25.5 -122t-74.5 -98t-123 -67t-168 -25q-104 0 -205.5 40t-175.5 100z" /> +<glyph unicode="t" horiz-adv-x="739" d="M41 819v176l156 11l28 274h197v-274h256v-187h-256v-479q0 -176 141 -176q27 0 54.5 6t50.5 16l41 -174q-41 -14 -93.5 -25.5t-111.5 -11.5q-88 0 -148.5 27t-98.5 75t-55.5 114.5t-17.5 148.5v479h-143z" /> +<glyph unicode="u" horiz-adv-x="1138" d="M139 375v631h236v-600q0 -125 37 -176.5t118 -51.5q66 0 116 33t108 106v689h235v-1006h-192l-19 147h-6q-66 -78 -142.5 -125t-180.5 -47q-162 0 -236 103.5t-74 296.5z" /> +<glyph unicode="v" horiz-adv-x="1013" d="M25 1006h239l160 -523q20 -74 41.5 -149.5t42.5 -153.5h8q23 78 43.5 154t42.5 149l160 523h227l-342 -1006h-272z" /> +<glyph unicode="w" horiz-adv-x="1531" d="M49 1006h238l121 -523q16 -72 27 -143.5t26 -144.5h8q14 74 29.5 145.5t33.5 142.5l132 523h215l133 -523q18 -72 34.5 -143.5t32.5 -144.5h8q14 74 26.5 145.5t27.5 142.5l121 523h221l-256 -1006h-281l-117 469q-16 72 -30.5 142.5t-30.5 150.5h-8 q-14 -80 -28.5 -151.5t-31.5 -143.5l-114 -467h-271z" /> +<glyph unicode="x" horiz-adv-x="985" d="M29 0l319 524l-299 482h254l113 -191q23 -41 46 -85t46 -85h8q18 41 38.5 85t39.5 85l96 191h244l-297 -508l319 -498h-254l-122 199q-25 45 -50.5 90t-52.5 88h-8q-23 -43 -44.5 -87t-43.5 -91l-107 -199h-245z" /> +<glyph unicode="y" horiz-adv-x="1013" d="M25 1006h239l174 -494q23 -66 44.5 -138.5t43.5 -144.5h9q18 70 37.5 142.5t37.5 140.5l152 494h227l-364 -1051q-31 -86 -68 -153.5t-85 -115.5t-110.5 -74t-144.5 -26q-41 0 -71.5 5.5t-59.5 15.5l43 184q14 -4 33.5 -9t38.5 -5q80 0 128 48t72 124l19 63z" /> +<glyph unicode="z" horiz-adv-x="907" d="M70 0v127l475 692h-422v187h717v-125l-473 -693h489v-188h-786z" /> +<glyph unicode="{" horiz-adv-x="663" d="M66 498v143q51 0 84.5 14.5t54 36t29 48t8.5 55.5q0 96 -9.5 181t-9.5 191q0 162 60.5 222.5t189.5 60.5h113v-131h-49q-72 0 -97.5 -35t-25.5 -127q0 -86 5 -173t5 -179q0 -111 -33 -162t-104 -70v-8q72 -18 104.5 -70.5t32.5 -160.5q0 -98 -5 -181t-5 -171 q0 -92 25.5 -128t97.5 -36h49v-129h-113q-63 0 -110.5 13t-78 46t-46 87t-15.5 136q0 55 3 101.5t6.5 89.5t6.5 87t3 93q0 29 -8.5 56.5t-29 49t-54 36t-84.5 14.5z" /> +<glyph unicode="|" horiz-adv-x="522" d="M182 -512v2048h158v-2048h-158z" /> +<glyph unicode="}" horiz-adv-x="663" d="M78 -182h47q74 0 99.5 35.5t25.5 128.5q0 88 -5 171t-5 181q0 109 32.5 161t104.5 70v8q-72 18 -104.5 69.5t-32.5 162.5q0 92 5 179t5 173q0 92 -25.5 127t-99.5 35h-47v131h110q63 0 111.5 -14.5t79.5 -47t46 -87t15 -134.5q0 -106 -9 -191t-9 -181q0 -29 8 -55.5 t28.5 -48t54.5 -36t85 -14.5v-143q-51 0 -85 -14.5t-54.5 -36t-28.5 -49t-8 -56.5q0 -49 3 -93t6 -87t6 -89t3 -102q0 -82 -15 -136t-46 -87t-79 -46t-112 -13h-110v129z" /> +<glyph unicode="~" d="M66 645q66 106 138 152.5t144 46.5q61 0 109.5 -25.5t89.5 -56.5t79 -56.5t81 -25.5q86 0 151 121l125 -96q-66 -104 -137.5 -150.5t-143.5 -46.5q-61 0 -109 25.5t-89 56.5t-79 56.5t-81 25.5q-86 0 -151 -121z" /> +<glyph unicode="¡" horiz-adv-x="645" d="M170 872q0 68 44 113t110 45t108.5 -45t42.5 -113q0 -72 -43 -116.5t-108 -44.5q-66 0 -110 45t-44 116zM205 -367l6 234l33 698h157l33 -698l8 -234h-237z" /> +<glyph unicode="¢" d="M125 631q0 106 32.5 193t89 150.5t134.5 103.5t170 55v206h135v-200q86 -4 150.5 -37t111.5 -80l-110 -145q-72 63 -152 71v-631q53 4 98 29t82 55l99 -149q-59 -53 -132 -85t-147 -42v-201h-135v203q-193 25 -309.5 154t-116.5 350zM354 631q0 -115 51.5 -193 t145.5 -106v600q-94 -31 -145.5 -109t-51.5 -192z" /> +<glyph unicode="£" d="M104 0v145q98 49 158 138.5t60 201.5q0 23 -2.5 42.5t-6.5 41.5h-204v142l137 10h24q-16 53 -29.5 105.5t-13.5 103.5q0 92 30 165.5t84 125t130 79t166 27.5q113 0 193.5 -43t142.5 -117l-131 -129q-39 45 -82 71t-103 26q-96 0 -149 -56.5t-53 -160.5q0 -51 10 -99.5 t24 -97.5h316v-152h-281q6 -43 6 -86q0 -92 -26.5 -153.5t-81.5 -120.5v-8h553v-201h-871z" /> +<glyph unicode="¤" d="M47 313l127 129q-35 47 -53.5 105.5t-18.5 126.5q0 70 18.5 128t53.5 105l-127 129l121 123l139 -143q98 63 217 63t217 -63l142 143l121 -123l-130 -129q35 -47 53.5 -105.5t18.5 -127.5q0 -68 -18.5 -126.5t-53.5 -105.5l130 -129l-121 -123l-142 144 q-47 -33 -103 -48.5t-114 -15.5q-57 0 -112.5 15.5t-102.5 48.5l-141 -144zM315 674q0 -106 61.5 -171t147.5 -65q88 0 148.5 64.5t60.5 171.5q0 109 -60.5 173t-148.5 64q-86 0 -147.5 -64t-61.5 -173z" /> +<glyph unicode="¥" d="M37 1303h244l131 -310q29 -68 55.5 -135t56.5 -137h8q29 70 56.5 137.5t56.5 134.5l131 310h238l-318 -627h271v-121h-324v-121h324v-123h-324v-311h-237v311h-322v123h322v121h-322v121h268z" /> +<glyph unicode="¦" horiz-adv-x="522" d="M182 428h158v-940h-158v940zM182 618v918h158v-918h-158z" /> +<glyph unicode="§" d="M84 684q0 84 46 151.5t124 112.5q-61 68 -61 168q0 61 21.5 114.5t64.5 92.5t105 61.5t144 22.5q109 0 196 -39t148 -86l-110 -149q-47 41 -103.5 68.5t-117.5 27.5q-72 0 -103.5 -29t-31.5 -74q0 -47 41.5 -78.5t103 -61.5t135.5 -61.5t135.5 -76.5t103.5 -109.5 t42 -156.5q0 -94 -45 -158t-125 -111q25 -33 39 -72.5t14 -90.5q0 -66 -24.5 -120.5t-71.5 -95t-115 -63.5t-152 -23q-111 0 -211 41t-165 119l139 123q51 -51 108.5 -78.5t128.5 -27.5q72 0 110 32.5t38 81.5t-41 82t-102.5 61.5t-132 59.5t-132 75t-102.5 107.5t-41 159.5 zM287 700q0 -57 36.5 -95t93 -68.5t124 -58t129.5 -62.5q47 25 70.5 59.5t23.5 87.5q0 57 -36 97t-92 71t-124 57.5t-129 61.5q-47 -29 -71.5 -64t-24.5 -86z" /> +<glyph unicode="¨" horiz-adv-x="1124" d="M250 1309q0 51 33.5 86t87.5 35q53 0 87.5 -35t34.5 -86q0 -53 -34.5 -88t-87.5 -35t-87 34.5t-34 88.5zM629 1309q0 51 34.5 86t87.5 35t87 -35t34 -86q0 -53 -34 -88t-87 -35t-87.5 34.5t-34.5 88.5z" /> +<glyph unicode="©" horiz-adv-x="1529" d="M96 664q0 158 54.5 282.5t145.5 212.5t213 134t257 46t256 -46t212 -134t145.5 -213t54.5 -282q0 -158 -54.5 -284t-145.5 -215t-212 -137t-256 -48t-257 48t-213 137t-145.5 215t-54.5 284zM215 664q0 -129 43 -235.5t118 -182.5t175 -118t215 -42t215 42t174 118 t117 182.5t43 235.5t-43 234.5t-117 180t-174 115.5t-215 41t-215 -41t-175 -115.5t-118 -180t-43 -234.5zM401 662q0 90 32 162.5t86 122.5t124 78t145 28q92 0 154 -35t111 -84l-92 -103q-39 37 -76 56.5t-84 19.5q-104 0 -163.5 -69.5t-59.5 -175.5q0 -119 58 -189 t157 -70q59 0 102 23t84 57l80 -114q-57 -47 -122 -79t-151 -32q-82 0 -152.5 27.5t-121.5 80t-81 127.5t-30 169z" /> +<glyph unicode="ª" horiz-adv-x="720" d="M68 715q0 109 93 167t302 76q-4 55 -28.5 88t-86.5 33q-47 0 -97 -19.5t-97 -45.5l-62 112q59 37 132 64t153 27q256 0 256 -291v-394h-137l-17 72h-8q-41 -37 -90.5 -62.5t-108.5 -25.5q-94 0 -149 56.5t-55 142.5zM233 729q1 -82 95 -82q35 0 67.5 17.5t67.5 50.5v143 q-129 -14 -179.5 -48t-50.5 -81z" /> +<glyph unicode="«" horiz-adv-x="933" d="M96 430v172l277 305l94 -76l-236 -315l236 -317l-94 -74zM452 430v172l277 305l94 -76l-236 -315l236 -317l-94 -74z" /> +<glyph unicode="¬" d="M70 590v172h911v-559h-178v387h-733z" /> +<glyph unicode="­" horiz-adv-x="659" d="M86 430v172h487v-172h-487z" /> +<glyph unicode="®" horiz-adv-x="907" d="M57 1053q0 90 31 165.5t85 130t126 84t154 29.5t153.5 -29.5t125.5 -84t85 -130t31 -165.5t-31 -165t-85 -129t-125.5 -84t-153.5 -30t-154 30t-126 84t-85 129t-31 165zM154 1053q0 -72 22.5 -130.5t62.5 -100.5t94 -65.5t120 -23.5q63 0 118.5 23.5t95.5 65.5 t62.5 100.5t22.5 130.5t-22.5 131t-62.5 102t-95.5 66.5t-118.5 23.5q-66 0 -120 -23.5t-94 -66.5t-62.5 -102.5t-22.5 -130.5zM295 854v408h170q68 0 116 -31t48 -103q0 -35 -19.5 -65.5t-56.5 -46.5l90 -162h-108l-68 133h-70v-133h-102zM397 1061h47q35 0 55.5 16.5 t20.5 44.5q0 27 -17.5 44.5t-56.5 17.5h-49v-123z" /> +<glyph unicode="¯" horiz-adv-x="1124" d="M295 1221v155h532v-155h-532z" /> +<glyph unicode="°" horiz-adv-x="712" d="M82 1124q0 61 21.5 112.5t59.5 88.5t88 57.5t107 20.5t107.5 -20.5t88.5 -57.5t59.5 -88t21.5 -113q0 -61 -21.5 -112t-59.5 -88t-88.5 -57.5t-107.5 -20.5t-107 20.5t-88 57.5t-59.5 88t-21.5 112zM213 1124q0 -70 39.5 -113.5t105.5 -43.5t106 44t40 113q0 72 -40 116 t-106 44t-105.5 -44t-39.5 -116z" /> +<glyph unicode="±" d="M70 0v170h911v-170h-911zM70 612v170h366v367h178v-367h367v-170h-367v-319h-178v319h-366z" /> +<glyph unicode="²" horiz-adv-x="761" d="M68 1565q53 76 126.5 117.5t159.5 41.5q127 0 204 -67.5t77 -196.5q0 -53 -19.5 -102t-54.5 -99.5t-81 -101.5t-99 -106h289v-150h-572v98q172 147 268.5 247.5t96.5 184.5q0 68 -36 107t-99 39q-45 0 -84 -30t-74 -77z" /> +<glyph unicode="³" horiz-adv-x="761" d="M63 1036l111 86q74 -109 186 -108q57 0 97.5 30.5t40.5 87.5q0 59 -56.5 91t-162.5 32v105q88 0 138 32.5t50 90.5q0 47 -33 75.5t-88 28.5q-41 0 -79 -24.5t-68 -63.5l-103 90q59 66 124 100.5t155 34.5q53 0 101 -15t85 -43t58.5 -69t21.5 -92q0 -68 -34 -114t-93 -76 q66 -23 112 -71t46 -124q0 -55 -23.5 -100t-64.5 -77t-95.5 -49.5t-113.5 -17.5q-102 0 -182 43t-130 117z" /> +<glyph unicode="´" horiz-adv-x="1124" d="M409 1174l185 299h233l-241 -299h-177z" /> +<glyph unicode="µ" horiz-adv-x="1150" d="M150 -410v1416h235v-600q0 -125 38 -176.5t120 -51.5q66 0 115 33t108 106v689h235v-1006h-194l-16 147h-9q-47 -78 -111.5 -118.5t-142.5 -40.5q-49 0 -88 12t-67 53l12 -184v-279h-235z" /> +<glyph unicode="¶" horiz-adv-x="1226" d="M82 893q0 125 39 210t107.5 137t161.5 75.5t200 23.5h90v-905h-76q-111 0 -206 27.5t-165.5 85t-110.5 143.5t-40 203zM793 -164v1503h237v-1503h-237z" /> +<glyph unicode="·" horiz-adv-x="563" d="M129 657q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45q-66 0 -110 45t-44 115z" /> +<glyph unicode="¸" horiz-adv-x="1124" d="M376 -342q78 10 127.5 31.5t49.5 62.5q0 33 -30 55.5t-95 38.5l82 160h143l-47 -100q51 -18 86 -52t35 -98q0 -49 -27 -83.5t-73 -59.5t-105 -39t-125 -18z" /> +<glyph unicode="¹" horiz-adv-x="761" d="M168 1503v111q76 12 121 31.5t92 54.5h141v-799h-178v602h-176z" /> +<glyph unicode="º" horiz-adv-x="755" d="M55 864q0 84 25.5 149.5t71 110.5t102.5 69t123 24q63 0 121.5 -24t103.5 -69t70.5 -110.5t25.5 -149.5q0 -82 -25.5 -146.5t-70.5 -109.5t-103.5 -68.5t-121.5 -23.5q-66 0 -123 23.5t-102.5 68.5t-71 109.5t-25.5 146.5zM229 864q0 -94 38 -152.5t110 -58.5t109.5 58.5 t37.5 152.5q0 98 -37.5 156.5t-109.5 58.5t-110 -58t-38 -157z" /> +<glyph unicode="»" horiz-adv-x="933" d="M111 199l233 317l-233 315l92 76l278 -305v-172l-278 -305zM467 199l233 317l-233 315l92 76l278 -305v-172l-278 -305z" /> +<glyph unicode="¼" horiz-adv-x="1628" d="M115 1143v111q76 12 121 31.5t92 54.5h141v-799h-178v602h-176zM375 -25l731 1389h143l-729 -1389h-145zM944 195v90l311 514h213v-484h119v-120h-119v-195h-158v195h-366zM1116 315h194v113l11 231h-9l-92 -161z" /> +<glyph unicode="½" horiz-adv-x="1693" d="M115 1143v111q76 12 121 31.5t92 54.5h141v-799h-178v602h-176zM338 -25l731 1389h143l-729 -1389h-145zM1000 664q53 76 126.5 117.5t159.5 41.5q127 0 204 -67.5t77 -196.5q0 -53 -19.5 -102t-54.5 -99.5t-81 -101.5t-99 -106h289v-150h-572v98q172 147 268.5 247.5 t96.5 184.5q0 68 -36 107t-99 39q-45 0 -84 -30t-74 -77z" /> +<glyph unicode="¾" horiz-adv-x="1652" d="M61 676l111 86q74 -109 186 -108q57 0 97.5 30.5t40.5 87.5q0 59 -56.5 91t-162.5 32v105q88 0 138 32.5t50 90.5q0 47 -33 75.5t-88 28.5q-41 0 -79 -24.5t-68 -63.5l-103 90q59 66 124 100.5t155 34.5q53 0 101 -15t85 -43t58.5 -69t21.5 -92q0 -68 -34 -114t-93 -76 q66 -23 112 -71t46 -124q0 -55 -23.5 -100t-64.5 -77t-95.5 -49.5t-113.5 -17.5q-102 0 -182 43t-130 117zM434 -25l731 1389h143l-729 -1389h-145zM969 195v90l311 514h213v-484h119v-120h-119v-195h-158v195h-366zM1141 315h194v113l11 231h-9l-92 -161z" /> +<glyph unicode="¿" horiz-adv-x="909" d="M92 -51q0 66 23.5 118t58.5 99t74 90t70.5 90t50 100.5t12.5 118.5h209q10 -76 -6.5 -136t-46 -111.5t-67.5 -95.5t-71.5 -86t-56.5 -84t-23 -87q0 -72 44.5 -118t123.5 -46q61 0 112.5 30t96.5 77l133 -121q-68 -78 -157.5 -128t-200.5 -50q-84 0 -152.5 21.5t-120 64.5 t-79 106.5t-27.5 147.5zM332 872q0 68 43 113t108 45q66 0 109 -45t43 -113q0 -72 -43 -116.5t-109 -44.5t-108.5 45t-42.5 116z" /> +<glyph unicode="À" horiz-adv-x="1136" d="M-8 0l438 1339h279l436 -1339h-252l-105 362h-448l-104 -362h-244zM262 1679h258l172 -237h-190zM393 549h342l-47 164q-31 106 -61.5 218.5t-59.5 223.5h-8q-29 -113 -57.5 -224.5t-61.5 -217.5z" /> +<glyph unicode="Á" horiz-adv-x="1136" d="M-8 0l438 1339h279l436 -1339h-252l-105 362h-448l-104 -362h-244zM393 549h342l-47 164q-31 106 -61.5 218.5t-59.5 223.5h-8q-29 -113 -57.5 -224.5t-61.5 -217.5zM434 1442l172 237h258l-240 -237h-190z" /> +<glyph unicode="Â" horiz-adv-x="1136" d="M-8 0l438 1339h279l436 -1339h-252l-105 362h-448l-104 -362h-244zM252 1442l196 237h230l196 -237h-184l-123 131h-8l-123 -131h-184zM393 549h342l-47 164q-31 106 -61.5 218.5t-59.5 223.5h-8q-29 -113 -57.5 -224.5t-61.5 -217.5z" /> +<glyph unicode="Ã" horiz-adv-x="1136" d="M-8 0l438 1339h279l436 -1339h-252l-105 362h-448l-104 -362h-244zM239 1448q12 119 65.5 184.5t131.5 65.5q41 0 75 -15.5t63.5 -34t55 -34t52.5 -15.5q29 0 49 24t31 75h125q-12 -117 -65.5 -183.5t-131.5 -66.5q-41 0 -75 15.5t-63.5 35t-55 34.5t-52.5 15 q-29 0 -49 -24.5t-31 -75.5h-125zM393 549h342l-47 164q-31 106 -61.5 218.5t-59.5 223.5h-8q-29 -113 -57.5 -224.5t-61.5 -217.5z" /> +<glyph unicode="Ä" horiz-adv-x="1136" d="M-8 0l438 1339h279l436 -1339h-252l-105 362h-448l-104 -362h-244zM252 1571q0 53 33.5 88t87.5 35q53 0 87.5 -35t34.5 -88t-34.5 -87t-87.5 -34t-87 34t-34 87zM393 549h342l-47 164q-31 106 -61.5 218.5t-59.5 223.5h-8q-29 -113 -57.5 -224.5t-61.5 -217.5zM631 1571 q0 53 34.5 88t87.5 35t87 -35t34 -88t-34 -87t-87 -34t-87.5 34t-34.5 87z" /> +<glyph unicode="Å" horiz-adv-x="1136" d="M-8 0l438 1339h279l436 -1339h-252l-105 362h-448l-104 -362h-244zM352 1620q0 86 58.5 138t152.5 52q92 0 151.5 -52t59.5 -138q0 -88 -59.5 -139t-151.5 -51q-94 0 -152.5 51t-58.5 139zM393 549h342l-47 164q-31 106 -61.5 218.5t-59.5 223.5h-8 q-29 -113 -57.5 -224.5t-61.5 -217.5zM473 1620q0 -47 25.5 -71.5t64.5 -24.5q37 0 63.5 24.5t26.5 71.5q0 45 -26.5 70.5t-63.5 25.5q-39 0 -64.5 -25.5t-25.5 -70.5z" /> +<glyph unicode="Æ" horiz-adv-x="1701" d="M-8 0l667 1339h922v-200h-541v-342h453v-201h-453v-395h562v-201h-799v348h-395l-170 -348h-246zM498 535h305v622h-8q-47 -104 -96.5 -206.5t-96.5 -200.5z" /> +<glyph unicode="Ç" horiz-adv-x="1173" d="M96 666q0 164 48.5 294t132 220t196.5 137t242 47q123 0 220 -51t161 -119l-131 -147q-53 51 -111.5 80.5t-136.5 29.5q-82 0 -151.5 -33.5t-120 -96t-78 -153t-27.5 -202.5q0 -229 100.5 -359.5t268.5 -130.5q90 0 157.5 35t124.5 98l131 -145q-82 -94 -185 -144.5 t-232 -50.5q-127 0 -239 45.5t-194 133.5t-129 217t-47 295zM512 -342q78 10 127.5 31.5t49.5 62.5q0 33 -30 55.5t-95 38.5l82 160h143l-47 -100q51 -18 86 -52t35 -98q0 -49 -27 -83.5t-73 -59.5t-105 -39t-125 -18z" /> +<glyph unicode="È" horiz-adv-x="1093" d="M168 0v1339h805v-200h-567v-342h481v-201h-481v-395h587v-201h-825zM283 1679h258l172 -237h-190z" /> +<glyph unicode="É" horiz-adv-x="1093" d="M168 0v1339h805v-200h-567v-342h481v-201h-481v-395h587v-201h-825zM455 1442l172 237h258l-240 -237h-190z" /> +<glyph unicode="Ê" horiz-adv-x="1093" d="M168 0v1339h805v-200h-567v-342h481v-201h-481v-395h587v-201h-825zM273 1442l196 237h230l196 -237h-184l-123 131h-8l-123 -131h-184z" /> +<glyph unicode="Ë" horiz-adv-x="1093" d="M168 0v1339h805v-200h-567v-342h481v-201h-481v-395h587v-201h-825zM273 1571q0 53 33.5 88t87.5 35q53 0 87.5 -35t34.5 -88t-34.5 -87t-87.5 -34t-87 34t-34 87zM652 1571q0 53 34.5 88t87.5 35t87 -35t34 -88t-34 -87t-87 -34t-87.5 34t-34.5 87z" /> +<glyph unicode="Ì" horiz-adv-x="571" d="M-16 1679h258l172 -237h-190zM168 0v1339h238v-1339h-238z" /> +<glyph unicode="Í" horiz-adv-x="571" d="M156 1442l172 237h258l-240 -237h-190zM168 0v1339h238v-1339h-238z" /> +<glyph unicode="Î" horiz-adv-x="571" d="M-26 1442l196 237h230l196 -237h-184l-123 131h-8l-123 -131h-184zM168 0v1339h238v-1339h-238z" /> +<glyph unicode="Ï" horiz-adv-x="571" d="M-26 1571q0 53 33.5 88t87.5 35q53 0 87.5 -35t34.5 -88t-34.5 -87t-87.5 -34t-87 34t-34 87zM168 0v1339h238v-1339h-238zM353 1571q0 53 34.5 88t87.5 35t87 -35t34 -88t-34 -87t-87 -34t-87.5 34t-34.5 87z" /> +<glyph unicode="Ð" horiz-adv-x="1320" d="M57 637v113l156 8v581h356q307 0 480.5 -165.5t173.5 -497.5q0 -166 -44 -293t-127 -212t-202 -128t-268 -43h-369v637h-156zM451 193h102q205 0 315.5 117.5t110.5 365.5q0 246 -111.5 358.5t-314.5 112.5h-102v-389h282v-121h-282v-444z" /> +<glyph unicode="Ñ" horiz-adv-x="1337" d="M168 0v1339h244l415 -753l140 -285h8q-10 104 -20.5 224t-10.5 233v581h225v-1339h-243l-416 754l-139 284h-9q10 -106 20.5 -223t10.5 -229v-586h-225zM348 1448q12 119 65.5 184.5t131.5 65.5q41 0 75 -15.5t63.5 -34t55 -34t52.5 -15.5q29 0 49 24t31 75h125 q-12 -117 -65.5 -183.5t-131.5 -66.5q-41 0 -75 15.5t-63.5 35t-55 34.5t-52.5 15q-29 0 -49 -24.5t-31 -75.5h-125z" /> +<glyph unicode="Ò" horiz-adv-x="1374" d="M96 676q0 162 43 290t122 216t187.5 135t239.5 47t239.5 -47t186.5 -135t121 -216t43 -290q0 -164 -43 -293t-121 -220t-186.5 -139.5t-239.5 -48.5t-239.5 48.5t-187.5 139.5t-122 220t-43 293zM340 676q0 -113 24.5 -204t70.5 -155.5t109.5 -99.5t143.5 -35 q78 0 142.5 35t109.5 99.5t69.5 155.5t24.5 204q0 225 -94 353t-252 128q-160 0 -254 -128t-94 -353zM385 1679h258l172 -237h-190z" /> +<glyph unicode="Ó" horiz-adv-x="1374" d="M96 676q0 162 43 290t122 216t187.5 135t239.5 47t239.5 -47t186.5 -135t121 -216t43 -290q0 -164 -43 -293t-121 -220t-186.5 -139.5t-239.5 -48.5t-239.5 48.5t-187.5 139.5t-122 220t-43 293zM340 676q0 -113 24.5 -204t70.5 -155.5t109.5 -99.5t143.5 -35 q78 0 142.5 35t109.5 99.5t69.5 155.5t24.5 204q0 225 -94 353t-252 128q-160 0 -254 -128t-94 -353zM557 1442l172 237h258l-240 -237h-190z" /> +<glyph unicode="Ô" horiz-adv-x="1374" d="M96 676q0 162 43 290t122 216t187.5 135t239.5 47t239.5 -47t186.5 -135t121 -216t43 -290q0 -164 -43 -293t-121 -220t-186.5 -139.5t-239.5 -48.5t-239.5 48.5t-187.5 139.5t-122 220t-43 293zM340 676q0 -113 24.5 -204t70.5 -155.5t109.5 -99.5t143.5 -35 q78 0 142.5 35t109.5 99.5t69.5 155.5t24.5 204q0 225 -94 353t-252 128q-160 0 -254 -128t-94 -353zM375 1442l196 237h230l196 -237h-184l-123 131h-8l-123 -131h-184z" /> +<glyph unicode="Õ" horiz-adv-x="1374" d="M96 676q0 162 43 290t122 216t187.5 135t239.5 47t239.5 -47t186.5 -135t121 -216t43 -290q0 -164 -43 -293t-121 -220t-186.5 -139.5t-239.5 -48.5t-239.5 48.5t-187.5 139.5t-122 220t-43 293zM340 676q0 -113 24.5 -204t70.5 -155.5t109.5 -99.5t143.5 -35 q78 0 142.5 35t109.5 99.5t69.5 155.5t24.5 204q0 225 -94 353t-252 128q-160 0 -254 -128t-94 -353zM362 1448q12 119 65.5 184.5t131.5 65.5q41 0 75 -15.5t63.5 -34t55 -34t52.5 -15.5q29 0 49 24t31 75h125q-12 -117 -65.5 -183.5t-131.5 -66.5q-41 0 -75 15.5t-63.5 35 t-55 34.5t-52.5 15q-29 0 -49 -24.5t-31 -75.5h-125z" /> +<glyph unicode="Ö" horiz-adv-x="1374" d="M96 676q0 162 43 290t122 216t187.5 135t239.5 47t239.5 -47t186.5 -135t121 -216t43 -290q0 -164 -43 -293t-121 -220t-186.5 -139.5t-239.5 -48.5t-239.5 48.5t-187.5 139.5t-122 220t-43 293zM340 676q0 -113 24.5 -204t70.5 -155.5t109.5 -99.5t143.5 -35 q78 0 142.5 35t109.5 99.5t69.5 155.5t24.5 204q0 225 -94 353t-252 128q-160 0 -254 -128t-94 -353zM375 1571q0 53 33.5 88t87.5 35q53 0 87.5 -35t34.5 -88t-34.5 -87t-87.5 -34t-87 34t-34 87zM754 1571q0 53 34.5 88t87.5 35t87 -35t34 -88t-34 -87t-87 -34t-87.5 34 t-34.5 87z" /> +<glyph unicode="×" d="M100 367l303 307l-303 309l121 123l303 -311l305 311l121 -123l-305 -309l305 -307l-121 -123l-305 309l-303 -309z" /> +<glyph unicode="Ø" horiz-adv-x="1374" d="M88 25l141 178q-63 90 -98 207.5t-35 265.5q0 162 43 290t122 216t187.5 135t239.5 47q213 0 361 -119l133 168l125 -98l-150 -191q59 -86 90 -197.5t31 -250.5q0 -164 -43 -293t-121 -220t-186.5 -139.5t-239.5 -48.5q-201 0 -346 111l-127 -160zM340 676 q0 -156 47 -273l520 662q-88 92 -219 92q-160 0 -254 -128t-94 -353zM481 264q86 -82 207 -82q78 0 142.5 35t109.5 99.5t69.5 155.5t24.5 204q0 137 -39 244z" /> +<glyph unicode="Ù" horiz-adv-x="1335" d="M160 588v751h237v-770q0 -109 19.5 -183.5t55.5 -119.5t86 -64.5t112 -19.5q61 0 112.5 19.5t87 64.5t56 120t20.5 183v770h230v-751q0 -166 -36 -282t-101.5 -189.5t-159 -107.5t-209.5 -34q-117 0 -211 34t-161 107.5t-102.5 189.5t-35.5 282zM367 1679h258l172 -237 h-190z" /> +<glyph unicode="Ú" horiz-adv-x="1335" d="M160 588v751h237v-770q0 -109 19.5 -183.5t55.5 -119.5t86 -64.5t112 -19.5q61 0 112.5 19.5t87 64.5t56 120t20.5 183v770h230v-751q0 -166 -36 -282t-101.5 -189.5t-159 -107.5t-209.5 -34q-117 0 -211 34t-161 107.5t-102.5 189.5t-35.5 282zM539 1442l172 237h258 l-240 -237h-190z" /> +<glyph unicode="Û" horiz-adv-x="1335" d="M160 588v751h237v-770q0 -109 19.5 -183.5t55.5 -119.5t86 -64.5t112 -19.5q61 0 112.5 19.5t87 64.5t56 120t20.5 183v770h230v-751q0 -166 -36 -282t-101.5 -189.5t-159 -107.5t-209.5 -34q-117 0 -211 34t-161 107.5t-102.5 189.5t-35.5 282zM357 1442l196 237h230 l196 -237h-184l-123 131h-8l-123 -131h-184z" /> +<glyph unicode="Ü" horiz-adv-x="1335" d="M160 588v751h237v-770q0 -109 19.5 -183.5t55.5 -119.5t86 -64.5t112 -19.5q61 0 112.5 19.5t87 64.5t56 120t20.5 183v770h230v-751q0 -166 -36 -282t-101.5 -189.5t-159 -107.5t-209.5 -34q-117 0 -211 34t-161 107.5t-102.5 189.5t-35.5 282zM357 1571q0 53 33.5 88 t87.5 35q53 0 87.5 -35t34.5 -88t-34.5 -87t-87.5 -34t-87 34t-34 87zM736 1571q0 53 34.5 88t87.5 35t87 -35t34 -88t-34 -87t-87 -34t-87.5 34t-34.5 87z" /> +<glyph unicode="Ý" horiz-adv-x="1019" d="M-12 1339h254l145 -342q29 -76 58.5 -146.5t60.5 -148.5h8q33 78 64.5 149t60.5 146l145 342h248l-403 -841v-498h-238v498zM381 1442l172 237h258l-240 -237h-190z" /> +<glyph unicode="Þ" horiz-adv-x="1232" d="M172 0v1339h238v-213h213q111 0 204 -21.5t160.5 -69.5t106.5 -127t39 -195q0 -113 -39 -195t-107.5 -135t-162 -78.5t-201.5 -25.5h-213v-279h-238zM410 469h192q152 0 223.5 60.5t71.5 183.5q0 125 -73.5 174t-221.5 49h-192v-467z" /> +<glyph unicode="ß" horiz-adv-x="1236" d="M150 0v1026q0 98 28.5 179t83.5 139.5t138 90t194 31.5q92 0 162.5 -26.5t119 -70.5t72 -101.5t23.5 -120.5q0 -76 -26.5 -128t-59.5 -94t-59.5 -81t-26.5 -84q0 -41 28.5 -69.5t70.5 -53.5t92 -50.5t92 -63.5t71 -93t29 -135q0 -68 -23.5 -126t-69 -101t-112 -68 t-150.5 -25q-86 0 -157.5 26t-141.5 71l86 161q104 -80 207 -79q68 0 105 38.5t37 92.5q0 49 -29 81.5t-71 59.5t-91 51.5t-91 58t-70.5 80t-28.5 115.5q0 63 25.5 109.5t55 88.5t55 86t25.5 105q0 70 -37.5 115t-111.5 45q-102 0 -156.5 -73.5t-54.5 -215.5v-991h-233z" /> +<glyph unicode="à" horiz-adv-x="1071" d="M106 270q0 162 141.5 250t450.5 123q0 39 -10 75t-31.5 63.5t-55.5 43t-85 15.5q-76 0 -146.5 -29t-136.5 -70l-86 158q84 53 187.5 92t224.5 39q190 0 282.5 -111.5t92.5 -322.5v-596h-193l-18 111h-6q-68 -57 -144.5 -96.5t-166.5 -39.5q-133 0 -216.5 81t-83.5 214z M297 1473h233l185 -299h-177zM336 289q0 -68 40 -98.5t103 -30.5q61 0 112.5 28.5t106.5 81.5v226q-102 -12 -171.5 -33t-111.5 -46.5t-60.5 -58t-18.5 -69.5z" /> +<glyph unicode="á" horiz-adv-x="1071" d="M106 270q0 162 141.5 250t450.5 123q0 39 -10 75t-31.5 63.5t-55.5 43t-85 15.5q-76 0 -146.5 -29t-136.5 -70l-86 158q84 53 187.5 92t224.5 39q190 0 282.5 -111.5t92.5 -322.5v-596h-193l-18 111h-6q-68 -57 -144.5 -96.5t-166.5 -39.5q-133 0 -216.5 81t-83.5 214z M336 289q0 -68 40 -98.5t103 -30.5q61 0 112.5 28.5t106.5 81.5v226q-102 -12 -171.5 -33t-111.5 -46.5t-60.5 -58t-18.5 -69.5zM411 1174l185 299h233l-241 -299h-177z" /> +<glyph unicode="â" horiz-adv-x="1071" d="M106 270q0 162 141.5 250t450.5 123q0 39 -10 75t-31.5 63.5t-55.5 43t-85 15.5q-76 0 -146.5 -29t-136.5 -70l-86 158q84 53 187.5 92t224.5 39q190 0 282.5 -111.5t92.5 -322.5v-596h-193l-18 111h-6q-68 -57 -144.5 -96.5t-166.5 -39.5q-133 0 -216.5 81t-83.5 214z M272 1174l197 299h188l197 -299h-164l-123 174h-8l-123 -174h-164zM336 289q0 -68 40 -98.5t103 -30.5q61 0 112.5 28.5t106.5 81.5v226q-102 -12 -171.5 -33t-111.5 -46.5t-60.5 -58t-18.5 -69.5z" /> +<glyph unicode="ã" horiz-adv-x="1071" d="M106 270q0 162 141.5 250t450.5 123q0 39 -10 75t-31.5 63.5t-55.5 43t-85 15.5q-76 0 -146.5 -29t-136.5 -70l-86 158q84 53 187.5 92t224.5 39q190 0 282.5 -111.5t92.5 -322.5v-596h-193l-18 111h-6q-68 -57 -144.5 -96.5t-166.5 -39.5q-133 0 -216.5 81t-83.5 214z M250 1182q12 117 62 182.5t128 65.5q39 0 73 -15.5t62.5 -34t53 -34t49.5 -15.5q53 0 73 99h125q-12 -117 -62 -182.5t-128 -65.5q-41 0 -74 15t-60.5 33.5t-53 34t-50.5 15.5q-53 0 -73 -98h-125zM336 289q0 -68 40 -98.5t103 -30.5q61 0 112.5 28.5t106.5 81.5v226 q-102 -12 -171.5 -33t-111.5 -46.5t-60.5 -58t-18.5 -69.5z" /> +<glyph unicode="ä" horiz-adv-x="1071" d="M106 270q0 162 141.5 250t450.5 123q0 39 -10 75t-31.5 63.5t-55.5 43t-85 15.5q-76 0 -146.5 -29t-136.5 -70l-86 158q84 53 187.5 92t224.5 39q190 0 282.5 -111.5t92.5 -322.5v-596h-193l-18 111h-6q-68 -57 -144.5 -96.5t-166.5 -39.5q-133 0 -216.5 81t-83.5 214z M252 1309q0 51 33.5 86t87.5 35q53 0 87.5 -35t34.5 -86q0 -53 -34.5 -88t-87.5 -35t-87 34.5t-34 88.5zM336 289q0 -68 40 -98.5t103 -30.5q61 0 112.5 28.5t106.5 81.5v226q-102 -12 -171.5 -33t-111.5 -46.5t-60.5 -58t-18.5 -69.5zM631 1309q0 51 34.5 86t87.5 35 t87 -35t34 -86q0 -53 -34 -88t-87 -35t-87.5 34.5t-34.5 88.5z" /> +<glyph unicode="å" horiz-adv-x="1071" d="M106 270q0 162 141.5 250t450.5 123q0 39 -10 75t-31.5 63.5t-55.5 43t-85 15.5q-76 0 -146.5 -29t-136.5 -70l-86 158q84 53 187.5 92t224.5 39q190 0 282.5 -111.5t92.5 -322.5v-596h-193l-18 111h-6q-68 -57 -144.5 -96.5t-166.5 -39.5q-133 0 -216.5 81t-83.5 214z M336 289q0 -68 40 -98.5t103 -30.5q61 0 112.5 28.5t106.5 81.5v226q-102 -12 -171.5 -33t-111.5 -46.5t-60.5 -58t-18.5 -69.5zM352 1315q0 92 58.5 146.5t152.5 54.5t152.5 -54.5t58.5 -146.5q0 -90 -58.5 -144.5t-152.5 -54.5t-152.5 54.5t-58.5 144.5zM473 1315 q0 -47 25.5 -76t64.5 -29t64.5 29t25.5 76t-25.5 76.5t-64.5 29.5t-64.5 -29.5t-25.5 -76.5z" /> +<glyph unicode="æ" horiz-adv-x="1607" d="M106 270q0 162 140.5 251t445.5 122q-2 39 -11 75t-29.5 63.5t-54.5 43t-85 15.5q-72 0 -142.5 -29t-136.5 -70l-86 158q84 53 184.5 92t211.5 39q104 0 174.5 -48t109.5 -134q61 86 138 134t176 48q96 0 168.5 -36t122 -99.5t75 -152.5t25.5 -193q0 -70 -10 -111h-615 q12 -131 89 -202.5t188 -71.5q66 0 119 21.5t108 56.5l84 -158q-72 -47 -159 -78t-183 -31q-119 0 -205 50.5t-145 121.5q-104 -90 -201.5 -131t-195.5 -41q-133 0 -216.5 81t-83.5 214zM336 289q0 -68 40 -98.5t103 -30.5q59 0 125 31.5t121 87.5q-16 35 -23.5 79.5 t-9.5 90.5l-4 47q-193 -27 -272.5 -78t-79.5 -129zM907 588h422q0 123 -49 191.5t-147 68.5q-86 0 -148.5 -67.5t-77.5 -192.5z" /> +<glyph unicode="ç" horiz-adv-x="946" d="M84 502q0 125 41 223t110.5 165.5t160.5 103.5t192 36q98 0 170.5 -33.5t124.5 -83.5l-113 -149q-41 35 -82 54.5t-88 19.5q-123 0 -198.5 -91.5t-75.5 -244.5q0 -152 74.5 -243t193.5 -91q61 0 113.5 25.5t93.5 60.5l98 -150q-72 -63 -158 -96t-172 -33q-102 0 -191 35 t-154.5 102.5t-102.5 166t-37 223.5zM376 -342q78 10 127.5 31.5t49.5 62.5q0 33 -30 55.5t-95 38.5l82 160h143l-47 -100q51 -18 86 -52t35 -98q0 -49 -27 -83.5t-73 -59.5t-105 -39t-125 -18z" /> +<glyph unicode="è" horiz-adv-x="1038" d="M84 502q0 123 39 221t103.5 165.5t148.5 104.5t172 37q102 0 180 -34.5t130 -98t79 -152t27 -192.5q0 -70 -11 -111h-639q16 -137 95 -210.5t202 -73.5q66 0 122 19.5t112 53.5l80 -147q-72 -47 -160 -78t-184 -31q-104 0 -194.5 36t-158 103.5t-105.5 165t-38 222.5z M281 1473h233l185 -299h-177zM311 592h447q0 121 -50.5 188.5t-154.5 67.5q-90 0 -157.5 -64.5t-84.5 -191.5z" /> +<glyph unicode="é" horiz-adv-x="1038" d="M84 502q0 123 39 221t103.5 165.5t148.5 104.5t172 37q102 0 180 -34.5t130 -98t79 -152t27 -192.5q0 -70 -11 -111h-639q16 -137 95 -210.5t202 -73.5q66 0 122 19.5t112 53.5l80 -147q-72 -47 -160 -78t-184 -31q-104 0 -194.5 36t-158 103.5t-105.5 165t-38 222.5z M311 592h447q0 121 -50.5 188.5t-154.5 67.5q-90 0 -157.5 -64.5t-84.5 -191.5zM395 1174l185 299h233l-241 -299h-177z" /> +<glyph unicode="ê" horiz-adv-x="1038" d="M84 502q0 123 39 221t103.5 165.5t148.5 104.5t172 37q102 0 180 -34.5t130 -98t79 -152t27 -192.5q0 -70 -11 -111h-639q16 -137 95 -210.5t202 -73.5q66 0 122 19.5t112 53.5l80 -147q-72 -47 -160 -78t-184 -31q-104 0 -194.5 36t-158 103.5t-105.5 165t-38 222.5z M256 1174l197 299h188l197 -299h-164l-123 174h-8l-123 -174h-164zM311 592h447q0 121 -50.5 188.5t-154.5 67.5q-90 0 -157.5 -64.5t-84.5 -191.5z" /> +<glyph unicode="ë" horiz-adv-x="1038" d="M84 502q0 123 39 221t103.5 165.5t148.5 104.5t172 37q102 0 180 -34.5t130 -98t79 -152t27 -192.5q0 -70 -11 -111h-639q16 -137 95 -210.5t202 -73.5q66 0 122 19.5t112 53.5l80 -147q-72 -47 -160 -78t-184 -31q-104 0 -194.5 36t-158 103.5t-105.5 165t-38 222.5z M236 1309q0 51 33.5 86t87.5 35q53 0 87.5 -35t34.5 -86q0 -53 -34.5 -88t-87.5 -35t-87 34.5t-34 88.5zM311 592h447q0 121 -50.5 188.5t-154.5 67.5q-90 0 -157.5 -64.5t-84.5 -191.5zM615 1309q0 51 34.5 86t87.5 35t87 -35t34 -86q0 -53 -34 -88t-87 -35t-87.5 34.5 t-34.5 88.5z" /> +<glyph unicode="ì" horiz-adv-x="536" d="M2 1473h233l185 -299h-177zM150 0v1006h235v-1006h-235z" /> +<glyph unicode="í" horiz-adv-x="536" d="M116 1174l185 299h233l-241 -299h-177zM150 0v1006h235v-1006h-235z" /> +<glyph unicode="î" horiz-adv-x="536" d="M-23 1174l197 299h188l197 -299h-164l-123 174h-8l-123 -174h-164zM150 0v1006h235v-1006h-235z" /> +<glyph unicode="ï" horiz-adv-x="536" d="M-43 1309q0 51 33.5 86t87.5 35q53 0 87.5 -35t34.5 -86q0 -53 -34.5 -88t-87.5 -35t-87 34.5t-34 88.5zM150 0v1006h235v-1006h-235zM336 1309q0 51 34.5 86t87.5 35t87 -35t34 -86q0 -53 -34 -88t-87 -35t-87.5 34.5t-34.5 88.5z" /> +<glyph unicode="ð" horiz-adv-x="1130" d="M98 461q0 106 34 192t91.5 146.5t133 92.5t159.5 32q70 0 134.5 -26t111.5 -85q-29 104 -78 184t-119 148l-291 -148l-63 109l250 127q-47 35 -98.5 65.5t-108.5 61.5l104 145q74 -39 145.5 -83t137.5 -97l293 150l63 -111l-254 -129q121 -123 199 -293t78 -405 q0 -123 -33 -226.5t-93 -178.5t-146 -116t-193 -41q-92 0 -174 34t-145.5 96.5t-100.5 152.5t-37 203zM315 461q0 -68 19.5 -122t53.5 -92t79 -58.5t94 -20.5q113 0 174.5 93t61.5 263q0 27 -1 52.5t-3 50.5q-55 70 -113.5 94t-120.5 24q-113 0 -178.5 -75.5t-65.5 -208.5z " /> +<glyph unicode="ñ" horiz-adv-x="1146" d="M150 0v1006h194l16 -136h9q68 66 146.5 113t182.5 47q162 0 236 -103.5t74 -295.5v-631h-236v600q0 125 -37 176t-121 51q-66 0 -115.5 -31.5t-113.5 -93.5v-702h-235zM301 1182q12 117 62 182.5t128 65.5q39 0 73 -15.5t62.5 -34t53 -34t49.5 -15.5q53 0 73 99h125 q-12 -117 -62 -182.5t-128 -65.5q-41 0 -74 15t-60.5 33.5t-53 34t-50.5 15.5q-53 0 -73 -98h-125z" /> +<glyph unicode="ò" horiz-adv-x="1124" d="M84 502q0 125 39 223t105.5 165.5t152.5 103.5t180 36t181 -36t153 -103.5t105.5 -165.5t39.5 -223t-39.5 -223.5t-105.5 -166t-153 -102.5t-181 -35t-180 35t-152.5 102.5t-105.5 166t-39 223.5zM295 1473h233l185 -299h-177zM326 502q0 -152 62.5 -243t172.5 -91 q111 0 174.5 91t63.5 243q0 154 -63.5 245t-174.5 91t-173 -91t-62 -245z" /> +<glyph unicode="ó" horiz-adv-x="1124" d="M84 502q0 125 39 223t105.5 165.5t152.5 103.5t180 36t181 -36t153 -103.5t105.5 -165.5t39.5 -223t-39.5 -223.5t-105.5 -166t-153 -102.5t-181 -35t-180 35t-152.5 102.5t-105.5 166t-39 223.5zM326 502q0 -152 62.5 -243t172.5 -91q111 0 174.5 91t63.5 243 q0 154 -63.5 245t-174.5 91t-173 -91t-62 -245zM409 1174l185 299h233l-241 -299h-177z" /> +<glyph unicode="ô" horiz-adv-x="1124" d="M84 502q0 125 39 223t105.5 165.5t152.5 103.5t180 36t181 -36t153 -103.5t105.5 -165.5t39.5 -223t-39.5 -223.5t-105.5 -166t-153 -102.5t-181 -35t-180 35t-152.5 102.5t-105.5 166t-39 223.5zM270 1174l197 299h188l197 -299h-164l-123 174h-8l-123 -174h-164z M326 502q0 -152 62.5 -243t172.5 -91q111 0 174.5 91t63.5 243q0 154 -63.5 245t-174.5 91t-173 -91t-62 -245z" /> +<glyph unicode="õ" horiz-adv-x="1124" d="M84 502q0 125 39 223t105.5 165.5t152.5 103.5t180 36t181 -36t153 -103.5t105.5 -165.5t39.5 -223t-39.5 -223.5t-105.5 -166t-153 -102.5t-181 -35t-180 35t-152.5 102.5t-105.5 166t-39 223.5zM248 1182q12 117 62 182.5t128 65.5q39 0 73 -15.5t62.5 -34t53 -34 t49.5 -15.5q53 0 73 99h125q-12 -117 -62 -182.5t-128 -65.5q-41 0 -74 15t-60.5 33.5t-53 34t-50.5 15.5q-53 0 -73 -98h-125zM326 502q0 -152 62.5 -243t172.5 -91q111 0 174.5 91t63.5 243q0 154 -63.5 245t-174.5 91t-173 -91t-62 -245z" /> +<glyph unicode="ö" horiz-adv-x="1124" d="M84 502q0 125 39 223t105.5 165.5t152.5 103.5t180 36t181 -36t153 -103.5t105.5 -165.5t39.5 -223t-39.5 -223.5t-105.5 -166t-153 -102.5t-181 -35t-180 35t-152.5 102.5t-105.5 166t-39 223.5zM250 1309q0 51 33.5 86t87.5 35q53 0 87.5 -35t34.5 -86q0 -53 -34.5 -88 t-87.5 -35t-87 34.5t-34 88.5zM326 502q0 -152 62.5 -243t172.5 -91q111 0 174.5 91t63.5 243q0 154 -63.5 245t-174.5 91t-173 -91t-62 -245zM629 1309q0 51 34.5 86t87.5 35t87 -35t34 -86q0 -53 -34 -88t-87 -35t-87.5 34.5t-34.5 88.5z" /> +<glyph unicode="÷" d="M70 590v172h911v-172h-911zM385 307q0 59 40 96t99 37t99.5 -36.5t40.5 -96.5q0 -59 -40 -97t-100 -38q-59 0 -99 38t-40 97zM385 1044q0 59 40 96.5t99 37.5t99.5 -37t40.5 -97q0 -59 -40.5 -97t-99.5 -38t-99 38t-40 97z" /> +<glyph unicode="ø" horiz-adv-x="1124" d="M84 502q0 125 39 223t105.5 165.5t152.5 103.5t180 36q158 0 279 -90l96 117l94 -74l-102 -127q53 -66 82.5 -155t29.5 -199q0 -125 -39.5 -223.5t-105.5 -166t-153 -102.5t-181 -35q-76 0 -147.5 22.5t-130.5 68.5l-95 -115l-94 74l103 125q-53 66 -83 153.5t-30 198.5z M313 514q0 -106 29 -186l373 458q-63 59 -154 60q-111 0 -179.5 -92t-68.5 -240zM408 221q61 -61 153 -61q111 0 180.5 91t69.5 238q0 109 -29 189z" /> +<glyph unicode="ù" horiz-adv-x="1138" d="M139 375v631h236v-600q0 -125 37 -176.5t118 -51.5q66 0 116 33t108 106v689h235v-1006h-192l-19 147h-6q-66 -78 -142.5 -125t-180.5 -47q-162 0 -236 103.5t-74 296.5zM305 1473h233l185 -299h-177z" /> +<glyph unicode="ú" horiz-adv-x="1138" d="M139 375v631h236v-600q0 -125 37 -176.5t118 -51.5q66 0 116 33t108 106v689h235v-1006h-192l-19 147h-6q-66 -78 -142.5 -125t-180.5 -47q-162 0 -236 103.5t-74 296.5zM419 1174l185 299h233l-241 -299h-177z" /> +<glyph unicode="û" horiz-adv-x="1138" d="M139 375v631h236v-600q0 -125 37 -176.5t118 -51.5q66 0 116 33t108 106v689h235v-1006h-192l-19 147h-6q-66 -78 -142.5 -125t-180.5 -47q-162 0 -236 103.5t-74 296.5zM280 1174l197 299h188l197 -299h-164l-123 174h-8l-123 -174h-164z" /> +<glyph unicode="ü" horiz-adv-x="1138" d="M139 375v631h236v-600q0 -125 37 -176.5t118 -51.5q66 0 116 33t108 106v689h235v-1006h-192l-19 147h-6q-66 -78 -142.5 -125t-180.5 -47q-162 0 -236 103.5t-74 296.5zM260 1309q0 51 33.5 86t87.5 35q53 0 87.5 -35t34.5 -86q0 -53 -34.5 -88t-87.5 -35t-87 34.5 t-34 88.5zM639 1309q0 51 34.5 86t87.5 35t87 -35t34 -86q0 -53 -34 -88t-87 -35t-87.5 34.5t-34.5 88.5z" /> +<glyph unicode="ý" horiz-adv-x="1013" d="M25 1006h239l174 -494q23 -66 44.5 -138.5t43.5 -144.5h9q18 70 37.5 142.5t37.5 140.5l152 494h227l-364 -1051q-31 -86 -68 -153.5t-85 -115.5t-110.5 -74t-144.5 -26q-41 0 -71.5 5.5t-59.5 15.5l43 184q14 -4 33.5 -9t38.5 -5q80 0 128 48t72 124l19 63zM370 1174 l185 299h233l-241 -299h-177z" /> +<glyph unicode="þ" horiz-adv-x="1155" d="M150 -397v1843h235v-373l-4 -158q59 49 130 82t148 33q96 0 172 -36t128.5 -103.5t80 -161.5t27.5 -211q0 -129 -36 -230.5t-95 -170t-137 -105.5t-162 -37q-72 0 -134.5 27t-121.5 76l4 -160v-315h-235zM385 254q55 -47 106.5 -65.5t96.5 -18.5q100 0 167.5 87t67.5 259 q0 152 -51 236t-166 84q-106 0 -221 -113v-469z" /> +<glyph unicode="ÿ" horiz-adv-x="1013" d="M25 1006h239l174 -494q23 -66 44.5 -138.5t43.5 -144.5h9q18 70 37.5 142.5t37.5 140.5l152 494h227l-364 -1051q-31 -86 -68 -153.5t-85 -115.5t-110.5 -74t-144.5 -26q-41 0 -71.5 5.5t-59.5 15.5l43 184q14 -4 33.5 -9t38.5 -5q80 0 128 48t72 124l19 63zM211 1309 q0 51 33.5 86t87.5 35q53 0 87.5 -35t34.5 -86q0 -53 -34.5 -88t-87.5 -35t-87 34.5t-34 88.5zM590 1309q0 51 34.5 86t87.5 35t87 -35t34 -86q0 -53 -34 -88t-87 -35t-87.5 34.5t-34.5 88.5z" /> +<glyph unicode="Œ" horiz-adv-x="1753" d="M96 676q0 166 48.5 290t136.5 206.5t211.5 124.5t275.5 42h864v-200h-538v-342h450v-201h-450v-395h559v-201h-897q-147 0 -269 43t-208 128t-134.5 212t-48.5 293zM340 676q0 -250 116.5 -366.5t327.5 -116.5h72v954h-72q-209 0 -326.5 -111.5t-117.5 -359.5z" /> +<glyph unicode="œ" horiz-adv-x="1699" d="M84 502q0 125 38 223t101.5 165.5t147.5 103.5t178 36q111 0 200 -55t144 -158q59 100 147 156.5t189 56.5q96 0 171 -36t125 -99.5t75.5 -152.5t25.5 -193q0 -35 -3 -63.5t-7 -47.5h-621q12 -131 90 -202.5t189 -71.5q66 0 120 21.5t109 56.5l84 -158q-72 -47 -160 -78 t-186 -31q-104 0 -194.5 56.5t-149.5 156.5q-61 -104 -148 -158.5t-204 -54.5q-94 0 -178 35t-146.5 102.5t-99.5 166t-37 223.5zM324 502q0 -152 61 -243t164 -91q104 0 165.5 91t61.5 243q0 154 -61.5 245t-165.5 91q-102 0 -163.5 -91t-61.5 -245zM995 588h426 q0 123 -50 191.5t-148 68.5q-88 0 -150.5 -67.5t-77.5 -192.5z" /> +<glyph unicode="Ÿ" horiz-adv-x="1019" d="M-12 1339h254l145 -342q29 -76 58.5 -146.5t60.5 -148.5h8q33 78 64.5 149t60.5 146l145 342h248l-403 -841v-498h-238v498zM199 1571q0 53 33.5 88t87.5 35q53 0 87.5 -35t34.5 -88t-34.5 -87t-87.5 -34t-87 34t-34 87zM578 1571q0 53 34.5 88t87.5 35t87 -35t34 -88 t-34 -87t-87 -34t-87.5 34t-34.5 87z" /> +<glyph unicode="ˆ" horiz-adv-x="1124" d="M270 1174l197 299h188l197 -299h-164l-123 174h-8l-123 -174h-164z" /> +<glyph unicode="˜" horiz-adv-x="1124" d="M248 1182q12 117 62 182.5t128 65.5q39 0 73 -15.5t62.5 -34t53 -34t49.5 -15.5q53 0 73 99h125q-12 -117 -62 -182.5t-128 -65.5q-41 0 -74 15t-60.5 33.5t-53 34t-50.5 15.5q-53 0 -73 -98h-125z" /> +<glyph unicode=" " horiz-adv-x="905" /> +<glyph unicode=" " horiz-adv-x="1810" /> +<glyph unicode=" " horiz-adv-x="905" /> +<glyph unicode=" " horiz-adv-x="1810" /> +<glyph unicode=" " horiz-adv-x="603" /> +<glyph unicode=" " horiz-adv-x="452" /> +<glyph unicode=" " horiz-adv-x="301" /> +<glyph unicode=" " horiz-adv-x="301" /> +<glyph unicode=" " horiz-adv-x="226" /> +<glyph unicode=" " horiz-adv-x="362" /> +<glyph unicode=" " horiz-adv-x="100" /> +<glyph unicode="‐" horiz-adv-x="659" d="M86 430v172h487v-172h-487z" /> +<glyph unicode="‑" horiz-adv-x="659" d="M86 430v172h487v-172h-487z" /> +<glyph unicode="‒" horiz-adv-x="659" d="M86 430v172h487v-172h-487z" /> +<glyph unicode="–" horiz-adv-x="983" d="M86 438v156h811v-156h-811z" /> +<glyph unicode="—" horiz-adv-x="1638" d="M86 438v156h1466v-156h-1466z" /> +<glyph unicode="‘" horiz-adv-x="563" d="M115 1010q0 268 254 401l57 -104q-86 -49 -128 -107.5t-42 -150.5q6 2 18 2q55 0 95.5 -34t40.5 -93q0 -66 -38 -104t-98 -38q-78 0 -118.5 59.5t-40.5 168.5z" /> +<glyph unicode="’" horiz-adv-x="563" d="M137 905q86 49 128 107.5t42 150.5q-6 -2 -18 -2q-53 0 -93 34t-40 93q0 66 36.5 104t96.5 38q78 0 120 -59.5t42 -168.5q0 -268 -256 -401z" /> +<glyph unicode="‚" horiz-adv-x="563" d="M137 -215q86 49 128 107.5t42 150.5q-6 -2 -18 -2q-53 0 -93 34t-40 93q0 66 36.5 104t96.5 38q78 0 120 -59.5t42 -168.5q0 -268 -256 -401z" /> +<glyph unicode="“" horiz-adv-x="987" d="M115 1010q0 268 254 401l57 -104q-86 -49 -128 -107.5t-42 -150.5q6 2 18 2q55 0 95.5 -34t40.5 -93q0 -66 -38 -104t-98 -38q-78 0 -118.5 59.5t-40.5 168.5zM539 1010q0 268 254 401l57 -104q-86 -49 -128 -107.5t-42 -150.5q6 2 18 2q55 0 95.5 -34t40.5 -93 q0 -66 -38 -104t-98 -38q-78 0 -118.5 59.5t-40.5 168.5z" /> +<glyph unicode="”" horiz-adv-x="987" d="M137 905q86 49 128 107.5t42 150.5q-6 -2 -18 -2q-53 0 -93 34t-40 93q0 66 36.5 104t96.5 38q78 0 120 -59.5t42 -168.5q0 -268 -256 -401zM561 905q86 49 128 107.5t42 150.5q-6 -2 -18 -2q-53 0 -93 34t-40 93q0 66 36.5 104t96.5 38q78 0 120 -59.5t42 -168.5 q0 -268 -256 -401z" /> +<glyph unicode="„" horiz-adv-x="987" d="M137 -215q86 49 128 107.5t42 150.5q-6 -2 -18 -2q-53 0 -93 34t-40 93q0 66 36.5 104t96.5 38q78 0 120 -59.5t42 -168.5q0 -268 -256 -401zM561 -215q86 49 128 107.5t42 150.5q-6 -2 -18 -2q-53 0 -93 34t-40 93q0 66 36.5 104t96.5 38q78 0 120 -59.5t42 -168.5 q0 -268 -256 -401z" /> +<glyph unicode="•" horiz-adv-x="665" d="M82 539q0 57 19.5 106t53 84t80 55.5t97.5 20.5t97 -20.5t81 -55.5t54.5 -84t19.5 -106q0 -59 -19.5 -107.5t-54.5 -84.5t-81 -55.5t-97 -19.5t-97.5 19.5t-80 55.5t-53 84t-19.5 108z" /> +<glyph unicode="…" horiz-adv-x="1972" d="M174 135q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45q-66 0 -110 45t-44 115zM856 135q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45q-66 0 -110 45t-44 115zM1538 135q0 70 44 115t110 45t108.5 -45t42.5 -115t-43 -115t-108 -45 q-66 0 -110 45t-44 115z" /> +<glyph unicode=" " horiz-adv-x="362" /> +<glyph unicode="‹" horiz-adv-x="577" d="M96 430v172l277 305l94 -76l-236 -315l236 -317l-94 -74z" /> +<glyph unicode="›" horiz-adv-x="577" d="M111 199l233 317l-233 315l92 76l278 -305v-172l-278 -305z" /> +<glyph unicode=" " horiz-adv-x="452" /> +<glyph unicode="€" d="M45 461v114l117 9q-2 16 -2 31.5v31.5v30.5t2 29.5h-117v114l129 8q20 119 66.5 211.5t114 156t153.5 97t188 33.5q92 0 176 -43t144 -117l-133 -129q-41 47 -87 76t-106 29q-111 0 -182.5 -82t-95.5 -230h479v-124h-492q-2 -12 -2 -24.5v-27.5v-35.5t2 -33.5h410v-125 h-395q29 -143 98.5 -222t173.5 -79q66 0 117 32.5t98 96.5l133 -123q-72 -92 -161 -141.5t-201 -49.5q-188 0 -322.5 125t-175.5 361h-129z" /> +<glyph unicode="™" horiz-adv-x="1351" d="M6 1239v145h543v-145h-193v-494h-159v494h-191zM641 745v639h190l87 -206l49 -150h8l49 150l84 206h190v-639h-155v238l18 225h-8l-127 -366h-113l-127 366h-8l19 -225v-238h-156z" /> +<glyph unicode="" horiz-adv-x="1003" d="M0 0v1004h1004v-1004h-1004z" /> +<glyph unicode="fi" horiz-adv-x="1222" d="M55 819v176l135 11v104q0 78 18.5 144.5t59.5 114.5t103.5 74.5t152.5 26.5q53 0 101.5 -10t83.5 -24l-45 -176q-55 25 -111 24q-127 0 -127 -170v-108h197v-187h-197v-819h-236v819h-135zM809 1315q0 59 41 97t104 38t104.5 -38t41.5 -97t-41.5 -96t-104.5 -37 t-104 36.5t-41 96.5zM836 0v1006h235v-1006h-235z" /> +<glyph unicode="fl" horiz-adv-x="1204" d="M55 819v176l135 11v104q0 78 18.5 144.5t59.5 114.5t103.5 74.5t152.5 26.5q53 0 101.5 -10t83.5 -24l-45 -176q-55 25 -111 24q-127 0 -127 -170v-108h197v-187h-197v-819h-236v819h-135zM799 258v1188h235v-1200q0 -43 16.5 -60.5t34.5 -17.5h15.5t21.5 4l31 -176 q-47 -20 -125 -21q-127 0 -178 76t-51 207z" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.ttf b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..680103c671287a1a1feecc46cec6cc5295e7131c GIT binary patch literal 54012 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 literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.woff b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-600-normal-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..56e335d010688e27340f16f8f78c343e848f6a0b GIT binary patch literal 27116 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 literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.eot b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..d0743324939c117b1e014f7e4be16affd4032b83 GIT binary patch literal 23844 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 YvT=+7_`Kx%fRUbSn2>(#AxsM7z#p-f0{{R3 literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.svg b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.svg new file mode 100644 index 00000000000..fcd05c3683a --- /dev/null +++ b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.svg @@ -0,0 +1,245 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="source_sans_probold" horiz-adv-x="1081" > +<font-face units-per-em="2048" ascent="1536" descent="-512" /> +<missing-glyph horiz-adv-x="425" /> +<glyph horiz-adv-x="0" /> +<glyph horiz-adv-x="682" /> +<glyph horiz-adv-x="0" /> +<glyph horiz-adv-x="0" /> +<glyph unicode="
" horiz-adv-x="425" /> +<glyph unicode=" " horiz-adv-x="425" /> +<glyph unicode="	" horiz-adv-x="425" /> +<glyph unicode=" " horiz-adv-x="425" /> +<glyph unicode="!" horiz-adv-x="696" d="M166 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5zM197 1372h303l-11 -272l-43 -627h-196l-43 627z" /> +<glyph unicode=""" horiz-adv-x="1097" d="M156 1405h303l-10 -272l-60 -408h-164l-59 408zM639 1405h303l-10 -272l-60 -408h-164l-59 408z" /> +<glyph unicode="#" d="M70 383v192h174l28 226h-161v192h186l43 338h172l-41 -338h213l43 338h172l-41 -338h162v-192h-186l-27 -226h172v-192h-195l-47 -383h-174l45 383h-211l-47 -383h-174l45 383h-151zM420 575h211l28 226h-213z" /> +<glyph unicode="$" d="M80 135l131 203q78 -59 148.5 -89t144.5 -30q86 0 126 35t40 106q0 53 -40 90t-100.5 71t-130 68t-130 81t-100.5 110.5t-40 155.5q0 152 83 251t228 128v211h199v-207q98 -14 172 -59.5t133 -108.5l-151 -172q-55 51 -106.5 76.5t-117.5 25.5q-74 0 -112.5 -30.5 t-38.5 -100.5q0 -49 40 -82.5t100 -64.5t130 -63.5t130.5 -80t100 -114t39.5 -164.5q0 -147 -79.5 -252.5t-239.5 -140.5v-213h-199v205q-90 10 -189 50t-171 105z" /> +<glyph unicode="%" horiz-adv-x="1755" d="M53 938q0 100 24.5 178t68.5 132.5t105.5 83t133.5 28.5t133.5 -28.5t105.5 -83t69.5 -132t25.5 -178.5q0 -100 -25.5 -179t-69.5 -134t-105.5 -84t-133.5 -29t-133.5 29t-105.5 84t-68.5 134t-24.5 179zM262 938q0 -143 36 -200.5t87 -57.5t87 57.5t36 200.5t-36 198.5 t-87 55.5t-87 -55t-36 -199zM430 -25l721 1385h174l-721 -1385h-174zM1038 401q0 100 24.5 178t68.5 132.5t105.5 83t133.5 28.5t133.5 -28.5t105.5 -83t69.5 -132t25.5 -178.5q0 -100 -25.5 -179t-69.5 -134t-105.5 -84t-133.5 -29t-133.5 29t-105.5 84t-68.5 134 t-24.5 179zM1247 401q0 -143 36 -200.5t87 -57.5t87 57.5t36 200.5t-36 198.5t-87 55.5t-87 -55t-36 -199z" /> +<glyph unicode="&" horiz-adv-x="1366" d="M51 356q0 70 19.5 126.5t53.5 101.5t78 81.5t93 67.5q-39 72 -60.5 142.5t-21.5 134.5q0 72 25.5 135t72.5 111.5t114 76t150 27.5q152 0 240 -82t88 -221q0 -66 -23.5 -120t-63.5 -100t-90 -85t-101 -74q57 -66 125.5 -128.5t142.5 -115.5q51 66 90 145.5t64 174.5h274 q-37 -123 -91 -234.5t-132 -216.5q63 -33 121.5 -54.5t109.5 -29.5l-72 -244q-84 16 -170 51t-172 85q-86 -63 -189 -99.5t-230 -36.5q-109 0 -192 31t-139 83t-85 121t-29 146zM336 375q0 -76 54 -123t145 -47q82 0 170 53q-78 63 -149 133t-130 144q-41 -35 -65.5 -74 t-24.5 -86zM461 1012q0 -37 11 -78t32 -82q72 43 121 90t49 115q0 47 -22.5 75.5t-69.5 28.5q-51 0 -86 -39.5t-35 -109.5z" /> +<glyph unicode="'" horiz-adv-x="614" d="M156 1405h303l-10 -272l-60 -408h-164l-59 408z" /> +<glyph unicode="(" horiz-adv-x="704" d="M147 569q0 270 71 497.5t200 438.5l188 -78q-113 -201 -164 -420t-51 -438t51.5 -438t163.5 -420l-188 -78q-129 211 -200 438.5t-71 497.5z" /> +<glyph unicode=")" horiz-adv-x="704" d="M98 -289q115 201 166 420t51 438t-51 438.5t-166 419.5l189 78q129 -211 199.5 -438t70.5 -498q0 -270 -70.5 -497.5t-199.5 -438.5z" /> +<glyph unicode="*" horiz-adv-x="935" d="M78 1118l47 148l237 -49l27 241h158l26 -244l236 52l49 -148l-221 -100l121 -213l-125 -90l-164 182l-166 -182l-125 90l121 213z" /> +<glyph unicode="+" d="M70 569v213h360v377h221v-377h361v-213h-361v-376h-221v376h-360z" /> +<glyph unicode="," horiz-adv-x="614" d="M94 -238q113 41 172.5 106.5t59.5 143.5h-17q-72 0 -127 44t-55 126q0 78 55.5 125t132.5 47q102 0 155.5 -74.5t53.5 -209.5q0 -170 -94 -292t-274 -175z" /> +<glyph unicode="-" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> +<glyph unicode="." horiz-adv-x="614" d="M125 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5z" /> +<glyph unicode="/" horiz-adv-x="694" d="M27 -328l411 1782h197l-412 -1782h-196z" /> +<glyph unicode="0" d="M76 655q0 166 33.5 291t94 210t146.5 127t191 42q104 0 190 -42t146.5 -127t94.5 -210t34 -291t-34 -292.5t-94.5 -213t-146.5 -130.5t-190 -44t-190.5 44t-147 130.5t-94 213t-33.5 292.5zM360 655q0 -133 14.5 -219t39 -137t57.5 -70.5t70 -19.5q39 0 71.5 19.5 t57 70.5t38 137t13.5 219t-13.5 218t-38 133.5t-57 67t-71.5 18.5q-37 0 -70 -18.5t-57.5 -67t-39 -133.5t-14.5 -218z" /> +<glyph unicode="1" d="M143 0v244h283v751h-244v187q106 20 180 49t144 69h221v-1056h244v-244h-828z" /> +<glyph unicode="2" d="M61 1118q96 102 196.5 154.5t240.5 52.5q96 0 175 -29.5t136 -84t88 -130t31 -170.5q0 -82 -35 -167t-93.5 -170t-133 -170t-154.5 -166q49 6 109.5 11t107.5 5h262v-254h-915v172q125 117 228.5 218.5t178 190.5t116.5 165.5t42 146.5q0 96 -49 146.5t-135 50.5 q-72 0 -127.5 -40t-104.5 -94z" /> +<glyph unicode="3" d="M45 160l139 190q59 -57 130 -94t155 -37q96 0 153.5 40t57.5 114q0 43 -15.5 77.5t-54.5 58t-106.5 37t-173.5 13.5v213q88 0 146.5 12.5t94 36t51 55t15.5 70.5q0 68 -41 106t-119 38q-70 0 -126 -31t-118 -84l-151 184q90 78 189.5 122t220.5 44q100 0 183 -23.5 t141 -69.5t91 -111.5t33 -151.5q0 -102 -56.5 -173t-160.5 -116v-8q113 -33 185.5 -112t72.5 -206q0 -90 -39 -160.5t-104.5 -118.5t-153.5 -74t-186 -26q-160 0 -270.5 50.5t-182.5 134.5z" /> +<glyph unicode="4" d="M39 311v207l475 782h369v-759h149v-230h-149v-311h-281v311h-563zM328 541h274v211q0 63 4 146t8 144h-8q-25 -53 -51.5 -108t-54.5 -111z" /> +<glyph unicode="5" d="M47 158l135 190q59 -53 128 -91t153 -38q100 0 159.5 51.5t59.5 151.5q0 98 -56.5 149.5t-148.5 51.5q-29 0 -51.5 -3.5t-44 -11.5t-45 -20.5t-51.5 -30.5l-135 86l36 657h738v-253h-478l-22 -244q37 16 70.5 23.5t74.5 7.5q84 0 159 -25t132.5 -74t90 -124.5 t32.5 -180.5q0 -109 -39 -192.5t-104.5 -142t-152.5 -89.5t-181 -31q-160 0 -270.5 52.5t-188.5 130.5z" /> +<glyph unicode="6" d="M84 621q0 182 44 315t116.5 219t168 128t197.5 42q129 0 223.5 -46t155.5 -110l-158 -180q-35 37 -90 64.5t-112 27.5q-53 0 -100.5 -20.5t-83 -68.5t-58 -126t-27.5 -190q25 33 58 58.5t67.5 43t69.5 26.5t66 9q84 0 154.5 -24.5t122.5 -73.5t81 -125t29 -178t-35 -182 t-93.5 -137.5t-137 -87.5t-167.5 -30q-94 0 -183 37t-157.5 115t-109.5 200t-41 294zM367 471q10 -78 30.5 -129t47 -83t58 -45t66.5 -13q68 0 116 50t48 161q0 104 -48 146t-122 42q-49 0 -100 -28.5t-96 -100.5z" /> +<glyph unicode="7" d="M90 1047v253h905v-184q-113 -137 -181.5 -257t-106 -248t-54 -274.5t-24.5 -336.5h-303q8 162 29.5 298t61.5 260t102.5 243t154.5 246h-584z" /> +<glyph unicode="8" d="M86 332q0 119 64.5 194.5t156.5 124.5v8q-76 57 -125 130t-49 178q0 82 31 148.5t86 113.5t132 71.5t167 24.5q88 0 161.5 -25.5t125 -71.5t80 -112.5t28.5 -146.5q0 -94 -51 -167t-119 -118v-8q94 -51 159.5 -131t65.5 -209q0 -78 -32.5 -143.5t-93 -113.5t-145.5 -76 t-189 -28q-98 0 -181.5 26t-143.5 73t-94 112.5t-34 145.5zM344 367q0 -86 59.5 -134.5t141.5 -48.5q76 0 125 40t49 122q0 43 -19.5 74t-56.5 56.5t-87 48t-112 48.5q-43 -41 -71.5 -94t-28.5 -112zM397 967q0 -80 62 -125t162 -84q80 92 79 190q0 76 -42 122t-115 46 q-59 0 -102.5 -37t-43.5 -112z" /> +<glyph unicode="9" d="M70 889q0 100 34.5 181t93 138.5t137.5 87t167 29.5q94 0 183 -37t157.5 -114.5t110.5 -199.5t42 -294q0 -182 -44 -315.5t-116.5 -219.5t-168 -128t-197.5 -42q-129 0 -224 47.5t-157 108.5l160 180q33 -37 88 -64.5t113 -27.5q55 0 102 20.5t83 68.5t57.5 125t25.5 192 q-25 -33 -57.5 -58.5t-67.5 -43t-70 -27t-65 -9.5q-84 0 -155 25t-122 74t-80.5 124.5t-29.5 178.5zM344 889q0 -104 49 -146.5t123 -42.5q49 0 100.5 29t94.5 100q-20 154 -76.5 212.5t-126.5 58.5q-66 0 -115 -50.5t-49 -160.5z" /> +<glyph unicode=":" horiz-adv-x="614" d="M125 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5zM125 828q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5z" /> +<glyph unicode=";" horiz-adv-x="614" d="M94 -238q113 41 172.5 106.5t59.5 143.5h-17q-72 0 -127 44t-55 126q0 78 55.5 125t132.5 47q102 0 155.5 -74.5t53.5 -209.5q0 -170 -94 -292t-274 -175zM125 828q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5z" /> +<glyph unicode="<" d="M70 575v209l942 363v-248l-361 -119l-276 -96v-8l276 -96l361 -119v-248z" /> +<glyph unicode="=" d="M70 333v213h942v-213h-942zM70 807v213h942v-213h-942z" /> +<glyph unicode=">" d="M70 213v248l360 119l277 96v8l-277 96l-360 119v248l942 -363v-209z" /> +<glyph unicode="?" horiz-adv-x="948" d="M84 1210q70 84 164 135.5t209 51.5q86 0 160.5 -20.5t129 -63.5t85 -109.5t30.5 -156.5q0 -63 -22.5 -113.5t-56 -93.5t-71.5 -83t-70 -83t-50.5 -91t-11.5 -110h-265q-10 70 5.5 127t44 106.5t64.5 90.5t68.5 78.5t54 73.5t21.5 75q0 63 -37.5 96t-99.5 33 q-57 0 -101 -26.5t-85 -67.5zM266 164q0 82 51.5 136t128.5 54q78 0 130.5 -54t52.5 -136q0 -80 -52.5 -134.5t-130.5 -54.5t-129 54.5t-51 134.5z" /> +<glyph unicode="@" horiz-adv-x="1849" d="M100 420q0 215 74 390t200 300t294 192.5t356 67.5q166 0 300 -53t228.5 -150.5t145.5 -231.5t51 -294q0 -141 -43 -246.5t-110.5 -176.5t-150.5 -105.5t-163 -34.5q-88 0 -153.5 41t-81.5 114h-5q-43 -59 -112.5 -97t-132.5 -38q-123 0 -197 83t-74 225q0 94 32 184 t87 160.5t131 113.5t164 43q51 0 90 -23.5t66 -78.5h4l28 86h187l-94 -451q-43 -176 94 -176q45 0 89 25.5t79 74t55.5 117t20.5 152.5q0 111 -31 211t-98.5 177t-174 122t-256.5 45q-131 0 -256 -54.5t-223 -153.5t-157.5 -239.5t-59.5 -312.5q0 -152 48 -264.5t131 -186 t190.5 -110.5t228.5 -37q80 0 163 22.5t148 57.5l66 -164q-94 -51 -192.5 -74.5t-208.5 -23.5q-154 0 -294.5 47t-248 143t-171 240.5t-63.5 341.5zM754 424q0 -137 106 -137q33 0 64.5 20.5t70.5 71.5l49 276q-31 59 -94 60q-47 0 -83 -29t-61.5 -72t-38.5 -94t-13 -96z " /> +<glyph unicode="A" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM436 553h287l-33 123q-29 100 -54.5 212.5t-53.5 217.5h-9q-23 -106 -49 -218t-55 -212z" /> +<glyph unicode="B" horiz-adv-x="1236" d="M156 0v1335h456q104 0 194.5 -15t157 -54t104.5 -102.5t38 -159.5q0 -45 -13.5 -90.5t-41 -84t-70.5 -69.5t-100 -45v-8q143 -27 216.5 -103t73.5 -211q0 -102 -39.5 -176t-110.5 -122t-166 -71.5t-204 -23.5h-495zM459 233h168q250 0 250 183q0 88 -62.5 128t-187.5 40 h-168v-351zM459 797h139q111 0 162 44t51 120t-52 108.5t-157 32.5h-143v-305z" /> +<glyph unicode="C" horiz-adv-x="1187" d="M92 659q0 166 51.5 296t138.5 220.5t202.5 137.5t244.5 47q125 0 226.5 -52.5t168.5 -121.5l-166 -187q-51 47 -102 74t-123 27q-70 0 -130 -30t-105 -85t-71 -135t-26 -180q0 -207 88.5 -320.5t235.5 -113.5q84 0 144.5 32.5t109.5 85.5l166 -182q-84 -98 -191.5 -147.5 t-232.5 -49.5q-129 0 -244 44t-201 130.5t-135 214t-49 295.5z" /> +<glyph unicode="D" horiz-adv-x="1298" d="M156 0v1335h376q154 0 278 -39t212 -119.5t135 -205.5t47 -297t-47 -299t-133 -210t-206 -124t-267 -41h-395zM459 244h57q84 0 153.5 22.5t120 72.5t78 132t27.5 203q0 119 -27.5 199.5t-78 129t-120 69t-153.5 20.5h-57v-848z" /> +<glyph unicode="E" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858z" /> +<glyph unicode="F" horiz-adv-x="1071" d="M156 0v1335h843v-254h-540v-309h461v-254h-461v-518h-303z" /> +<glyph unicode="G" horiz-adv-x="1302" d="M92 659q0 166 52.5 296t141.5 220.5t208.5 137.5t255.5 47q141 0 244.5 -53.5t170.5 -120.5l-166 -187q-51 47 -105 74t-140 27q-78 0 -142.5 -30t-110.5 -85t-73 -135t-27 -180q0 -207 93.5 -320.5t283.5 -113.5q41 0 79 10t63 30v230h-222v246h490v-615 q-37 -31 -85 -60.5t-105.5 -52t-123 -36t-135.5 -13.5q-135 0 -252.5 44t-205.5 130.5t-138.5 214t-50.5 295.5z" /> +<glyph unicode="H" horiz-adv-x="1376" d="M156 0v1335h303v-514h461v514h301v-1335h-301v557h-461v-557h-303z" /> +<glyph unicode="I" horiz-adv-x="614" d="M156 0v1335h303v-1335h-303z" /> +<glyph unicode="J" horiz-adv-x="1038" d="M31 217l205 152q39 -68 87 -100.5t99 -32.5q82 0 124 50t42 183v866h303v-891q0 -96 -25.5 -182t-78 -149.5t-133.5 -100.5t-191 -37q-154 0 -258.5 59.5t-173.5 182.5z" /> +<glyph unicode="K" horiz-adv-x="1255" d="M156 0v1335h303v-547h6l399 547h330l-403 -532l479 -803h-332l-324 563l-155 -205v-358h-303z" /> +<glyph unicode="L" horiz-adv-x="1056" d="M156 0v1335h303v-1081h526v-254h-829z" /> +<glyph unicode="M" horiz-adv-x="1558" d="M156 0v1335h319l223 -600l80 -233h8l80 233l217 600h320v-1335h-283v489q0 49 4 108.5t10.5 120t12.5 119t12 107.5h-8l-109 -309l-206 -518h-121l-205 518l-107 309h-8q6 -49 12.5 -107.5t12.5 -119t10 -119.5t4 -109v-489h-278z" /> +<glyph unicode="N" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-10 106 -24.5 237t-14.5 250v471h287v-1335h-309l-348 666l-131 290h-8q10 -111 24 -237.5t14 -245.5v-473h-288z" /> +<glyph unicode="O" horiz-adv-x="1398" d="M92 674q0 164 44 292t124 215t191.5 133t246.5 46t247 -46t192 -134t124 -216t44 -290q0 -164 -44 -293t-124 -219t-192 -138.5t-247 -48.5t-246.5 48.5t-191.5 138.5t-124 219t-44 293zM401 674q0 -100 21.5 -181t59.5 -138.5t93 -88t123 -30.5q137 0 217 117.5 t80 320.5q0 201 -79.5 313.5t-217.5 112.5q-135 0 -216 -113t-81 -313z" /> +<glyph unicode="P" horiz-adv-x="1239" d="M156 0v1335h487q109 0 204 -21.5t165.5 -71.5t111.5 -133t41 -204q0 -117 -42 -203t-113.5 -141t-165.5 -81.5t-201 -26.5h-184v-453h-303zM459 692h166q245 0 245 211q0 106 -62.5 149.5t-182.5 43.5h-166v-404z" /> +<glyph unicode="Q" horiz-adv-x="1398" d="M86 674q0 164 44 292t124 215t191.5 133t246.5 46t247 -46t191.5 -134t123.5 -216t44 -290q0 -270 -114.5 -444.5t-309.5 -229.5q47 -70 127 -97.5t166 -27.5q43 0 81 7t67 18l53 -222q-37 -18 -97.5 -30.5t-137.5 -12.5q-213 0 -359.5 98.5t-218.5 256.5 q-106 23 -193.5 79t-148.5 144t-94 203.5t-33 257.5zM395 674q0 -203 80 -320.5t217 -117.5t217 117.5t80 320.5q0 201 -80 313.5t-217 112.5t-217 -112.5t-80 -313.5z" /> +<glyph unicode="R" horiz-adv-x="1259" d="M156 0v1335h481q106 0 199.5 -20.5t164 -68.5t111.5 -128t41 -198q0 -147 -65.5 -242.5t-172.5 -142.5l302 -535h-338l-256 481h-164v-481h-303zM459 721h153q119 0 181.5 50t62.5 149q0 98 -62.5 137t-181.5 39h-153v-375z" /> +<glyph unicode="S" horiz-adv-x="1134" d="M70 168l174 207q72 -61 157.5 -100t169.5 -39q94 0 140.5 34.5t46.5 94.5q0 31 -13.5 53t-39 39.5t-61.5 33t-79 33.5l-172 74q-53 20 -101 53t-86 77t-60.5 102.5t-22.5 132.5q0 82 36 154.5t98 126.5t149.5 85t191.5 31q117 0 230.5 -45t199.5 -131l-151 -191 q-66 51 -132.5 79t-146.5 28q-78 0 -124 -32t-46 -89q0 -31 15.5 -52.5t43 -39t65.5 -32.5t81 -34l170 -69q123 -49 193.5 -135.5t70.5 -227.5q0 -84 -34 -158.5t-98.5 -131t-157.5 -90.5t-212 -34q-131 0 -261 48.5t-234 144.5z" /> +<glyph unicode="T" horiz-adv-x="1136" d="M49 1081v254h1036v-254h-366v-1081h-301v1081h-369z" /> +<glyph unicode="U" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -197 59 -274.5t172 -77.5t175.5 77.5t62.5 274.5v747h290v-717q0 -336 -134 -489.5t-394 -153.5t-396 154t-136 489z" /> +<glyph unicode="V" horiz-adv-x="1136" d="M-16 1335h319l162 -622q29 -111 52.5 -214.5t53.5 -213.5h9q31 111 54 214t52 214l158 622h309l-403 -1335h-363z" /> +<glyph unicode="W" horiz-adv-x="1662" d="M27 1335h309l92 -624q14 -104 27.5 -210t27.5 -212h9q18 106 37.5 211.5t39.5 210.5l144 624h256l145 -624q20 -102 40 -208t40 -214h8q12 109 25.5 213t27.5 209l93 624h288l-237 -1335h-379l-131 606q-16 78 -29.5 157t-23.5 152h-9q-12 -74 -24 -152.5t-29 -156.5 l-127 -606h-373z" /> +<glyph unicode="X" horiz-adv-x="1159" d="M23 0l368 686l-348 649h338l115 -252q23 -47 46 -99t52 -116h8q23 63 43.5 115.5t40.5 99.5l107 252h321l-346 -663l369 -672h-336l-131 272q-27 53 -50.5 105.5t-50.5 114.5h-8q-25 -61 -47 -113.5t-45 -106.5l-125 -272h-321z" /> +<glyph unicode="Y" horiz-adv-x="1073" d="M-16 1335h321l121 -307q27 -76 53.5 -146.5t55.5 -148.5h8q29 78 56.5 148.5t55.5 146.5l119 307h316l-404 -860v-475h-301v475z" /> +<glyph unicode="Z" horiz-adv-x="1105" d="M72 0v182l590 899h-535v254h907v-182l-590 -899h594v-254h-966z" /> +<glyph unicode="[" horiz-adv-x="704" d="M178 -311v1761h432v-160h-207v-1442h207v-159h-432z" /> +<glyph unicode="\" horiz-adv-x="694" d="M57 1454h197l414 -1782h-199z" /> +<glyph unicode="]" horiz-adv-x="704" d="M94 -152h209v1442h-209v160h432v-1761h-432v159z" /> +<glyph unicode="^" d="M102 561l318 811h242l317 -811h-248l-94 262l-92 277h-8l-93 -277l-94 -262h-248z" /> +<glyph unicode="_" horiz-adv-x="1024" d="M25 -117h974v-170h-974v170z" /> +<glyph unicode="`" horiz-adv-x="1136" d="M264 1483h291l182 -307h-219z" /> +<glyph unicode="a" horiz-adv-x="1093" d="M96 283q0 160 135.5 250t436.5 120q-4 68 -41 108t-119 40q-66 0 -131.5 -24.5t-138.5 -67.5l-107 198q98 59 205.5 96t228.5 37q197 0 300.5 -111.5t103.5 -346.5v-582h-246l-23 104h-6q-66 -57 -138.5 -93t-158.5 -36q-70 0 -125 24t-94 65.5t-60.5 97t-21.5 121.5z M383 305q0 -49 31.5 -72.5t85.5 -23.5q53 0 90 22.5t78 63.5v178q-162 -23 -223.5 -66t-61.5 -102z" /> +<glyph unicode="b" horiz-adv-x="1173" d="M133 0v1436h301v-353l-8 -155q59 53 128 82.5t140 29.5q92 0 166 -36.5t126 -103t80 -162t28 -212.5q0 -131 -36 -233.5t-96.5 -173t-137 -107.5t-158.5 -37q-68 0 -136.5 33t-128.5 98h-8l-24 -106h-236zM434 287q41 -37 82 -51.5t80 -14.5q78 0 133 70.5t55 228.5 q0 274 -176 275q-90 0 -174 -93v-415z" /> +<glyph unicode="c" horiz-adv-x="956" d="M74 508q0 127 43 226.5t115.5 167t169 103t200.5 35.5q94 0 170 -31.5t127 -84.5l-137 -187q-72 59 -141 60q-111 0 -174.5 -78t-63.5 -211t64.5 -211t162.5 -78q55 0 100.5 22.5t82.5 51.5l120 -191q-74 -66 -164 -96.5t-174 -30.5q-106 0 -197 36t-158.5 103.5 t-106.5 167t-39 226.5z" /> +<glyph unicode="d" horiz-adv-x="1173" d="M80 508q0 125 36 223t94 167t135 105.5t157 36.5q86 0 141 -28.5t109 -77.5l-13 156v346h301v-1436h-245l-21 100h-8q-53 -53 -125 -89t-145 -36q-94 0 -171 37t-131.5 105.5t-84 167t-29.5 223.5zM389 512q0 -152 48 -221.5t136 -69.5q49 0 89 20.5t77 71.5v416 q-41 37 -84 51.5t-84 14.5q-72 0 -127 -69t-55 -214z" /> +<glyph unicode="e" horiz-adv-x="1060" d="M74 508q0 123 41 222t107.5 168t152.5 105.5t178 36.5q109 0 189.5 -36.5t135 -102t81 -155t26.5 -193.5q0 -41 -4 -75t-8 -52h-608q20 -117 90.5 -169t173.5 -52q109 0 219 67l100 -182q-78 -53 -173 -84t-187 -31q-109 0 -203 36t-163.5 104.5t-108.5 167t-39 225.5z M362 612h367q0 88 -39 143.5t-131 55.5q-72 0 -126 -48t-71 -151z" /> +<glyph unicode="f" horiz-adv-x="698" d="M49 780v224l135 10v55q0 80 19.5 151.5t64.5 125t117 84t174 30.5q63 0 115.5 -12t87.5 -25l-55 -221q-57 20 -105 21q-55 0 -86 -34t-31 -112v-61h183v-236h-183v-780h-301v780h-135z" /> +<glyph unicode="g" horiz-adv-x="1093" d="M70 -174q0 123 145 205v8q-41 27 -67.5 67.5t-26.5 104.5q0 55 32.5 105.5t82.5 84.5v9q-53 37 -95.5 105.5t-42.5 158.5q0 92 35 160.5t93.5 114.5t134 68.5t157.5 22.5q90 0 158 -24h371v-219h-162q14 -23 23.5 -57.5t9.5 -75.5q0 -88 -31 -153t-85 -107t-127 -62 t-157 -20q-59 0 -123 20q-20 -16 -28.5 -32.5t-8.5 -43.5q0 -39 34 -57.5t120 -18.5h164q188 0 287.5 -60t99.5 -198q0 -80 -40 -146.5t-113.5 -114.5t-178 -75.5t-235.5 -27.5q-90 0 -167 15.5t-135.5 46t-91 79.5t-32.5 117zM317 -127q0 -57 61.5 -87t164.5 -30 q102 0 167.5 36t65.5 89q0 47 -40 63.5t-115 16.5h-105q-53 0 -86 3t-57 9q-56 -49 -56 -100zM379 674q0 -86 40 -128t99 -42t99 42t40 128q0 80 -39.5 122t-99.5 42q-59 0 -99 -41t-40 -123z" /> +<glyph unicode="h" horiz-adv-x="1169" d="M133 0v1436h301v-353l-14 -182q57 51 133 95t180 44q166 0 241 -108.5t75 -300.5v-631h-301v592q0 111 -30 151.5t-95 40.5q-57 0 -98.5 -25.5t-90.5 -72.5v-686h-301z" /> +<glyph unicode="i" horiz-adv-x="565" d="M109 1323q0 70 49 113t125 43q78 0 126 -43t48 -113t-48 -114t-126 -44q-76 0 -125 44t-49 114zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="j" horiz-adv-x="569" d="M-104 -373l53 221q20 -6 38.5 -10t41.5 -4q59 0 82.5 39t23.5 125v1018h301v-1010q0 -84 -17.5 -157.5t-59.5 -129t-111.5 -88t-173.5 -32.5q-63 0 -105.5 8t-72.5 20zM113 1323q0 70 49 113t125 43t125 -43t49 -113t-49 -114t-125 -44t-125 44t-49 114z" /> +<glyph unicode="k" horiz-adv-x="1122" d="M133 0v1436h293v-824h8l322 404h327l-356 -418l383 -598h-326l-229 395l-129 -145v-250h-293z" /> +<glyph unicode="l" horiz-adv-x="585" d="M133 315v1121h301v-1133q0 -47 17.5 -65.5t35.5 -18.5h17.5t19.5 4l37 -223q-25 -10 -62.5 -17.5t-88.5 -7.5q-78 0 -131.5 25t-85 69t-46 106.5t-14.5 139.5z" /> +<glyph unicode="m" horiz-adv-x="1755" d="M133 0v1016h246l20 -131h9q63 63 134.5 109t172.5 46q109 0 175 -44t105 -126q68 70 142.5 120t177.5 50q164 0 240.5 -109.5t76.5 -299.5v-631h-301v592q0 111 -29.5 151.5t-95.5 40.5q-76 0 -174 -98v-686h-301v592q0 111 -29.5 151.5t-95.5 40.5q-78 0 -172 -98v-686 h-301z" /> +<glyph unicode="n" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q66 61 143.5 107t181.5 46q166 0 241 -108.5t75 -300.5v-631h-301v592q0 111 -30 151.5t-95 40.5q-57 0 -98.5 -25.5t-90.5 -72.5v-686h-301z" /> +<glyph unicode="o" horiz-adv-x="1136" d="M74 508q0 127 41 226.5t109.5 167t158.5 103t186 35.5t185.5 -35.5t158 -103t109.5 -167t41 -226.5t-41 -226.5t-109.5 -167t-157.5 -103.5t-186 -36q-96 0 -186 36t-158.5 103.5t-109.5 167t-41 226.5zM383 508q0 -133 46 -211t140 -78q92 0 139.5 78t47.5 211t-47 211 t-140 78q-94 0 -140 -78t-46 -211z" /> +<glyph unicode="p" horiz-adv-x="1173" d="M133 -377v1393h246l20 -101h9q59 53 133.5 89t154.5 36q92 0 166 -36.5t125 -104.5t79 -163t28 -212q0 -131 -36 -232.5t-96.5 -172t-137 -107.5t-158.5 -37q-66 0 -127.5 28t-114.5 79l10 -162v-297h-301zM434 287q41 -37 82 -51.5t80 -14.5q78 0 133 70.5t55 228.5 q0 274 -176 275q-88 0 -174 -93v-415z" /> +<glyph unicode="q" horiz-adv-x="1171" d="M80 508q0 125 36 223t94 167t135 105.5t157 36.5q84 0 147.5 -29.5t122.5 -95.5h8l25 101h235v-1393h-301v309l13 156q-51 -49 -119 -81t-137 -32q-94 0 -171 37t-131.5 105.5t-84 167t-29.5 223.5zM389 512q0 -152 48 -221.5t136 -69.5q49 0 89 20.5t77 71.5v416 q-41 37 -84 51.5t-84 14.5q-72 0 -127 -69t-55 -214z" /> +<glyph unicode="r" horiz-adv-x="815" d="M133 0v1016h246l20 -178h9q55 104 132.5 153t155.5 49q43 0 71 -5t50 -15l-49 -260q-29 8 -53.5 12t-57.5 4q-57 0 -119.5 -41t-103.5 -145v-590h-301z" /> +<glyph unicode="s" horiz-adv-x="907" d="M43 117l135 188q70 -53 133.5 -79.5t128.5 -26.5q68 0 98.5 22.5t30.5 63.5q0 25 -17 44t-47 35.5t-67 30t-76 29.5q-47 18 -94 43t-86 60.5t-63.5 83.5t-24.5 112q0 70 28 129t79 100t122.5 64.5t159.5 23.5q117 0 205 -39.5t154 -89.5l-135 -180q-55 41 -108.5 63.5 t-106.5 22.5q-115 0 -115 -80q0 -25 16.5 -42t44 -31.5t63.5 -27.5t74 -28q49 -18 97.5 -41.5t88.5 -58.5t64.5 -85t24.5 -120t-26.5 -129t-80 -103t-131 -70t-180.5 -26q-100 0 -205.5 39t-183.5 103z" /> +<glyph unicode="t" horiz-adv-x="784" d="M35 780v224l155 12l35 270h250v-270h244v-236h-244v-407q0 -86 36 -124t95 -38q25 0 50.5 6t45.5 14l48 -219q-41 -12 -96.5 -24.5t-129.5 -12.5q-94 0 -160.5 29t-108.5 80t-61.5 124t-19.5 161v411h-139z" /> +<glyph unicode="u" horiz-adv-x="1163" d="M123 385v631h301v-592q0 -111 30.5 -152t96.5 -41q57 0 96 27t84 86v672h301v-1016h-246l-22 141h-6q-66 -78 -140.5 -122t-179.5 -44q-166 0 -240.5 109t-74.5 301z" /> +<glyph unicode="v" horiz-adv-x="1071" d="M25 1016h303l131 -479q20 -76 39.5 -155t40.5 -159h8q18 80 37.5 159t40.5 155l133 479h289l-332 -1016h-348z" /> +<glyph unicode="w" horiz-adv-x="1589" d="M49 1016h299l98 -471q12 -76 22.5 -149.5t23.5 -151.5h8q14 78 27.5 153.5t31.5 147.5l113 471h260l115 -471q18 -76 32.5 -149.5t30.5 -151.5h8q14 78 23.5 151.5t23.5 149.5l97 471h278l-244 -1016h-352l-92 406q-16 72 -28.5 143.5t-26.5 152.5h-9q-14 -82 -25 -153.5 t-26 -142.5l-90 -406h-344z" /> +<glyph unicode="x" horiz-adv-x="1052" d="M29 0l311 528l-293 488h324l90 -164q20 -43 41.5 -87t44.5 -87h8q16 43 34.5 87t35.5 87l69 164h312l-295 -522l313 -494h-324l-98 168q-25 43 -48.5 88t-47.5 88h-8q-18 -43 -39 -87t-39 -89l-80 -168h-311z" /> +<glyph unicode="y" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -70 41 -141.5t39 -147.5h8q16 72 33.5 144.5t36.5 144.5l123 436h288l-352 -1026q-37 -96 -77 -169t-92 -121t-118.5 -72.5t-156.5 -24.5q-47 0 -80 5t-64 15l54 230q14 -4 32.5 -8.5t34.5 -4.5q76 0 117 37t61 96l15 54z" /> +<glyph unicode="z" horiz-adv-x="942" d="M78 0v162l426 618h-379v236h754v-160l-426 -620h440v-236h-815z" /> +<glyph unicode="{" horiz-adv-x="704" d="M63 481v176q49 2 83 15.5t54.5 35t30 48t9.5 53.5q0 47 -3.5 88t-7.5 81t-7 84t-3 97q0 164 63.5 227.5t198.5 63.5h129v-160h-39q-63 0 -85.5 -29.5t-22.5 -113.5q0 -82 4 -162t4 -172q0 -117 -37 -169t-115 -71v-8q78 -18 115 -70.5t37 -168.5q0 -94 -4 -172t-4 -162 t22.5 -114t85.5 -30h39v-159h-129q-135 0 -198.5 62.5t-63.5 228.5q0 55 3 98t7 83t7.5 80t3.5 89q0 27 -9.5 53.5t-30 48t-54 34.5t-83.5 15z" /> +<glyph unicode="|" horiz-adv-x="548" d="M176 -512v2048h197v-2048h-197z" /> +<glyph unicode="}" horiz-adv-x="704" d="M94 -152h39q63 0 86 30t23 114t-4.5 161.5t-4.5 172.5q0 117 37 169t115 70v8q-78 18 -115 70.5t-37 169.5q0 92 4.5 172t4.5 162q0 84 -22.5 113.5t-86.5 29.5h-39v160h129q135 0 198.5 -63.5t63.5 -227.5q0 -53 -3 -97t-7 -84t-7 -81t-3 -88q0 -27 9 -53.5t29.5 -48 t54.5 -35t83 -15.5v-176q-49 -2 -83 -15t-54.5 -34.5t-29.5 -48.5t-9 -53q0 -49 3 -89t7 -80t7 -83t3 -98q0 -166 -63.5 -228.5t-198.5 -62.5h-129v159z" /> +<glyph unicode="~" d="M59 649q76 117 153 164t155 47q63 0 110 -24.5t87 -53t76 -53t79 -24.5t79 30.5t68 87.5l156 -121q-76 -117 -152.5 -163.5t-154.5 -46.5q-63 0 -110.5 24.5t-87.5 53t-75.5 53t-79.5 24.5q-41 0 -77.5 -30.5t-69.5 -88.5z" /> +<glyph unicode="¡" horiz-adv-x="696" d="M166 852q0 80 52 134t130 54t130 -54t52 -134q0 -82 -52 -136t-130 -54t-130 54t-52 136zM197 -356l10 272l43 627h196l43 -627l11 -272h-303z" /> +<glyph unicode="¢" d="M123 629q0 109 32.5 196.5t92 152t139.5 106.5t176 59v198h166v-190q80 -8 144.5 -38t109.5 -77l-137 -184q-61 49 -117 55v-557q43 8 80 27.5t68 44.5l120 -191q-59 -51 -128.5 -80.5t-139.5 -39.5v-195h-166v195q-100 12 -181 53t-138.5 107.5t-89 156.5t-31.5 201z M416 629q0 -92 38 -159t109 -97v512q-74 -33 -110.5 -98.5t-36.5 -157.5z" /> +<glyph unicode="£" d="M98 0v186q92 41 154.5 122t62.5 192q0 14 -1 27.5t-3 27.5h-205v176l140 10h12q-14 41 -23.5 82t-9.5 82q0 96 33 174t91.5 132.5t138 84t176.5 29.5q115 0 199.5 -43t154.5 -123l-164 -164q-35 43 -74 64.5t-88 21.5q-82 0 -130 -47t-48 -145q0 -37 6 -74t17 -74h303 v-186h-265q2 -14 3.5 -28.5t1.5 -28.5q0 -74 -21.5 -127.5t-71.5 -108.5v-8h531v-254h-920z" /> +<glyph unicode="¤" d="M41 322l125 127q-70 94 -70 227q0 66 17.5 122t50.5 101l-123 127l149 152l142 -144q98 51 209 51q106 0 209 -51l141 144l149 -152l-125 -127q70 -92 70 -223q0 -68 -18.5 -124t-51.5 -103l125 -127l-149 -152l-143 145q-47 -25 -100.5 -37t-106.5 -12q-113 0 -207 49 l-144 -145zM365 676q0 -92 51 -146.5t125 -54.5t125 54.5t51 146.5t-51.5 146.5t-124.5 54.5q-74 0 -125 -54.5t-51 -146.5z" /> +<glyph unicode="¥" d="M25 1300h309l104 -272q25 -68 49.5 -135.5t53.5 -132.5h8q27 68 51.5 135.5t50.5 132.5l103 272h303l-301 -600h250v-143h-316v-113h316v-143h-316v-301h-301v301h-313v143h313v113h-313v143h250z" /> +<glyph unicode="¦" horiz-adv-x="548" d="M176 418h197v-930h-197v930zM176 639v897h197v-897h-197z" /> +<glyph unicode="§" d="M76 668q0 78 44 146.5t120 115.5q-29 33 -44.5 75t-15.5 95q0 139 95.5 226t269.5 87q119 0 212 -42t156 -91l-137 -188q-47 41 -104.5 69.5t-110.5 28.5q-111 0 -110 -80q0 -37 40.5 -64.5t102 -55t134.5 -60.5t134.5 -79t102.5 -111.5t41 -157.5q0 -90 -44 -157 t-124 -116q23 -33 35 -71.5t12 -85.5q0 -70 -25.5 -129.5t-75 -102.5t-123 -67.5t-169.5 -24.5q-113 0 -220.5 42t-177.5 130l174 154q100 -104 224 -105q63 0 92.5 24.5t29.5 63.5t-39.5 67.5t-99 55.5t-130.5 57.5t-130 76.5t-99 111.5t-40 162.5zM330 690q0 -49 32.5 -83 t84 -61.5t114 -53t121.5 -56.5q70 43 70 121q0 49 -33 83t-83 61.5t-112.5 52t-122.5 55.5q-71 -47 -71 -119z" /> +<glyph unicode="¨" horiz-adv-x="1136" d="M223 1313q0 59 40 100t103 41t103.5 -41t40.5 -100q0 -61 -40.5 -102.5t-103.5 -41.5t-103 41t-40 103zM628 1313q0 59 40 100t104 41q63 0 103 -41t40 -100q0 -61 -40 -102.5t-103 -41.5t-103.5 41t-40.5 103z" /> +<glyph unicode="©" horiz-adv-x="1536" d="M92 666q0 160 54.5 284.5t147.5 211.5t216 133t258 46t258 -46t215 -133t146.5 -213t54.5 -283q0 -160 -54.5 -286t-146.5 -215t-215 -136t-258 -47t-258 47t-216 136t-147.5 215t-54.5 286zM231 666q0 -127 42 -229.5t114 -176.5t170 -114t211 -40t211 40t170 114 t114 176.5t42 229.5q0 125 -42 227t-114 175t-170 112t-211 39t-211 -39t-170 -112t-114 -175t-42 -227zM397 664q0 90 33 162.5t87 123.5t126 79t150 28q94 0 157.5 -36t112.5 -85l-113 -125q-33 35 -65.5 52.5t-73.5 17.5q-98 0 -148.5 -62.5t-50.5 -154.5 q0 -104 51.5 -166t137.5 -62q51 0 88 19.5t76 50.5l98 -139q-59 -47 -125 -77t-145 -30q-86 0 -159 28.5t-125 81t-82 127.5t-30 167z" /> +<glyph unicode="ª" horiz-adv-x="735" d="M59 721q0 109 90.5 167t292.5 79q-4 43 -27.5 65.5t-72.5 22.5q-41 0 -88 -16.5t-96 -45.5l-76 142q68 39 142.5 63.5t154.5 24.5q131 0 203.5 -75t72.5 -228v-388h-170l-20 68h-8q-37 -37 -84.5 -60.5t-106.5 -23.5q-96 0 -151.5 59.5t-55.5 145.5zM262 737 q0 -59 76 -59q31 0 54.5 13.5t49.5 37.5v115q-102 -12 -141 -41t-39 -66z" /> +<glyph unicode="«" horiz-adv-x="983" d="M100 410v213l275 295l112 -91l-227 -311l227 -311l-112 -90zM485 410v213l275 295l112 -91l-227 -311l227 -311l-112 -90z" /> +<glyph unicode="¬" d="M70 569v213h942v-589h-221v376h-721z" /> +<glyph unicode="­" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> +<glyph unicode="®" horiz-adv-x="946" d="M66 1051q0 90 31.5 165.5t87 131t130 86t158.5 30.5t158 -30.5t129 -86t87 -131t32 -165.5t-32 -166t-87 -131.5t-129 -86t-158 -30.5t-158.5 30.5t-130 86t-87 131.5t-31.5 166zM178 1051q0 -72 21.5 -129.5t61.5 -98.5t93 -63.5t119 -22.5q129 0 211 85t82 229 q0 143 -82 228t-211 85q-66 0 -119 -22.5t-93 -63.5t-61.5 -98.5t-21.5 -128.5zM307 852v403h182q72 0 119 -32.5t47 -102.5q0 -76 -71 -110l84 -158h-123l-62 123h-59v-123h-117zM424 1057h43q31 0 46 17.5t15 39.5q0 23 -15 38t-46 15h-43v-110z" /> +<glyph unicode="¯" horiz-adv-x="1136" d="M286 1212v191h566v-191h-566z" /> +<glyph unicode="°" horiz-adv-x="747" d="M80 1110q0 63 22.5 117.5t62.5 94.5t94 61.5t116 21.5q61 0 115.5 -21.5t94.5 -61.5t63.5 -94t23.5 -118q0 -66 -23.5 -119t-63.5 -93t-94.5 -61.5t-115.5 -21.5t-115.5 21.5t-94.5 61.5t-62.5 93t-22.5 119zM238 1110q0 -68 39 -110t98 -42q61 0 99 42t38 110 q0 66 -38 108t-99 42q-59 0 -98 -42t-39 -108z" /> +<glyph unicode="±" d="M70 0v213h942v-213h-942zM70 602v213h360v344h221v-344h361v-213h-361v-278h-221v278h-360z" /> +<glyph unicode="²" horiz-adv-x="770" d="M55 1560q123 164 305 164q133 0 214 -70.5t81 -199.5q0 -49 -17 -95t-47 -91t-68 -90.5t-81 -92.5h242v-184h-592v119q154 127 252 224t98 173q0 59 -30.5 92t-85.5 33q-41 0 -76 -25.5t-70 -70.5z" /> +<glyph unicode="³" horiz-adv-x="770" d="M55 1038l133 105q72 -98 170 -99q47 0 81 25t34 72q0 104 -190 104v127q74 0 117.5 23.5t43.5 74.5q0 41 -26.5 63.5t-73.5 22.5q-39 0 -70.5 -22.5t-60.5 -57.5l-125 111q66 72 133.5 104.5t161.5 32.5q55 0 105.5 -15t89 -44t61.5 -71t23 -93q0 -63 -31 -107t-86 -77 q61 -25 103 -73t42 -120q0 -55 -25.5 -101t-67.5 -78t-98.5 -50.5t-117.5 -18.5q-104 0 -188 42t-138 120z" /> +<glyph unicode="´" horiz-adv-x="1136" d="M401 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="µ" horiz-adv-x="1173" d="M133 -410v1426h301v-592q0 -111 30 -152t95 -41q57 0 97 27t85 86v672h301v-1016h-245l-23 141h-8q-39 -74 -97.5 -111.5t-125.5 -37.5q-37 0 -69 8t-58 37l18 -184v-263h-301z" /> +<glyph unicode="¶" horiz-adv-x="1302" d="M80 879q0 129 41 216t111.5 141t166 76.5t201.5 22.5h90v-932h-82q-109 0 -205 30t-167.5 90.5t-113.5 149.5t-42 206zM805 -164v1499h301v-1499h-301z" /> +<glyph unicode="·" horiz-adv-x="614" d="M125 656q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5z" /> +<glyph unicode="¸" horiz-adv-x="1136" d="M360 -332q74 8 122 28.5t48 61.5q0 27 -25.5 48.5t-95.5 37.5l82 164h176l-41 -96q53 -16 86 -52t33 -100q0 -53 -29.5 -91t-79 -64.5t-115 -40t-138.5 -17.5z" /> +<glyph unicode="¹" horiz-adv-x="770" d="M156 1476v136q41 6 72.5 14t58 18.5t50 23.5t48.5 32h176v-799h-223v575h-182z" /> +<glyph unicode="º" horiz-adv-x="763" d="M49 868q0 84 27.5 149.5t74 112t105.5 70t125 23.5t125 -23.5t105 -70t74 -112t28 -149.5t-28 -148.5t-74 -110.5t-105 -69.5t-125 -23.5t-125 23.5t-105.5 69.5t-74 110.5t-27.5 148.5zM266 868q0 -84 28 -134t87 -50t88 50t29 134q0 86 -29 136.5t-88 50.5t-87 -50.5 t-28 -136.5z" /> +<glyph unicode="»" horiz-adv-x="983" d="M111 205l227 311l-227 311l112 91l275 -295v-213l-275 -295zM496 205l227 311l-227 311l112 91l275 -295v-213l-275 -295z" /> +<glyph unicode="¼" horiz-adv-x="1656" d="M97 1112v136q41 6 72.5 14t58 18.5t50 23.5t48.5 32h176v-799h-223v575h-182zM379 -25l721 1385h174l-721 -1385h-174zM959 178v111l288 510h275v-477h119v-144h-119v-178h-197v178h-366zM1161 322h164v84l13 239h-9l-82 -158z" /> +<glyph unicode="½" horiz-adv-x="1732" d="M97 1112v136q41 6 72.5 14t58 18.5t50 23.5t48.5 32h176v-799h-223v575h-182zM348 -25l721 1385h174l-721 -1385h-174zM1016 659q123 164 305 164q133 0 214 -70.5t81 -199.5q0 -49 -17 -95t-47 -91t-68 -90.5t-81 -92.5h242v-184h-592v119q154 127 252 224t98 173 q0 59 -30.5 92t-85.5 33q-41 0 -76 -25.5t-70 -70.5z" /> +<glyph unicode="¾" horiz-adv-x="1675" d="M51 674l133 105q72 -98 170 -99q47 0 81 25t34 72q0 104 -190 104v127q74 0 117.5 23.5t43.5 74.5q0 41 -26.5 63.5t-73.5 22.5q-39 0 -70.5 -22.5t-60.5 -57.5l-125 111q66 72 133.5 104.5t161.5 32.5q55 0 105.5 -15t89 -44t61.5 -71t23 -93q0 -63 -31 -107t-86 -77 q61 -25 103 -73t42 -120q0 -55 -25.5 -101t-67.5 -78t-98.5 -50.5t-117.5 -18.5q-104 0 -188 42t-138 120zM424 -25l721 1385h174l-721 -1385h-174zM975 178v111l288 510h275v-477h119v-144h-119v-178h-197v178h-366zM1177 322h164v84l13 239h-9l-82 -158z" /> +<glyph unicode="¿" horiz-adv-x="948" d="M86 -29q0 63 22.5 113.5t56.5 93.5t71.5 83t69.5 82t51.5 90t13.5 110h262q10 -70 -5.5 -127.5t-44 -106.5t-64.5 -90t-68.5 -79t-54 -73.5t-21.5 -74.5q0 -63 39 -96t98 -33q57 0 101 26.5t85 67.5l166 -152q-70 -84 -164 -135t-208 -51q-86 0 -161 20.5t-129.5 63.5 t-85 109.5t-30.5 158.5zM319 852q0 80 52.5 134t130.5 54t130 -54t52 -134q0 -82 -52 -136t-130 -54t-130.5 54t-52.5 136z" /> +<glyph unicode="À" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM246 1683h320l166 -245h-240zM436 553h287l-33 123q-29 100 -54.5 212.5t-53.5 217.5h-9q-23 -106 -49 -218t-55 -212z" /> +<glyph unicode="Á" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM424 1438l166 245h320l-246 -245h-240zM436 553h287l-33 123q-29 100 -54.5 212.5t-53.5 217.5h-9q-23 -106 -49 -218t-55 -212z" /> +<glyph unicode="Â" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM234 1438l197 245h294l197 -245h-231l-109 125h-8l-109 -125h-231zM436 553h287l-33 123q-29 100 -54.5 212.5t-53.5 217.5h-9q-23 -106 -49 -218t-55 -212z" /> +<glyph unicode="Ã" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM230 1440q16 141 77.5 209.5t141.5 68.5q41 0 76 -14t64.5 -31.5t55 -32t50.5 -14.5q27 0 47 20.5t31 71.5h153q-16 -141 -77.5 -209.5t-141.5 -68.5q-41 0 -76 14t-64.5 31.5t-55 32t-50.5 14.5 q-27 0 -47 -20.5t-31 -71.5h-153zM436 553h287l-33 123q-29 100 -54.5 212.5t-53.5 217.5h-9q-23 -106 -49 -218t-55 -212z" /> +<glyph unicode="Ä" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM232 1577q0 61 40 102t103 41t103.5 -41t40.5 -102t-40.5 -102t-103.5 -41t-103 41t-40 102zM436 553h287l-33 123q-29 100 -54.5 212.5t-53.5 217.5h-9q-23 -106 -49 -218t-55 -212zM637 1577 q0 61 40 102t104 41q63 0 103 -41t40 -102t-40 -102t-103 -41t-103.5 41t-40.5 102z" /> +<glyph unicode="Å" horiz-adv-x="1169" d="M-14 0l420 1335h360l420 -1335h-320l-82 317h-409l-82 -317h-307zM347 1628q0 92 63.5 146.5t167.5 54.5t167.5 -54.5t63.5 -146.5t-63.5 -146.5t-167.5 -54.5t-167.5 54.5t-63.5 146.5zM436 553h287l-33 123q-29 100 -54.5 212.5t-53.5 217.5h-9q-23 -106 -49 -218 t-55 -212zM494 1628q0 -41 24.5 -64.5t59.5 -23.5t58.5 23.5t23.5 64.5t-23.5 64.5t-58.5 23.5t-59.5 -23.5t-24.5 -64.5z" /> +<glyph unicode="Æ" horiz-adv-x="1728" d="M-29 0l633 1335h998v-254h-510v-268h430v-252h-430v-307h530v-254h-834v305h-362l-139 -305h-316zM532 539h256v569h-8q-41 -98 -81 -194.5t-81 -184.5z" /> +<glyph unicode="Ç" horiz-adv-x="1187" d="M92 659q0 166 51.5 296t138.5 220.5t202.5 137.5t244.5 47q125 0 226.5 -52.5t168.5 -121.5l-166 -187q-51 47 -102 74t-123 27q-70 0 -130 -30t-105 -85t-71 -135t-26 -180q0 -207 88.5 -320.5t235.5 -113.5q84 0 144.5 32.5t109.5 85.5l166 -182q-84 -98 -191.5 -147.5 t-232.5 -49.5q-129 0 -244 44t-201 130.5t-135 214t-49 295.5zM504 -332q74 8 122 28.5t48 61.5q0 27 -25.5 48.5t-95.5 37.5l82 164h176l-41 -96q53 -16 86 -52t33 -100q0 -53 -29.5 -91t-79 -64.5t-115 -40t-138.5 -17.5z" /> +<glyph unicode="È" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM256 1683h320l166 -245h-240z" /> +<glyph unicode="É" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM434 1438l166 245h320l-246 -245h-240z" /> +<glyph unicode="Ê" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM244 1438l197 245h294l197 -245h-231l-109 125h-8l-109 -125h-231z" /> +<glyph unicode="Ë" horiz-adv-x="1118" d="M156 0v1335h837v-254h-534v-268h454v-252h-454v-307h555v-254h-858zM242 1577q0 61 40 102t103 41t103.5 -41t40.5 -102t-40.5 -102t-103.5 -41t-103 41t-40 102zM647 1577q0 61 40 102t104 41q63 0 103 -41t40 -102t-40 -102t-103 -41t-103.5 41t-40.5 102z" /> +<glyph unicode="Ì" horiz-adv-x="614" d="M-25 1683h320l166 -245h-240zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="Í" horiz-adv-x="614" d="M153 1438l166 245h320l-246 -245h-240zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="Î" horiz-adv-x="614" d="M-37 1438l197 245h294l197 -245h-231l-109 125h-8l-109 -125h-231zM156 0v1335h303v-1335h-303z" /> +<glyph unicode="Ï" horiz-adv-x="614" d="M-39 1577q0 61 40 102t103 41t103.5 -41t40.5 -102t-40.5 -102t-103.5 -41t-103 41t-40 102zM156 0v1335h303v-1335h-303zM366 1577q0 61 40 102t104 41q63 0 103 -41t40 -102t-40 -102t-103 -41t-103.5 41t-40.5 102z" /> +<glyph unicode="Ð" horiz-adv-x="1347" d="M53 616v136l152 10v573h379q154 0 276.5 -39t210.5 -119.5t135 -205.5t47 -297t-47 -299t-133 -210t-205.5 -124t-267.5 -41h-395v616h-152zM508 244h57q84 0 153.5 22.5t120 72.5t78 132t27.5 203q0 119 -27.5 199.5t-78 129t-120 69t-153.5 20.5h-57v-330h258v-146 h-258v-372z" /> +<glyph unicode="Ñ" horiz-adv-x="1359" d="M156 0v1335h309l348 -663l133 -295h8q-10 106 -24.5 237t-14.5 250v471h287v-1335h-309l-348 666l-131 290h-8q10 -111 24 -237.5t14 -245.5v-473h-288zM334 1440q16 141 77.5 209.5t141.5 68.5q41 0 76 -14t64.5 -31.5t55 -32t50.5 -14.5q27 0 47 20.5t31 71.5h153 q-16 -141 -77.5 -209.5t-141.5 -68.5q-41 0 -76 14t-64.5 31.5t-55 32t-50.5 14.5q-27 0 -47 -20.5t-31 -71.5h-153z" /> +<glyph unicode="Ò" horiz-adv-x="1398" d="M92 674q0 164 44 292t124 215t191.5 133t246.5 46t247 -46t192 -134t124 -216t44 -290q0 -164 -44 -293t-124 -219t-192 -138.5t-247 -48.5t-246.5 48.5t-191.5 138.5t-124 219t-44 293zM366 1683h320l166 -245h-240zM401 674q0 -100 21.5 -181t59.5 -138.5t93 -88 t123 -30.5q137 0 217 117.5t80 320.5q0 201 -79.5 313.5t-217.5 112.5q-135 0 -216 -113t-81 -313z" /> +<glyph unicode="Ó" horiz-adv-x="1398" d="M92 674q0 164 44 292t124 215t191.5 133t246.5 46t247 -46t192 -134t124 -216t44 -290q0 -164 -44 -293t-124 -219t-192 -138.5t-247 -48.5t-246.5 48.5t-191.5 138.5t-124 219t-44 293zM401 674q0 -100 21.5 -181t59.5 -138.5t93 -88t123 -30.5q137 0 217 117.5 t80 320.5q0 201 -79.5 313.5t-217.5 112.5q-135 0 -216 -113t-81 -313zM544 1438l166 245h320l-246 -245h-240z" /> +<glyph unicode="Ô" horiz-adv-x="1398" d="M92 674q0 164 44 292t124 215t191.5 133t246.5 46t247 -46t192 -134t124 -216t44 -290q0 -164 -44 -293t-124 -219t-192 -138.5t-247 -48.5t-246.5 48.5t-191.5 138.5t-124 219t-44 293zM354 1438l197 245h294l197 -245h-231l-109 125h-8l-109 -125h-231zM401 674 q0 -100 21.5 -181t59.5 -138.5t93 -88t123 -30.5q137 0 217 117.5t80 320.5q0 201 -79.5 313.5t-217.5 112.5q-135 0 -216 -113t-81 -313z" /> +<glyph unicode="Õ" horiz-adv-x="1398" d="M92 674q0 164 44 292t124 215t191.5 133t246.5 46t247 -46t192 -134t124 -216t44 -290q0 -164 -44 -293t-124 -219t-192 -138.5t-247 -48.5t-246.5 48.5t-191.5 138.5t-124 219t-44 293zM350 1440q16 141 77.5 209.5t141.5 68.5q41 0 76 -14t64.5 -31.5t55 -32 t50.5 -14.5q27 0 47 20.5t31 71.5h153q-16 -141 -77.5 -209.5t-141.5 -68.5q-41 0 -76 14t-64.5 31.5t-55 32t-50.5 14.5q-27 0 -47 -20.5t-31 -71.5h-153zM401 674q0 -100 21.5 -181t59.5 -138.5t93 -88t123 -30.5q137 0 217 117.5t80 320.5q0 201 -79.5 313.5 t-217.5 112.5q-135 0 -216 -113t-81 -313z" /> +<glyph unicode="Ö" horiz-adv-x="1398" d="M92 674q0 164 44 292t124 215t191.5 133t246.5 46t247 -46t192 -134t124 -216t44 -290q0 -164 -44 -293t-124 -219t-192 -138.5t-247 -48.5t-246.5 48.5t-191.5 138.5t-124 219t-44 293zM352 1577q0 61 40 102t103 41t103.5 -41t40.5 -102t-40.5 -102t-103.5 -41t-103 41 t-40 102zM401 674q0 -100 21.5 -181t59.5 -138.5t93 -88t123 -30.5q137 0 217 117.5t80 320.5q0 201 -79.5 313.5t-217.5 112.5q-135 0 -216 -113t-81 -313zM757 1577q0 61 40 102t104 41q63 0 103 -41t40 -102t-40 -102t-103 -41t-103.5 41t-40.5 102z" /> +<glyph unicode="×" d="M98 381l291 293l-291 295l150 151l293 -295l293 295l149 -151l-291 -295l291 -293l-149 -152l-293 295l-293 -295z" /> +<glyph unicode="Ø" horiz-adv-x="1398" d="M80 35l141 176q-61 88 -95 203.5t-34 259.5q0 164 44 292t124 215t191.5 133t246.5 46q211 0 361 -109l135 168l156 -121l-156 -194q111 -170 111 -430q0 -164 -44 -293t-124 -219t-191.5 -138.5t-247.5 -48.5q-193 0 -336 97l-124 -156zM401 674q0 -59 7.5 -109.5 t19.5 -95.5l451 559q-72 72 -181 72q-135 0 -216 -113t-81 -313zM539 291q72 -55 159 -55q137 0 217 117.5t80 320.5q0 86 -16 164z" /> +<glyph unicode="Ù" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -197 59 -274.5t172 -77.5t175.5 77.5t62.5 274.5v747h290v-717q0 -336 -134 -489.5t-394 -153.5t-396 154t-136 489zM346 1683h320l166 -245h-240z" /> +<glyph unicode="Ú" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -197 59 -274.5t172 -77.5t175.5 77.5t62.5 274.5v747h290v-717q0 -336 -134 -489.5t-394 -153.5t-396 154t-136 489zM524 1438l166 245h320l-246 -245h-240z" /> +<glyph unicode="Û" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -197 59 -274.5t172 -77.5t175.5 77.5t62.5 274.5v747h290v-717q0 -336 -134 -489.5t-394 -153.5t-396 154t-136 489zM334 1438l197 245h294l197 -245h-231l-109 125h-8l-109 -125h-231z" /> +<glyph unicode="Ü" horiz-adv-x="1357" d="M150 618v717h301v-747q0 -197 59 -274.5t172 -77.5t175.5 77.5t62.5 274.5v747h290v-717q0 -336 -134 -489.5t-394 -153.5t-396 154t-136 489zM332 1577q0 61 40 102t103 41t103.5 -41t40.5 -102t-40.5 -102t-103.5 -41t-103 41t-40 102zM737 1577q0 61 40 102t104 41 q63 0 103 -41t40 -102t-40 -102t-103 -41t-103.5 41t-40.5 102z" /> +<glyph unicode="Ý" horiz-adv-x="1073" d="M-16 1335h321l121 -307q27 -76 53.5 -146.5t55.5 -148.5h8q29 78 56.5 148.5t55.5 146.5l119 307h316l-404 -860v-475h-301v475zM383 1438l166 245h320l-246 -245h-240z" /> +<glyph unicode="Þ" horiz-adv-x="1269" d="M164 0v1335h301v-202h184q109 0 205 -21.5t167 -72t112 -132.5t41 -202q0 -119 -42 -204t-114 -140.5t-167 -82t-202 -26.5h-184v-252h-301zM465 492h168q244 0 244 213q0 104 -62.5 146t-181.5 42h-168v-401z" /> +<glyph unicode="ß" horiz-adv-x="1294" d="M133 0v997q0 98 30 182.5t89 145.5t151.5 96t214.5 35q104 0 183.5 -28.5t131.5 -76.5t78.5 -109.5t26.5 -127.5q0 -74 -24.5 -124t-55 -90t-55 -73.5t-24.5 -72.5q0 -35 26.5 -58.5t66.5 -46t87 -49.5t87 -64.5t66.5 -92t26.5 -132.5q0 -70 -23.5 -131t-71.5 -106 t-119 -72t-163 -27t-163.5 25t-145.5 68l104 204q100 -74 195 -73q53 0 83 27.5t30 70.5q0 39 -27 66.5t-67 51t-87 49t-87 59.5t-66.5 80t-26.5 114q0 59 22.5 102t50.5 82t50.5 81t22.5 97q0 59 -34 99.5t-98 40.5q-94 0 -141 -69t-47 -187v-963h-297z" /> +<glyph unicode="à" horiz-adv-x="1093" d="M96 283q0 160 135.5 250t436.5 120q-4 68 -41 108t-119 40q-66 0 -131.5 -24.5t-138.5 -67.5l-107 198q98 59 205.5 96t228.5 37q197 0 300.5 -111.5t103.5 -346.5v-582h-246l-23 104h-6q-66 -57 -138.5 -93t-158.5 -36q-70 0 -125 24t-94 65.5t-60.5 97t-21.5 121.5z M270 1483h291l182 -307h-219zM383 305q0 -49 31.5 -72.5t85.5 -23.5q53 0 90 22.5t78 63.5v178q-162 -23 -223.5 -66t-61.5 -102z" /> +<glyph unicode="á" horiz-adv-x="1093" d="M96 283q0 160 135.5 250t436.5 120q-4 68 -41 108t-119 40q-66 0 -131.5 -24.5t-138.5 -67.5l-107 198q98 59 205.5 96t228.5 37q197 0 300.5 -111.5t103.5 -346.5v-582h-246l-23 104h-6q-66 -57 -138.5 -93t-158.5 -36q-70 0 -125 24t-94 65.5t-60.5 97t-21.5 121.5z M383 305q0 -49 31.5 -72.5t85.5 -23.5q53 0 90 22.5t78 63.5v178q-162 -23 -223.5 -66t-61.5 -102zM407 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="â" horiz-adv-x="1093" d="M96 283q0 160 135.5 250t436.5 120q-4 68 -41 108t-119 40q-66 0 -131.5 -24.5t-138.5 -67.5l-107 198q98 59 205.5 96t228.5 37q197 0 300.5 -111.5t103.5 -346.5v-582h-246l-23 104h-6q-66 -57 -138.5 -93t-158.5 -36q-70 0 -125 24t-94 65.5t-60.5 97t-21.5 121.5z M260 1176l196 307h238l196 -307h-202l-109 161h-8l-109 -161h-202zM383 305q0 -49 31.5 -72.5t85.5 -23.5q53 0 90 22.5t78 63.5v178q-162 -23 -223.5 -66t-61.5 -102z" /> +<glyph unicode="ã" horiz-adv-x="1093" d="M96 283q0 160 135.5 250t436.5 120q-4 68 -41 108t-119 40q-66 0 -131.5 -24.5t-138.5 -67.5l-107 198q98 59 205.5 96t228.5 37q197 0 300.5 -111.5t103.5 -346.5v-582h-246l-23 104h-6q-66 -57 -138.5 -93t-158.5 -36q-70 0 -125 24t-94 65.5t-60.5 97t-21.5 121.5z M235 1178q16 141 73.5 208.5t139.5 67.5q41 0 76 -14.5t63.5 -30.5t54 -30.5t48.5 -14.5q27 0 43 20.5t28 69.5h154q-16 -139 -73.5 -207.5t-139.5 -68.5q-41 0 -75 14t-63.5 31.5t-55 32t-48.5 14.5q-27 0 -43 -20.5t-28 -71.5h-154zM383 305q0 -49 31.5 -72.5t85.5 -23.5 q53 0 90 22.5t78 63.5v178q-162 -23 -223.5 -66t-61.5 -102z" /> +<glyph unicode="ä" horiz-adv-x="1093" d="M96 283q0 160 135.5 250t436.5 120q-4 68 -41 108t-119 40q-66 0 -131.5 -24.5t-138.5 -67.5l-107 198q98 59 205.5 96t228.5 37q197 0 300.5 -111.5t103.5 -346.5v-582h-246l-23 104h-6q-66 -57 -138.5 -93t-158.5 -36q-70 0 -125 24t-94 65.5t-60.5 97t-21.5 121.5z M229 1313q0 59 40 100t103 41t103.5 -41t40.5 -100q0 -61 -40.5 -102.5t-103.5 -41.5t-103 41t-40 103zM383 305q0 -49 31.5 -72.5t85.5 -23.5q53 0 90 22.5t78 63.5v178q-162 -23 -223.5 -66t-61.5 -102zM634 1313q0 59 40 100t104 41q63 0 103 -41t40 -100 q0 -61 -40 -102.5t-103 -41.5t-103.5 41t-40.5 103z" /> +<glyph unicode="å" horiz-adv-x="1093" d="M96 283q0 160 135.5 250t436.5 120q-4 68 -41 108t-119 40q-66 0 -131.5 -24.5t-138.5 -67.5l-107 198q98 59 205.5 96t228.5 37q197 0 300.5 -111.5t103.5 -346.5v-582h-246l-23 104h-6q-66 -57 -138.5 -93t-158.5 -36q-70 0 -125 24t-94 65.5t-60.5 97t-21.5 121.5z M344 1331q0 96 63.5 152.5t167.5 56.5t167.5 -56.5t63.5 -152.5t-63.5 -152.5t-167.5 -56.5t-167.5 56.5t-63.5 152.5zM383 305q0 -49 31.5 -72.5t85.5 -23.5q53 0 90 22.5t78 63.5v178q-162 -23 -223.5 -66t-61.5 -102zM491 1331q0 -43 24.5 -69.5t59.5 -26.5t59.5 26.5 t24.5 69.5t-24.5 69.5t-59.5 26.5t-59.5 -26.5t-24.5 -69.5z" /> +<glyph unicode="æ" horiz-adv-x="1609" d="M96 281q0 162 133 253t433 121q-4 66 -38 106t-120 40q-61 0 -127 -24.5t-139 -67.5l-107 198q98 59 201.5 96t214.5 37q94 0 165.5 -41t116.5 -112q66 74 137.5 113.5t163.5 39.5q100 0 176 -37.5t126.5 -104.5t76 -157t25.5 -194q0 -41 -4 -75t-8 -52h-586 q16 -106 83.5 -157.5t160.5 -51.5q57 0 108 20.5t107 53.5l102 -195q-78 -53 -173 -84t-185 -31q-115 0 -200 43t-151 115q-109 -86 -198.5 -122t-192.5 -36q-70 0 -125 24t-94 65.5t-60.5 97t-21.5 119.5zM383 305q0 -49 31.5 -72.5t85.5 -23.5q53 0 101 22.5t89 63.5 q-23 63 -28 135l-3 43q-150 -23 -213 -66t-63 -102zM936 604h342q0 92 -37 149.5t-121 57.5q-72 0 -122 -50t-62 -157z" /> +<glyph unicode="ç" horiz-adv-x="956" d="M74 508q0 127 43 226.5t115.5 167t169 103t200.5 35.5q94 0 170 -31.5t127 -84.5l-137 -187q-72 59 -141 60q-111 0 -174.5 -78t-63.5 -211t64.5 -211t162.5 -78q55 0 100.5 22.5t82.5 51.5l120 -191q-74 -66 -164 -96.5t-174 -30.5q-106 0 -197 36t-158.5 103.5 t-106.5 167t-39 226.5zM367 -332q74 8 122 28.5t48 61.5q0 27 -25.5 48.5t-95.5 37.5l82 164h176l-41 -96q53 -16 86 -52t33 -100q0 -53 -29.5 -91t-79 -64.5t-115 -40t-138.5 -17.5z" /> +<glyph unicode="è" horiz-adv-x="1060" d="M74 508q0 123 41 222t107.5 168t152.5 105.5t178 36.5q109 0 189.5 -36.5t135 -102t81 -155t26.5 -193.5q0 -41 -4 -75t-8 -52h-608q20 -117 90.5 -169t173.5 -52q109 0 219 67l100 -182q-78 -53 -173 -84t-187 -31q-109 0 -203 36t-163.5 104.5t-108.5 167t-39 225.5z M248 1483h291l182 -307h-219zM362 612h367q0 88 -39 143.5t-131 55.5q-72 0 -126 -48t-71 -151z" /> +<glyph unicode="é" horiz-adv-x="1060" d="M74 508q0 123 41 222t107.5 168t152.5 105.5t178 36.5q109 0 189.5 -36.5t135 -102t81 -155t26.5 -193.5q0 -41 -4 -75t-8 -52h-608q20 -117 90.5 -169t173.5 -52q109 0 219 67l100 -182q-78 -53 -173 -84t-187 -31q-109 0 -203 36t-163.5 104.5t-108.5 167t-39 225.5z M362 612h367q0 88 -39 143.5t-131 55.5q-72 0 -126 -48t-71 -151zM385 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="ê" horiz-adv-x="1060" d="M74 508q0 123 41 222t107.5 168t152.5 105.5t178 36.5q109 0 189.5 -36.5t135 -102t81 -155t26.5 -193.5q0 -41 -4 -75t-8 -52h-608q20 -117 90.5 -169t173.5 -52q109 0 219 67l100 -182q-78 -53 -173 -84t-187 -31q-109 0 -203 36t-163.5 104.5t-108.5 167t-39 225.5z M238 1176l196 307h238l196 -307h-202l-109 161h-8l-109 -161h-202zM362 612h367q0 88 -39 143.5t-131 55.5q-72 0 -126 -48t-71 -151z" /> +<glyph unicode="ë" horiz-adv-x="1060" d="M74 508q0 123 41 222t107.5 168t152.5 105.5t178 36.5q109 0 189.5 -36.5t135 -102t81 -155t26.5 -193.5q0 -41 -4 -75t-8 -52h-608q20 -117 90.5 -169t173.5 -52q109 0 219 67l100 -182q-78 -53 -173 -84t-187 -31q-109 0 -203 36t-163.5 104.5t-108.5 167t-39 225.5z M207 1313q0 59 40 100t103 41t103.5 -41t40.5 -100q0 -61 -40.5 -102.5t-103.5 -41.5t-103 41t-40 103zM362 612h367q0 88 -39 143.5t-131 55.5q-72 0 -126 -48t-71 -151zM612 1313q0 59 40 100t104 41q63 0 103 -41t40 -100q0 -61 -40 -102.5t-103 -41.5t-103.5 41 t-40.5 103z" /> +<glyph unicode="ì" horiz-adv-x="565" d="M-22 1483h291l182 -307h-219zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="í" horiz-adv-x="565" d="M115 1176l182 307h291l-254 -307h-219zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="î" horiz-adv-x="565" d="M-32 1176l196 307h238l196 -307h-202l-109 161h-8l-109 -161h-202zM133 0v1016h301v-1016h-301z" /> +<glyph unicode="ï" horiz-adv-x="565" d="M-63 1313q0 59 40 100t103 41t103.5 -41t40.5 -100q0 -61 -40.5 -102.5t-103.5 -41.5t-103 41t-40 103zM133 0v1016h301v-1016h-301zM342 1313q0 59 40 100t104 41q63 0 103 -41t40 -100q0 -61 -40 -102.5t-103 -41.5t-103.5 41t-40.5 103z" /> +<glyph unicode="ð" horiz-adv-x="1146" d="M86 467q0 111 35 197t93 145t133 91t155 32q59 0 116.5 -19.5t100.5 -66.5q-53 158 -174 272l-291 -145l-78 133l238 119q-41 29 -87 55.5t-98 52.5l131 183q72 -37 143.5 -80t139.5 -95l293 148l78 -133l-246 -125q121 -123 198.5 -290t77.5 -396q0 -123 -33.5 -227.5 t-96 -180.5t-152.5 -119t-203 -43q-96 0 -181 35t-150.5 98.5t-103.5 154.5t-38 204zM360 467q0 -121 62.5 -184.5t146.5 -63.5q86 0 140.5 75t54.5 234v47.5t-2 45.5q-47 51 -96.5 69.5t-102.5 18.5q-90 0 -146.5 -59.5t-56.5 -182.5z" /> +<glyph unicode="ñ" horiz-adv-x="1171" d="M133 0v1016h246l20 -129h9q66 61 143.5 107t181.5 46q166 0 241 -108.5t75 -300.5v-631h-301v592q0 111 -30 151.5t-95 40.5q-57 0 -98.5 -25.5t-90.5 -72.5v-686h-301zM291 1178q16 141 73.5 208.5t139.5 67.5q41 0 76 -14.5t63.5 -30.5t54 -30.5t48.5 -14.5 q27 0 43 20.5t28 69.5h154q-16 -139 -73.5 -207.5t-139.5 -68.5q-41 0 -75 14t-63.5 31.5t-55 32t-48.5 14.5q-27 0 -43 -20.5t-28 -71.5h-154z" /> +<glyph unicode="ò" horiz-adv-x="1136" d="M74 508q0 127 41 226.5t109.5 167t158.5 103t186 35.5t185.5 -35.5t158 -103t109.5 -167t41 -226.5t-41 -226.5t-109.5 -167t-157.5 -103.5t-186 -36q-96 0 -186 36t-158.5 103.5t-109.5 167t-41 226.5zM262 1483h291l182 -307h-219zM383 508q0 -133 46 -211t140 -78 q92 0 139.5 78t47.5 211t-47 211t-140 78q-94 0 -140 -78t-46 -211z" /> +<glyph unicode="ó" horiz-adv-x="1136" d="M74 508q0 127 41 226.5t109.5 167t158.5 103t186 35.5t185.5 -35.5t158 -103t109.5 -167t41 -226.5t-41 -226.5t-109.5 -167t-157.5 -103.5t-186 -36q-96 0 -186 36t-158.5 103.5t-109.5 167t-41 226.5zM383 508q0 -133 46 -211t140 -78q92 0 139.5 78t47.5 211t-47 211 t-140 78q-94 0 -140 -78t-46 -211zM399 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="ô" horiz-adv-x="1136" d="M74 508q0 127 41 226.5t109.5 167t158.5 103t186 35.5t185.5 -35.5t158 -103t109.5 -167t41 -226.5t-41 -226.5t-109.5 -167t-157.5 -103.5t-186 -36q-96 0 -186 36t-158.5 103.5t-109.5 167t-41 226.5zM252 1176l196 307h238l196 -307h-202l-109 161h-8l-109 -161h-202z M383 508q0 -133 46 -211t140 -78q92 0 139.5 78t47.5 211t-47 211t-140 78q-94 0 -140 -78t-46 -211z" /> +<glyph unicode="õ" horiz-adv-x="1136" d="M74 508q0 127 41 226.5t109.5 167t158.5 103t186 35.5t185.5 -35.5t158 -103t109.5 -167t41 -226.5t-41 -226.5t-109.5 -167t-157.5 -103.5t-186 -36q-96 0 -186 36t-158.5 103.5t-109.5 167t-41 226.5zM227 1178q16 141 73.5 208.5t139.5 67.5q41 0 76 -14.5t63.5 -30.5 t54 -30.5t48.5 -14.5q27 0 43 20.5t28 69.5h154q-16 -139 -73.5 -207.5t-139.5 -68.5q-41 0 -75 14t-63.5 31.5t-55 32t-48.5 14.5q-27 0 -43 -20.5t-28 -71.5h-154zM383 508q0 -133 46 -211t140 -78q92 0 139.5 78t47.5 211t-47 211t-140 78q-94 0 -140 -78t-46 -211z" /> +<glyph unicode="ö" horiz-adv-x="1136" d="M74 508q0 127 41 226.5t109.5 167t158.5 103t186 35.5t185.5 -35.5t158 -103t109.5 -167t41 -226.5t-41 -226.5t-109.5 -167t-157.5 -103.5t-186 -36q-96 0 -186 36t-158.5 103.5t-109.5 167t-41 226.5zM221 1313q0 59 40 100t103 41t103.5 -41t40.5 -100 q0 -61 -40.5 -102.5t-103.5 -41.5t-103 41t-40 103zM383 508q0 -133 46 -211t140 -78q92 0 139.5 78t47.5 211t-47 211t-140 78q-94 0 -140 -78t-46 -211zM626 1313q0 59 40 100t104 41q63 0 103 -41t40 -100q0 -61 -40 -102.5t-103 -41.5t-103.5 41t-40.5 103z" /> +<glyph unicode="÷" d="M70 569v213h942v-213h-942zM375 307q0 70 47 114t119 44t119 -44t47 -114t-47.5 -113.5t-118.5 -43.5q-72 0 -119 43.5t-47 113.5zM375 1044q0 70 47 114t119 44t119 -44t47 -114t-47 -113.5t-119 -43.5t-119 44t-47 113z" /> +<glyph unicode="ø" horiz-adv-x="1136" d="M74 508q0 127 41 226.5t109.5 167t158.5 103t186 35.5q72 0 141.5 -20.5t129.5 -58.5l90 110l112 -88l-96 -119q53 -68 85 -157t32 -199q0 -127 -41 -226.5t-109.5 -167t-157.5 -103.5t-186 -36q-152 0 -274 82l-88 -108l-113 86l96 119q-53 66 -84.5 154.5t-31.5 199.5z M365 524q0 -82 14 -137l305 381q-45 39 -115 39q-94 0 -149 -77t-55 -206zM451 250q47 -41 118 -41q92 0 147.5 76.5t55.5 206.5q0 84 -14 139z" /> +<glyph unicode="ù" horiz-adv-x="1163" d="M123 385v631h301v-592q0 -111 30.5 -152t96.5 -41q57 0 96 27t84 86v672h301v-1016h-246l-22 141h-6q-66 -78 -140.5 -122t-179.5 -44q-166 0 -240.5 109t-74.5 301zM279 1483h291l182 -307h-219z" /> +<glyph unicode="ú" horiz-adv-x="1163" d="M123 385v631h301v-592q0 -111 30.5 -152t96.5 -41q57 0 96 27t84 86v672h301v-1016h-246l-22 141h-6q-66 -78 -140.5 -122t-179.5 -44q-166 0 -240.5 109t-74.5 301zM416 1176l182 307h291l-254 -307h-219z" /> +<glyph unicode="û" horiz-adv-x="1163" d="M123 385v631h301v-592q0 -111 30.5 -152t96.5 -41q57 0 96 27t84 86v672h301v-1016h-246l-22 141h-6q-66 -78 -140.5 -122t-179.5 -44q-166 0 -240.5 109t-74.5 301zM269 1176l196 307h238l196 -307h-202l-109 161h-8l-109 -161h-202z" /> +<glyph unicode="ü" horiz-adv-x="1163" d="M123 385v631h301v-592q0 -111 30.5 -152t96.5 -41q57 0 96 27t84 86v672h301v-1016h-246l-22 141h-6q-66 -78 -140.5 -122t-179.5 -44q-166 0 -240.5 109t-74.5 301zM238 1313q0 59 40 100t103 41t103.5 -41t40.5 -100q0 -61 -40.5 -102.5t-103.5 -41.5t-103 41t-40 103z M643 1313q0 59 40 100t104 41q63 0 103 -41t40 -100q0 -61 -40 -102.5t-103 -41.5t-103.5 41t-40.5 103z" /> +<glyph unicode="ý" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -70 41 -141.5t39 -147.5h8q16 72 33.5 144.5t36.5 144.5l123 436h288l-352 -1026q-37 -96 -77 -169t-92 -121t-118.5 -72.5t-156.5 -24.5q-47 0 -80 5t-64 15l54 230q14 -4 32.5 -8.5t34.5 -4.5q76 0 117 37t61 96l15 54zM377 1176l182 307h291 l-254 -307h-219z" /> +<glyph unicode="þ" horiz-adv-x="1173" d="M133 -377v1813h301v-353l-8 -143q53 47 118.5 73.5t135.5 26.5q96 0 173 -36.5t130 -104.5t82 -163t29 -212q0 -131 -36 -232.5t-96.5 -172t-137 -107.5t-158.5 -37q-74 0 -130.5 25t-109.5 72l8 -152v-297h-301zM434 287q41 -37 82 -51.5t80 -14.5q78 0 133 70.5 t55 228.5q0 274 -176 275q-88 0 -174 -93v-415z" /> +<glyph unicode="ÿ" horiz-adv-x="1067" d="M25 1016h303l145 -436q23 -70 41 -141.5t39 -147.5h8q16 72 33.5 144.5t36.5 144.5l123 436h288l-352 -1026q-37 -96 -77 -169t-92 -121t-118.5 -72.5t-156.5 -24.5q-47 0 -80 5t-64 15l54 230q14 -4 32.5 -8.5t34.5 -4.5q76 0 117 37t61 96l15 54zM199 1313q0 59 40 100 t103 41t103.5 -41t40.5 -100q0 -61 -40.5 -102.5t-103.5 -41.5t-103 41t-40 103zM604 1313q0 59 40 100t104 41q63 0 103 -41t40 -100q0 -61 -40 -102.5t-103 -41.5t-103.5 41t-40.5 103z" /> +<glyph unicode="Œ" horiz-adv-x="1779" d="M92 674q0 172 51.5 297t143.5 205.5t218 119.5t273 39h877v-254h-508v-268h428v-252h-428v-307h528v-254h-913q-141 0 -264 41t-213 124t-141.5 210t-51.5 299zM401 674q0 -121 29 -204t81 -133t125 -71.5t161 -21.5h49v848h-49q-88 0 -161 -20.5t-125 -69t-81 -128 t-29 -200.5z" /> +<glyph unicode="œ" horiz-adv-x="1683" d="M74 508q0 127 39 226.5t104.5 167t152.5 103t183 35.5q109 0 189.5 -47t140.5 -131q61 86 145 132t176 46q100 0 176 -37.5t127.5 -104.5t77 -157t25.5 -194q0 -41 -4 -75t-9 -52h-587q16 -106 83.5 -157.5t159.5 -51.5q57 0 108.5 20.5t106.5 53.5l105 -195 q-78 -53 -174 -84t-187 -31q-92 0 -178 46.5t-149 132.5q-63 -88 -144.5 -133.5t-193.5 -45.5q-98 0 -184.5 36t-151 103.5t-101 167t-36.5 226.5zM379 508q0 -133 45 -211t129 -78t131 78t47 211t-47 211t-131 78t-129 -78t-45 -211zM1010 604h342q0 92 -37 149.5 t-121 57.5q-72 0 -122 -50t-62 -157z" /> +<glyph unicode="Ÿ" horiz-adv-x="1073" d="M-16 1335h321l121 -307q27 -76 53.5 -146.5t55.5 -148.5h8q29 78 56.5 148.5t55.5 146.5l119 307h316l-404 -860v-475h-301v475zM191 1577q0 61 40 102t103 41t103.5 -41t40.5 -102t-40.5 -102t-103.5 -41t-103 41t-40 102zM596 1577q0 61 40 102t104 41q63 0 103 -41 t40 -102t-40 -102t-103 -41t-103.5 41t-40.5 102z" /> +<glyph unicode="ˆ" horiz-adv-x="1136" d="M254 1176l196 307h238l196 -307h-202l-109 161h-8l-109 -161h-202z" /> +<glyph unicode="˜" horiz-adv-x="1136" d="M229 1178q16 141 73.5 208.5t139.5 67.5q41 0 76 -14.5t63.5 -30.5t54 -30.5t48.5 -14.5q27 0 43 20.5t28 69.5h154q-16 -139 -73.5 -207.5t-139.5 -68.5q-41 0 -75 14t-63.5 31.5t-55 32t-48.5 14.5q-27 0 -43 -20.5t-28 -71.5h-154z" /> +<glyph unicode=" " horiz-adv-x="914" /> +<glyph unicode=" " horiz-adv-x="1829" /> +<glyph unicode=" " horiz-adv-x="914" /> +<glyph unicode=" " horiz-adv-x="1829" /> +<glyph unicode=" " horiz-adv-x="609" /> +<glyph unicode=" " horiz-adv-x="457" /> +<glyph unicode=" " horiz-adv-x="304" /> +<glyph unicode=" " horiz-adv-x="304" /> +<glyph unicode=" " horiz-adv-x="228" /> +<glyph unicode=" " horiz-adv-x="365" /> +<glyph unicode=" " horiz-adv-x="101" /> +<glyph unicode="‐" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> +<glyph unicode="‑" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> +<glyph unicode="‒" horiz-adv-x="679" d="M88 412v213h504v-213h-504z" /> +<glyph unicode="–" horiz-adv-x="983" d="M88 422v192h807v-192h-807z" /> +<glyph unicode="—" horiz-adv-x="1638" d="M88 422v192h1462v-192h-1462z" /> +<glyph unicode="‘" horiz-adv-x="614" d="M113 961q0 145 71.5 255.5t218.5 182.5l66 -131q-92 -47 -138 -107.5t-46 -152.5q6 2 20 2q66 0 112 -40t46 -110q0 -78 -45 -123t-113 -45q-96 0 -144 71t-48 198z" /> +<glyph unicode="’" horiz-adv-x="614" d="M145 852q92 47 138.5 107.5t46.5 152.5q-6 -2 -19 -2q-66 0 -111.5 40t-45.5 110q0 78 44 122.5t113 44.5q94 0 143.5 -69.5t49.5 -198.5q0 -145 -73 -255.5t-220 -182.5z" /> +<glyph unicode="‚" horiz-adv-x="614" d="M145 -213q92 47 138.5 107.5t46.5 152.5q-6 -2 -19 -2q-66 0 -111.5 40t-45.5 110q0 78 44 122.5t113 44.5q94 0 143.5 -69.5t49.5 -198.5q0 -145 -73 -255.5t-220 -182.5z" /> +<glyph unicode="“" horiz-adv-x="1097" d="M113 961q0 145 71.5 255.5t218.5 182.5l66 -131q-92 -47 -138 -107.5t-46 -152.5q6 2 20 2q66 0 112 -40t46 -110q0 -78 -45 -123t-113 -45q-96 0 -144 71t-48 198zM596 961q0 145 71.5 255.5t218.5 182.5l66 -131q-92 -47 -138 -107.5t-46 -152.5q6 2 20 2q66 0 112 -40 t46 -110q0 -78 -45 -123t-113 -45q-96 0 -144 71t-48 198z" /> +<glyph unicode="”" horiz-adv-x="1097" d="M145 852q92 47 138.5 107.5t46.5 152.5q-6 -2 -19 -2q-66 0 -111.5 40t-45.5 110q0 78 44 122.5t113 44.5q94 0 143.5 -69.5t49.5 -198.5q0 -145 -73 -255.5t-220 -182.5zM628 852q92 47 138.5 107.5t46.5 152.5q-6 -2 -19 -2q-66 0 -111.5 40t-45.5 110q0 78 44 122.5 t113 44.5q94 0 143.5 -69.5t49.5 -198.5q0 -145 -73 -255.5t-220 -182.5z" /> +<glyph unicode="„" horiz-adv-x="1097" d="M145 -213q92 47 138.5 107.5t46.5 152.5q-6 -2 -19 -2q-66 0 -111.5 40t-45.5 110q0 78 44 122.5t113 44.5q94 0 143.5 -69.5t49.5 -198.5q0 -145 -73 -255.5t-220 -182.5zM628 -213q92 47 138.5 107.5t46.5 152.5q-6 -2 -19 -2q-66 0 -111.5 40t-45.5 110q0 78 44 122.5 t113 44.5q94 0 143.5 -69.5t49.5 -198.5q0 -145 -73 -255.5t-220 -182.5z" /> +<glyph unicode="•" horiz-adv-x="706" d="M82 537q0 61 20.5 113t57.5 90t86 59.5t106 21.5t107.5 -21.5t87.5 -59.5t57.5 -90t20.5 -113t-20.5 -112.5t-57.5 -90.5t-87.5 -60.5t-107.5 -21.5t-106 21.5t-86 60.5t-57.5 90t-20.5 113z" /> +<glyph unicode="…" horiz-adv-x="2000" d="M156 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5zM834 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5t-130 -54.5t-130 54.5t-52 134.5zM1511 164q0 82 52 136t130 54t130 -54t52 -136q0 -80 -52 -134.5 t-130 -54.5t-130 54.5t-52 134.5z" /> +<glyph unicode=" " horiz-adv-x="365" /> +<glyph unicode="‹" horiz-adv-x="598" d="M100 410v213l275 295l112 -91l-227 -311l227 -311l-112 -90z" /> +<glyph unicode="›" horiz-adv-x="598" d="M111 205l227 311l-227 311l112 91l275 -295v-213l-275 -295z" /> +<glyph unicode=" " horiz-adv-x="457" /> +<glyph unicode="€" d="M43 440v142l111 8q-2 14 -2 26.5v26.5v26.5t2 26.5h-111v140l127 10q25 115 74 204t119.5 150.5t158.5 93t191 31.5q92 0 180 -41t154 -119l-168 -161q-39 39 -81 63.5t-96 24.5q-88 0 -146 -63.5t-83 -180.5h438v-152h-456v-43v-30.5t2 -28.5h372v-154h-352 q29 -113 87.5 -172t144.5 -59q59 0 103 28.5t85 81.5l166 -155q-74 -92 -168 -140.5t-205 -48.5q-193 0 -333 118t-187 347h-127z" /> +<glyph unicode="™" horiz-adv-x="1396" d="M8 1206v178h551v-178h-178v-465h-195v465h-178zM647 741v643h227l78 -184l41 -137h8l43 137l76 184h230v-643h-191v197l23 236h-8l-109 -338h-133l-109 338h-8l23 -236v-197h-191z" /> +<glyph unicode="" horiz-adv-x="1013" d="M0 0v1014h1014v-1014h-1014z" /> +<glyph unicode="fi" horiz-adv-x="1300" d="M49 780v224l135 10v55q0 80 19.5 151.5t64.5 125t117 84t174 30.5q63 0 115.5 -12t87.5 -25l-55 -221q-57 20 -105 21q-55 0 -86 -34t-31 -112v-61h183v-236h-183v-780h-301v780h-135zM844 1323q0 70 49 113t125 43q78 0 126 -43t48 -113t-48 -114t-126 -44 q-76 0 -125 44t-49 114zM868 0v1016h301v-1016h-301z" /> +<glyph unicode="fl" horiz-adv-x="1284" d="M49 780v224l135 10v55q0 80 19.5 151.5t64.5 125t117 84t174 30.5q63 0 115.5 -12t87.5 -25l-55 -221q-57 20 -105 21q-55 0 -86 -34t-31 -112v-61h183v-236h-183v-780h-301v780h-135zM831 315v1121h301v-1133q0 -47 17.5 -65.5t35.5 -18.5h17.5t19.5 4l37 -223 q-25 -10 -62.5 -17.5t-88.5 -7.5q-78 0 -131.5 25t-85 69t-46 106.5t-14.5 139.5z" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.ttf b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..bf5f60a6654b6728bd8804436562f331a770af8c GIT binary patch literal 53496 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 EKXHMmdjJ3c literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.woff b/app/design/frontend/magento_plushe/fonts/sourcesanspro/sourcesanspro-700-normal-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..42ca5dc005aabb888fac8dbc810c5c20f88e67b4 GIT binary patch literal 26700 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 VksCy`0d1-%@&Et<Q7em4006vjP&EJm literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/images/banner1.jpg b/app/design/frontend/magento_plushe/images/banner1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f91054dab522771221d545690835a01f72e33cc GIT binary patch literal 27699 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 M`M=xYf`C8&+4=E}!2kdN literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/images/banner2.jpg b/app/design/frontend/magento_plushe/images/banner2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d00c1a05d5b0267f165ae6a843135851f3eaff5 GIT binary patch literal 20777 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 F|Jf(FTGs#o literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/images/banner3.jpg b/app/design/frontend/magento_plushe/images/banner3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fff706df31cc47159c1560b272b3129c8967f04a GIT binary patch literal 11208 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 literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/images/banner4.jpg b/app/design/frontend/magento_plushe/images/banner4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..efc84cbe21a2e99a70b33fc11603586107c8e4ec GIT binary patch literal 18920 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 H3IPAv_!w*& literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/images/blog_bg.png b/app/design/frontend/magento_plushe/images/blog_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..f20b394d5a21879e9743f3f98b64071e1ff88042 GIT binary patch literal 2999 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 OSDNnVN^7J9$^HZAO5b$= literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/images/header-bg.jpg b/app/design/frontend/magento_plushe/images/header-bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..994156d1a36a237b84481ede705c9598c5794ec9 GIT binary patch literal 21105 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 D%TYd+ literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/images/info_photo.jpg b/app/design/frontend/magento_plushe/images/info_photo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc150e4367e783cba98100101beaf054957f3a4d GIT binary patch literal 7859 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 literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/images/loader.gif b/app/design/frontend/magento_plushe/images/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..53b5ac653eb1e7f42844e5fc0afa59a62110b086 GIT binary patch literal 477 zcmZ?wbhEHb6krfw_{hNU9}NEe`^Uh*p!lEL&ow02*)hP?NY8+o5hV0a%DE^tu_QG` zp**uBLm@FMu_7lwF-0#kFD;)z@h1x>7f_WB5Ce@9U|?X<ZRyWE^md<vb?`bZ$-Pal zxQpV_J7qfSBHPy`Z<(ambM<BRsc+L?Mg8Z{YU^OaV}h79Z%4$_tyQ-rYvaCoifFWD zich*)wo^f;|CZ&YALs6_`GL~}9f%wJCJT2QeX;ji+L_j=$4i&EC2B})On5QxLqzBO zo0q<C|Nf0RghP-On-ic09Lb!#R%<cq%&fY~JJ&j&wf6}gYtno&E6hCYYv}Fgf2W<# z59VORY5+78Ze#`@$x1%g@M>-1-AkSiBWArUSr@K3Z_f0lcU+h5EnEGE`H4nb1J+Q0 yI^ott?XHsrN3MtEmnJ>yWGJ1aJhM#wMwX`geuI?7lUA;N_&EUN2WwCSfB^swKeCPh literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/images/logo.gif b/app/design/frontend/magento_plushe/images/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..7f1dc1ad3c939aba615ac5f95e5d01a254659c2d GIT binary patch literal 3454 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 literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/images/logo_notext.gif b/app/design/frontend/magento_plushe/images/logo_notext.gif new file mode 100644 index 0000000000000000000000000000000000000000..133a77524368fb060a9e47c72b05a7240e75d68c GIT binary patch literal 1964 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 ZD=A}1ovq}3`ab9XQxvmF(8NnA{4drCA`$=q literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/images/main_image1.jpg b/app/design/frontend/magento_plushe/images/main_image1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..728174638d03156b34d6c3eceec19492ecc0971e GIT binary patch literal 147971 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�f+(NZz3 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 literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/images/social-links.png b/app/design/frontend/magento_plushe/images/social-links.png new file mode 100644 index 0000000000000000000000000000000000000000..66eb6c9083e3b1f170c19963bf849ffcbf69241e GIT binary patch literal 7564 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 literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/images/texture.png b/app/design/frontend/magento_plushe/images/texture.png new file mode 100644 index 0000000000000000000000000000000000000000..2b5301b01cd63825074a43b5878e339f7c212f1d GIT binary patch literal 81548 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 literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/js/extra-options.js b/app/design/frontend/magento_plushe/js/extra-options.js new file mode 100644 index 00000000000..b7256ba4fef --- /dev/null +++ b/app/design/frontend/magento_plushe/js/extra-options.js @@ -0,0 +1,59 @@ +/** + * 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 gift options + * @package mage + * @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) + */ +/*jshint jquery:true*/ +(function($) { + "use strict"; + $.widget('mage.extraOptions', { + options: { + events: 'billingSave shippingSave', + additionalContainer: '#onepage-checkout-shipping-method-additional-load' + }, + + /** + * Set up event handler for requesting any additional extra options from the backend. + * @private + */ + _create: function() { + this.element.on(this.options.events, $.proxy(this._addExtraOptions, this)); + }, + + /** + * Fetch the extra options using an Ajax call. Extra options include Gift Receipt and + * Printed Card. + * @private + */ + _addExtraOptions: function() { + $.ajax({ + url: this.options.additionalUrl, + context: this, + type: 'post', + async: false, + success: function(response) { + $(this.options.additionalContainer).html(response).trigger('contentUpdated'); + } + }); + } + }); +})(jQuery); diff --git a/app/design/frontend/magento_plushe/js/head.js b/app/design/frontend/magento_plushe/js/head.js new file mode 100644 index 00000000000..ba5d3d10a6d --- /dev/null +++ b/app/design/frontend/magento_plushe/js/head.js @@ -0,0 +1,356 @@ +/** + * 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) + */ + +(function (a, w) { + function f(a) { + p[p.length] = a + } + + function m(a) { + q.className = q.className.replace(RegExp("\\b" + a + "\\b"), "") + } + + function k(a, d) { + for (var b = 0, c = a.length; b < c; b++)d.call(a, a[b], b) + } + + function s() { + q.className = q.className.replace(/ (w-|eq-|gt-|gte-|lt-|lte-|portrait|no-portrait|landscape|no-landscape)\d+/g, ""); + var b = a.innerWidth || q.clientWidth, d = a.outerWidth || a.screen.width; + h.screen.innerWidth = b; + h.screen.outerWidth = d; + f("w-" + b); + k(c.screens, function (a) { + b > a ? (c.screensCss.gt && f("gt-" + a), c.screensCss.gte && f("gte-" + + a)) : b < a ? (c.screensCss.lt && f("lt-" + a), c.screensCss.lte && f("lte-" + a)) : b === a && (c.screensCss.lte && f("lte-" + a), c.screensCss.eq && f("e-q" + a), c.screensCss.gte && f("gte-" + a)) + }); + var d = a.innerHeight || q.clientHeight, g = a.outerHeight || a.screen.height; + h.screen.innerHeight = d; + h.screen.outerHeight = g; + h.feature("portrait", d > b); + h.feature("landscape", d < b) + } + + function r() { + a.clearTimeout(u); + u = a.setTimeout(s, 100) + } + + var n = a.document, g = a.navigator, t = a.location, q = n.documentElement, p = [], c = {screens:[240, 320, 480, 640, 768, 800, 1024, 1280, + 1440, 1680, 1920], screensCss:{gt:!0, gte:!1, lt:!0, lte:!1, eq:!1}, browsers:[ + {ie:{min:6, max:10}} + ], browserCss:{gt:!0, gte:!1, lt:!0, lte:!1, eq:!0}, section:"-section", page:"-page", head:"head"}; + if (a.head_conf)for (var b in a.head_conf)a.head_conf[b] !== w && (c[b] = a.head_conf[b]); + var h = a[c.head] = function () { + h.ready.apply(null, arguments) + }; + h.feature = function (a, b, c) { + if (!a)return q.className += " " + p.join(" "), p = [], h; + "[object Function]" === Object.prototype.toString.call(b) && (b = b.call()); + f((b ? "" : "no-") + a); + h[a] = !!b; + c || (m("no-" + + a), m(a), h.feature()); + return h + }; + h.feature("js", !0); + b = g.userAgent.toLowerCase(); + g = /mobile|midp/.test(b); + h.feature("mobile", g, !0); + h.feature("desktop", !g, !0); + b = /(chrome|firefox)[ \/]([\w.]+)/.exec(b) || /(iphone|ipad|ipod)(?:.*version)?[ \/]([\w.]+)/.exec(b) || /(android)(?:.*version)?[ \/]([\w.]+)/.exec(b) || /(webkit|opera)(?:.*version)?[ \/]([\w.]+)/.exec(b) || /(msie) ([\w.]+)/.exec(b) || []; + g = b[1]; + b = parseFloat(b[2]); + switch (g) { + case "msie": + g = "ie"; + b = n.documentMode || b; + break; + case "firefox": + g = "ff"; + break; + case "ipod": + case "ipad": + case "iphone": + g = + "ios"; + break; + case "webkit": + g = "safari" + } + h.browser = {name:g, version:b}; + h.browser[g] = !0; + for (var v = 0, x = c.browsers.length; v < x; v++)for (var i in c.browsers[v])if (g === i) { + f(i); + for (var A = c.browsers[v][i].max, l = c.browsers[v][i].min; l <= A; l++)b > l ? (c.browserCss.gt && f("gt-" + i + l), c.browserCss.gte && f("gte-" + i + l)) : b < l ? (c.browserCss.lt && f("lt-" + i + l), c.browserCss.lte && f("lte-" + i + l)) : b === l && (c.browserCss.lte && f("lte-" + i + l), c.browserCss.eq && f("eq-" + i + l), c.browserCss.gte && f("gte-" + i + l)) + } else f("no-" + i); + "ie" === g && 9 > b && k("abbr article aside audio canvas details figcaption figure footer header hgroup mark meter nav output progress section summary time video".split(" "), + function (a) { + n.createElement(a) + }); + k(t.pathname.split("/"), function (a, b) { + if (2 < this.length && this[b + 1] !== w)b && f(this.slice(1, b + 1).join("-").toLowerCase() + c.section); else { + var g = a || "index", h = g.indexOf("."); + 0 < h && (g = g.substring(0, h)); + q.id = g.toLowerCase() + c.page; + b || f("root" + c.section) + } + }); + h.screen = {height:a.screen.height, width:a.screen.width}; + s(); + var u = 0; + a.addEventListener ? a.addEventListener("resize", r, !1) : a.attachEvent("onresize", r) +})(window); +(function (a, w) { + function f(a) { + var f = a.charAt(0).toUpperCase() + a.substr(1), a = (a + " " + r.join(f + " ") + f).split(" "), c; + a:{ + for (c in a)if (k[a[c]] !== w) { + c = !0; + break a + } + c = !1 + } + return!!c + } + + var m = a.document.createElement("i"), k = m.style, s = " -o- -moz- -ms- -webkit- -khtml- ".split(" "), r = ["Webkit", "Moz", "O", "ms", "Khtml"], n = a[a.head_conf && a.head_conf.head || "head"], g = {gradient:function () { + k.cssText = ("background-image:" + s.join("gradient(linear,left top,right bottom,from(#9f9),to(#fff));background-image:") + s.join("linear-gradient(left top,#eee,#fff);background-image:")).slice(0, + -17); + return!!k.backgroundImage + }, rgba:function () { + k.cssText = "background-color:rgba(0,0,0,0.5)"; + return!!k.backgroundColor + }, opacity:function () { + return"" === m.style.opacity + }, textshadow:function () { + return"" === k.textShadow + }, multiplebgs:function () { + k.cssText = "background:url(//:),url(//:),red url(//:)"; + return/(url\s*\(.*?){3}/.test(k.background) + }, boxshadow:function () { + return f("boxShadow") + }, borderimage:function () { + return f("borderImage") + }, borderradius:function () { + return f("borderRadius") + }, cssreflections:function () { + return f("boxReflect") + }, + csstransforms:function () { + return f("transform") + }, csstransitions:function () { + return f("transition") + }, touch:function () { + return"ontouchstart"in a + }, retina:function () { + return 1 < a.devicePixelRatio + }, fontface:function () { + var a = n.browser.version; + switch (n.browser.name) { + case "ie": + return 9 <= a; + case "chrome": + return 13 <= a; + case "ff": + return 6 <= a; + case "ios": + return 5 <= a; + case "android": + return!1; + case "webkit": + return 5.1 <= a; + case "opera": + return 10 <= a; + default: + return!1 + } + }}, t; + for (t in g)g[t] && n.feature(t, g[t].call(), !0); + n.feature() +})(window); +(function (a, w) { + function f() { + } + + function m(j, a) { + if (j) { + "object" === typeof j && (j = [].slice.call(j)); + for (var b = 0, c = j.length; b < c; b++)a.call(j, j[b], b) + } + } + + function k(a, b) { + var e = Object.prototype.toString.call(b).slice(8, -1); + return b !== w && null !== b && e === a + } + + function s(a) { + return k("Function", a) + } + + function r(a) { + a = a || f; + a._done || (a(), a._done = 1) + } + + function n(a) { + var b = {}; + if ("object" === typeof a)for (var e in a)a[e] && (b = {name:e, url:a[e]}); else b = a.split("/"), b = b[b.length - 1], e = b.indexOf("?"), b = {name:-1 !== e ? b.substring(0, e) : b, url:a}; + return(a = i[b.name]) && a.url === b.url ? a : i[b.name] = b + } + + function g(a) { + var a = a || i, b; + for (b in a)if (a.hasOwnProperty(b) && a[b].state !== y)return!1; + return!0 + } + + function t(a, b) { + b = b || f; + a.state === y ? b() : a.state === D ? d.ready(a.name, b) : a.state === C ? a.onpreload.push(function () { + t(a, b) + }) : (a.state = D, q(a, function () { + a.state = y; + b(); + m(x[a.name], function (a) { + r(a) + }); + u && g() && m(x.ALL, function (a) { + r(a) + }) + })) + } + + function q(j, c) { + var c = c || f, e; + /\.css[^\.]*$/.test(j.url) ? (e = b.createElement("link"), e.type = "text/" + (j.type || "css"), e.rel = "stylesheet", + e.href = j.url) : (e = b.createElement("script"), e.type = "text/" + (j.type || "javascript"), e.src = j.url); + e.onload = e.onreadystatechange = function (j) { + j = j || a.event; + if ("load" === j.type || /loaded|complete/.test(e.readyState) && (!b.documentMode || 9 > b.documentMode))e.onload = e.onreadystatechange = e.onerror = null, c() + }; + e.onerror = function () { + e.onload = e.onreadystatechange = e.onerror = null; + c() + }; + e.async = !1; + e.defer = !1; + var d = b.head || b.getElementsByTagName("head")[0]; + d.insertBefore(e, d.lastChild) + } + + function p() { + b.body ? u || (u = !0, m(h, function (a) { + r(a) + })) : + (a.clearTimeout(d.readyTimeout), d.readyTimeout = a.setTimeout(p, 50)) + } + + function c() { + b.addEventListener ? (b.removeEventListener("DOMContentLoaded", c, !1), p()) : "complete" === b.readyState && (b.detachEvent("onreadystatechange", c), p()) + } + + var b = a.document, h = [], v = [], x = {}, i = {}, A = "async"in b.createElement("script") || "MozAppearance"in b.documentElement.style || a.opera, l, u, B = a.head_conf && a.head_conf.head || "head", d = a[B] = a[B] || function () { + d.ready.apply(null, arguments) + }, C = 1, D = 3, y = 4; + d.load = A ? function () { + var a = arguments, b = a[a.length - + 1], e = {}; + s(b) || (b = null); + m(a, function (c, d) { + c !== b && (c = n(c), e[c.name] = c, t(c, b && d === a.length - 2 ? function () { + g(e) && r(b) + } : null)) + }); + return d + } : function () { + var a = arguments, b = [].slice.call(a, 1), c = b[0]; + if (!l)return v.push(function () { + d.load.apply(null, a) + }), d; + c ? (m(b, function (a) { + if (!s(a)) { + var b = n(a); + b.state === w && (b.state = C, b.onpreload = [], q({url:b.url, type:"cache"}, function () { + b.state = 2; + m(b.onpreload, function (a) { + a.call() + }) + })) + } + }), t(n(a[0]), s(c) ? c : function () { + d.load.apply(null, b) + })) : t(n(a[0])); + return d + }; + d.js = d.load; + d.test = + function (a, b, c, g) { + a = "object" === typeof a ? a : {test:a, success:b ? k("Array", b) ? b : [b] : !1, failure:c ? k("Array", c) ? c : [c] : !1, callback:g || f}; + (b = !!a.test) && a.success ? (a.success.push(a.callback), d.load.apply(null, a.success)) : !b && a.failure ? (a.failure.push(a.callback), d.load.apply(null, a.failure)) : g(); + return d + }; + d.ready = function (a, c) { + if (a === b)return u ? r(c) : h.push(c), d; + s(a) && (c = a, a = "ALL"); + if ("string" !== typeof a || !s(c))return d; + var e = i[a]; + if (e && e.state === y || "ALL" === a && g() && u)return r(c), d; + (e = x[a]) ? e.push(c) : x[a] = [c]; + return d + }; + d.ready(b, function () { + g() && m(x.ALL, function (a) { + r(a) + }); + d.feature && d.feature("domloaded", !0) + }); + if ("complete" === b.readyState)p(); else if (b.addEventListener)b.addEventListener("DOMContentLoaded", c, !1), a.addEventListener("load", p, !1); else { + b.attachEvent("onreadystatechange", c); + a.attachEvent("onload", p); + var z = !1; + try { + z = null == a.frameElement && b.documentElement + } catch (F) { + } + z && z.doScroll && function E() { + if (!u) { + try { + z.doScroll("left") + } catch (b) { + a.clearTimeout(d.readyTimeout); + d.readyTimeout = a.setTimeout(E, 50); + return + } + p() + } + }() + } + setTimeout(function () { + l = !0; + m(v, function (a) { + a() + }) + }, 300) +})(window); diff --git a/app/design/frontend/magento_plushe/js/jquery.dropdowns.js b/app/design/frontend/magento_plushe/js/jquery.dropdowns.js new file mode 100644 index 00000000000..836843ec0b7 --- /dev/null +++ b/app/design/frontend/magento_plushe/js/jquery.dropdowns.js @@ -0,0 +1,108 @@ +/** + * 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) + */ +;(function($, document) { + 'use strict'; + + $.fn.dropdown = function(options) { + var defaults = { + parent: null, + autoclose: true, + btnArrow: '.arrow', + menu: '[data-target="dropdown"]', + activeClass: 'active' + }; + + var options = $.extend(defaults, options); + var actionElem = $(this), + self = this; + + this.openDropdown = function(elem) { + elem + .addClass(options.activeClass) + .parent() + .addClass(options.activeClass); + + $(options.btnArrow, elem).text('â–²'); + }; + + this.closeDropdown = function(elem) { + elem + .removeClass(options.activeClass) + .parent() + .removeClass(options.activeClass); + + $(options.btnArrow, elem).text('â–¼'); + }; + + /* Reset all dropdowns */ + this.reset = function(params) { + var params = params || {}, + dropdowns = params.elems || actionElem; + + dropdowns.each(function(index, elem) { + self.closeDropdown($(elem)); + }); + }; + + /* document Event bindings */ + if(options.autoclose === true) { + $(document).on('click.hideDropdown', this.reset); + $(document).on('keyup.hideDropdown', function(e) { + var ESC_CODE = '27'; + + if (e.keyCode == ESC_CODE) { + self.reset(); + } + }); + }; + + if (options.events) { + $.each(options.events, function(index, event) { + $(document).on(event.name, event.selector, event.action); + }); + } + + return this.each(function() { + var elem = $(this), + parent = $(options.parent) || elem.parent(), + menu = $(options.menu, parent) || $('.dropdown-menu', parent); + + elem.on('click.toggleDropdown', function() { + if(options.autoclose === true) { + self.reset({elems: actionElem.not(elem)}); + }; + self[elem.hasClass('active') ? 'closeDropdown' : 'openDropdown'](elem); + + return false; + }); + + menu.on('click.preventMenuClosing', function(e) { + e.stopPropagation(); + }); + }); + }; + + $(document).ready(function() { + $('[data-toggle="dropdown"]').dropdown(); + }); +})(window.jQuery, document); \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/js/matchMedia.js b/app/design/frontend/magento_plushe/js/matchMedia.js new file mode 100644 index 00000000000..68ee4e2b813 --- /dev/null +++ b/app/design/frontend/magento_plushe/js/matchMedia.js @@ -0,0 +1,162 @@ +/** + * 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) + */ +/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */ + +window.matchMedia = window.matchMedia || (function( doc, undefined ) { + + "use strict"; + + var bool, + docElem = doc.documentElement, + refNode = docElem.firstElementChild || docElem.firstChild, + // fakeBody required for <FF4 when executed in <head> + fakeBody = doc.createElement( "body" ), + div = doc.createElement( "div" ); + + div.id = "mq-test-1"; + div.style.cssText = "position:absolute;top:-100em"; + fakeBody.style.background = "none"; + fakeBody.appendChild(div); + + return function(q){ + + div.innerHTML = "­<style media=\"" + q + "\"> #mq-test-1 { width: 42px; }</style>"; + + docElem.insertBefore( fakeBody, refNode ); + bool = div.offsetWidth === 42; + docElem.removeChild( fakeBody ); + + return { + matches: bool, + media: q + }; + + }; + +}( document )); + +/*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */ +(function(){ + // monkeypatch unsupported addListener/removeListener with polling + if( !window.matchMedia( "" ).addListener ){ + var oldMM = window.matchMedia; + + window.matchMedia = function( q ){ + var ret = oldMM( q ), + listeners = [], + last = false, + timer, + check = function(){ + var list = oldMM( q ), + unmatchToMatch = list.matches && !last, + matchToUnmatch = !list.matches && last; + + //fire callbacks only if transitioning to or from matched state + if( unmatchToMatch || matchToUnmatch ){ + for( var i =0, il = listeners.length; i< il; i++ ){ + listeners[ i ].call( ret, list ); + } + } + last = list.matches; + }; + + ret.addListener = function( cb ){ + listeners.push( cb ); + if( !timer ){ + timer = setInterval( check, 1000 ); + } + }; + + ret.removeListener = function( cb ){ + for( var i =0, il = listeners.length; i< il; i++ ){ + if( listeners[ i ] === cb ){ + listeners.splice( i, 1 ); + } + } + if( !listeners.length && timer ){ + clearInterval( timer ); + } + }; + + return ret; + }; + } +}()); + +var mediaCheck = function( options ) { + var mq, + matchMedia = (window.matchMedia !== undefined & window.matchMedia('').addListener !== undefined); + + mqChange = function( mq, options ) { + if ( mq.matches ) { + if ( typeof options.entry === "function" ) { + options.entry(); + } + } else if ( typeof options.exit === "function" ) { + options.exit(); + } + }; + + if ( matchMedia ) { + // Has matchMedia support + createListener = function() { + + mq = window.matchMedia( options.media ); + mq.addListener( function() { + mqChange( mq, options ); + }); + mqChange( mq, options ); + }; + createListener(); + + } else { + // capture the current pageWidth + var pageWidth = window.outerWidth; + + // No matchMedia support + var mmListener = function() { + var parts = options.media.match( /\((.*)-.*:\s*(.*)\)/ ), + constraint = parts[ 1 ], + value = parseInt( parts[ 2 ], 10 ), + fakeMatchMedia = {}; + + // scope this to width changes to prevent small-screen scrolling (browser chrome off-screen) + // from triggering a change + if (pageWidth != window.outerWidth) { + fakeMatchMedia.matches = constraint === "max" && value > window.outerWidth || + constraint === "min" && value < window.outerWidth; + mqChange( fakeMatchMedia, options ); + + // reset pageWidth + pageWidth = window.outerWidth; + } + }; + + if (window.addEventListener) { + window.addEventListener("resize", mmListener); + } else if (window.attachEvent) { + window.attachEvent("resize", mmListener); + } + mmListener(); + } +}; diff --git a/app/design/frontend/magento_plushe/js/navigation-menu.js b/app/design/frontend/magento_plushe/js/navigation-menu.js new file mode 100644 index 00000000000..a91566ec9ce --- /dev/null +++ b/app/design/frontend/magento_plushe/js/navigation-menu.js @@ -0,0 +1,459 @@ +/** + * 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) + */ +/*jshint jquery:true*/ + +(function($) { + 'use strict'; + + $.widget('mage.navigationMenu', { + options: { + itemsContainer: '> ul', + topLevel: 'li.level0', + topLevelSubmenu: '> .submenu', + topLevelHoverClass: 'hover', + expandedTopLevel: '.more', + hoverInTimeout: 300, + hoverOutTimeout: 2000, + submenuAnimationSpeed: 200, + collapsable: true, + collapsableDropdownTemplate: + '<script type="text/x-jquery-tmpl">' + + '<li class="level0 level-top more parent">' + + '<div class="submenu">' + + '<ul>{{html elems}}</ul>' + + '</div>' + + '</li>' + + '</script>' + }, + + _create: function() { + this.itemsContainer = $(this.options.itemsContainer, this.element); + this.topLevel = $(this.options.topLevel, this.element); + this.topLevelSubmenu = $(this.options.topLevelSubmenu, this.topLevel); + + this._bind(); + }, + + _init: function() { + if (this.options.collapsable) { + setTimeout($.proxy(function() { + this._checkToCollapseOrExpand(); + }, this), 100); + } + }, + + _bind: function() { + this._on({ + 'mouseenter > ul > li.level0': function(e) { + if (!this.entered) { // fix IE bug with 'mouseenter' event + this.timeoutId && clearTimeout(this.timeoutId); + this.timeoutId = setTimeout($.proxy(function() { + this._openSubmenu(e); + }, this), this.options.hoverInTimeout); + this.entered = true; + } + }, + 'mouseleave > ul > li.level0': function(e) { + this.entered = null; + + this.timeoutId && clearTimeout(this.timeoutId); + this.timeoutId = setTimeout($.proxy(function() { + this._closeSubmenu(e.currentTarget); + }, this), this.options.hoverOutTimeout); + }, + 'click': function(e) { + e.stopPropagation(); + } + }); + + $(document) + .on('click.hideMenu', $.proxy(function(e) { + var isOpened = this.topLevel.filter(function() { + return $(this).data('opened'); + }); + + if (isOpened) { + this._closeSubmenu(null, false); + } + }, this)); + + $(window) + .on('resize', $.proxy(function() { + this.timeoutOnResize && clearTimeout(this.timeoutOnResize); + this.timeoutOnResize = setTimeout($.proxy(function() { + if (this.options.collapsable) { + if ($(this.options.expandedTopLevel, this.element).length) { + this._expandMenu(); + } + this._checkToCollapseOrExpand(); + } + }, this), 300); + }, this)); + }, + + _openSubmenu: function(e) { + var menuItem = e.currentTarget; + + if (!$(menuItem).data('opened')) { + this._closeSubmenu(menuItem, true, true); + + $(this.options.topLevelSubmenu, menuItem) + .slideDown(this.options.submenuAnimationSpeed, $.proxy(function() { + $(menuItem).addClass(this.options.topLevelHoverClass); + $(menuItem).data('opened', true); + }, this)); + } else if ($(e.target).closest(this.options.topLevel)) { + $(e.target) + .addClass(this.options.topLevelHoverClass) + .siblings(this.options.topLevel) + .removeClass(this.options.topLevelHoverClass); + } + }, + + _closeSubmenu: function(menuItem, excludeCurrent, fast) { + var topLevel = $(this.options.topLevel, this.element), + activeSubmenu = $(this.options.topLevelSubmenu, menuItem || null); + + $(this.options.topLevelSubmenu, topLevel) + .filter(function() { + return excludeCurrent ? $(this).not(activeSubmenu) : true; + }) + .slideUp(fast ? 0 : this.options.submenuAnimationSpeed); + + topLevel + .removeClass(this.options.topLevelHoverClass) + .data('opened', false); + }, + + _checkToCollapseOrExpand: function() { + var navWidth = this.itemsContainer.width(), + totalWidth = 0, + startCollapseIndex = 0; + + $.each($(this.options.topLevel, this.element), function(index, item) { + totalWidth = totalWidth + $(item).outerWidth(true); + + if (totalWidth > navWidth && !startCollapseIndex) { + startCollapseIndex = index - 2; + } + }); + + this[startCollapseIndex ? '_collapseMenu' : '_expandMenu'](startCollapseIndex); + }, + + _collapseMenu: function(startCollapseIndex) { + this.elemsToCollapse = this.topLevel.filter(function(index) { + return index > startCollapseIndex; + }); + this.elemsToCollapseClone = $('<div></div>').append(this.elemsToCollapse.clone()).html(); + + this.collapsableDropdown = $(this.options.collapsableDropdownTemplate).tmpl({elems: this.elemsToCollapseClone}); + + this.itemsContainer + .append(this.collapsableDropdown); + + this.elemsToCollapse.detach(); + }, + + _expandMenu: function() { + if ($.browser.version != 8.0) { + this.elemsToCollapse && this.elemsToCollapse.appendTo(this.itemsContainer); + this.collapsableDropdown && this.collapsableDropdown.remove(); + } else { + setTimeout($.proxy(function() { + var moreWrapper = $('.more', this.element); + + if (moreWrapper.length > 1) { + moreWrapper.eq(moreWrapper.length - 1).remove(); + } + }, this), 1); + } + }, + + _destroy: function() { + this._expandMenu(); + } + }); + + /* + * Provides "Continium" effect for submenu + * */ + $.widget('mage.navigationMenu', $.mage.navigationMenu, { + options: { + parentLevel: '> ul > li.level0', + submenuAnimationSpeed: 150, + submenuContiniumEffect: false + }, + + _init: function() { + this._super(); + this._applySubmenuStyles(); + }, + + _applySubmenuStyles: function() { + $(this.options.topLevelSubmenu, $(this.options.topLevel, this.element)) + .removeAttr('style'); + + $(this.options.topLevelSubmenu, $(this.options.parentLevel, this.element)) + .css({ + display: 'block', + height: 0, + overflow: 'hidden' + }); + }, + + _openSubmenu: function(e) { + var menuItem = e.currentTarget, + submenu = $(this.options.topLevelSubmenu, menuItem), + openedItems = $(this.options.topLevel, this.element).filter(function() { + return $(this).data('opened'); + }); + + if (submenu.length) { + this.heightToAnimate = $(this.options.itemsContainer, submenu).outerHeight(true); + + if (openedItems.length) { + this._closeSubmenu(menuItem, true, this.heightToAnimate, $.proxy(function() { + submenu.css({ + height: 'auto' + }); + $(menuItem) + .addClass(this.options.topLevelHoverClass); + }, this), e); + } else { + submenu.animate({ + height: this.heightToAnimate + }, this.options.submenuAnimationSpeed, $.proxy(function() { + $(menuItem) + .addClass(this.options.topLevelHoverClass); + }, this)); + } + $(menuItem) + .data('opened', true); + } else { + this._closeSubmenu(menuItem); + } + }, + + _closeSubmenu: function(menuItem, excludeCurrent, heightToAnimate, callback, e) { + var topLevel = $(this.options.topLevel, this.itemsContainer), + expandedTopLevel = e && $(e.target).closest(this.options.expandedTopLevel); + + if (!excludeCurrent) { + $(this.options.topLevelSubmenu, $(this.options.parentLevel, this.element)) + .animate({ + height: 0 + }); + + topLevel + .data('opened', false) + .removeClass(this.options.topLevelHoverClass); + } else { + var prevOpenedItem = topLevel.filter(function() { + return $(this).data('opened'); + }), + prevOpenedSubmenu = $(this.options.topLevelSubmenu, prevOpenedItem); + + prevOpenedSubmenu.animate({ + height: heightToAnimate + }, this.options.submenuAnimationSpeed, 'linear', function() { + $(this).css({ + height: 0 + }); + callback && callback(); + }); + + prevOpenedItem + .data('opened', false) + .removeClass(this.options.topLevelHoverClass); + } + }, + + _collapseMenu: function() { + this._superApply(arguments); + this._applySubmenuStyles(); + } + }); + + // Responsive menu + $.widget('mage.navigationMenu', $.mage.navigationMenu, { + options: { + responsive: false, + origNavPlaceholder: '.header', + mainContainer: 'body', + pageWrapper: '.page.wrapper', + openedMenuClass: 'opened', + toggleActionPlaceholder: '.block.search', + itemWithSubmenu: 'li.parent', + titleWithSubmenu: 'li.parent > a', + submenu: 'li.parent > .submenu', + toggleActionTemplate: + '<script type="text/x-jquery-tmpl">' + + '<span data-action="toggle-nav" class="action toggle nav">Toggle Nav</span>' + + '</script>', + submenuActionsTemplate: + '<script type="text/x-jquery-tmpl">' + + '<li class="action back">' + + '<a><span>${ category }</span></a>' + + '</li>' + + '<li class="action all">' + + '<a href="${ categoryURL }">All ${ category }</a>' + + '</li>' + + '</script>' + }, + + _init: function() { + this._super(); + + this.mainContainer = $(this.options.mainContainer); + this.pageWrapper = $(this.options.pageWrapper); + this.toggleAction = $(this.options.toggleActionTemplate).tmpl({}); + + if (this.options.responsive) { + mediaCheck({ + media: '(max-width: 640px)', + entry: $.proxy(function() { + this._toggleMobileMode(); + }, this), + exit: $.proxy(function() { + this._toggleDesktopMode(); + }, this) + }); + } + }, + + _bind: function() { + this._super(); + this._bindDocumentEvents(); + }, + + _bindDocumentEvents: function() { + if (!this.eventsBound) { + $(document) + .on('click.toggleMenu', '.action.toggle.nav', $.proxy(function(e) { + if ($(this.element).data('opened')) { + this._hideMenu(); + } else { + this._showMenu(); + } + e.stopPropagation(); + }, this)) + .on('click.hideMenu', this.options.pageWrapper, $.proxy(function() { + if ($(this.element).data('opened')) { + this._hideMenu(); + } + }, this)) + .on('click.showSubmenu', this.options.titleWithSubmenu, $.proxy(function(e) { + this._showSubmenu(e); + + e.preventDefault(); + }, this)) + .on('click.hideSubmenu', '.action.back', $.proxy(function(e) { + this._hideSubmenu(e); + }, this)); + + this.eventsBound = true; + } + }, + + _showMenu: function() { + $(this.element).data('opened', true); + this.mainContainer.addClass(this.options.openedMenuClass); + }, + + _hideMenu: function() { + $(this.element).data('opened', false); + this.mainContainer.removeClass(this.options.openedMenuClass); + }, + + _showSubmenu: function(e) { + var submenu = $(e.currentTarget).siblings('.submenu'); + + submenu + .addClass('opened') + .closest('.navigation > ul') + .css({ + height: submenu.outerHeight(true) + }); + }, + + _hideSubmenu: function(e) { + var submenuSelector = '.submenu', + submenu = $(e.currentTarget).closest(submenuSelector); + + submenu.removeClass('opened'); + + if (!$('.submenu.opened').length) { + submenu + .closest('.navigation > ul') + .removeAttr('style'); + } + }, + + _renderSubmenuActions: function() { + $.each($(this.options.itemWithSubmenu), $.proxy(function(index, item) { + var actions = $(this.options.submenuActionsTemplate).tmpl({ + category: $('> a > span', item).text(), + categoryURL: $('> a', item).attr('href') + }), + submenu = $('> .submenu', item), + items = $('> ul', submenu); + + items.prepend(actions); + + submenu + .css({ + height: $(window).outerHeight(true) - 1 + }); + }, this)); + }, + + _toggleMobileMode: function() { + this._expandMenu(); + + $(this.options.topLevelSubmenu, $(this.options.topLevel, this.element)) + .removeAttr('style'); + + this.toggleAction.insertBefore(this.options.toggleActionPlaceholder); + this.mobileNav = $(this.element).detach().clone(); + this.mainContainer.prepend(this.mobileNav); + + this._renderSubmenuActions(); + this._bindDocumentEvents(); + }, + + _toggleDesktopMode: function() { + this.mobileNav && this.mobileNav.remove(); + this.toggleAction.detach(); + $(this.element).insertAfter(this.options.origNavPlaceholder); + + $(document) + .off('click.toggleMenu', '.action.toggle.nav') + .off('click.hideMenu', this.options.pageWrapper) + .off('click.showSubmenu', this.options.titleWithSubmenu) + .off('click.hideSubmenu', '.action.back'); + + this.eventsBound = false; + } + }); +})(window.jQuery); \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/js/selectivizr.js b/app/design/frontend/magento_plushe/js/selectivizr.js new file mode 100644 index 00000000000..bd96e782eaa --- /dev/null +++ b/app/design/frontend/magento_plushe/js/selectivizr.js @@ -0,0 +1,567 @@ +/** + * 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) + */ +/* +selectivizr v1.0.2 - (c) Keith Clark, freely distributable under the terms +of the MIT license. + +selectivizr.com +*/ +/* + +Notes about this source +----------------------- + + * The #DEBUG_START and #DEBUG_END comments are used to mark blocks of code + that will be removed prior to building a final release version (using a + pre-compression script) + + +References: +----------- + + * CSS Syntax : http://www.w3.org/TR/2003/WD-css3-syntax-20030813/#style + * Selectors : http://www.w3.org/TR/css3-selectors/#selectors + * IE Compatability : http://msdn.microsoft.com/en-us/library/cc351024(VS.85).aspx + * W3C Selector Tests : http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/html/tests/ + +*/ + +(function(win) { + + // If browser isn't IE, then stop execution! This handles the script + // being loaded by non IE browsers because the developer didn't use + // conditional comments. + if (/*@cc_on!@*/true) return; + + // =========================== Init Objects ============================ + + var doc = document; + var root = doc.documentElement; + var xhr = getXHRObject(); + var ieVersion = /MSIE (\d+)/.exec(navigator.userAgent)[1]; + + // If were not in standards mode, IE is too old / new or we can't create + // an XMLHttpRequest object then we should get out now. + if (doc.compatMode != 'CSS1Compat' || ieVersion<6 || ieVersion>8 || !xhr) { + return; + } + + + // ========================= Common Objects ============================ + + // Compatiable selector engines in order of CSS3 support. Note: '*' is + // a placholder for the object key name. (basically, crude compression) + var selectorEngines = { + "NW" : "*.Dom.select", + "MooTools" : "$$", + "DOMAssistant" : "*.$", + "Prototype" : "$$", + "YAHOO" : "*.util.Selector.query", + "Sizzle" : "*", + "jQuery" : "*", + "dojo" : "*.query" + }; + + var selectorMethod; + var enabledWatchers = []; // array of :enabled/:disabled elements to poll + var ie6PatchID = 0; // used to solve ie6's multiple class bug + var patchIE6MultipleClasses = true; // if true adds class bloat to ie6 + var namespace = "slvzr"; + + // Stylesheet parsing regexp's + var RE_COMMENT = /(\/\*[^*]*\*+([^\/][^*]*\*+)*\/)\s*/g; + var RE_IMPORT = /@import\s*(?:(?:(?:url\(\s*(['"]?)(.*)\1)\s*\))|(?:(['"])(.*)\3))[^;]*;/g; + var RE_ASSET_URL = /\burl\(\s*(["']?)(?!data:)([^"')]+)\1\s*\)/g; + var RE_PSEUDO_STRUCTURAL = /^:(empty|(first|last|only|nth(-last)?)-(child|of-type))$/; + var RE_PSEUDO_ELEMENTS = /:(:first-(?:line|letter))/g; + var RE_SELECTOR_GROUP = /(^|})\s*([^\{]*?[\[:][^{]+)/g; + var RE_SELECTOR_PARSE = /([ +~>])|(:[a-z-]+(?:\(.*?\)+)?)|(\[.*?\])/g; + var RE_LIBRARY_INCOMPATIBLE_PSEUDOS = /(:not\()?:(enabled|disabled|focus|checked|target|active|visited|first-line|first-letter)\)?/g; + var RE_PATCH_CLASS_NAME_REPLACE = /[^\w-]/g; + + // HTML UI element regexp's + var RE_INPUT_ELEMENTS = /^(INPUT|SELECT|TEXTAREA|BUTTON)$/; + var RE_INPUT_CHECKABLE_TYPES = /^(checkbox|radio)$/; + + // Broken attribute selector implementations (IE7/8 native [^=""], [$=""] and [*=""]) + var BROKEN_ATTR_IMPLEMENTATIONS = ieVersion>6 ? /[\$\^*]=(['"])\1/ : null; + + // Whitespace normalization regexp's + var RE_TIDY_TRAILING_WHITESPACE = /([(\[+~])\s+/g; + var RE_TIDY_LEADING_WHITESPACE = /\s+([)\]+~])/g; + var RE_TIDY_CONSECUTIVE_WHITESPACE = /\s+/g; + var RE_TIDY_TRIM_WHITESPACE = /^\s*((?:[\S\s]*\S)?)\s*$/; + + // String constants + var EMPTY_STRING = ""; + var SPACE_STRING = " "; + var PLACEHOLDER_STRING = "$1"; + + // =========================== Patching ================================ + + // --[ patchStyleSheet() ]---------------------------------------------- + // Scans the passed cssText for selectors that require emulation and + // creates one or more patches for each matched selector. + function patchStyleSheet( cssText ) { + return cssText.replace(RE_PSEUDO_ELEMENTS, PLACEHOLDER_STRING). + replace(RE_SELECTOR_GROUP, function(m, prefix, selectorText) { + var selectorGroups = selectorText.split(","); + for (var c = 0, cs = selectorGroups.length; c < cs; c++) { + var selector = normalizeSelectorWhitespace(selectorGroups[c]) + SPACE_STRING; + var patches = []; + selectorGroups[c] = selector.replace(RE_SELECTOR_PARSE, + function(match, combinator, pseudo, attribute, index) { + if (combinator) { + if (patches.length>0) { + applyPatches( selector.substring(0, index), patches ); + patches = []; + } + return combinator; + } + else { + var patch = (pseudo) ? patchPseudoClass( pseudo ) : patchAttribute( attribute ); + if (patch) { + patches.push(patch); + return "." + patch.className; + } + return match; + } + } + ); + } + return prefix + selectorGroups.join(","); + }); + }; + + // --[ patchAttribute() ]----------------------------------------------- + // returns a patch for an attribute selector. + function patchAttribute( attr ) { + return (!BROKEN_ATTR_IMPLEMENTATIONS || BROKEN_ATTR_IMPLEMENTATIONS.test(attr)) ? + { className: createClassName(attr), applyClass: true } : null; + }; + + // --[ patchPseudoClass() ]--------------------------------------------- + // returns a patch for a pseudo-class + function patchPseudoClass( pseudo ) { + + var applyClass = true; + var className = createClassName(pseudo.slice(1)); + var isNegated = pseudo.substring(0, 5) == ":not("; + var activateEventName; + var deactivateEventName; + + // if negated, remove :not() + if (isNegated) { + pseudo = pseudo.slice(5, -1); + } + + // bracket contents are irrelevant - remove them + var bracketIndex = pseudo.indexOf("(") + if (bracketIndex > -1) { + pseudo = pseudo.substring(0, bracketIndex); + } + + // check we're still dealing with a pseudo-class + if (pseudo.charAt(0) == ":") { + switch (pseudo.slice(1)) { + + case "root": + applyClass = function(e) { + return isNegated ? e != root : e == root; + } + break; + + case "target": + // :target is only supported in IE8 + if (ieVersion == 8) { + applyClass = function(e) { + var handler = function() { + var hash = location.hash; + var hashID = hash.slice(1); + return isNegated ? (hash == EMPTY_STRING || e.id != hashID) : (hash != EMPTY_STRING && e.id == hashID); + }; + addEvent( win, "hashchange", function() { + toggleElementClass(e, className, handler()); + }) + return handler(); + } + break; + } + return false; + + case "checked": + applyClass = function(e) { + if (RE_INPUT_CHECKABLE_TYPES.test(e.type)) { + addEvent( e, "propertychange", function() { + if (event.propertyName == "checked") { + toggleElementClass( e, className, e.checked !== isNegated ); + } + }) + } + return e.checked !== isNegated; + } + break; + + case "disabled": + isNegated = !isNegated; + + case "enabled": + applyClass = function(e) { + if (RE_INPUT_ELEMENTS.test(e.tagName)) { + addEvent( e, "propertychange", function() { + if (event.propertyName == "$disabled") { + toggleElementClass( e, className, e.$disabled === isNegated ); + } + }); + enabledWatchers.push(e); + e.$disabled = e.disabled; + return e.disabled === isNegated; + } + return pseudo == ":enabled" ? isNegated : !isNegated; + } + break; + + case "focus": + activateEventName = "focus"; + deactivateEventName = "blur"; + + // everything else + default: + // If we don't support this pseudo-class don't create + // a patch for it + if (!RE_PSEUDO_STRUCTURAL.test(pseudo)) { + return false; + } + break; + } + } + return { className: className, applyClass: applyClass }; + }; + + // --[ applyPatches() ]------------------------------------------------- + // uses the passed selector text to find DOM nodes and patch them + function applyPatches(selectorText, patches) { + var elms; + + // Although some selector libraries can find :checked :enabled etc. + // we need to find all elements that could have that state because + // it can be changed by the user. + var domSelectorText = selectorText.replace(RE_LIBRARY_INCOMPATIBLE_PSEUDOS, EMPTY_STRING); + + // If the dom selector equates to an empty string or ends with + // whitespace then we need to append a universal selector (*) to it. + if (domSelectorText == EMPTY_STRING || domSelectorText.charAt(domSelectorText.length - 1) == SPACE_STRING) { + domSelectorText += "*"; + } + + // Ensure we catch errors from the selector library + try { + elms = selectorMethod( domSelectorText ); + } catch (ex) { + // #DEBUG_START + log( "Selector '" + selectorText + "' threw exception '" + ex + "'" ); + // #DEBUG_END + } + + + if (elms) { + for (var d = 0, dl = elms.length; d < dl; d++) { + var elm = elms[d]; + var cssClasses = elm.className; + for (var f = 0, fl = patches.length; f < fl; f++) { + var patch = patches[f]; + + if (!hasPatch(elm, patch)) { + if (patch.applyClass && (patch.applyClass === true || patch.applyClass(elm) === true)) { + cssClasses = toggleClass(cssClasses, patch.className, true ); + } + } + } + elm.className = cssClasses; + } + } + }; + + // --[ hasPatch() ]----------------------------------------------------- + // checks for the exsistence of a patch on an element + function hasPatch( elm, patch ) { + return new RegExp("(^|\\s)" + patch.className + "(\\s|$)").test(elm.className); + }; + + + // =========================== Utility ================================= + + function createClassName( className ) { + return namespace + "-" + ((ieVersion == 6 && patchIE6MultipleClasses) ? + ie6PatchID++ + : + className.replace(RE_PATCH_CLASS_NAME_REPLACE, function(a) { return a.charCodeAt(0) })); + }; + + // --[ log() ]---------------------------------------------------------- + // #DEBUG_START + function log( message ) { + if (win.console) { + win.console.log(message); + } + }; + // #DEBUG_END + + // --[ trim() ]--------------------------------------------------------- + // removes leading, trailing whitespace from a string + function trim( text ) { + return text.replace(RE_TIDY_TRIM_WHITESPACE, PLACEHOLDER_STRING); + }; + + // --[ normalizeWhitespace() ]------------------------------------------ + // removes leading, trailing and consecutive whitespace from a string + function normalizeWhitespace( text ) { + return trim(text).replace(RE_TIDY_CONSECUTIVE_WHITESPACE, SPACE_STRING); + }; + + // --[ normalizeSelectorWhitespace() ]---------------------------------- + // tidies whitespace around selector brackets and combinators + function normalizeSelectorWhitespace( selectorText ) { + return normalizeWhitespace(selectorText. + replace(RE_TIDY_TRAILING_WHITESPACE, PLACEHOLDER_STRING). + replace(RE_TIDY_LEADING_WHITESPACE, PLACEHOLDER_STRING) + ); + }; + + // --[ toggleElementClass() ]------------------------------------------- + // toggles a single className on an element + function toggleElementClass( elm, className, on ) { + var oldClassName = elm.className; + var newClassName = toggleClass(oldClassName, className, on); + if (newClassName != oldClassName) { + elm.className = newClassName; + elm.parentNode.className += EMPTY_STRING; + } + }; + + // --[ toggleClass() ]-------------------------------------------------- + // adds / removes a className from a string of classNames. Used to + // manage multiple class changes without forcing a DOM redraw + function toggleClass( classList, className, on ) { + var re = RegExp("(^|\\s)" + className + "(\\s|$)"); + var classExists = re.test(classList); + if (on) { + return classExists ? classList : classList + SPACE_STRING + className; + } else { + return classExists ? trim(classList.replace(re, PLACEHOLDER_STRING)) : classList; + } + }; + + // --[ addEvent() ]----------------------------------------------------- + function addEvent(elm, eventName, eventHandler) { + elm.attachEvent("on" + eventName, eventHandler); + }; + + // --[ getXHRObject() ]------------------------------------------------- + function getXHRObject() + { + if (win.XMLHttpRequest) { + return new XMLHttpRequest; + } + try { + return new ActiveXObject('Microsoft.XMLHTTP'); + } catch(e) { + return null; + } + }; + + // --[ loadStyleSheet() ]----------------------------------------------- + function loadStyleSheet( url ) { + xhr.open("GET", url, false); + xhr.send(); + return (xhr.status==200) ? xhr.responseText : EMPTY_STRING; + }; + + // --[ resolveUrl() ]--------------------------------------------------- + // Converts a URL fragment to a fully qualified URL using the specified + // context URL. Returns null if same-origin policy is broken + function resolveUrl( url, contextUrl ) { + + function getProtocolAndHost( url ) { + return url.substring(0, url.indexOf("/", 8)); + }; + + // absolute path + if (/^https?:\/\//i.test(url)) { + return getProtocolAndHost(contextUrl) == getProtocolAndHost(url) ? url : null; + } + + // root-relative path + if (url.charAt(0)=="/") { + return getProtocolAndHost(contextUrl) + url; + } + + // relative path + var contextUrlPath = contextUrl.split(/[?#]/)[0]; // ignore query string in the contextUrl + if (url.charAt(0) != "?" && contextUrlPath.charAt(contextUrlPath.length - 1) != "/") { + contextUrlPath = contextUrlPath.substring(0, contextUrlPath.lastIndexOf("/") + 1); + } + + return contextUrlPath + url; + }; + + // --[ parseStyleSheet() ]---------------------------------------------- + // Downloads the stylesheet specified by the URL, removes it's comments + // and recursivly replaces @import rules with their contents, ultimately + // returning the full cssText. + function parseStyleSheet( url ) { + if (url) { + return loadStyleSheet(url).replace(RE_COMMENT, EMPTY_STRING). + replace(RE_IMPORT, function( match, quoteChar, importUrl, quoteChar2, importUrl2 ) { + return parseStyleSheet(resolveUrl(importUrl || importUrl2, url)); + }). + replace(RE_ASSET_URL, function( match, quoteChar, assetUrl ) { + quoteChar = quoteChar || EMPTY_STRING; + return " url(" + quoteChar + resolveUrl(assetUrl, url) + quoteChar + ") "; + }); + } + return EMPTY_STRING; + }; + + // --[ init() ]--------------------------------------------------------- + function init() { + // honour the <base> tag + var url, stylesheet; + var baseTags = doc.getElementsByTagName("BASE"); + var baseUrl = (baseTags.length > 0) ? baseTags[0].href : doc.location.href; + + /* Note: This code prevents IE from freezing / crashing when using + @font-face .eot files but it modifies the <head> tag and could + trigger the IE stylesheet limit. It will also cause FOUC issues. + If you choose to use it, make sure you comment out the for loop + directly below this comment. + + var head = doc.getElementsByTagName("head")[0]; + for (var c=doc.styleSheets.length-1; c>=0; c--) { + stylesheet = doc.styleSheets[c] + head.appendChild(doc.createElement("style")) + var patchedStylesheet = doc.styleSheets[doc.styleSheets.length-1]; + + if (stylesheet.href != EMPTY_STRING) { + url = resolveUrl(stylesheet.href, baseUrl) + if (url) { + patchedStylesheet.cssText = patchStyleSheet( parseStyleSheet( url ) ) + stylesheet.disabled = true + setTimeout( function () { + stylesheet.owningElement.parentNode.removeChild(stylesheet.owningElement) + }) + } + } + } + */ + + for (var c = 0; c < doc.styleSheets.length; c++) { + stylesheet = doc.styleSheets[c] + if (stylesheet.href != EMPTY_STRING) { + url = resolveUrl(stylesheet.href, baseUrl); + if (url) { + stylesheet.cssText = patchStyleSheet( parseStyleSheet( url ) ); + } + } + } + + // :enabled & :disabled polling script (since we can't hook + // onpropertychange event when an element is disabled) + if (enabledWatchers.length > 0) { + setInterval( function() { + for (var c = 0, cl = enabledWatchers.length; c < cl; c++) { + var e = enabledWatchers[c]; + if (e.disabled !== e.$disabled) { + if (e.disabled) { + e.disabled = false; + e.$disabled = true; + e.disabled = true; + } + else { + e.$disabled = e.disabled; + } + } + } + },250) + } + }; + + // Bind selectivizr to the ContentLoaded event. + ContentLoaded(win, function() { + // Determine the "best fit" selector engine + for (var engine in selectorEngines) { + var members, member, context = win; + if (win[engine]) { + members = selectorEngines[engine].replace("*", engine).split("."); + while ((member = members.shift()) && (context = context[member])) {} + if (typeof context == "function") { + selectorMethod = context; + init(); + return; + } + } + } + }); + + + /*! + * ContentLoaded.js by Diego Perini, modified for IE<9 only (to save space) + * + * Author: Diego Perini (diego.perini at gmail.com) + * Summary: cross-browser wrapper for DOMContentLoaded + * Updated: 20101020 + * License: MIT + * Version: 1.2 + * + * URL: + * http://javascript.nwbox.com/ContentLoaded/ + * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE + * + */ + + // @w window reference + // @f function reference + function ContentLoaded(win, fn) { + + var done = false, top = true, + init = function(e) { + if (e.type == "readystatechange" && doc.readyState != "complete") return; + (e.type == "load" ? win : doc).detachEvent("on" + e.type, init, false); + if (!done && (done = true)) fn.call(win, e.type || e); + }, + poll = function() { + try { root.doScroll("left"); } catch(e) { setTimeout(poll, 50); return; } + init('poll'); + }; + + if (doc.readyState == "complete") fn.call(win, EMPTY_STRING); + else { + if (doc.createEventObject && root.doScroll) { + try { top = !win.frameElement; } catch(e) { } + if (top) poll(); + } + addEvent(doc,"readystatechange", init); + addEvent(win,"load", init); + } + }; +})(this); \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/js/sticky.js b/app/design/frontend/magento_plushe/js/sticky.js new file mode 100644 index 00000000000..df725faedaa --- /dev/null +++ b/app/design/frontend/magento_plushe/js/sticky.js @@ -0,0 +1,61 @@ +/** + * 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 EE + * @package EE_refrence + * @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) + */ +/*jshint browser:true jquery:true*/ +(function($, window) { + $.widget('mage.sticky', { + options: { + container: '' + }, + + /** + * Bind handlers to scroll event + * @private + */ + _create: function() { + $(window).on('scroll', $.proxy(this._setTop, this)); + }, + + /** + * float Block on windowScroll + * @private + */ + _setTop: function() { + if ((this.element).is(':visible')) { + var startOffset = this.element.parent().offset().top + parseInt(this.element.css("margin-top")), + currentOffset = $(document).scrollTop(), + parentHeight = $(this.options.container).height() - parseInt(this.element.css("margin-top")), + discrepancyOffset = currentOffset - startOffset; + + if (discrepancyOffset >= 0) { + if (discrepancyOffset + this.element.innerHeight() < parentHeight) { + this.element.css('top', discrepancyOffset); + } + } else { + this.element.css('top', 0); + } + } + } + }); +})(jQuery, window); \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/js/tabs.js b/app/design/frontend/magento_plushe/js/tabs.js new file mode 100644 index 00000000000..4ada49ab096 --- /dev/null +++ b/app/design/frontend/magento_plushe/js/tabs.js @@ -0,0 +1,169 @@ +/** + * 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) + */ +; +(function($) { + 'use strict'; + + $.fn.terms = function(args){ + + // default + var defaults = { + start:0, + wrapper:'', + showAnchor:'', + effects:'slide' + }; + + var options = $.extend(defaults, args); + + this.each(function() { + var obj = $(this), + wrapper = (options.wrapper !== '') ? '> ' + options.wrapper : '', + switches = $(wrapper + '> [data-section="title"] > [data-toggle="switch"]',obj), + terms = $(wrapper + '> [data-section="content"]',obj), + t = switches.length, + marginTop = $(switches[0]).closest('[data-section="title"]').css('position') == 'absolute' ? 0 : null, + title, + current, + + init = function() { + if (t > 0) { + if($(switches[0]).closest('[data-section="title"]').css('display')=='table-cell') { + obj.addClass('adjusted'); + var linksList; + if (obj[0].tagName=='DL') { + linksList = jQuery('<dd>'); + } else { + linksList = jQuery('<div>'); + } + linksList.addClass('sections-nav'); + obj.prepend(linksList); + + for (var i=0; i < t; i++) { + title = $(switches[i]).html(); + var classes = $(switches[i]).closest('[data-section="title"]').attr('class'); + var dataSection = $(switches[i]).closest('[data-section="title"]').attr('data-section'); + var itemHref = $(switches[i]).attr('href'); + var itemClass = $(switches[i]).attr('class'); + $(switches[i]).parent('[data-section="title"]').hide(); + switches[i] = jQuery('<a/>',{ + href: itemHref, + 'class' : itemClass, + html: title + }).appendTo(linksList); + $(switches[i]).wrap('<strong class="'+classes+'" data-section="'+dataSection+'" />'); + } + } + $(switches).each(function(ind,el){ + $(el).click(function(event){ + event.preventDefault(); + showItem(ind); + }); + if (marginTop !== null) { + $(el).closest('[data-section="title"]').css({'top' : marginTop + 'px'}); + marginTop = marginTop + $(el).closest('[data-section="title"]').outerHeight(true); + obj.css({'min-height' : marginTop + 'px' }); + } + }); + + var fromUrl = false; + if (window.location.hash.length > 0) { + $(terms).each(function(ind,el) { + if ( '#info-'+$(el).attr('id') == window.location.hash) { + showItem(ind); + $('html, body').animate({ + scrollTop: $(switches[ind]).offset().top + }, 700); + fromUrl = true; + } + }); + } + if (fromUrl === false) { + if ( options.start % 1 === 0 ) { + current = options.start + 1; + showItem(options.start); + } else { + $(terms).each(function(ind,el) { + if ( $(el).attr('id') == options.start) { + current = ind + 1; + showItem(ind); + $('html, body').animate({ + scrollTop: $(switches[ind]).offset().top + }, 700); + } + }); + } + } + } + }, + + + showItem = function(item) { + if (item != current && !$(switches[item]).closest('[data-section="title"]').hasClass('disabled') ) { + $(switches).closest('[data-section="title"]').removeClass('active'); + if (options.wrapper !== '') { + $(switches).parent().parent().removeClass('active'); + } + $(terms).removeClass('active'); + $(switches[item]).closest('[data-section="title"]').addClass('active'); + if (options.wrapper !== '') { + $(switches[current]).parent().parent().addClass('active'); + } + $(terms[item]).addClass('active'); + + /*if ($(terms[item]).attr('id')) { + scr = document.body.scrollTop; + window.location.hash='#tab-' + $(terms[item]).attr('id'); + document.body.scrollTop = scr; + }*/ + current = item; + } else if ( + // Check if this is accordion width as criteria for now + (obj.attr('data-sections') == 'accordion' + || $(switches[item]).closest('[data-section="title"]').css('width') == obj.css('width') + ) + && item == current && !$(switches[item]).closest('[data-section="title"]').hasClass('disabled') + ) { + $(switches).closest('[data-section="title"]').removeClass('active'); + if (options.wrapper !== '') { + $(switches).parent().parent().removeClass('active'); + } + $(terms).removeClass('active'); + current = -1; + } + }, + + applyEffect = function(item, effect) { + }; + + init(); + }); + }; + $(document).ready(function() { + $('[data-sections]').terms(); + }); + +})(window.jQuery); + + + diff --git a/app/design/frontend/magento_plushe/js/theme.js b/app/design/frontend/magento_plushe/js/theme.js new file mode 100644 index 00000000000..d4a340719e9 --- /dev/null +++ b/app/design/frontend/magento_plushe/js/theme.js @@ -0,0 +1,115 @@ +/** + * 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) + */ + +; +(function($) { + 'use strict'; + + function listScroll() { + var list = $('[data-action="scroll"]').addClass('carousel'); + var listInner = $('> .minilist.items', list); + var items = $('.item', list); + var itemWidth = $(items[0]).outerWidth(); + var perpage = Math.floor(list.outerWidth()/itemWidth); + var pages = Math.floor(items.length/perpage); + var page=0; + for (var i=0 ; i < perpage; i++) { + $(items[i + page*perpage]).addClass('shown'); + }; + for (var i=perpage; i < items.length; i++) { + $(items[i + page*perpage]).addClass('hidden'); + }; + if ( itemWidth*items.length > list.outerWidth() ) { + var next = $('<button class="action next" type="button"><span>Next</span></button>'); + var previous = $('<button class="action previous" type="button"><span>Previous</span></button>').attr('disabled', 'disabled'); + list.append(previous); + list.append(next); + listInner.wrap('<div class="items-wrapper" />'); + $('.items-wrapper').css('width', itemWidth*perpage); + next.on('click.itemsScroll', function() { + list.addClass('animation'); + items.removeClass('shown'); + items.removeClass('hidden'); + listInner.animate({ + left: '-=' + itemWidth*perpage, + }, 400, 'easeInOutCubic', function() { + // Animation complete. + page = page + 1; + for (var i=0 ; i < perpage; i++) { + $(items[i + page*perpage]).addClass('shown'); + }; + for (var i=perpage; i < items.length; i++) { + $(items[i + page*perpage]).addClass('hidden'); + }; + console.log(i); + previous.removeAttr('disabled'); + if (page == pages) { + next.attr('disabled', 'disabled'); + } + list.removeClass('animation'); + }); + }); + previous.on('click.itemsScroll', function() { + list.addClass('animation'); + items.removeClass('shown'); + items.removeClass('hidden'); + listInner.animate({ + left: '+=' + itemWidth*perpage, + }, 400, 'easeInOutCubic', function() { + // Animation complete. + page = page - 1; + for (var i=0 ; i < perpage; i++) { + $(items[i + page*perpage]).addClass('shown'); + }; + for (var i=perpage; i < items.length; i++) { + $(items[i + page*perpage]).addClass('hidden'); + }; + next.removeAttr('disabled'); + if (page == 0) { + previous.attr('disabled', 'disabled'); + } + list.removeClass('animation'); + }); + }); + + } + } + + $(document).ready(function() { + listScroll(); + + if ($('body').hasClass('checkout-cart-index')) { + $('.cart.summary > .block > .title').dropdown({autoclose:false, menu:'.title + .content'}); + if ($('#co-shipping-method-form .fieldset.rates').length > 0 && $('#co-shipping-method-form .fieldset.rates :checked').length === 0 ) { + $('.block.shipping > .title').addClass('active'); + $('.block.shipping').addClass('active'); + } + } + + $('[role="navigation"]').navigationMenu({ + responsive: true, + submenuContiniumEffect: true + }); + }); + +})(window.jQuery); \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/less/clearless/all.less b/app/design/frontend/magento_plushe/less/clearless/all.less new file mode 100644 index 00000000000..c39ad99d5e6 --- /dev/null +++ b/app/design/frontend/magento_plushe/less/clearless/all.less @@ -0,0 +1,36 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ +// ============================================== +// Handily import all ClearLess mixins +// ============================================== + +@import "settings"; +@import "typography"; +@import "resets"; +@import "helpers"; +@import "sprites"; +@import "icons"; +@import "arrows"; +@import "grids"; \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/less/clearless/arrows.less b/app/design/frontend/magento_plushe/less/clearless/arrows.less new file mode 100644 index 00000000000..32f074ecc8b --- /dev/null +++ b/app/design/frontend/magento_plushe/less/clearless/arrows.less @@ -0,0 +1,172 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ +.arrow(@pos, @size, @bg-color) { + width: 0; + height: 0; + border: @size solid transparent; + ._abbor_el( @pos, @bg-color ); +} + +.arrowbox(@pos, @size, @bg-color, @offset:50%) { + + @after-margin: @size * -1px; + + position: relative; + background: @bg-color; + + &:after, + &:before { + ._abpos(@pos); + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + } + + &:after { + border-color: transparent; + ._abbor_el(@pos, @bg-color); + border-width: @size; + ._abpos_el(@pos, @size, @offset); + ._abmar_el(@pos, @after-margin); + } + +} + +.arrowbox(@pos, @size, @bg-color, @border-width, @border-color, @offset:50%) { + + @before-margin: (@size + round(@border-width * 1.41421356)) * -1px; + + .arrowbox(@pos, @size, @bg-color, @offset); + + border: @border-width solid @border-color; + + &:before { + border-color: transparent; + ._abbor_el(@pos, @border-color); + border-width: @before-margin * -1; + ._abpos_el(@pos, @size, @offset); + ._abmar_el(@pos, @before-margin); + } + +} + +._abpos( @pos ) when ( @pos = left ) { + right: 100%; +} + +._abpos( @pos ) when ( @pos = right ) { + left: 100%; +} + +._abpos( @pos ) when ( @pos = up ) { + bottom: 100%; +} + +._abpos( @pos ) when ( @pos = down ) { + top: 100%; +} + +._abpos_el( @pos, @size, @offset ) when ( @offset = 0 ) and ( @pos = left ) { + top: @size; +} + +._abpos_el( @pos, @size, @offset ) when ( @offset = 0 ) and ( @pos = right ) { + top: @size; +} + +._abpos_el( @pos, @size, @offset ) when ( @offset = 0 ) and ( @pos = up ) { + left: @size; +} + +._abpos_el( @pos, @size, @offset ) when ( @offset = 0 ) and ( @pos = down ) { + left: @size; +} + +._abpos_el( @pos, @size, @offset ) when not ( @offset = 0 ) and not ( ispixel(@offset) ) and ( @pos = left ) { + top: @offset; +} + +._abpos_el( @pos, @size, @offset ) when not ( @offset = 0 ) and not ( ispixel(@offset) ) and ( @pos = right ) { + top: @offset; +} + +._abpos_el( @pos, @size, @offset ) when not ( @offset = 0 ) and not ( ispixel(@offset) ) and ( @pos = up ) { + left: @offset; +} + +._abpos_el( @pos, @size, @offset ) when not ( @offset = 0 ) and not ( ispixel(@offset) ) and ( @pos = down ) { + left: @offset; +} + +._abpos_el( @pos, @size, @offset ) when not ( @offset = 0 ) and ( ispixel(@offset) ) and ( @pos = left ) { + top: @offset + @size; +} + +._abpos_el( @pos, @size, @offset ) when not ( @offset = 0 ) and ( ispixel(@offset) ) and ( @pos = right ) { + top: @offset + @size; +} + +._abpos_el( @pos, @size, @offset ) when not ( @offset = 0 ) and ( ispixel(@offset) ) and ( @pos = up ) { + left: @offset + @size; +} + +._abpos_el( @pos, @size, @offset ) when not ( @offset = 0 ) and ( ispixel(@offset) ) and ( @pos = down ) { + left: @offset + @size; +} + +._abbor_el( @pos, @color ) when ( @pos = left ) { + border-right-color: @color; +} + +._abbor_el( @pos, @color ) when ( @pos = right ) { + border-left-color: @color; +} + +._abbor_el( @pos, @color ) when ( @pos = up ) { + border-bottom-color: @color; +} + +._abbor_el( @pos, @color ) when ( @pos = down ) { + border-top-color: @color; +} + +._abmar_el( @pos, @margin ) when ( @pos = left ) { + margin-top: @margin; +} + +._abmar_el( @pos, @margin ) when ( @pos = right ) { + margin-top: @margin; +} + +._abmar_el( @pos, @margin ) when ( @pos = up ) { + margin-left: @margin; +} + +._abmar_el( @pos, @margin ) when ( @pos = down ) { + margin-left: @margin; +} diff --git a/app/design/frontend/magento_plushe/less/clearless/grids.less b/app/design/frontend/magento_plushe/less/clearless/grids.less new file mode 100644 index 00000000000..33fd73b9bef --- /dev/null +++ b/app/design/frontend/magento_plushe/less/clearless/grids.less @@ -0,0 +1,186 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ +// ============================================== +// Grid mixins +// ============================================== + +// You shouldn't need to touch this! Internal use only. +@column-width: 1; +@total-columns: 1; +@gutter-width: 1; +@grid-width: (@column-width*@total-columns) + (@gutter-width*(@total-columns - 1)); + +.column-wrapper() { + width: 100%; +} + +.inline-column-wrapper() when not (@using-ieclasses) { + letter-spacing: -0.31em; + *letter-spacing: normal; + word-spacing: -0.43em; +} + +.inline-column-wrapper() when (@using-ieclasses) { + letter-spacing: -0.31em; + word-spacing: -0.43em; + .ie7 & { + letter-spacing: normal; + } +} + +.column() { + float: left; + .column-gutter(); +} + +.column( @span ) when (@span = false) { + float: left; +} + +.column( @span, @total-columns:@total-columns, @end-column:false ) when (isnumber(@span)) and (isnumber(@total-columns)) and not (isnumber(@end-column)) { + @showgutter: false; + .column(@showgutter); + .span( @span, @total-columns ); +} + +.column( @span, @total-columns:@total-columns, @end-column:false ) when (isnumber(@span)) and (isnumber(@total-columns)) and (@end-column = true) { + @showgutter: false; + .column(@showgutter); + .span( @span, @total-columns ); + .end-column(); +} + +.column( @span, @end-column ) when (isnumber(@span)) and not (isnumber(@end-column)) { + @showgutter: false; + .column(@showgutter); + .span( @span ); +} + +.column( @span, @end-column ) when (isnumber(@span)) and ( @end-column = true ) { + @showgutter: false; + .column(@showgutter); + .span( @span ); + .end-column(); +} + +.inline-column() { + .inline-block(); + vertical-align: top; + letter-spacing: normal; + word-spacing: normal; + .column-gutter(); +} + +.inline-column( @span ) when (@span = false) { + .inline-block(); + vertical-align: top; + letter-spacing: normal; + word-spacing: normal; +} + +.inline-column( @span, @total-columns:@total-columns, @end-column:false ) when (isnumber(@span)) and (isnumber(@total-columns)) { + @showgutter: false; + .inline-column(@showgutter); + .span( @span, @total-columns ); +} + +.inline-column( @span, @total-columns:@total-columns, @end-column:false ) when (isnumber(@span)) and (@end-column = true) { + @showgutter: false; + .inline-column(@showgutter); + .span( @span, @total-columns ); + .inline-end-column(); +} + +.inline-column( @span, @end-column ) when not (isnumber(@end-column)) { + @showgutter: false; + .inline-column(@showgutter); + .span( @span ); +} + +.inline-column( @span, @end-column ) when (@end-column = true) { + @showgutter: false; + .inline-column(@showgutter); + .span( @span ); + .inline-end-column(); +} + +.end-column() { + margin-right: 0; + float: right; +} + +.inline-end-column() { + margin-right: 0; +} + +.span( @span ) { + .column-width(@span, @total-columns); +} + +.span( @span, @total-columns ) when (isnumber(@total-columns)) { + .column-width(@span, @total-columns); + .column-gutter(@total-columns); +} + +.pre-pad( @span, @total-columns:@total-columns ) { + @calc-column-width: 100%*((((@gutter-width+@column-width)*@span)) / @grid-width); + padding-left: @calc-column-width; +} + +.post-pad( @span, @total-columns:@total-columns ) { + @calc-column-width: 100%*((((@gutter-width+@column-width)*@span)) / @grid-width); + padding-right: @calc-column-width; +} + +.pre-push( @span, @total-columns:@total-columns ) { + @calc-column-width: 100%*((((@gutter-width+@column-width)*@span)) / @grid-width); + margin-left: @calc-column-width; +} + +.post-push( @span, @total-columns:@total-columns ) { + @calc-column-width: 100%*((((@gutter-width+@column-width)*@span)+@gutter-width) / @grid-width); + margin-right: @calc-column-width; +} + +.post-push-end( @span, @total-columns:@total-columns ) { + @calc-column-width: 100%*((((@gutter-width+@column-width)*@span)) / @grid-width); + margin-right: @calc-column-width; +} + +.column-width(@span, @total-columns:@total-columns) { + @calc-column-width: 100%*((((@gutter-width+@column-width)*@span)-@gutter-width) / @grid-width); + width: @calc-column-width; +} + +.column-gutter(@total-columns:@total-columns, @end-column:false) when (@end-column) { + margin-right: 0; +} + +.column-gutter(@total-columns:@total-columns, @end-column:false) when not (@end-column) { + @calc-gutter-width: 100%*(@gutter-width/@grid-width); + margin-right: @calc-gutter-width; +} + + diff --git a/app/design/frontend/magento_plushe/less/clearless/helpers.less b/app/design/frontend/magento_plushe/less/clearless/helpers.less new file mode 100644 index 00000000000..87bc3a2affd --- /dev/null +++ b/app/design/frontend/magento_plushe/less/clearless/helpers.less @@ -0,0 +1,248 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ +// ============================================== +// Misc helpers and shortcuts +// ============================================== + +// Shortcuts -------------------------------- + +.border-radius(@radius:5px) { + -webkit-border-radius: @arguments; + -moz-border-radius: @arguments; + border-radius: @arguments; +} + +.box-sizing(@type: border-box) { + -moz-box-sizing: @type; + -webkit-box-sizing: @type; + -ms-box-sizing: @type; + box-sizing: @type; +} + +.box-shadow(@shadow: 1px 1px 2px rgba(0,0,0,0.25)) { + -webkit-box-shadow: @shadow; + -moz-box-shadow: @shadow; + box-shadow: @shadow; +} + +.filter(@filter: grayscale(100%)) { + -webkit-filter: @filter; + -moz-filter: @filter; + -ms-filter: @filter; + -o-filter: @filter; + filter: @filter; +} + +.transition(@transition) { + -webkit-transition: @transition; + -moz-transition: @transition; + transition: @transition; +} + +.rotate(@rotation) { + -webkit-transform: rotate(@rotation); + -moz-transform: rotate(@rotation); + -o-transform: rotate(@rotation); + transform: rotate(@rotation); +} + +.placeholder(@color: #DDD) { + :-moz-placeholder { + color: @color; + } + ::-webkit-input-placeholder { + color: @color; + } +} + +#gradient { + .horizontal (@start-color, @end-color) when not (@disable-filters) { + background-color: @end-color; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, right top, from(@start-color), to(@end-color)); /* Konqueror */ + background-image: -moz-linear-gradient(left, @start-color, @end-color); /* FF 3.6+ */ + background-image: -ms-linear-gradient(left, @start-color, @end-color); /* IE10 */ + background-image: -webkit-gradient(linear, left top, right top, color-stop(0%, @start-color), color-stop(100%, @end-color)); /* Safari 4+, Chrome 2+ */ + background-image: -webkit-linear-gradient(left, @start-color, @end-color); /* Safari 5.1+, Chrome 10+ */ + background-image: -o-linear-gradient(left, @start-color, @end-color); /* Opera 11.10 */ + background-image: -ms-linear-gradient(left, @start-color 0%, @end-color 100%); /* IE10+ */ + background-image: linear-gradient(left, @start-color, @end-color); /* the standard */ + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",@start-color,@end-color)); /* IE6 & IE7 */ + -ms-filter: %("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",@start-color,@end-color); /* IE8+ */ + } + .horizontal (@start-color, @end-color) when (@disable-filters) { + background-color: @end-color; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, right top, from(@start-color), to(@end-color)); /* Konqueror */ + background-image: -moz-linear-gradient(left, @start-color, @end-color); /* FF 3.6+ */ + background-image: -ms-linear-gradient(left, @start-color, @end-color); /* IE10 */ + background-image: -webkit-gradient(linear, left top, right top, color-stop(0%, @start-color), color-stop(100%, @end-color)); /* Safari 4+, Chrome 2+ */ + background-image: -webkit-linear-gradient(left, @start-color, @end-color); /* Safari 5.1+, Chrome 10+ */ + background-image: -o-linear-gradient(left, @start-color, @end-color); /* Opera 11.10 */ + background-image: -ms-linear-gradient(left, @start-color 0%, @end-color 100%); /* IE10+ */ + background-image: linear-gradient(left, @start-color, @end-color); /* the standard */ + } + .vertical (@start-color, @end-color) when (@disable-filters) { + background-color: @end-color; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(@start-color), to(@end-color)); /* Konqueror */ + background-image: -moz-linear-gradient(@start-color, @end-color); /* FF 3.6+ */ + background-image: -ms-linear-gradient(@start-color, @end-color); /* IE10 */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, @start-color), color-stop(100%, @end-color)); /* Safari 4+, Chrome 2+ */ + background-image: -webkit-linear-gradient(@start-color, @end-color); /* Safari 5.1+, Chrome 10+ */ + background-image: -o-linear-gradient(@start-color, @end-color); /* Opera 11.10 */ + background-image: -ms-linear-gradient(top, @start-color 0%, @end-color 100%); /* IE10+ */ + background-image: linear-gradient(@start-color, @end-color); /* the standard */ + } + .vertical (@start-color, @end-color) when not (@disable-filters) { + background-color: @end-color; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(@start-color), to(@end-color)); /* Konqueror */ + background-image: -moz-linear-gradient(@start-color, @end-color); /* FF 3.6+ */ + background-image: -ms-linear-gradient(@start-color, @end-color); /* IE10 */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, @start-color), color-stop(100%, @end-color)); /* Safari 4+, Chrome 2+ */ + background-image: -webkit-linear-gradient(@start-color, @end-color); /* Safari 5.1+, Chrome 10+ */ + background-image: -o-linear-gradient(@start-color, @end-color); /* Opera 11.10 */ + background-image: -ms-linear-gradient(top, @start-color 0%, @end-color 100%); /* IE10+ */ + background-image: linear-gradient(@start-color, @end-color); /* the standard */ + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@start-color,@end-color)); /* IE6 & IE7 */ + -ms-filter: %("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@start-color,@end-color); /* IE8+ */ + } +} + +// Helpers -------------------------------- + +.clearfix() when not (@using-ieclasses) { + &:before, + &:after { + content: ""; + display: table; + } + &:after { + clear: both; + } + *zoom: 1; +} + +.clearfix() when (@using-ieclasses) { + &:before, + &:after { + content: ""; + display: table; + } + &:after { + clear: both; + } + .ie6 &, .ie7 & { + zoom: 1; + } +} + +.inline-block() when (@using-ieclasses) { + display: inline-block; + .ie7 & { + display: inline; + zoom: 1; + } +} + +.inline-block() when not (@using-ieclasses) { + display: inline-block; + *display: inline; + *zoom: 1; +} + +.ir() { + border: 0; + font: 0/0 a; + text-shadow: none; + color: transparent; + background-color: transparent; +} + +.hidden() { + display: none !important; + visibility: hidden; +} + +.visually-hidden() { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + &.focusable:active, + &.focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; + } +} + +.size(@thesize) { + width: @thesize; + height: @thesize; +} + +.size(@width, @height) { + width: @width; + height: @height; +} + +// System -------------------------------- + +.nudge-l( @pos ) when ( @pos = 0 ) { +} + +.nudge-l( @pos ) when not ( @pos = 0 ) { + left: @pos; +} + +.nudge-r( @pos ) when ( @pos = 0 ) { +} + +.nudge-r( @pos ) when not ( @pos = 0 ) { + right: @pos; +} + +.nudge-t( @pos ) when ( @pos = 0 ) { +} + +.nudge-t( @pos ) when not ( @pos = 0 ) { + top: @pos; +} + +.nudge-b( @pos ) when ( @pos = 0 ) { +} + +.nudge-b( @pos ) when not ( @pos = 0 ) { + bottom: @pos; +} diff --git a/app/design/frontend/magento_plushe/less/clearless/icons.less b/app/design/frontend/magento_plushe/less/clearless/icons.less new file mode 100644 index 00000000000..e8385fb4e2c --- /dev/null +++ b/app/design/frontend/magento_plushe/less/clearless/icons.less @@ -0,0 +1,327 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ +// ============================================== +// Generated content icon helpers +// ---------------------------------------------- +// These can only be used on block or inline-block elements. +// ============================================== + +// Non-sprited icons -------------------------------- + +.prepend-icon( @icon-image, @width, @height, @nudge-left:0, @nudge-top:0, @pad:10px ) when (@using-modernizr) { + .generatedcontent & { + position: relative; + padding-left: @width + @pad; + } + .generatedcontent &:before { + ._generated-icon( @width, @height, @icon-image ); + top: @nudge-top; + left: @nudge-left; + } +} + +.prepend-icon( @icon-image, @width, @height, @nudge-left:0, @nudge-top:0, @pad:10px ) when not (@using-modernizr) { + position: relative; + padding-left: @width + @pad; + &:before { + ._generated-icon( @width, @height, @icon-image ); + top: @nudge-top; + left: @nudge-left; + } +} + +.append-icon( @icon-image, @width, @height, @nudge-right:0, @nudge-top:0, @pad:10px ) when (@using-modernizr) { + .generatedcontent & { + position: relative; + padding-right: @width + @pad; + } + .generatedcontent &:after { + ._generated-icon( @width, @height, @icon-image ); + top: @nudge-top; + right: @nudge-right; + } +} + +.append-icon( @icon-image, @width, @height, @nudge-right:0, @nudge-top:0, @pad:10px ) when not (@using-modernizr) { + position: relative; + padding-right: @width + @pad; + .generatedcontent &:after { + ._generated-icon( @width, @height, @icon-image ); + top: @nudge-top; + right: @nudge-right; + } +} + +// Sprited icons -------------------------------- + +.prepend-sprite-icon(@x, @y, @width, @height, @nudge-left:0, @nudge-top:0, @pad:10px, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when (@using-modernizr) { + .generatedcontent & { + position: relative; + padding-left: @width + @pad; + } + .generatedcontent &:before { + ._generated-sprite-icon( @x, @y, @width, @height, @sprite-image, @sprite-grid ); + top: @nudge-top; + left: @nudge-left; + } +} + +.prepend-sprite-icon(@x, @y, @width, @height, @nudge-left:0, @nudge-top:0, @pad:10px, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when not (@using-modernizr) { + position: relative; + padding-left: @width + @pad; + &:before { + ._generated-sprite-icon( @x, @y, @width, @height, @sprite-image, @sprite-grid ); + top: @nudge-top; + left: @nudge-left; + } +} + +.append-sprite-icon(@x, @y, @width, @height, @nudge-right:0, @nudge-top:0, @pad:10px, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when (@using-modernizr) { + .generatedcontent & { + padding-right: @width + @pad; + position: relative; + } + .generatedcontent &:after { + ._generated-sprite-icon( @x, @y, @width, @height, @sprite-image, @sprite-grid ); + top: @nudge-top; + right: @nudge-right; + } +} + +.append-sprite-icon(@x, @y, @width, @height, @nudge-right:0, @nudge-top:0, @pad:10px, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when not (@using-modernizr) { + position: relative; + padding-right: @width + @pad; + &:after { + ._generated-sprite-icon( @x, @y, @width, @height, @sprite-image, @sprite-grid ); + top: @nudge-top; + right: @nudge-right; + } +} + +.prepend-sprite-icon-pos(@x, @y, @nudge-left:0, @nudge-top:0, @sprite-grid:@sprite-grid) when (@using-modernizr) { + .generatedcontent &:before { + .sprite-pos(@x, @y, @sprite-grid); + .nudge-l(@nudge-left); + .nudge-t(@nudge-top); + } +} + +.prepend-sprite-icon-pos(@x, @y, @nudge-left:0, @nudge-top:0, @sprite-grid:@sprite-grid) when not (@using-modernizr) { + &:before { + .sprite-pos(@x, @y, @sprite-grid); + .nudge-l(@nudge-left); + .nudge-t(@nudge-top); + } +} + +.append-sprite-icon-pos(@x, @y, @nudge-right:0, @nudge-top:0, @sprite-grid:@sprite-grid) when (@using-modernizr) { + .generatedcontent &:after { + .sprite-pos(@x, @y, @sprite-grid); + .nudge-r(@nudge-right); + .nudge-t(@nudge-top); + } +} + +.append-sprite-icon-pos(@x, @y, @nudge-right:0, @nudge-top:0, @sprite-grid:@sprite-grid) when not (@using-modernizr) { + &:after { + .sprite-pos(@x, @y, @sprite-grid); + .nudge-r(@nudge-right); + .nudge-t(@nudge-top); + } +} + +// ---- Partials ----------------------- + +.prepend-icon-setup(@width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when (@using-modernizr) { + .generatedcontent & { + position: relative; + ._pad-left(@width, @pad); + } + .generatedcontent &:before { + position: absolute; + display: block; + content: ' '; + top: 0; + left: 0; + ._size(@width, @height); + } +} + +.prepend-icon-setup(@width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when not (@using-modernizr) { + position: relative; + ._pad-left(@width, @pad); + &:before { + position: absolute; + display: block; + content: ' '; + top: 0; + left: 0; + ._size(@width, @height); + } +} + +.append-icon-setup(@width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when (@using-modernizr) { + .generatedcontent & { + position: relative; + ._pad-right(@width, @pad); + } + .generatedcontent &:after { + position: absolute; + display: block; + content: ' '; + top: 0; + right: 0; + ._size(@width, @height); + } +} + +.append-icon-setup(@width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when not (@using-modernizr) { + position: relative; + ._pad-right(@width, @pad); + &:after { + position: absolute; + display: block; + content: ' '; + top: 0; + right: 0; + ._size(@width, @height); + } +} + +.prepend-icon-image(@icon-image, @width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when (@using-modernizr) { + ._gc-pad-left(@width, @pad); + .generatedcontent &:before { + background: url(@icon-image) no-repeat 0 0; + ._size(@width, @height); + .nudge-l(@nudge-left); + .nudge-t(@nudge-top); + } +} + +.prepend-icon-image(@icon-image, @width:0, @height:0, @nudge-left:0, @nudge-top:0, @pad:10px) when not (@using-modernizr) { + ._pad-left(@width, @pad); + &:before { + background: url(@icon-image) no-repeat 0 0; + ._size(@width, @height); + .nudge-l(@nudge-left); + .nudge-t(@nudge-top); + } +} + +.append-icon-image(@icon-image, @width:0, @height:0, @nudge-right:0, @nudge-top:0, @pad:10px) when (@using-modernizr) { + ._gc-pad-right(@width, @pad); + .generatedcontent &:after { + background: url(@icon-image) no-repeat 0 0; + ._size(@width, @height); + .nudge-r(@nudge-right); + .nudge-t(@nudge-top); + } +} + +.append-icon-image(@icon-image, @width:0, @height:0, @nudge-right:0, @nudge-top:0, @pad:10px) when not (@using-modernizr) { + ._pad-right(@width, @pad); + &:after { + background: url(@icon-image) no-repeat 0 0; + ._size(@width, @height); + .nudge-r(@nudge-right); + .nudge-t(@nudge-top); + } +} + +// ---- internal use mixins ----------------------- + +._generated-icon(@width, @height, @icon-image) { + position: absolute; + display: block; + content: ' '; + background: url(@icon-image) no-repeat 0 0; + .size(@width, @height); +} + +._generated-sprite-icon(@x, @y, @width, @height, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) { + position: absolute; + display: block; + content: ' '; + .sprite-sized(@x, @y, @width, @height, @sprite-image, @sprite-grid); +} + +._pad-left(@width, @pad) when (@width = 0) { +} + +._pad-left(@width, @pad) when not (@width = 0) { + padding-left: @width + @pad; +} + +._pad-right(@width, @pad) when (@width = 0) { +} + +._pad-right(@width, @pad) when not (@width = 0) { + padding-right: @width + @pad; +} + +._gc-pad-left(@width, @pad) when (@width = 0) { +} + +._gc-pad-right(@width, @pad) when (@width = 0) { +} + +._gc-pad-left(@width, @pad) when not (@width = 0) and (@using-modernizr) { + .generatedcontent & { + ._pad-left(@width, @pad); + } +} + +._gc-pad-left(@width, @pad) when not (@width = 0) and not (@using-modernizr) { + ._pad-left(@width, @pad); +} + +._gc-pad-right(@width, @pad) when not (@width = 0) { + .generatedcontent & { + ._pad-right(@width, @pad); + } +} + +._gc-pad-right(@width, @pad) when not (@width = 0) and not (@using-modernizr) { + ._pad-right(@width, @pad); +} + +._size(@width, @height) when (@width = 0) and (@height = 0) { +} + +._size(@width, @height) when (@width = 0) and not (@height = 0) { + height: @height; +} + +._size(@width, @height) when not (@width = 0) and (@height = 0) { + width: @width; +} + +._size(@width, @height) when not (@width = 0) and not (@height = 0) { + width: @width; + height: @height; +} + + + diff --git a/app/design/frontend/magento_plushe/less/clearless/resets.less b/app/design/frontend/magento_plushe/less/clearless/resets.less new file mode 100644 index 00000000000..d2eb436ac3d --- /dev/null +++ b/app/design/frontend/magento_plushe/less/clearless/resets.less @@ -0,0 +1,307 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ +.normalize() { + + /* normalize.css 2012-03-11T12:53 UTC - http://github.com/necolas/normalize.css */ + + article, + aside, + details, + figcaption, + figure, + footer, + header, + hgroup, + nav, + section, + summary { + display: block; + } + audio, + canvas, + video { + display: inline-block; + *display: inline; + *zoom: 1; + } + audio:not([controls]) { + display: none; + height: 0; + } + [hidden] { + display: none; + } + html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + } + html, + button, + input, + select, + textarea { + font-family: sans-serif; + } + body { + margin: 0; + } + a:focus { + outline: thin dotted; + } + a:hover, + a:active { + outline: 0; + } + h1 { + font-size: 2em; + margin: 0.67em 0; + } + h2 { + font-size: 1.5em; + margin: 0.83em 0; + } + h3 { + font-size: 1.17em; + margin: 1em 0; + } + h4 { + font-size: 1em; + margin: 1.33em 0; + } + h5 { + font-size: 0.83em; + margin: 1.67em 0; + } + h6 { + font-size: 0.75em; + margin: 2.33em 0; + } + abbr[title] { + border-bottom: 1px dotted; + } + b, + strong { + font-weight: bold; + } + blockquote { + margin: 1em 40px; + } + dfn { + font-style: italic; + } + mark { + background: #ff0; + color: #000; + } + p, + pre { + margin: 1em 0; + } + pre, + code, + kbd, + samp { + font-family: monospace, serif; + _font-family: 'courier new', monospace; + font-size: 1em; + } + pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; + } + q { + quotes: none; + } + q:before, + q:after { + content: ''; + content: none; + } + small { + font-size: 75%; + } + sub, + sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + sup { + top: -0.5em; + } + sub { + bottom: -0.25em; + } + dl, + menu, + ol, + ul { + margin: 1em 0; + } + dd { + margin: 0 0 0 40px; + } + menu, + ol, + ul { + padding: 0 0 0 40px; + } + nav ul, + nav ol { + list-style: none; + list-style-image: none; + } + img { + border: 0; + -ms-interpolation-mode: bicubic; + } + svg:not(:root) { + overflow: hidden; + } + figure { + margin: 0; + } + form { + margin: 0; + } + fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; + } + legend { + border: 0; + padding: 0; + white-space: normal; + *margin-left: -7px; + } + button, + input, + select, + textarea { + font-size: 100%; + margin: 0; + vertical-align: baseline; + *vertical-align: middle; + } + button, + input { + line-height: normal; + } + button, + input[type="button"], + input[type="reset"], + input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; + *overflow: visible; + } + button[disabled], + input[disabled] { + cursor: default; + } + input[type="checkbox"], + input[type="radio"] { + box-sizing: border-box; + padding: 0; + *height: 13px; + *width: 13px; + } + input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; + } + input[type="search"]::-webkit-search-decoration, + input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; + } + button::-moz-focus-inner, + input::-moz-focus-inner { + border: 0; + padding: 0; + } + textarea { + overflow: auto; + vertical-align: top; + } + table { + border-collapse: collapse; + border-spacing: 0; + } +} + +.reset() { + + /* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 */ + + html, body, div, span, applet, object, iframe, + h1, h2, h3, h4, h5, h6, p, blockquote, pre, + a, abbr, acronym, address, big, cite, code, + del, dfn, em, img, ins, kbd, q, s, samp, + small, strike, strong, sub, sup, tt, var, + b, u, i, center, + dl, dt, dd, ol, ul, li, + fieldset, form, label, legend, + table, caption, tbody, tfoot, thead, tr, th, td, + article, aside, canvas, details, embed, + figure, figcaption, footer, header, hgroup, + menu, nav, output, ruby, section, summary, + time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; + } + article, aside, details, figcaption, figure, + footer, header, hgroup, menu, nav, section { + display: block; + } + body { + line-height: 1; + } + ol, ul { + list-style: none; + } + blockquote, q { + quotes: none; + } + blockquote:before, blockquote:after, + q:before, q:after { + content: ''; + content: none; + } + table { + border-collapse: collapse; + border-spacing: 0; + } + +} \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/less/clearless/settings.less b/app/design/frontend/magento_plushe/less/clearless/settings.less new file mode 100644 index 00000000000..5be0f95544f --- /dev/null +++ b/app/design/frontend/magento_plushe/less/clearless/settings.less @@ -0,0 +1,50 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ +// ============================================== +// ClearLess default settings +// ---------------------------------------------- +// Override on a per-project basis as required. +// ============================================== + +// General -------------------------------- + +@using-ieclasses: true; // whether or not the markup has html5-boilerplate style IE classes in it or not +@using-modernizr: false; // whether or not modernizer feature-detection classes are being used +@disable-filters: true; // whether or not to disable MS-specific 'filter' properties (can make IE slow!) + +// Typography -------------------------------- + +@base-font-size: 16; // base pixel font size. Used as a default for px -> (r)em conversions + +// Sprites -------------------------------- + +@sprite-image: '/example.png'; +@sprite-grid: 50px; + +// Grid -------------------------------- + +@total-columns: 12; +@column-width: 60px; +@gutter-width: 20px; diff --git a/app/design/frontend/magento_plushe/less/clearless/sprites.less b/app/design/frontend/magento_plushe/less/clearless/sprites.less new file mode 100644 index 00000000000..d797e9e063d --- /dev/null +++ b/app/design/frontend/magento_plushe/less/clearless/sprites.less @@ -0,0 +1,75 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ +// ============================================== +// Sprite helpers +// ============================================== + +.sprite(@x, @y, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) { + .sprite-image(@sprite-image); + .sprite-pos(@x, @y, @sprite-grid); +} + +.sprite-sized(@x, @y, @size, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when not (isnumber(@sprite-image)) { + .sprite(@x, @y, @sprite-image, @sprite-grid); + .size(@size); +} + +.sprite-sized(@x, @y, @width, @height, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when (isnumber(@height)) { + .sprite(@x, @y, @sprite-image, @sprite-grid); + .size(@width,@height); +} + +.sprite-ir(@x, @y, @size, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when not (isnumber(@sprite-image)) { + .ir(); + .sprite(@x, @y, @sprite-image, @sprite-grid); + .size(@size); +} + +.sprite-ir(@x, @y, @width, @height, @sprite-image:@sprite-image, @sprite-grid:@sprite-grid) when (isnumber(@height)) { + .ir(); + .sprite(@x, @y, @sprite-image, @sprite-grid); + .size(@width,@height); +} + +.sprite-image(@sprite-image:@sprite-image) { + background-image: url(@sprite-image); + background-repeat: no-repeat; +} + +.sprite-pos(@x, @y, @sprite-grid:@sprite-grid) { + background-position: -(@x*@sprite-grid*1px) -(@y*@sprite-grid*1px); +} + +.sprite-pos-sized(@x, @y, @size, @sprite-grid:@sprite-grid) when not (isnumber(@sprite-image)) { + .sprite-pos(@x, @y, @sprite-grid); + .size(@size); +} + +.sprite-pos-sized(@x, @y, @width, @height, @sprite-grid:@sprite-grid) when (isnumber(@height)) { + .sprite-pos(@x, @y, @sprite-grid); + .size(@width,@height); +} + + diff --git a/app/design/frontend/magento_plushe/less/clearless/typography.less b/app/design/frontend/magento_plushe/less/clearless/typography.less new file mode 100644 index 00000000000..4476de5db90 --- /dev/null +++ b/app/design/frontend/magento_plushe/less/clearless/typography.less @@ -0,0 +1,66 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ +// ============================================== +// Typography related mixins +// ============================================== + +.font-size-rems(@px-size) { + @rem-size: @px-size / @base-font-size; + font-size: ~"@{px-size}px"; + font-size: ~"@{rem-size}rem"; +} + +.font-size-ems(@target-px-size, @context-px-size:@base-font-size) { + font-size: (@target-px-size / @context-px-size) * 1em; +} + +.font-face( @family-name, @font-path, @font-weight:normal, @font-style:normal, @include-svg:false ) when not (@include-svg) { + @font-face { + font-family: @family-name; + src: url('@{font-path}.eot'); + src: url('@{font-path}.eot?#iefix') format('embedded-opentype'), url('@{font-path}.woff') format('woff'), url('@{font-path}.ttf') format('truetype'); + font-weight: @font-weight; + font-style: @font-style; + } +} + +.font-face( @family-name, @font-path, @font-weight:normal, @font-style:normal, @include-svg:false ) when (@include-svg) { + @font-face { + font-family: @family-name; + src: url('@{font-path}.eot'); + src: url('@{font-path}.eot?#iefix') format('embedded-opentype'), url('@{font-path}.woff') format('woff'), url('@{font-path}.ttf') format('truetype'), url('@{font-path}.svg#@{family-name}') format('svg'); + font-weight: @font-weight; + font-style: @font-style; + } +} + +.wrap-words() { + -ms-word-break: break-all; + word-break: break-all; + word-break: break-word; + -webkit-hyphens: auto; + -moz-hyphens: auto; + hyphens: auto; +} \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/less/lib/buttons.less b/app/design/frontend/magento_plushe/less/lib/buttons.less new file mode 100644 index 00000000000..0a89351dd3e --- /dev/null +++ b/app/design/frontend/magento_plushe/less/lib/buttons.less @@ -0,0 +1,136 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ + +// # Primary buttons +// +// Buttons that performs primary action ([read design and usability article](http://linktousabilityarticle.com/)) +// +// ```html +// <p>Some text here</p> +// <button class="action myPrimary" type="button"><span>Primary action</span></button> +// <button class="action myPrimary :hover" type="button"><span>Primary hover</span></button> +// <button class="action myPrimary :active" type="button"><span>Primary active</span></button> +// ``` +// + +.action.myPrimary { + &:extend(.primary.action all); +} + +.primary.action { + &:extend(.button.action all); + background-color: @primaryActionBg; + color: @primaryActionColor; + &:focus, + &:active, + &:hover { + background-color: @primaryActionBgH; + } +} + +// # Secondary buttons +// +// Buttons that performs secondary action ([read design and usability article](http://linktousabilityarticle.com/)) +// +// ```html +// <button class="action mySecondary" type="button"><span>Secondary action</span></button> +// <button class="action mySecondary :hover" type="button"><span>Secondary hover</span></button> +// <button class="action mySecondary :active" type="button"><span>Secondary active</span></button> +// ``` +// + +.action.mySecondary { + &:extend(.secondary.action all); +} + +.secondary.action { + &:extend(.button.action all); + background-color: @secondaryActionBg; + color: @secondaryActionColor; + &:focus, + &:active, + &:hover { + background-color: @secondaryActionBgH; + } +} + +// # Buttons displayed as links +// Buttons that are displayed as links +// +// ```html +// <button class="action myLink" type="button"><span>Button as a link</span></button> +// <button class="action myLink :hover" type="button"><span>Button as a link hover</span></button> +// <button class="action myLink :active" type="button"><span>Button as a link active</span></button> +// ``` +// + +.action.myLink { + &:extend(.button.link all); +} + +.button.link { + background: none; + border: 0; + display: inline; + color: @link; + margin: 0; + padding: 0; + text-decoration: underline; + &:focus, + &:active, + &:hover { + color: @linkHover; + text-decoration: none; + } +} + +// # Initial styling for button + +.button.action { + border: none; + border-radius: 0; + font: @actionFont; + text-transform: uppercase; + margin: 0; + padding: 9px 11px 9px; + box-shadow: none; + text-shadow: none; + outline: none; + text-decoration: none; +} + +// Buttons Initial Variables + +//@primaryActionBg:; +//@primaryActionBgH:; +//@primaryActionColor:; +//@secondaryActionBg:; +//@secondaryActionBgH:; +//@secondaryActionColor:; +//@actionFont:; + +.action + .action { + margin-left: 5px; +} diff --git a/app/design/frontend/magento_plushe/less/lib/forms.less b/app/design/frontend/magento_plushe/less/lib/forms.less new file mode 100644 index 00000000000..e31ebb390cc --- /dev/null +++ b/app/design/frontend/magento_plushe/less/lib/forms.less @@ -0,0 +1,919 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ + +// #Forms mixins +// +// Mixins for all form elements + +.controlStyling() { + .box-sizing(); + background: @fieldBg; + border: 1px solid @primary3; + border-radius: 3px; + font: @baseFontWeight @baseFontSize @baseFont; + /* Prevent background color leak outs */ + background-clip: padding-box; + outline: none; + &:focus { + border-color: @primary4; + } + .control & { + width: 100%; + } + &:disabled { + opacity: 0.5; + } +} + +.inputText() { + .controlStyling(); + height: 32px; + line-height: 1; + padding: 0 10px; + &::-webkit-input-placeholder { + line-height: 1.333; + } + &:-ms-input-placeholder { + line-height: 1.333; + } + .eq-ie8 & { + padding-top: 8px; + } +} + +.formFieldset() { + border: 0; + margin: 30px 10px 30px 30px; + padding: 0; + letter-spacing: -0.31em; + word-spacing: -0.43em; + > * { + letter-spacing: normal; + word-spacing: normal; + } + > .legend { + float: left; + font: @baseFontWeight @legendFontSize/1.2 @baseFont; + margin: -30px 30px 50px -30px; + width: 100%; + & + br { + display: block; + .clearfix(); + } + } +} + +.formField() { + .box-sizing(); + margin: 0 0 20px; + > .label { + display: block; + padding-bottom: 5px; + } + .nested .field { + margin: 5px 0; + } + &.choice { + > .control { + width: auto; + } + > .label { + display: inline; + } + > input { + vertical-align: top; + margin-top: 2px; + margin-right: 5px; + } + } + &.required > .label > span:first-child:after { + content: '*'; + color: @requiredField; + } + .addon { + display: table; + padding: 0; + width: 100%; + textarea, + select, + input { + box-shadow: none; + display: table-cell; + margin: 0; + width: 100%; + } + .addbefore, + .addafter { + height: 0; + white-space: nowrap; + display: inline-block; + display: table-cell; + vertical-align: middle; + width: 1px; + .inputText(); + } + } + .note { + font-size: @baseFontSizeMiddle; + margin-top: 3px; + padding-left: 15px; + &:before { + border-bottom: 5px solid @baseColor; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + content: ''; + display: inline-block; + font-size: 0; + line-height: 0; + margin: 4px 0 0 -14px; + position: absolute; + vertical-align: top; + width: 0; + } + } +} + +.formCols(@fieldWidth : 50%) { + .field { + display: inline-block; + padding-right: 20px; + vertical-align: top; + width: @fieldWidth; + } + .nested .field { + width: 100%; + } + .actions { + margin-right: 30px; + } +} + +.hasRequired { + &:after { + content: attr(data-hasrequired); + display: block; + font-size: @baseFontSize; + margin: 10px 0 0; + color: @requiredField; + letter-spacing: normal; + word-spacing: normal; + } +} + +.load.indicator { + display: inline-block; + margin: 20px auto; + padding: 8px; + vertical-align: middle; + span { + display: block; + line-height: 16px; + &:before { + content: ''; + margin-right: 5px; + display: inline-block; + width: 16px; + height: 16px; + background: url("@{baseDir}/images/loader.gif") no-repeat 0 0; + background-color: @secondary1; + vertical-align: top; + } + } +} + +// #Forms +// +// ```html +// <form class="form"> +// <fieldset class="fieldset"> +// <legend class="legend"><span>Legend</span></legend> +// <br> +// <div class="field text"> +// <label for="text" class="label"><span>Text field</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="text"> +// </div> +// </div> +// +// <div class="field search"> +// <label for="search" class="label"><span>Search field</span></label> +// <div class="control"> +// <input type="search" class="input-text" value="" name="search"> +// </div> +// </div> +// +// <div class="field tel"> +// <label for="tel" class="label"><span>Tel field</span></label> +// <div class="control"> +// <input type="tel" class="input-text" value="" name="tel"> +// </div> +// </div> +// +// <div class="field url"> +// <label for="url" class="label"><span>Url field</span></label> +// <div class="control"> +// <input type="url" class="input-text" value="" name="url"> +// </div> +// </div> +// +// <div class="field email"> +// <label for="email" class="label"><span>Email field</span></label> +// <div class="control"> +// <input type="email" class="input-text" value="" name="email"> +// </div> +// </div> +// +// <div class="field datetime"> +// <label for="datetime" class="label"><span>Datetime field</span></label> +// <div class="control"> +// <input type="datetime" class="input-text" value="" name="datetime"> +// </div> +// </div> +// +// <div class="field password"> +// <label for="password" class="label"><span>Password field</span></label> +// <div class="control"> +// <input type="password" class="input-text" value="" name="password"> +// </div> +// </div> +// +// <div class="field text2"> +// <label for="name" class="label"><span>Text field with additional field</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="text2"> +// </div> +// <div class="nested"> +// <div class="field additional"> +// <div class="control"> +// <input type="text" class="input-text" value="" name="text2_1" > +// </div> +// </div> +// </div> +// </div> +// +// <div class="field text2"> +// <label for="name" class="label"><span>Text field with note</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="text2"> +// <div class="note">This is a note to a text field</div> +// </div> +// </div> +// +// <div class="field range"> +// <label for="range" class="label"><span>Range field with an addon after input</span></label> +// <div class="control"> +// <div class="range price fields group group-2"> +// <div class="field no-label"> +// <div class="control"> +// <input type="text" class="input-text" value="" name="range[from]"> +// </div> +// </div> +// <div class="field with-addon no-label"> +// <div class="control"> +// <div class="addon"> +// <input type="text" class="input-text" value="" name="range[to]"> +// <label for="price_to" class="addafter">USD</label> +// </div> +// </div> +// </div> +// </div> +// </div> +// </div> +// +// <div class="field date"> +// <label for="date" class="label"><span>Date range field with calendar</span></label> +// <div class="control"> +// <div class="dates fields"> +// <div class="field date no-label"> +// <div class="control"> +// <input type="text" class="input-text" value="" name="date[from]" id="date_from"> +// </div> +// </div> +// <div class="field date no-label"> +// <div class="control"> +// <input type="text" class="input-text" value="" name="date[to]" id="date_to"> +// </div> +// </div> +// </div> +// </div> +// </div> +// +// <div class="field file"> +// <label for="file" class="label"><span>File field</span></label> +// <div class="control"> +// <input type="file" class="input-text" value="" name="file"> +// </div> +// </div> +// +// <div class="field choice"> +// <input type="radio" class="radio" checked="" value="1" name="inputRadio"> +// <label for="inputRadio" class="label"><span>Radiobutton choice</span></label> +// </div> +// +// <div class="field choice"> +// <input type="checkbox" class="checkbox" value="1" name="inputCheckbox"> +// <label for="inputCheckbox" class="label"><span>Checkbox choice</span></label> +// </div> +// +// <div class="field region"> +// <label for="select" class="label"><span>Select</span></label> +// <div class="control"> +// <select name="select"> +// <option value="">Please select</option> +// <option value="5">5</option> +// <option value="10">10</option> +// <option value="15">15</option> +// <option value="20">20</option> +// </select> +// </div> +// </div> +// +// <div class="field multiselect"> +// <label for="select" class="label"><span>Multiple select</span></label> +// <div class="control"> +// <select name="select" class="multiple" multiple="multiple"> +// <option value="Option 1">Option 1</option> +// <option value="Option 2">Option 2</option> +// <option value="Option 3">Option 3</option> +// <option value="Option 4">Option 4</option> +// <option value="Option 5">Option 5</option> +// <option value="Option 6">Option 6</option> +// <option value="Option 7">Option 7</option> +// </select> +// </div> +// </div> +// +// <div class="field textarea"> +// <label for="textarea" class="label"><span>Textarea</span></label> +// <div class="control"> +// <textarea rows="3" cols="5" class="input-text" name="textarea"></textarea> +// </div> +// </div> +// </fieldset> +// +// <div class="actions"> +// <input type="submit" class="action submit" value="Input type='Submit'" name="action_submit"> +// <input type="button" class="action button" value="Input type='button'" name="action_button"> +// <input type="reset" class="action reset" value="Input type='reset'" name="action_reset"> +// </div> +// <span class="please-wait load indicator" id="billing-please-wait"> +// <span>Loading indicator...</span> +// </span> +// </form> +// ``` +// + +.form { + .actions { + margin-right: 10px; + text-align: right; + } +} + +.fieldset { + .formFieldset(); + > .field { + .formField(); + } + .fields.range { + .field { + display: inline-block; + letter-spacing: normal; + margin: 0; + vertical-align: top; + word-spacing: normal; + &:first-child { + .control { + .box-sizing(); + padding-right: 30px; + &:after { + content: '\2014'; + display: inline-block; + margin-right: -30px; + text-align: center; + width: 29px; + } + } + input { + width: 98%; + } + } + } + } + .fields.dates { + .field { + display: inline-block; + letter-spacing: normal; + margin: 0 25px 0 0; + padding: 0 34px 0 0; + position: relative; + vertical-align: top; + &:first-child { + margin: 0 30px 0 0; + .control { + .box-sizing(); + &:after { + content: '\2014'; + display: inline-block; + position: absolute; + right: -39px; + top: 7px; + width: 29px; + } + } + } + .ui-datepicker-trigger { + text-decoration: none; + position: absolute; + right: 0; + top: 9px; + &:extend(.button.link all); + } + } + } +} + +input[type="text"], +input[type="search"], +input[type="tel"], +input[type="url"], +input[type="email"], +input[type="datetime"], +input[type="password"] { + .inputText(); +} + +input[type="submit"], +input[type="button"] { + &:extend(.primary.action all); +} + +input[type="reset"] { + &:extend(.secondary.action all); +} + +select { + .controlStyling(); + padding: 5px 10px 4px; + &.multiselect { + height: auto; + } +} + +textarea { + .controlStyling(); + height: auto; + line-height: 1.2; + min-height: 4.8em; + padding: 10px; + resize: vertical; +} + +// #Form validation +// Required field marked with '*' symbol +// +// Validation passed hilighting +// +// Validation error hilight and validation error message +// +// '* Required fields' text +// +// ```html +// <form class="form validation" data-hasrequired="* Required Fields"> +// <fieldset class="fieldset"> +// <div class="field text2 required"> +// <label for="text2" class="label"><span>Required text field</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="text2"> +// </div> +// </div> +// +// <div class="field text3 required"> +// <label for="text3" class="label"><span>Required text field, validation is passed</span></label> +// <div class="control valid"> +// <input type="text" class="input-text valid" value="" name="text3"> +// </div> +// </div> +// +// <div class="field text4 required"> +// <label for="text4" class="label"><span>Required text field, validation is not passed</span></label> +// <div class="control mage-error"> +// <input type="text" class="input-text mage-error" value="" name="text4"> +// <div for="name" generated="true" class="mage-error">This is a required field.</div> +// </div> +// </div> +// </fieldset> +// </form> +// ``` +// + +.fieldset { + // Validation passed + textarea.valid, + select.valid, + input[type="text"].valid, + input[type="search"].valid, + input[type="tel"].valid, + input[type="url"].valid, + input[type="email"].valid, + input[type="datetime"].valid, + input[type="password"].valid { + border-color: @validHilight !important; + } + // Validation error + textarea.mage-error, + select.mage-error, + input[type="text"].mage-error, + input[type="search"].mage-error, + input[type="tel"].mage-error, + input[type="url"].mage-error, + input[type="email"].mage-error, + input[type="datetime"].mage-error, + input[type="password"].mage-error { + border-color: @nonValidHilight !important; + } + div.mage-error[generated] { + color: @nonValidHilight !important; + font-size: @baseFontSizeMiddle; + padding-top: 4px; + } +} + +.form.validation { + .fieldset { + margin: 20px 0; + } + &:extend(.hasRequired all); +} + +// #Form fields arranged to columns +// +// ```html +// <form class="form settings"> +// <fieldset class="fieldset"> +// <legend class="legend"><span>Some Settings</span></legend> +// <br> +// +// <div class="field text1"> +// <label for="text1" class="label"><span>Text field 1</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="text1"> +// </div> +// </div> +// +// <div class="field text2"> +// <label for="text2" class="label"><span>Text field 2</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="text2"> +// </div> +// </div> +// +// <div class="field text3"> +// <label for="text3" class="label"><span>Text field 3</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="text3"> +// </div> +// </div> +// +// <div class="field text4"> +// <label for="text4" class="label"><span>Text field 4</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="text4"> +// </div> +// </div> +// +// <div class="field text5"> +// <label for="text5" class="label"><span>Text field 5</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="text5"> +// </div> +// <div class="nested"> +// <div class="field additional"> +// <div class="control"> +// <input type="text" class="input-text" value="" name="text5_1"> +// </div> +// </div> +// </div> +// </div> +// +// <div class="field select"> +// <label for="select" class="label"><span>Select</span></label> +// <div class="control"> +// <select title="Tax Class" class="multiselect" name="select"> +// <option value="">All</option> +// <option value="5">5</option> +// <option value="10">10</option> +// <option value="15">15</option> +// </select> +// </div> +// </div> +// +// <div class="field textarea"> +// <label for="textarea" class="label"><span>Textarea</span></label> +// <div class="control"> +// <textarea rows="3" cols="5" class="input-text" name="textarea"></textarea> +// <div class="note">Please enter your message here</div> +// </div> +// </div> +// +// <div class="field multiselect"> +// <label for="multiselect" class="label"><span>Multiple select</span></label> +// <div class="control"> +// <select multiple="multiple" class="multiselect" name="multiselect"> +// <option value="Option 1">Option 1</option> +// <option value="Option 2">Option 2</option> +// <option value="Option 3">Option 3</option> +// <option value="Option 4">Option 4</option> +// <option value="Option 5">Option 5</option> +// <option value="Option 6">Option 6</option> +// <option value="Option 7">Option 7</option> +// </select> +// </div> +// </div> +// </fieldset> +// <div class="actions"> +// <button class="action submit" type="submit"><span>Submit</span></button> +// </div> +// </form> +// ``` +// + +.form.settings { + .formCols(); + .action.submit { + &:extend(.primary.action all); + } +} + +// #Datepicker custom styles +@datepickerArrows : @secondary1; +@datepickerArrowsHover : darken(@datepickerArrows, 10%); +@datepickerTextColor : #000; +@datepickerBg : #efefef; +@datepickerBorder : #fff; +@datepickerShadow : rgba(0, 0, 0, 0.35); +@datepickerCalendarBg : #fff; +@datepickerCalendarBorder : #cfcfcf; +@datepickerCalendarHover : #f9eae7; +@datepickerCalendarToday : #f3d7d2; +@datepickerCalendarActive : lighten(@secondary1, 20%); +@datepickerDisabledBg : #f9f9f9; +@datepickerDisable : #959595; + +.ui-datepicker { + background: @datepickerBg; + border: 4px solid @datepickerBorder; + box-shadow: 5px 5px 10px 0 @datepickerShadow; + .box-sizing(); + display: none; + padding: 15px; + width: auto; + z-index: 999999 !important; + .ui-datepicker-header { + position: relative; + padding: .2em 0; + } + .ui-datepicker-prev, + .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; + cursor: pointer; + span { + border: solid; + display: block; + font-size: 0; + margin-top: -5px; + position: absolute; + left: 50%; + top: 50%; + width: 0; + height: 0; + } + } + .ui-datepicker-prev { + left: 2px; + span { + margin-left: -8px; + border-width: 5px 8px 5px 0; + border-color: transparent @datepickerArrows transparent transparent; + } + &.ui-datepicker-prev-hover span { + border-color: transparent @datepickerArrowsHover transparent transparent; + } + } + .ui-datepicker-next { + right: 2px; + span { + margin-left: 0; + border-width: 5px 0 5px 8px; + border-color: transparent transparent transparent @datepickerArrows; + } + &.ui-datepicker-next-hover span { + border-color: transparent transparent transparent @datepickerArrowsHover; + } + } + .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; + select { + margin: 1px 0; + padding: 0; + } + .ui-datepicker-month, + .ui-datepicker-year { + width: 47%; + } + .ui-datepicker-month { + margin-right: 6%; + } + .ui-datepicker-month-year { + width: 100%; + } + } + table { + width: 100%; + font-size: @baseFontSizeMiddle; + } + th { + font-size: @baseFontSizeMiddle; + } + td { + padding: 0; + } + td span, + td a { + color: @datepickerTextColor; + display: block; + line-height: 14px; + padding: 4px; + text-align: right; + text-decoration: none; + } + .ui-datepicker-buttonpane { + overflow: hidden; + padding-top: 10px; + button { + float: right; + &.ui-datepicker-current { + float: left; + } + } + } + .ui-datepicker-calendar { + background: @datepickerCalendarBg; + border: 1px solid @datepickerCalendarBorder; + th { + background: @datepickerBg; + border: 1px solid @datepickerCalendarBorder; + padding: 4px; + text-transform: uppercase; + } + td { + border: 1px solid @datepickerCalendarBorder; + } + td a { + padding: 4px; + display: block; + } + td .ui-state-hover:hover { + background: @datepickerCalendarHover; + } + .ui-datepicker-week-col { + text-align: center; + border: 1px solid @datepickerCalendarBorder; + } + .ui-datepicker-today { + background: @datepickerCalendarToday; + } + .ui-state-active { + background: @datepickerCalendarActive; + } + .ui-state-disabled { + background: @datepickerDisabledBg; + span { + color: @datepickerDisable; + } + } + } +} + +.ui-datepicker-rtl { + direction: rtl; + .ui-datepicker-prev { + right: 2px; + left: auto; + &:hover { + right: 1px; + left: auto; + } + } + .ui-datepicker-next { + left: 2px; + right: auto; + &:hover { + left: 1px; + right: auto; + } + } + .ui-datepicker-buttonpane { + clear: right; + button { + float: left; + &.ui-datepicker-current { + float: right; + } + } + } + .ui-datepicker-group { + float: right; + } + .ui-datepicker-group-last .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; + } + .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; + } +} + +.ui-timepicker-div { + padding: 10px 0 5px 0; + .ui-widget-header { + margin-bottom: 8px; + } + dl { + text-align: left; + dt { + height: 25px; + margin-bottom: -22px; + } + dd { + margin: 0 10px 10px 65px; + } + .ui_tpicker_time_label { + margin-bottom: -25px; + } + } + td { + font-size: 90%; + } +} + +.ui-tpicker-grid-label { + background: none; + border: none; + margin: 0; + padding: 0; +} + +.ui-slider { + position: relative; + text-align: left; + .ui-slider-handle { + position: absolute; + z-index: 2; + cursor: default; + } +} + +.ui-slider-horizontal { + border-radius: 10px; + border: none; + background: @datepickerBg; + height: 10px; + .ui-slider-handle { + margin-left: -5px; + height: 10px; + width: 10px; + border-radius: 10px; + background: @datepickerArrows; + display: block; + position: absolute; + } +} \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/less/lib/grids.less b/app/design/frontend/magento_plushe/less/lib/grids.less new file mode 100644 index 00000000000..1af1730f683 --- /dev/null +++ b/app/design/frontend/magento_plushe/less/lib/grids.less @@ -0,0 +1,384 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ + +// # 1. Grid using floated columns +// Full documentation about grid usage: https://github.com/clearleft/clearless#grids +// +// # 1.1 One column +// +// ```html +// <div class="clearlessgrid1 gridwrapper"> +// <div class="grid-1">column</div> +// </div> +// ``` +// + +.clearlessgrid1 { + .column-wrapper(); + > .grid-1 { + .column(); + .span(12); + .end-column(); + } +} + +// # 1.2 One main column and one right sidebar +// +// ```html +// <div class="clearlessgrid2 gridwrapper"> +// <div class="main">column</div> +// <div class="sidebar">column</div> +// </div> +// ``` +// + +.clearlessgrid2 { + .column-wrapper(); + .main { + .column(); + .span(9); + } + .sidebar { + .column(); + .span(3); + .end-column(); + } +} + +// # 1.3 One main column and one left sidebar +// +// ```html +// <div class="clearlessgrid3 gridwrapper"> +// <div class="sidebar">column</div> +// <div class="main">column</div> +// </div> +// ``` +// + +.clearlessgrid3 { + .column-wrapper(); + .main { + .column(); + .span(9); + .end-column(); + } + .sidebar { + .column(); + .span(3); + } +} + +// # 1.4 One main column and two sidebars +// +// ```html +// <div class="clearlessgrid4 gridwrapper"> +// <div class="sidebar1">column</div> +// <div class="main">column</div> +// <div class="sidebar2">column</div> +// </div> +// ``` +// + +.clearlessgrid4 { + .column-wrapper(); + .main { + .column(); + .span(6); + } + .sidebar1, + .sidebar2 { + .column(); + .span(3); + } + .sidebar2 { + .end-column(); + } +} + +// # 1.5 Four columns +// +// ```html +// <div class="clearlessgrid5 gridwrapper"> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// </div> +// ``` +// + +.clearlessgrid5 { + .column-wrapper(); + > .grid-1 { + .column(); + .span(3); + &:last-child { + .end-column(); + } + } +} + +// # 1.6 Six columns +// +// ```html +// <div class="clearlessgrid6 gridwrapper"> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// </div> +// ``` +// + +.clearlessgrid6 { + .column-wrapper(); + > .grid-1 { + .column(); + .span(2); + &:last-child { + .end-column(); + } + } +} + +// # 1.7 Twelve columns +// +// ```html +// <div class="clearlessgrid12 gridwrapper"> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// </div> +// ``` +// + +.clearlessgrid12 { + .column-wrapper(); + > .grid-1 { + .column(); + .span(1); + &:last-child { + .end-column(); + } + } +} + +// # 2. Grid columns using display: inline-block +// +// # 2.1 One column +// +// ```html +// <div class="inlinegrid1 inlinegridwrapper"> +// <div class="grid-1">column</div> +// </div> +// ``` +// + +.inlinegrid1 { + .inline-column-wrapper(); + > .grid-1 { + .inline-column(); + .span(12); + .inline-end-column(); + } +} + +// # 2.2 One main column and two right sidebar +// +// ```html +// <div class="inlinegrid2 inlinegridwrapper"> +// <div class="main">column</div> +// <div class="sidebar">column</div> +// </div> +// ``` +// + +.inlinegrid2 { + .inline-column-wrapper(); + .main { + .inline-column(); + .span(9); + } + .sidebar { + .inline-column(); + .span(3); + .inline-end-column(); + } +} + +// # 2.3 One main column and one left sidebar +// +// ```html +// <div class="inlinegrid3 inlinegridwrapper"> +// <div class="sidebar">column</div> +// <div class="main">column</div> +// </div> +// ``` +// + +.inlinegrid3 { + .inline-column-wrapper(); + .main { + .inline-column(); + .span(9); + .inline-end-column(); + } + .sidebar { + .inline-column(); + .span(3); + } +} + +// # 2.4 One main column and two sidebars +// +// ```html +// <div class="inlinegrid4 inlinegridwrapper"> +// <div class="sidebar1">column</div> +// <div class="main">column</div> +// <div class="sidebar2">column</div> +// </div> +// ``` +// + +.inlinegrid4 { + .inline-column-wrapper(); + .main { + .inline-column(); + .span(6); + } + .sidebar1, + .sidebar2 { + .inline-column(); + .span(3); + } + .sidebar2 { + .inline-end-column(); + } +} + +// # 2.5 Four columns +// +// ```html +// <div class="inlinegrid5 inlinegridwrapper"> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// </div> +// ``` +// + +.inlinegrid5 { + .inline-column-wrapper(); + > .grid-1 { + .inline-column(); + .span(3); + &:last-child { + .inline-end-column(); + } + } +} + +// # 2.6 Six columns +// +// ```html +// <div class="inlinegrid6 inlinegridwrapper"> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// </div> +// ``` +// + +.inlinegrid6 { + .inline-column-wrapper(); + > .grid-1 { + .inline-column(); + .span(2); + &:last-child { + .inline-end-column(); + } + } +} + +// # 2.7 Twelve columns +// +// ```html +// <div class="inlinegrid12 inlinegridwrapper"> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// <div class="grid-1">column</div> +// </div> +// ``` +// + +.inlinegrid12 { + .inline-column-wrapper(); + > .grid-1 { + .inline-column(); + .span(1); + &:last-child { + .inline-end-column(); + } + } +} + +// #Common settings + +@total-columns: 12; +@column-width: 60px; +@gutter-width: 20px; + +.gridwrapper > div, +.inlinegridwrapper > div { + background: #e5e5e5; + border: 1px solid #999; + padding: 5px 0; + text-align: center; + .box-sizing(); +} diff --git a/app/design/frontend/magento_plushe/less/lib/icons.less b/app/design/frontend/magento_plushe/less/lib/icons.less new file mode 100644 index 00000000000..6fde9816210 --- /dev/null +++ b/app/design/frontend/magento_plushe/less/lib/icons.less @@ -0,0 +1,205 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ + +// # Icons +// ``` +// <span class="icon example" data-icon="">@icon-pencil</span> +// <span class="icon example" data-icon="">@icon-menu</span> +// <span class="icon example" data-icon="">@icon-location</span> +// <span class="icon example" data-icon="">@icon-info</span> +// <span class="icon example" data-icon="">@icon-flag</span> +// <span class="icon example" data-icon="">@icon-expand</span> +// <span class="icon example" data-icon="">@icon-exclamation</span> +// <span class="icon example" data-icon="">@icon-dropdown</span> +// <span class="icon example" data-icon="">@icon-collapse</span> +// <span class="icon example" data-icon="">@icon-close-thick</span> +// <span class="icon example" data-icon="">@icon-checkmark</span> +// <span class="icon example" data-icon="">@icon-cart</span> +// <span class="icon example" data-icon="">@icon-arrow-up-thin</span> +// <span class="icon example" data-icon="">@icon-arrow-right-thin</span> +// <span class="icon example" data-icon="">@icon-arrow-left-thin</span> +// <span class="icon example" data-icon="">@icon-arrow-down-thin</span> +// <span class="icon example" data-icon="">@icon-arrow-up-thick</span> +// <span class="icon example" data-icon="">@icon-arrow-right-thick</span> +// <span class="icon example" data-icon="">@icon-arrow-left-thick</span> +// <span class="icon example" data-icon="">@icon-arrow-down-thick</span> +// <span class="icon example" data-icon="">@icon-wishlist</span> +// <span class="icon example" data-icon="">@icon-comment</span> +// <span class="icon example" data-icon="">@icon-comment-reflected</span> +// <span class="icon example" data-icon="">@icon-list</span> +// <span class="icon example" data-icon="">@icon-grid</span> +// <span class="icon example" data-icon="">@icon-close-thin</span> +// <span class="icon example" data-icon="">@icon-trash</span> +// <span class="icon example" data-icon="">@icon-envelope</span> +// <span class="icon example" data-icon="">@icon-magnifying-glass</span> +// <span class="icon example" data-icon="">@icon-arrow-right-filled</span> +// <span class="icon example" data-icon="">@icon-arrow-bottom-filled</span> +// <span class="icon example" data-icon="">@icon-arrow-left-filled</span> +// <span class="icon example" data-icon="">@icon-arrow-up-filled</span> +// <span class="icon example" data-icon="">@icon-star</span> +// <span class="icon example" data-icon="">@icon-calendar</span> +// ``` + +@icon-pencil: "\e006"; +@icon-menu: "\e007"; +@icon-location: "\e008"; +@icon-info: "\e00a"; +@icon-flag: "\e00c"; +@icon-expand: "\e00d"; +@icon-exclamation: "\e00e"; +@icon-dropdown: "\e010"; +@icon-collapse: "\e011"; +@icon-close-thick: "\e012"; +@icon-checkmark: "\e013"; +@icon-cart: "\e014"; +@icon-arrow-up-thin: "\e015"; +@icon-arrow-right-thin: "\e016"; +@icon-arrow-left-thin: "\e017"; +@icon-arrow-down-thin: "\e018"; +@icon-arrow-up-thick: "\e019"; +@icon-arrow-right-thick: "\e01a"; +@icon-arrow-left-thick: "\e01b"; +@icon-arrow-down-thick: "\e01c"; +@icon-wishlist: "\e01d"; +@icon-comment: "\e01e"; +@icon-comment-reflected: "\e01f"; +@icon-list: "\e002"; +@icon-grid: "\e003"; +@icon-close-thin: "\e004"; +@icon-trash: "\e000"; +@icon-envelope: "\e001"; +@icon-magnifying-glass: "\e005"; +@icon-arrow-right-filled: "\e02b"; +@icon-arrow-bottom-filled: "\e02c"; +@icon-arrow-left-filled: "\e02a"; +@icon-arrow-up-filled: "\e029"; +@icon-star: "\e009"; +@icon-calendar: "\e00b"; + +.example.icon { + display: inline-block; + margin: 0 0 16px; + width: 20%; + text-align: center; + .iconBefore("", 32px, 0 0 10px 0, 'icons'); + &:before { + content: attr(data-icon); + display: block; + } + &:hover { + color: @secondary2; + } +} + +// #iconBefore +//Add an icon *before* the specified element +// +//**.iconBefore(["content"], [height], [margin], ["font"]);** +// ``` +// <a class="action primary showcart1" href="#"><span>My Cart</span></a> +// ``` +.action.showcart1 { + .iconBefore(@icon-cart, 16px, 0 5px 0 0, "icons"); +} + +// #iconAfter +//Add an icon *after* the specified element +// +//**.iconAfter(["content"], [height], [margin], ["font"]);** +// ``` +// <a class="action showcart2" href="#"><span>My Cart</span></a> +// ``` +.action.showcart2 { + .iconAfter(@icon-cart, 16px, 0 0 0 10px, "icons"); +} + +// #iconHideText +//Hide the text to the specified element (not hide the icon) +// +//**.iconHideText([limitWidth]);** +// ``` +// <a class="action showcart3" href="#"><span>My Cart</span></a> +// ``` +.action.showcart3 { + .iconAfter(@icon-cart, 16px, 10px,"icons"); + .iconHideText(16px); +} + +//#Using mixin: +.iconBefore(@content: '', @size: 16px, @margin: 0 , @font: 'icons') { + &:before { + font-family: "@{font}"; + font-size: @size; + line-height: @size; + height: @size; + margin: @margin; + overflow: hidden; + content: @content; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; + } +} + +.iconAfter(@content: '', @size: 16px, @margin: 0 , @font: 'icons') { + &:after { + font-family: "@{font}"; + font-size: @size; + line-height: @size; + height: @size; + margin: @margin; + overflow: hidden; + content: @content; + font-style: normal; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + vertical-align: middle; + text-align: center; + } +} + +.iconHideText(@limitWidth: 16px) { + width: @limitWidth; + display: block; + line-height: 0; + white-space: nowrap; + vertical-align: middle; + text-align: center; + text-indent: -999em; + &:active { + outline: 0; + } + &:after { + text-indent: 0; + display: block; + margin: 0; + } +} diff --git a/app/design/frontend/magento_plushe/less/lib/messages.less b/app/design/frontend/magento_plushe/less/lib/messages.less new file mode 100644 index 00000000000..b48940c5dc9 --- /dev/null +++ b/app/design/frontend/magento_plushe/less/lib/messages.less @@ -0,0 +1,214 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ + +// #Messages - base styles + +ul.messages { + .resetList(); +} + +.message.base { + display: block; + .clearfix(); + padding: 13px 60px 12px 20px; + margin: 3px 0 3px; + border-radius: 3px; + position: relative; + line-height: 16px; + z-index: 1; + &:before { + content: ''; + position: absolute; + width: 31px; + text-align: center; + right: 0; + top: 0; + height: 100%; + display: block; + padding: 0; + border-radius: 3px; + z-index: 1; + } + > *:first-child:before { + content: ''; + .arrow(left, 5px, @messageNoticeIconBg); + position: absolute; + overflow: hidden; + top: 50%; + margin-top: -3px; + right: 31px; + z-index: 2; + } + > *:first-child:after { + font-family: "icons"; + color: @messageIconColor; + font-size: 20px; + line-height: 20px; + position: absolute; + top: 50%; + right: 0; + margin-top: -10px; + width: 31px; + text-align: center; + display: block; + z-index: 3; + } + ul { + .resetList(); + } + li { + margin-top: 5px; + + &:first-child { + margin-top: 0; + } + } +} + +// # Error messages +// +// ```html +// <ul class="messages"> +// <li class="error-msg"> +// <ul> +// <li><span>Oh snap! Change a few things up and try submitting again.</span></li> +// </ul> +// </li> +// </ul> +// ``` +// + +.message.error { + &:extend(.message.base all); + background: @messageErrorBg; + color: @messageErrorColor; + &:before { + background: @messageErrorIconBg; + } + > *:first-child:before { + border-right-color: @messageErrorIconBg; + } + > *:first-child:after { + content: @icon-exclamation; + } +} + +.error-msg { + &:extend(.message.error all); +} + +// # Success messages +// +// ```html +// <ul class="messages"> +// <li class="success-msg"> +// <ul> +// <li><span>Well done! You successfully read this important alert message.</span></li> +// </ul> +// </li> +// </ul> +// ``` +// + +.message.success { + &:extend(.message.base all); + background: @messageSuccessBg; + color: @messageSuccessColor; + &:before { + background: @messageSuccessIconBg; + } + > *:first-child:before { + border-right-color: @messageSuccessIconBg; + } + > *:first-child:after { + content: @icon-checkmark; + } +} + +.success-msg { + &:extend(.message.success all); +} + +// # Notice messages +// +// ```html +// <ul class="messages"> +// <li class="notice-msg"> +// <ul> +// <li><span>Heads up! This alert needs your attention, but it's not super important.</span></li> +// </ul> +// </li> +// </ul> +// ``` +// + +.message.notice { + &:extend(.message.base all); + background: @messageNoticeBg; + color: @messageNoticeColor; + &:before { + background: @messageNoticeIconBg; + } + > *:first-child:before { + border-right-color: @messageNoticeIconBg; + } + > *:first-child:after { + content: @icon-info; + } +} + +.notice-msg, +.note-msg { + &:extend(.message.notice all); +} + +// # Customized info message +// +// ```html +// <div class="message info"> +// <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> +// </div> +// ``` +// + +.message.info { + &:extend(.message.base all); + background: @messageNoticeBg; + color: @messageNoticeColor; + border: 1px solid darken(@messageNoticeBg, 10%); + .box-sizing(); + &:before { + background: @messageNoticeIconBg; + top: -2px; + height: auto; + bottom: -2px; + } + > *:first-child:before { + border-right-color: @messageNoticeIconBg; + } + > *:first-child:after { + content: @icon-info; + } +} \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/less/lib/navigation.less b/app/design/frontend/magento_plushe/less/lib/navigation.less new file mode 100644 index 00000000000..5c1f1cbf41e --- /dev/null +++ b/app/design/frontend/magento_plushe/less/lib/navigation.less @@ -0,0 +1,658 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ + +// # Navigation +// +// +// ```html +//<div class="header"></div> +//<nav class="navigation" data-role="navigation" data-mage-init="{ navigationMenu: { submenuContiniumEffect: false } }"> +// <ul> +// <li class="level0 nav-1 first level-top parent"><a href="http://m2.loc/index.php/ewr.html" class="level-top"><span> First level 1 </span></a> +// <div class="submenu"> +// <ul class="level0"> +// <li class="column"> +// <ul> +// <li class="level1 nav-1-1 first parent"><a href="http://m2.loc/index.php/ewr/subcategory-1.html"><span> Subcategory 1 </span></a> +// <div class="submenu"> +// <ul class="level1"> +// <li class="level2 nav-1-1-1 first"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-1.html"><span> Third level 1 </span></a></li> +// <li class="level2 nav-1-1-2 parent"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-2.html"><span> Third level 2 </span></a> +// <div class="submenu"> +// <ul class="level2"> +// <li class="level3 nav-1-1-2-1 first"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-2/fourth-level-1.html"><span> Fourth level 1 </span></a></li> +// <li class="level3 nav-1-1-2-2"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-2/fourth-level-2.html"><span> Fourth level 2 </span></a></li> +// <li class="level3 nav-1-1-2-3"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-2/fourth-level-3.html"><span> Fourth level 3 </span></a></li> +// <li class="level3 nav-1-1-2-4 last"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-2/fourth-level-4.html"><span> Fourth level 4 </span></a></li> +// </ul> +// </div> +// </li> +// <li class="level2 nav-1-1-3 parent"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-3.html"><span> Third level 3 </span></a> +// <div class="submenu"> +// <ul class="level2"> +// <li class="level3 nav-1-1-3-1 first"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-3/fourth-level-1.html"><span> Fourth level 1 </span></a></li> +// <li class="level3 nav-1-1-3-2 last"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-3/fourth-level-2.html"><span> Fourth level 2 </span></a></li> +// </ul> +// </div> +// </li> +// <li class="level2 nav-1-1-4"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-4.html"><span> Third level 4 </span></a></li> +// <li class="level2 nav-1-1-5"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-5.html"><span> Third level 5 </span></a></li> +// <li class="level2 nav-1-1-6"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-6.html"><span> Third level 6 </span></a></li> +// <li class="level2 nav-1-1-7"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-7.html"><span> Third level 7 </span></a></li> +// <li class="level2 nav-1-1-8"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-8.html"><span> Third level 8 </span></a></li> +// <li class="level2 nav-1-1-9"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-9.html"><span> Third level 9 </span></a></li> +// <li class="level2 nav-1-1-10"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-10.html"><span> Third level 10 </span></a></li> +// <li class="level2 nav-1-1-11 last"><a href="http://m2.loc/index.php/ewr/subcategory-1/third-level-11.html"><span> Third level 11 </span></a></li> +// </ul> +// </div> +// </li> +// </ul> +// </li> +// <li class="column"> +// <ul> +// <li class="level1 nav-1-2 parent"><a href="http://m2.loc/index.php/ewr/subcategory-2.html"><span> Subcategory 2 </span></a> +// <div class="submenu"> +// <ul class="level1"> +// <li class="level2 nav-1-2-1 first"><a href="http://m2.loc/index.php/ewr/subcategory-2/third-level-1.html"><span> Third level 1 </span></a></li> +// <li class="level2 nav-1-2-2"><a href="http://m2.loc/index.php/ewr/subcategory-2/third-level-2.html"><span> Third level 2 </span></a></li> +// <li class="level2 nav-1-2-3"><a href="http://m2.loc/index.php/ewr/subcategory-2/third-level-3.html"><span> Third level 3 </span></a></li> +// <li class="level2 nav-1-2-4"><a href="http://m2.loc/index.php/ewr/subcategory-2/third-level-4.html"><span> Third level 4 </span></a></li> +// <li class="level2 nav-1-2-5 last"><a href="http://m2.loc/index.php/ewr/subcategory-2/third-level-5.html"><span> Third level 5 </span></a></li> +// </ul> +// </div> +// </li> +// </ul> +// </li> +// <li class="column"> +// <ul> +// <li class="level1 nav-1-3"><a href="http://m2.loc/index.php/ewr/subcategory-3.html"><span> Subcategory 3 </span></a></li> +// </ul> +// </li> +// <li class="column"> +// <ul> +// <li class="level1 nav-1-4"><a href="http://m2.loc/index.php/ewr/subcategory-4.html"><span> Subcategory 4 </span></a></li> +// </ul> +// </li> +// <li class="column"> +// <ul> +// <li class="level1 nav-1-5"><a href="http://m2.loc/index.php/ewr/subcategory-5.html"><span> Subcategory 5 </span></a></li> +// </ul> +// </li> +// <li class="column"> +// <ul> +// <li class="level1 nav-1-6 last parent"><a href="http://m2.loc/index.php/ewr/subcategory-6.html"><span> Subcategory 6 </span></a> +// <div class="submenu"> +// <ul class="level1"> +// <li class="level2 nav-1-6-1 first"><a href="http://m2.loc/index.php/ewr/subcategory-6/third-level-1.html"><span> Third level 1 </span></a></li> +// <li class="level2 nav-1-6-2"><a href="http://m2.loc/index.php/ewr/subcategory-6/third-level-2.html"><span> Third level 2 </span></a></li> +// <li class="level2 nav-1-6-3"><a href="http://m2.loc/index.php/ewr/subcategory-6/third-level-3.html"><span> Third level 3 </span></a></li> +// <li class="level2 nav-1-6-4"><a href="http://m2.loc/index.php/ewr/subcategory-6/third-level-4.html"><span> Third level 4 </span></a></li> +// <li class="level2 nav-1-6-5"><a href="http://m2.loc/index.php/ewr/subcategory-6/third-level-5.html"><span> Third level 5 </span></a></li> +// <li class="level2 nav-1-6-6"><a href="http://m2.loc/index.php/ewr/subcategory-6/third-level-6.html"><span> Third level 6 </span></a></li> +// <li class="level2 nav-1-6-7 last"><a href="http://m2.loc/index.php/ewr/subcategory-6/third-level-7.html"><span> Third level 7 </span></a></li> +// </ul> +// </div> +// </li> +// </ul> +// </li> +// </ul> +// </div> +// </li> +// <li class="level0 nav-2 level-top parent"><a href="http://m2.loc/index.php/123456.html" class="level-top"><span> First level 2 </span></a> +// <div class="submenu"> +// <ul class="level0"> +// <li class="column"> +// <ul> +// <li class="level1 nav-2-1 first"><a href="http://m2.loc/index.php/123456/subcategory-1.html"><span> Subcategory 1 </span></a></li> +// </ul> +// </li> +// <li class="column"> +// <ul> +// <li class="level1 nav-2-2"><a href="http://m2.loc/index.php/123456/subcategory-2.html"><span> Subcategory 2 </span></a></li> +// </ul> +// </li> +// <li class="column"> +// <ul> +// <li class="level1 nav-2-3 last"><a href="http://m2.loc/index.php/123456/subcategory-3.html"><span> Subcategory 3 </span></a></li> +// </ul> +// </li> +// </ul> +// </div> +// </li> +// <li class="level0 nav-3 level-top parent"><a href="http://m2.loc/index.php/first-level-3.html" class="level-top"><span> First level 3 </span></a> +// <div class="submenu"> +// <ul class="level0"> +// <li class="column"> +// <ul> +// <li class="level1 nav-3-1 first"><a href="http://m2.loc/index.php/first-level-3/subcategory-1.html"><span> Subcategory 1 </span></a></li> +// </ul> +// </li> +// <li class="column"> +// <ul> +// <li class="level1 nav-3-2"><a href="http://m2.loc/index.php/first-level-3/subcategory-2.html"><span> Subcategory 2 </span></a></li> +// </ul> +// </li> +// <li class="column"> +// <ul> +// <li class="level1 nav-3-3"><a href="http://m2.loc/index.php/first-level-3/subcategory-3.html"><span> Subcategory 3 </span></a></li> +// </ul> +// </li> +// <li class="column"> +// <ul> +// <li class="level1 nav-3-4"><a href="http://m2.loc/index.php/first-level-3/subcategory-4.html"><span> Subcategory 4 </span></a></li> +// </ul> +// </li> +// <li class="column"> +// <ul> +// <li class="level1 nav-3-5 last"><a href="http://m2.loc/index.php/first-level-3/subcategory-5.html"><span> Subcategory 5 </span></a></li> +// </ul> +// </li> +// </ul> +// </div> +// </li> +// <li class="level0 nav-4 level-top"><a href="http://m2.loc/index.php/first-level-4.html" class="level-top"><span> First level 4 </span></a></li> +// <li class="level0 nav-5 level-top"><a href="http://m2.loc/index.php/first-level-5.html" class="level-top"><span> First level 5 </span></a></li> +// <li class="level0 nav-6 level-top"><a href="http://m2.loc/index.php/first-level-6.html" class="level-top"><span> First level 6 </span></a></li> +// <li class="level0 nav-7 level-top"><a href="http://m2.loc/index.php/first-level-7.html" class="level-top"><span> First level 7 </span></a></li> +// <li class="level0 nav-8 level-top"><a href="http://m2.loc/index.php/first-level-8.html" class="level-top"><span> First level 8 </span></a></li> +// <li class="level0 nav-9 level-top parent"><a href="http://m2.loc/index.php/first-level-4-1.html" class="level-top"><span> First level 9 </span></a> +// <div class="submenu"> +// <ul class="level0"> +// <li class="column"> +// <ul> +// <li class="level1 nav-9-1 first parent"><a href="http://m2.loc/index.php/first-level-4-1/subcategory-1.html"><span> Subcategory 1 </span></a> +// <div class="submenu"> +// <ul class="level1"> +// <li class="level2 nav-9-1-1 first"><a href="http://m2.loc/index.php/first-level-4-1/subcategory-1/third-level-1.html"><span> Third level 1 </span></a></li> +// <li class="level2 nav-9-1-2 parent"><a href="http://m2.loc/index.php/first-level-4-1/subcategory-1/third-level-2.html"><span> Third level 2 </span></a> +// <div class="submenu"> +// <ul class="level2"> +// <li class="level3 nav-9-1-2-1 first"><a href="http://m2.loc/index.php/first-level-4-1/subcategory-1/third-level-2/fourth-level-1.html"><span> Fourth level 1 </span></a></li> +// <li class="level3 nav-9-1-2-2 last"><a href="http://m2.loc/index.php/first-level-4-1/subcategory-1/third-level-2/fourth-level-2.html"><span> Fourth level 2 </span></a></li> +// </ul> +// </div> +// </li> +// <li class="level2 nav-9-1-3 last"><a href="http://m2.loc/index.php/first-level-4-1/subcategory-1/third-level-3.html"><span> Third level 3 </span></a></li> +// </ul> +// </div> +// </li> +// </ul> +// </li> +// <li class="column"> +// <ul> +// <li class="level1 nav-9-2"><a href="http://m2.loc/index.php/first-level-4-1/subcategory-2.html"><span> Subcategory 2 </span></a></li> +// </ul> +// </li> +// <li class="column"> +// <ul> +// <li class="level1 nav-9-3 last"><a href="http://m2.loc/index.php/first-level-4-1/subcategory-3.html"><span> Subcategory 3 </span></a></li> +// </ul> +// </li> +// </ul> +// </div> +// </li> +// <li class="level0 nav-10 level-top"><a href="http://m2.loc/index.php/first-level-10.html" class="level-top"><span> First level 10 </span></a></li> +// <li class="level0 nav-11 level-top"><a href="http://m2.loc/index.php/first-level-11.html" class="level-top"><span> First level 11 </span></a></li> +// <li class="level0 nav-12 level-top"><a href="http://m2.loc/index.php/first-level-12.html" class="level-top"><span> First level 12 </span></a></li> +// <li class="level0 nav-13 level-top"><a href="http://m2.loc/index.php/first-level-13.html" class="level-top"><span> First level 13 </span></a></li> +// <li class="level0 nav-14 level-top"><a href="http://m2.loc/index.php/first-level-14.html" class="level-top"><span> First level 14 </span></a></li> +// <li class="level0 nav-15 level-top"><a href="http://m2.loc/index.php/first-level-15.html" class="level-top"><span> First level 15 </span></a></li> +// <li class="level0 nav-16 level-top"><a href="http://m2.loc/index.php/first-level-16.html" class="level-top"><span> First level 16 </span></a></li> +// <li class="level0 nav-17 level-top"><a href="http://m2.loc/index.php/first-level-17.html" class="level-top"><span> First level 17 </span></a></li> +// </ul> +//</nav> +// ``` +// + +@subNavHeight: auto; +@subNavPadding: 45px; + +@navBg : @headerBg; +@navBgImage : @headerBgImage; + +.navigation { + background-color: @navBg; + background-image: @navBgImage; + background-repeat: repeat; + background-position: 0 0; + border-top: 1px solid; + .borderColorI(@navBg); + position: relative; + z-index: 2; + .clearfix(); + + > ul > .level-top { + display: inline-block; + line-height: 1.2; + vertical-align: top; + padding-right: 40px; + + &:last-child { + padding-right: 0; + } + + &.active { + > a:after { + opacity: 1; + border-bottom-color: @primary7; + } + } + + &.hover { + > a:after { + border-bottom-color: @primary1; + } + > .submenu { + border-bottom: 1px solid @primary3; + } + } + + &.hover, + &:hover { + > .submenu { + z-index: 2; + } + &:hover > a span, + &.parent.hover > a span, + &.parent > a span { + color: @primary6; + } + &:hover > a:after, + &.hover > a:after, + &.parent > a:after { + opacity: 1; + } + } + + &.more { + &:after { + cursor: pointer; + content: "\e010"; + font-family: "icons"; + font-size: 16px; + display: inline-block; + padding: .6em .7em 1em; + margin-top: 0.4em; + border-radius: 4px 4px 0 0; + position: relative; + z-index: 1; + } + + &.hover:after { + background: @primary1; + } + + li.level-top { + width: 200px; + margin: 0 0 0 -10px !important; + padding: 7px 10px 7px 30px; + > a { + font-size: 16px; + } + &.hover, + &:hover { + background: @primary1; + > a span { + color: @primary6; + } + &.parent { + .iconBefore(@content: @icon-arrow-right-thick, @margin: 0 8px 0 0, @font: "icons"); + &:before { + float: right; + color: @secondary1; + } + } + .submenu { + display: block !important; + } + } + > a span { + color: @primary5; + } + .submenu { + display: none; + } + > .submenu { + position: absolute; + right: 0; + padding: 0; + left: 0; + top: 0; + margin-left: 230px; + min-height: 100%; + background: @primary1; + .box-sizing(); + .box-shadow(0 10px 8px rgba(0,0,0,0.3)); + .no-boxshadow & { + border: 2px solid @primary3; + border-width: 0 2px 2px; + } + > ul { + background: @primary1; + position: relative; + z-index: 1; + padding: 10px; + } + } + } + > .submenu { + background: none; + border-width: 0; + > ul { + position: relative; + } + } + } + + > a { + position: relative; + display: inline-block; + vertical-align: top; + padding: 1em 0; + font-size: 16px; + text-align: center; + color: @primary5; + &:after { + opacity: 0; + content: ''; + overflow: hidden; + display: block; + position: absolute; + bottom: 0; + left: 50%; + zoom: 1; + z-index: 2; + color: @primary6; + .arrow(top, 10px, @primary1); + } + > span { + color: @primary5; + } + &:active span, + &:focus span { + color: @primary6; + } + &:active:after, + &:focus:after { + opacity: 1; + } + } + + > .submenu { + display: none; + position: absolute; + left: 0; + top: 100%; + background: @primary1; + width: 100%; + z-index: 1; + > ul { + height: @subNavHeight; + padding-top: @subNavPadding; + padding-bottom: @subNavPadding; + li.column { + .box-sizing( border-box ); + width: 25%; + display: inline-block; + padding-right: 30px; + vertical-align: top; + } + .level1 > a { + text-transform: uppercase; + } + .parent ul { + padding-left: 10px; + } + li { + margin: 8px 0; + &:fist-child { + margin-top: 0; + } + } + } + } + } +} + +@media only screen and (max-width: 640px) { + html { + height: 100%; + min-width: 0; + overflow: hidden; + } + + body { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + position: relative; + height: 100%; + width: 100%; + overflow: hidden; + &.opened { + .navigation { + left: 0; + } + .page.wrapper { + margin-right: -86%; + cursor: pointer; + } + } + } + + .page.wrapper { + position: relative; + width: 100%; + float: right; + margin: 0; + .transition(margin .3s ease-out 0); + } + + .navigationLink() { + & > a { + display: block; + padding: 10px 20px; + text-transform: none; + font-size: 20px; + font-weight: 600; + border-bottom: 1px solid @primary2; + color: @primary6; + text-align: left; + &:hover, + &:visited { + color: @primary6; + } + &:active { + background: #dbdcd7; + } + &:after { + border: 0; + } + } + } + + .navigationSubmenu() { + position: absolute; + display: block; + left: 100%; + top: 0; + width: 100%; + overflow-x: hidden; + background: @primary7; + .transition(left .3s ease-out 0); + &.opened { + left: 0; + z-index: 3; + } + > ul { + padding-top: 0; + padding-bottom: 0; + li { + margin: 0; + .navigationLink(); + } + li.column { + width: 100%; + display: block; + padding-right: 0; + } + .parent ul { + padding-left: 0; + } + } + } + + .navigation { + display: block; + position: absolute; + width: 86%; + left: -86%; + height: 100%; + background: @primary7; + overflow-x: hidden; + border-right: #b6b8af 1px solid; + .box-sizing(); + .transition(left .3s ease-out 0); + ul { + margin: 0; + padding: 0; + li.hidden { + display: none; + } + } + & > ul { + .transition(left .3s linear 0); + position: relative; + overflow: hidden; + > .level-top { + display: block; + padding: 0; + background: @primary7; + .navigationLink(); + &.parent { + &:after { + display: none; + } + > a { + position: relative; + .iconAfter(@content: @icon-arrow-right-thick, @size: 18px, @font: 'icons'); + text-transform: none !important; + &:after { + position: absolute; + width: 18px; + top: 12px; + right: 17px; + left: auto; + opacity: 1; + z-index: auto; + } + } + > .submenu { + .navigationSubmenu(); + } + } + + } + } + .action.back { + a { + background: @primary6; + position: relative; + color: @primary7 !important; + border-bottom-color: transparent; + cursor: pointer; + .iconBefore(@content: @icon-arrow-left-thick, @size: 18px, @font: 'icons'); + &:hover, + &:active, + &:visited { + color: @primary7 !important; + background: @primary6 !important; + } + &:before { + position: absolute; + top: 12px; + left: 3px; + } + span:before { + content: ""; + } + } + } + .parent { + &:after { + display: none; + } + > a { + position: relative; + .iconAfter(@content: @icon-arrow-right-thick, @size: 18px, @font: 'icons'); + &:after { + position: absolute; + width: 18px; + top: 16px; + right: 17px; + left: auto; + opacity: 1; + z-index: auto; + } + } + .submenu { + .navigationSubmenu(); + } + } + } + + .action.toggle.nav { + display: block; + margin-top: 19px; + position: absolute; + top: 0; + left: 20px; + font-size: 0; + .iconAfter(@content: @icon-menu, @size: 32px, @font: 'icons'); + .iconHideText(32px); + cursor: pointer; + &:before { + position: absolute; + width: 100%; + height: 100%; + left: -100%; + top: -20px; + padding: 20px 0; + content: ""; + } + .active-nav &:before { + position: fixed; + padding: 0; + left: 86%; + right: 0; + top: 0; + bottom: 0; + } + } + + .header { + padding: 0; + position: relative; + margin-bottom: 35px; + } +} diff --git a/app/design/frontend/magento_plushe/less/lib/sections.less b/app/design/frontend/magento_plushe/less/lib/sections.less new file mode 100644 index 00000000000..600060c2465 --- /dev/null +++ b/app/design/frontend/magento_plushe/less/lib/sections.less @@ -0,0 +1,203 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ + +.data-tabs() { + .clearfix(); + position: relative; + z-index: 1; + > .item.title { + float: left; + > .switch { + display: block; + position: relative; + top: 1px; + z-index: 2; + } + } + > .item.content { + width: 100%; + float: right; + margin-left: -100%; + display: none; + .box-sizing(); + &.active { + display: block; + } + } + + .tabs > .term-content.active { + border: 1px solid #BFBFBF; + color: hsl(0, 0%, 50%); + display: block; + } +} + +.data-tabs-styling() { + > .item.title { + margin-right: 1px; + min-height: 35px; + > .switch { + font-size: 14px; + line-height: 1; + font-weight: 600; + text-decoration: none; + padding: 11px 11px 8px; + border: 2px solid #e5e5e5; + background: rgba(0, 0, 0, 0.03); + border-bottom: none; + text-transform: uppercase; + border-radius: 4px 4px 0 0; + } + &:not(.disabled) > .switch:active, + &:not(.disabled) > .switch:focus, + &:not(.disabled) > .switch:hover, + &.active > .switch { + background: #fff; + border-width: 3px; + padding: 10px 10px 8px; + outline: none; + } + &.active > .switch { + padding: 10px 20px 11px !important; + } + } + > .item.content { + .clearfix; + margin-top: 36px; + padding: 20px; + &:before { + content: ''; + border-top: 3px solid #e5e5e5; + width: 100%; + display: block; + position: absolute; + left: 0; + .box-sizing(); + margin: -20px 0 20px; + } + } +} + +.data-accordion() { + > .item.title { + .box-sizing(); + width: 100%; + > .item.switch { + display: block; + } + } + > .item.content { + .clearfix(); + .box-sizing(); + display: none; + &.active { + display: block; + } + } +} + +.data-accordion-styling() { + margin: 0; + padding: 0; + > .item.title { + margin: 3px 0 0; + > .switch { + display: block; + font-size: 14px; + line-height: 1; + font-weight: 600; + text-decoration: none; + padding: 11px; + border: 2px solid #e5e5e5; + background: #f8f8f8; + text-transform: uppercase; + border-radius: 4px; + } + &:not(.disabled) > .switch:active, + &:not(.disabled) > .switch:focus, + &:not(.disabled) > .switch:hover, + &.active > .switch { + background: #fff; + border-width: 3px; + padding: 10px; + outline: none; + } + &.active > .switch { + border-radius: 4px 4px 0 0; + } + } + > .item.content { + margin: 0; + padding: 20px; + background: #fff; + } +} + +// # Sections +// +// ```html +// <dl class="product data items" data-sections="tabs"> +// <dt class="data item title active" data-section="title"> +// <a class="data switch" data-toggle="switch" href="#product.info.description">Details</a> +// </dt> +// <dd class="data item content active" id="product.info.description" data-section="content"> +// <p>Fit to be tied. Get the perfect level of lift in our Tie-front Tankini. Featuring removable padding and cup-specific sizes for support and shaping. From our Forever Sexy Swim collection of push-up tops and bottoms in sun-loving colors and prints.</p> +// <p>- Removable push-up padding<br>- Lined hidden underwire cups<br>- Front tie<br>- Adjustable straps can be worn classic or cross-back<br>- Available in two lengths: 17 3/4" and 18 3/4"<br>- Imported Italian nylon/Lycra® spandex</p> +// </dd> +// +// <dt class="data item title" data-section="title"> +// <a class="data switch" data-toggle="switch" href="#product_tags">Tags</a> +// </dt> +// <dd class="data item content" id="product_tags" data-section="content"> +// <p>A playful little push-up. Bring the lightweight lift and custom comfort of the Fabulous by Victoria’s Secret bra to the beach. This triangle top is finished with pretty ruching and a sweet center bow. From our fun, flirty Beach Sexy Swim Collection.</p> +// <p>- Ruched cups with center bow<br>- Push-up padding for extreme lift<br>- Underwire<br>- Ties at neck; looped back tie for adjustability and extra support<br>- Imported nylon/spandex</p> +// </dd> +// +// <dt class="data item title" data-section="title"> +// <a class="data switch" data-toggle="switch" href="#product_reviews">Reviews</a> +// </dt> +// <dd class="data item content" id="product_reviews" data-section="content"> +// <p>Relaxed elegance. The flowy fit of this halter tankini makes beach style a breeze. The built in bra top provides just the right amount of support. Look slimmer in seconds® in this figure-loving top designed exclusively for Victoria’s Secret.</p> +// <p>- Built-in bra with molded foam padding<br>- Halter straps tie at neck<br>- Imported nylon/spandex</p> +// </dd> +// </dl> +// ``` +// + +@media only screen +and (max-width : 99999px) { + .product.data { + .data-tabs(); + .data-tabs-styling(); + } +} + +@media only screen +and (max-width : 768px) { + .product.data { + .data-accordion(); + .data-accordion-styling(); + } +} \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/less/lib/snippets.less b/app/design/frontend/magento_plushe/less/lib/snippets.less new file mode 100644 index 00000000000..65ff1c139ac --- /dev/null +++ b/app/design/frontend/magento_plushe/less/lib/snippets.less @@ -0,0 +1,142 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ + +.resetList(@margin: 0, @padding: 0) { + padding: @padding; + margin: @margin; + list-style-type: none; + list-style-image: none; +} + +.borderColor (@color) when (lightness(@color) > 50%) { + border-color: darken(@color, 13%); +} + +.borderColor (@color) when (lightness(@color) =< 50%) { + border-color: lighten(@color, 13%); +} + +.borderColorI (@color) when (lightness(@color) > 50%) { + border-color: lighten(@color, 13%); +} + +.borderColorI (@color) when (lightness(@color) =< 50%) { + border-color: darken(@color, 13%); +} + +.pageWidth(@maxWidth: @LayoutMaxWidth, @minWidth: @LayoutMinWidth, @padding: 10px) { + padding-left: @padding; + padding-right: @padding; + margin: 0 auto; + min-width: (@minWidth - (2 * @padding)); + max-width: (@maxWidth - (2 * @padding)); +} + +.transitionDelay(@delay) { + -webkit-transition-delay: @delay; + -moz-transition-delay: @delay; + -ms-transition-delay: @delay; + -o-transition-delay: @delay; + transition-delay: @delay; +} + +.resetAction() { + border: none; + border-radius: 0; + background: none; + margin: 0; + padding: 0; + box-shadow: none; + text-shadow: none; + outline: none; +} + +.actionLink() { + display: inline; + color: @link; + text-decoration: none; + &:focus, + &:active, + &:hover { + color: @linkHover; + } +} + +.colorA(@c1, @c2) { + color: @c1; + > span { + color: @c1; + } + &:hover, + &:hover > span { + color: @c2; + } +} + +.fieldStyle() { + margin: 0 0 10px; + &:last-child { + margin-bottom: 0; + } + .nested { + .field { + margin: 5px 0; + } + padding: 0 0 0; + } +} + +.labelStyle() { + text-transform: uppercase; + font-weight: 600; + padding: 0 0 5px; +} + +.formInline(@labelWidth: 50%) { + > .field { + .clearfix(); + } + > .field > .control, + > .field > .label { + margin: 0; + float: left; + width: @labelWidth; + .box-sizing(); + } + > .field > .control { + width: 100% - @labelWidth; + } + > .field.no-label { + .control { + margin-left: @labelWidth; + } + } +} + +.profileBlockWithBg { + .box-sizing(); + background: @primary1; + padding: 30px; +} \ No newline at end of file diff --git a/app/design/frontend/magento_plushe/less/styles.less b/app/design/frontend/magento_plushe/less/styles.less new file mode 100644 index 00000000000..e9cdfbb7f61 --- /dev/null +++ b/app/design/frontend/magento_plushe/less/styles.less @@ -0,0 +1,5180 @@ +/** + * 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 design + * @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) + */ + +.normalize(); + +@import "clearless/all"; // import ClearLess +@import "styles/base"; +@import "lib/snippets"; +@import "lib/buttons"; +@import "lib/forms"; +@import "lib/grids"; +@import "lib/icons"; +@import "lib/messages"; +@import "lib/navigation"; +@import "lib/sections"; +@import "vars"; +@import "styles/magento"; + +strong { + font-weight: 700; +} + +.items { + .resetList(); +} + +/* + Forms +-------------------------------------- */ +.field.required > .label > span:first-child:after { + content: ' *'; + color: @requiredField; +} + +/* + Magento_Page +-------------------------------------- */ +html, body, button, input, select, textarea { + color: @textColor; + font: 400 14px/1.33 "sourcesanspro"; +} + +html { + background: @footerBg; +} + +body { + position: relative; +} + +.page.wrapper { + background: @pageMainBg; +} + +/* + Page Layout +-------------------------------------- */ +.columns { + .pageWidth(); +} + +.page.main { + .clearfix(); + clear: both; + padding: 30px 0; +} + +.page.title { + .clearfix(); + margin-bottom: 30px; + .title { + display: inline; + margin: 0; + line-height: 1.2; + font-weight: @baseFontWeightLighter; + font-size: 30px; + color: @primary5; + } + .action { + float: right; + &:extend(.primary.action all); + } +} + +.page.main > .page.title { + .pageWidth(); + margin-bottom: 30px; +} + +.column.main { + min-height: 500px; +} + +.column.left, +.column.right { + .box-sizing(); + min-height: 1px; +} + +.col1-layout { + .column.main { + .column(12); + } +} + +.col2-left-layout { + .column.main { + float: right !important; + .column(10); + } + .column.left { + .column(2); + padding-right: 12px; + } +} + +.col2-right-layout { + .column.main { + .column(10); + } + .column.right { + .column(2); + padding-left: 12px; + } +} + +.col3-layout { + .column.main { + .clearfix(); + .column(8); + float: none !important; + display: inline-block !important; + vertical-align: top; + } + .column.left { + .column(2); + float: left; + padding-right: 12px; + } + .column.right { + .column(2); + float: none !important; + display: inline-block !important; + padding-left: 12px; + } +} + +/* + Header +-------------------------------------- */ +.header { + background-color: @headerBg; + background-image: @headerBgImage; + background-repeat: repeat; + background-position: 0; + border-bottom: 1px solid; + .borderColor(@headerBg); + padding: 15px 0; + > .content { + .pageWidth(); + .clearfix(); + .links { + .resetList(); + margin-bottom: 5px; + li { + margin-left: 20px; + display: inline; + text-transform: capitalize; + } + a { + .colorA(@primary5, @secondary1); + } + } + text-align: right; + } + + .panel { + .pageWidth(); + .clearfix(); + margin-bottom: 15px; + text-align: right; + } +} + +.logo { + font-family: "marvel"; + font-style: normal; + font-weight: @baseFontWeight; + font-size: 55px; + display: block; + float: left; + line-height: 1; + text-align: center; + img { + display: inline-block; + vertical-align: middle; + margin: 0 auto; + } + span { + display: inline-block; + vertical-align: middle; + margin-left: 15px; + color: @primary5; + margin-top: -8px; + } + &:active { + outline: 0; + } +} + +/* + Header Banner +-------------------------------------- */ +.header .panel .widget { + display: inline-block; + text-align: left; +} + +.banner-header:visited, +.banner-header:hover, +.banner-header { + font-size: @baseFontSizeBigger; + text-transform: uppercase; + color: @secondary1; +} + +/* + Search +-------------------------------------- */ +.block.search { + float: right; + > .content { + white-space: nowrap; + } + .field, + .actions, + .field .control { + float: left; + } + .actions { + margin-right: 0; + } + .search.autocomplete { + background: @primary7; + border: 1px solid @primary3; + border-width: 0 1px 1px; + border-radius: 0 0 5px 5px; + z-index: 5; + ul { + .resetList(); + li { + border-top: 1px solid @primary2; + cursor: pointer; + padding: 5px 40px 5px 10px; + position: relative; + text-align: left; + white-space: normal; + &:first-child { + border-top: none; + } + &:hover { + background: @primary1; + } + .amount { + color: @primary4; + font-weight: 600; + position: absolute; + right: 7px; + top: 6px; + } + } + } + } +} + +/* + Navigation +-------------------------------------- */ +.navigation { + z-index: 4; + > ul > .level-top { + &.hover, + &:hover { + > .submenu { + z-index: 3; + } + } + &.more { + > .submenu { + background: @primary1; + > ul { + .pageWidth(); + position: relative; + } + } + &.hover { + > .submenu { + border-bottom: 1px solid @primary3; + overflow: visible !important; + } + } + } + } +} + +.navigation > ul, +.navigation > ul > .level0 > .submenu > ul.level0 { + .pageWidth(); + padding-left: 0; + padding-right: 0; +} + +@media only screen and (max-width: 640px) { + .navigation > ul { + min-width: 100%; + max-width: 100%; + } + .action.toggle.nav { + top: 100%; + } +} + +/* + General block +-------------------------------------- */ +.column.main .block, +.sidebar .block { + margin-bottom: 45px; + > .title { + margin-bottom: 15px; + strong { + line-height: 1.2; + font-weight: @baseFontWeightLighter; + font-size: 20px; + } + } + &.filter { + .item { + margin-bottom: 10px; + } + } +} + +.sidebar .block > .title strong { + font-size: 18px; +} + +/* + Breadcrumbs +-------------------------------------- */ +.breadcrumbs { + .pageWidth(); + margin-top: 30px; +} + +/* + Footer +-------------------------------------- */ +.footer { + background: @footerBg; + border-top: 1px solid; + .borderColor(@footerBg); + padding: 30px 0 80px; + > .content { + .pageWidth(); + text-align: left; + } + .links { + ul { + .resetList(); + } + display: inline-block; + padding: 0; + margin: 1px 3px 19px 0; + li { + list-style: none; + list-style-image: none; + margin: 0; + padding: 0; + display: inline; + &:after { + content: ' | '; + } + &:last-child:after { + content: ''; + } + } + + .links li:first-child:before { + content: ' | '; + } + a { + .colorA(@primary5, @secondary1); + } + } + .copyright { + font-size: @base-font-size; + display: block; + padding-top: 10px; + } + .bugs { + margin-top: 25px; + font-size: 11px; + a { + font-weight: bold; + &:before { + content: ' - '; + display: inline-block; + } + + } + } +} + +/* + Switchers +-------------------------------------- */ +.switcher { + display: inline-block; + text-align: left; + .header .panel & { + margin-right: 25px; + &:last-child { + margin-right: 0; + } + } + font-size: 11px; + vertical-align: middle; + .label { + display: none; + } + strong { + color: @primary5; + font-weight: 600; + } + .options { + display: inline-block; + position: relative; + z-index: 1; + > ul { + .resetList(); + margin: 0; + padding: 5px 10px; + position: absolute; + top: 100%; + right: 0; + margin-left: -11px; + min-width: 100%; + float: left; + background: @primary1; + border: 1px solid darken(@headerBg, 5%); + visibility: hidden; + opacity: 0; + .transition(visibility 0s linear 2s); + li { + margin: 5px 0; + white-space: nowrap; + } + } + &.active { + z-index: 999; + > ul { + visibility: visible; + opacity: 1; + .transitionDelay(0s); + } + } + &.active strong, + &:hover strong { + color: @primary6; + } + } +} + +.action.switch { + .resetAction(); + vertical-align: top; + color: @primary5; + span { + .iconAfter(@content: '\e02c', @font: "icons"); + .iconHideText(); + &:after { + line-height: 12px; + } + } + &:focus, + &:hover, + &.active { + color: @primary6; + } + &.active span:after { + content: "\e029"; + } + .no-js &:focus + ul { + visibility: visible; + opacity: 1; + .transitionDelay(0s); + } +} + +/* + Global Notices +-------------------------------------- */ +.notice.global.site { + .box-sizing(); + position: absolute; + width: 100%; + padding: 8px; + background: #4d5d64; + color: #fff; + top: 0; + left: 0; + text-align: center; + p { + margin: 0; + } +} + +/* + Reviews +-------------------------------------- */ +@starSize : 16px; +.reviews.summary { + line-height: @starSize; + .action { + font-size: @baseFontSizeMiddle; + } + .reviews.actions { + font-size: @baseFontSizeMiddle; + display: inline; + } + .action.view { + span:before { + content: ' '; + } + } + .action.view + .action.add { + &:before { + content: '\00A0|\00A0\00A0'; + display: inline-block; + color: @link; + } + } + &.short:not(.no-rating) { + .action.view { + span { + display: none; + } + &:before { + content: '('; + display: inline-block; + } + &:after { + content: ')'; + display: inline-block; + } + } + } +} + +.block.reviews.dashboard .rating, +.reviews.summary .rating { + width: 5 * @starSize; + margin-right: 3px; + line-height: 1; + color: fade(@secondary1, 30%); + display: inline-block; + vertical-align: top; + margin-top: -1px; + > span { + display: block; + overflow: hidden; + color: @secondary1; + height: 0; + padding-top: @starSize; + line-height: 1; + margin-top: -@starSize; + &:before { + margin-top: -@starSize; + } + } + &:before, + > span:before { + display: block; + top: 0; + left: 0; + width: 100%; + font-family: "icons"; + content: @icon-star@icon-star@icon-star@icon-star@icon-star; + font-style: normal; + font-size: @starSize; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + } +} + +/* + Customer Reviews +-------------------------------------- */ +.block.reviews.list { + margin: 0 0 30px -20px; + padding: 0; + > .title { + display: none; + } + .item.review { + padding: 15px; + .review.title { + font-weight: 600; + display: block; + margin: 15px 0; + } + &:nth-child(odd) { + background: @primary1; + } + } + .review.details { + .author { + strong { + text-transform: uppercase; + font-weight: 600; + } + } + .review.date { + font-size: 12px; + } + p { + margin: 5px 0; + span { + display: none; + } + } + } +} + +.block.add.review { + margin: 0 0 30px -20px; + padding: 20px; + background: @primary1; + .title { + display: none; + } + .fieldset { + .formFieldset(); + border: 0; + padding: 0; + margin: 0; + > .legend { + .box-sizing(); + float: left; + width: 100%; + margin: 0 0 20px; + padding: 10px 0 30px; + border-bottom: 1px solid; + .borderColor(@primary1); + & + br { + clear: both; + display: block !important; + } + span { + line-height: 1.2; + font-weight: @baseFontWeightLighter; + font-size: 20px; + } + strong { + margin-left: 20px; + font-size: @baseFontSize; + font-weight: 600; + } + } + > .field:not(.ratings) { + .formField(); + .fieldStyle(); + > .label { + padding: 0 0 5px; + } + } + } + .action.submit { + &:extend(.primary.action all); + } + .action.cancel { + .resetAction(); + .actionLink(); + position: absolute; + left: 100%; + text-decoration: underline; + text-transform: uppercase; + margin-left: 20px; + margin-top: 10px; + } + .actions, + .field:not(.ratings) { + width: 60%; + } + .actions { + padding-top: 20px; + text-align: right; + position: relative; + z-index: 1; + } +} + +/* + Review details +-------------------------------------- */ +.review.view { + .product.name { + display: inline-block; + margin: 0; + } + .product.details { + float: left; + margin-right: 30px; + } + .product.photo { + display: block; + margin-bottom: 30px; + } + .review.details { + margin: 30px 0; + display: table; + + .ratings.summary { + margin-bottom: 30px; + strong { + font-weight: 600; + display: block; + margin: 0 0 15px; + } + .item { + display: table-row; + } + .label { + padding: 0 0 10px; + padding-right: 10px; + display: table-cell; + &:after { + content: ': '; + } + } + } + .review.date { + font-size: @baseFontSizeMiddle; + } + .review.title { + font-weight: 600; + font-size: @baseFontSizeBigger; + margin: 0 0 15px; + } + } +} + +.customer.review.view + .actions { + clear: both; +} + +/* + Messages +-------------------------------------- */ +.page.messages { + .pageWidth(); + margin: 15px auto; +} + +/* + Magento_Checkout + One page +-------------------------------------- */ +.block.progress.onepage { + float: left; + width: 200px; + dt { + font-size: @baseFontSizeBigger; + font-weight: @baseFontWeight; + margin: 0 0 10px 0; + a { + font-size: @baseFontSize; + } + } + dd.complete { + padding: 0; + margin: 0 0 30px; + } + address { + font-style: normal; + } +} + +.opc.wrapper { + float: right; + width: 725px; + > .opc { + .resetList(); + .section { + margin-bottom: 4px; + > .step-title { + padding: 15px 20px; + line-height: 1; + background: @secondary1; + font-size: 22px; + h2 { + font-weight: @baseFontWeight; + font-size: 18px; + margin: 0; + padding: 0; + color: #fff; + } + .number { + display: none; + } + } + &.active { + > .step-title { + background: @primary1; + margin-bottom: 0; + h2 { + color: @primary6; + } + } + } + &.allow > .step-title { + cursor: pointer; + h2:after { + display: block; + } + } + > .step { + padding: 0 20px 20px; + background: @primary1; + &:before { + content: ''; + border-top: 3px solid @primary2; + display: block; + margin-bottom: 20px; + } + } + } + } + .form:not(.login) { + .fieldset { + .formCols(); + padding: 0; + margin: 20px 0; + border: 0; + } + .field { + .fieldStyle(); + &:not(.choice) { + .label { + display: block; + padding-bottom: 5px; + } + } + } + .actions { + .clearfix(); + text-align: right; + button.action { + float: right; + &:extend(.primary.action all); + } + .secondary { + padding-top: 10px; + clear: right; + float: right; + } + } + .field.fullname + .field.company, + .field.name-lastname + .field.company, + .field.country, + .field.taxvat { + margin: 0 40% 30px 0; + } + .field.confirm, + .field.password { + margin-top: 20px; + margin-bottom: 20px; + } + .field.choice { + width: 100%; + display: block; + } + .field.persistent, + .field.save { + margin: 20px 0 0; + } + .field.addresses { + margin-bottom: 20px; + } + &:after { + content: attr(data-hasrequired); + display: block; + letter-spacing: normal; + word-spacing: normal; + color: @secondary1; + } + } +} + +.opc.loading .active { + position: relative; + z-index: 1; + &:before { + content: ''; + display: block; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(255, 255, 255, 0.1); + } + .actions .action { + visibility: hidden; + width: 1px; + overflow: hidden; + } +} + +/* + Load Indicator +-------------------------------------- */ +.load.indicator { + display: inline-block; + padding: 8px; + vertical-align: middle; + span { + display: block; + line-height: 16px; + &:before { + content: ''; + margin-right: 5px; + display: inline-block; + width: 16px; + height: 16px; + background: url(../images/loader.gif) no-repeat 0 0; + background-color: @secondary1; + vertical-align: top; + } + } +} + +/* + Step Login +-------------------------------------- */ +.step.login.wrapper { + .clearfix(); + position: relative; + z-index: 1; + padding-bottom: 70px; + .block { + .column(6); + .box-sizing(); + .fieldset { + border: 0; + margin: 0; + padding: 0; + .field { + width: 100%; + } + } + &.guest { + padding-left: 50px; + &:before { + content: ''; + border-left: 1px solid @primary2; + position: absolute; + top: 0; + margin-left: -25px; + bottom: 20px; + } + } + } + button.action:not(.reload) { + &:extend(.primary.action all); + } + .actions { + position: absolute; + bottom: 0; + padding: 20px 0; + text-align: right; + margin: 0; + width: 50%; + .secondary { + font-size: @baseFontSizeMiddle; + margin-top: .5em; + line-height: 1.4em; + margin-bottom: -1.9em; + } + } + .guest .actions { + margin-left: -50px; + } +} + +.fieldset.guest { + > .field { + .fieldStyle(); + } +} + +/* + Step Review +-------------------------------------- */ +.checkout.submit.order { + .actions { + margin-top: 15px; + .clearfix(); + .primary { + float: right; + } + .secondary { + float: left; + line-height: 32px; + } + } +} + +.order.data.items { + tfoot tr:first-child td { + border-top: 3px solid @primary2; + padding-top: 15px; + } + tr.total td { + padding-top: 5px; + padding-bottom: 5px; + text-align: right; + } + tr.total:last-child td { + padding-bottom: 20px; + } + tr.grand.total td { + vertical-align: middle; + } + tr.grand.total .amount { + font-size: 24px; + color: @secondary1; + } +} + +.order.review.data { + th.col.price, + th.col.subtotal { + text-align: right; + padding-right: 10px; + } + th.col.item { + text-align: left; + padding-left: 20px; + } +} + +/* + Magento_Checkout + Multishipping +-------------------------------------- */ +.multicheckout { + &.progress { + .resetList(); + float: left; + width: 200px; + li { + font-size: 16px; + font-weight: 400; + margin: 0 0 10px 0; + &.active { + font-weight: bold; + } + } + + .form.address.edit { + float: right; + width: 725px; + } + } + &.form.address, + &.form.billing, + &.form.shipping, + &.form.overview, + &.success, + &.change.billing { + float: right; + width: 725px; + } + .title { + .clearfix(); + margin: 0 0 30px; + > strong { + font-size: 20px; + font-weight: 400; + margin: 4px 0 0; + } + } + .subtitle { + display: block; + .clearfix(); + margin: 0 0 20px; + > span { + font-size: 18px; + font-weight: normal; + margin: 4px 0 0; + } + } + .title, + .subtitle { + .action { + font-weight: 400; + font-size: 14px; + margin-left: 20px; + text-decoration: underline; + display: inline-block; + text-transform: lowercase; + &:hover { + text-decoration: none; + } + } + } + .content { + .clearfix(); + > .block { + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + } + } + address { + font-style: normal; + } +// Shipping metods + > .block.shipping .box, + > .block.billing .box { + &:extend(.profileBlockWithBg all); + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + } + > .block.shipping, + &.overview > .block.billing { + .box { + &.address { + float: left; + width: 49%; + } + &.method { + float: right; + width: 49%; + } + &.items { + clear: both; + } + } + } +// Overview + &.overview { + > .block.billing { + .clearfix(); + .box.method { + p { + margin: 0 0 10px; + } + th, + td { + font-size: 14px; + padding: 0; + } + } + } + > .block.shipping { + .content { + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + } + } + .checkout.agreements { + .resetList(); + margin: 10px 0; + .item { + margin: 0 0 10px; + &:last-child { + margin: 0; + } + } + .agreement { + background-color: @primary1; + border: 1px solid @primary2; + font-size: 11px; + overflow: auto; + margin: 0 0 10px; + padding: 15px; + } + } + > .checkout.review { + .grand.total { + margin: 15px 0; + text-align: right; + .label { + font-size: 18px; + font-weight: 400; + } + .price { + color: @secondary1; + font-size: 24px; + font-weight: 700; + } + } + } + } + +// Oher goods (can't be shipped: virtual, downloadable) + .block.other .content { + &:extend(.profileBlockWithBg all); + } + +// Change billing + &.change.billing { + .box { + .box-sizing(); + background: @primary1; + float: left; + margin-bottom: 20px; + margin-left: 2%; + padding: 30px; + width: 49%; + &.odd { + clear: left; + margin-left: 0; + } + .actions { + margin: 15px 0 0; + } + } + .actions { + clear: left; + } + } + +// Actions + .actions { + .clearfix(); + margin: 20px 0; + } + &.change.billing .actions { + margin-top: 0; + } + .action { + &.update { + &:extend(.secondary.action all); + } + &.back { + float: left; + margin: 9px 0 0; + span:before { + content: "\00AB\00A0"; + } + } + &.continue, + &.submit { + &:extend(.primary.action all); + &.disabled { + opacity: 0.3; + &:hover { + background: @primaryActionBg; + } + } + } + &.add { + &:extend(.primary.action all); + float: right; + text-decoration: none; + text-transform: uppercase; + } + } + &.success .action.continue { + &:extend(.button.link all); + text-decoration: none; + text-transform: none; + } + +// Tables + .product.name { + margin-bottom: 0; + } + .items.data { + td.col.address { + padding-top: 10px; + } + td.col.delete, + td.col.product { + padding-top: 18px; + } + .col { + &.item { + padding-left: 0; + text-align: left; + } + } + th.col { + &.item, + &.qty { + padding-bottom: 5px; + } + } + .mark, + .amount { + text-align: right; + } + tfoot tr { + &.total { + &:first-child td { + border-top: 3px solid #e5e5e5; + padding-top: 15px; + } + &:last-child td { + border-bottom: 0; + } + td { + padding-top: 5px; + padding-bottom: 5px; + text-align: right; + + } + &.grand { + td { + vertical-align: middle; + } + .amount { + color: @secondary1; + font-size: 24px; + } + } + } + } + .applicable { + padding-top: 7px; + } + } + .block .items.data { + tr td { + &:first-child { + padding-left: 0; + } + &:last-child { + padding-right: 0; + } + } + } + .shipping .items.data tr:last-child td { + border-bottom: 1px solid @primary2; + } + .sp-methods, + .items.methods { + margin: 0; + dt { + margin: 0; + } + dd { + margin: 0; + padding: 0; + ul { + margin: 0 0 15px; + padding: 10px; + } + } + } + &.form.address { + .col.address select { + max-width: 450px; + } + } +} + +.checkout-multishipping-address-newshipping, +.checkout-multishipping-address-editshipping { + .form.address.edit { + float: right; + width: 725px; + } +} + +.block.gift.message { + margin: 30px 0 0; + .title { + font-size: 16px; + font-weight: 400; + margin-bottom: 15px; + } +} + +/* + Magento_Checkout + Gift Message +-------------------------------------- */ +.gift.message { + > .legend { + font-size: 16px; + margin: 0 0 20px; + } + .block.items { + .box-sizing(); + border: 1px solid @primary2; + height: 310px; + overflow: auto; + padding: 20px; + + } + dt { + margin: 30px 0 0; + &:first-child { + margin: 0; + } + .title { + font-size: 16px; + margin: 0 0 15px; + } + > .price { + margin: 0 0 10px; + } + } + dd { + margin: 20px 0 0 20px; + } + .field.choice input { + margin-right: 5px; + margin-top: 2px; + vertical-align: top; + } + .design { + .clearfix(); + margin: 10px 0 0; + img { + height: 75px; + width: 75px; + float: left; + margin-right: 15px; + } + > .price { + float: left; + } + } + .field.gift.wrapping { + .label { + display: block; + padding-bottom: 5px; + } + .control { + select { + width: 100%; + } + } + } + .activate.message { + display: inline-block; + margin: 10px 0 0; + + div { + .fieldset { + margin-top: 0; + } + } + } + .field.gift.wrapping .design > .price, + dt > .price { + > .price { + display: block; + > span { + display: inline-block; + } + } + } + .no-display { + display: none; + } + .options.order { + .field.gift.wrapping, + .field.text { + width: 100%; + } + } + .options.individual { + ol { + .resetList(); + } + li { + .clearfix(); + border-bottom: 1px solid @primary2; + margin: 0 0 15px; + padding: 0 0 15px; + overflow: hidden; + } + .number { + border-bottom: 1px solid @primary2; + color: @primary4; + margin: 0 0 15px; + padding: 0 0 5px; + } + .product { + float: left; + margin-right: 20px; + text-align: center; + > .product { + float: none; + margin: 0; + } + .img { + margin-bottom: 5px; + } + } + .options-items-container { + width: 100%; + .field { + .box-sizing(); + width: 100%; + } + } + .field.text { + width: 100%; + } + .item.options { + overflow: hidden; + } + } + .extra-options-container { + margin: 10px 0 0; + .field.choice { + margin: 0 0 10px; + } + } + .multicheckout & { + margin: 20px 0; + .fieldset { + margin: 20px 0; + } + .block.message { + margin: 0; + .fieldset { + margin: 0; + } + } + .field { + display: inline-block; + padding-right: 20px; + vertical-align: top; + width: 50%; + } + } +} +.data.table .gift.wrapping { + font-size: 13px; + margin: 0; + dt { + font-weight: 600; + margin: 5px 0 0; + } + dd { + margin: 0 0 5px; + } +} + +/* + Magento_Checkout + Shopping Cart +-------------------------------------- */ +.cart.container { + .clearfix(); + position: relative; + z-index: 1; +} + +.cart.main.actions { + padding: 20px 0; + .action.continue { + position: absolute; + text-decoration: underline; + right: 0; + top: 3px; + } + .action.update, + .action.clear { + &:extend(.secondary.action all); + } +} + +.items.data { + width: 100%; + thead tr:last-child th { + padding-bottom: 10px; + } + th.col.item > span { + display: none; + } + td.col.qty { + width: 40px; + padding-top: 20px; + text-align: center; + .review & { + padding-top: @baseFontSizeBigger; + } + } + th.col.qty { + text-transform: uppercase; + } + input.qty { + width: 50px; + text-align: center + } + td.col.price, + td.col.subtotal { + text-align: right; + } + .product.photo { + padding-right: 20px; + display: table-cell; + width: 1%; + vertical-align: top; + } + .product.details { + display: table-cell; + width: 99%; + vertical-align: top; + } + .item.actions { + text-align: right; + div.actions { + padding-bottom: 30px; + } + } + td { + border-left:0; + border-right:0; + padding: 26px 10px 10px; + vertical-align: top; + background: transparent; + } + td:first-child { + padding-left: 20px; + } + td:last-child { + padding-right: 20px; + } + tbody:nth-child(even) tr { + background: @primary1; + } + th { + border-left:0; + border-right:0; + text-align: center; + font-weight: @baseFontWeight; + font-size: @baseFontSize; + vertical-align: top; + } + tr:first-child th { + font-weight: @baseFontWeight; + font-size: @baseFontSizeBigger; + } + .item.actions td { + padding: 0 20px 10px; + line-height: 16px; + .action { + margin-left: 20px; + } + .action.towishlist { + font-size: @baseFontSize; + } + .action.delete { + vertical-align: top; + margin-top: 0; + } + &:before { + content: ''; + border-top: 1px solid @primary2; + display: block; + height: 0; + overflow: hidden; + margin: 0 0 10px; + } + } + .item.options { + dt { + font-weight: @baseFontWeight; + display: inline; + margin-right: 10px; + float: left; + clear: left; + &:after { + content: ': '; + } + } + dd { + font-weight: @baseFontWeightLighter; + margin: 0 0 10px 10px; + padding: 0; + } + + } +} + +.cart.table.wrapper { + float: left; + width: 665px; +} + +.cart.summary { + position: relative; + z-index: 1; + margin-top: 33px; + background: @primary1; + display: inline-block; + width: 290px; + padding: 20px; + margin-left: 10px; + .summary.title { + font-size: 20px; + font-weight: 200; + display: block; + border-bottom: 3px solid @primary2; + padding-bottom: 15px; + } + .block { + margin-bottom: 0; + border-bottom: 1px solid @primary2; + > .title { + cursor: pointer; + padding: 10px 5px; + margin: 0; + line-height: 16px; + strong { + font-size: @baseFontSizeMiddle; + font-weight: 600; + &:after { + content: @icon-expand; + font-family: "icons"; + float: right; + font-weight: @baseFontWeight; + font-size: @baseFontSizeBigger; + line-height: 16px; + } + } + &.active strong:after { + content: @icon-collapse; + } + + } + > .content { + display: none; + padding: 15px 15px 20px; + } + &.active { + > .content { + display: block; + } + } + .fieldset { + padding: 0; + margin: 0; + border: 0; + .field { + margin: 0 0 10px; + } + } + font-size: @baseFontSizeMiddle; + input[type="text"] { + padding: 0 5px; + font-size: @baseFontSizeMiddle; + height: 30px; + } + .field:not(.choice) { + .label { + padding: 0 0 5px; + display: block; + } + } + select { + padding: 5px 5px 4px; + font-size: @baseFontSizeMiddle; + } + .action { + &:extend(.primary.action all) + ; + padding: 6px 11px 5px; + span { + font-size: @baseFontSizeMiddle; + line-height: 12px; + } + &.check span { + .actionLink(); + } + } + } +} + +.cart.container { + & > .summary.sticky { + position: fixed; + display: inline-block !important; + } + & > .summary.bottom { + position: absolute; + vertical-align: bottom; + bottom: 0; + } +} + +.cart &>.summary.fixed, +.cart.container &>.summary &>.container.fixed { + position: fixed; + top: 0; +} + +.cart.table.wrapper.detailed + .cart.summary { + margin-top: 54px; +} + +.block.shipping { + .content { + .clearfix(); + } + .fieldset.estimate { + .actions { + display: table-cell; + width: 1%; + white-space: nowrap; + vertical-align: bottom; + } + } + .fieldset.rates { + padding-top: 20px; + .actions { + text-align: right; + } + } + .field.postcode { + display: table-cell; + width: 99%; + vertical-align: bottom; + div.mage-error { + position: absolute; + } + padding-right: 10px; + } +} + +.block.discount { + .content { + .clearfix(); + } + .fieldset.coupon { + position: relative; + &.applied { + padding-bottom: 20px; + } + .field { + display: table-cell; + width: 99%; + vertical-align: bottom; + .label { + float: left; + margin-right: -100px; + } + input { + clear: left; + } + padding-right: 10px; + div.mage-error { + position: absolute; + } + } + .actions { + vertical-align: bottom; + display: table-cell; + width: 1%; + white-space: nowrap; + } + .action.cancel { + .resetAction(); + .actionLink(); + position: absolute; + left: 0; + bottom: 0; + margin-bottom: -15px; + span { + text-transform: none; + } + } + } +} + +.sp-methods, +.items.methods { + dt, + .item.title { + font-weight: bold; + } + dd, + .item.options { + margin: 0 0 15px; + padding: 10px; + } +} +.field.choice.payment { + > .label { + font-weight: bold; + } +} + +.data-table { + width: 100%; + border: 0; + td { + border-right: 1px solid @primary2; + padding: 5px; + vertical-align: top; + } + td:last-child { + border: 0; + } +} + +.cart.totals { + .table.totals { + width: 100%; + } + padding: 20px 0; + td, + th { + text-align: right; + padding: 4px 0 4px 5px; + } + td:not(:first-child) { + strong { + font-size: 24px; + color: @secondary1; + } + } + td:first-child { + text-align: left; + padding-left: 0; + strong { + font-size: @baseFontSize; + } + } +} + +.checkout.methods.items { + background: #fff; + padding: 20px; + .item { + margin: 15px auto; + text-align: center; + } + .action.multicheckout { + text-decoration: underline; + } +} + +/* + Magento_Checkout + Mini cart +-------------------------------------- */ +.minicart.wrapper { + float: right; + margin-right: 40px; + z-index: 11; + .block.minicart { + .clearfix(); + left: -100%; + margin-top: 15px; + position: absolute; + z-index: 2; + background: @primary1; + border: 2px solid darken(@primary1, 13%); + border-radius: 3px; + text-align: center; + padding: 58px 345px 25px 15px; + &:before { + content: ''; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-bottom: 10px solid @primary1; + height: 0; + width: 0; + overflow: hidden; + display: block; + position: absolute; + top: 0; + margin-top: -10px; + margin-right: 25px; + right: 0; + zoom: 1; + z-index: 2; + } + > .content { + margin-top: -33px; + .subtotal { + .clearfix(); + .mark { + display: inline-block; + font-weight: 600; + font-size: 18px; + float: left; + line-height: 24px; + } + > .amount { + text-align: right; + float: right; + display: inline-block; + font-weight: @baseFontWeightBolder; + font-size: 24px; + line-height: 24px; + color: @secondary1; + } + .amount.incl.tax { + display: block; + font-size: @baseFontSize; + &:after { + content: ')'; + } + .price:after { + content: ' ('; + } + } + } + .disclaimer { + font-size: @baseFontSizeMiddle; + } + .actions { + .secondary { + margin-top: 15px; + margin-bottom: -15px; + text-align: right; + a { + color: @secondary1; + } + } + } + .subtitle { + display: block; + text-align: left; + padding: 0 50px; + margin: 0 0 15px 0; + font-weight: @baseFontWeight; + &.empty { + margin: 10px -320px 0 0; + padding: 0; + float: right; + width: 310px; + clear: right; + } + } + } + .minicart.empty.text, + > .title, + > .content .subtotal, + > .content .disclaimer, + > .content > .actions { + margin: 0 -330px 15px 0; + text-align: left; + float: right; + width: 310px; + clear: right; + } + > .title { + .text { + display: none; + } + .qty:before { + content: attr(title) ": "; + } + } + .minicart.empty.text { + margin-top: 15px; + } + > .title strong { + font-weight: 400; + } + } + &.active { + &:before { + content: ''; + position: fixed; + z-index: 1; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: #000; + opacity: 0.01; + } + position: relative; + z-index: 11; + .block.minicart { + left: auto; + right: -20px; + } + } + .action.previous, + .action.next { + .resetAction(); + width: 25px; + overflow: hidden; + span { + .iconAfter(@content: @icon-arrow-right-thick, @size: 42px, @font: "icons"); + .iconHideText(42px); + color: @primary3; + margin-left: -10px; + overflow: hidden; + } + &[disabled] { + opacity: 0.3; + } + position: absolute; + right: 10px; + top: 50%; + margin-top: -22px; + } + .action.previous { + right: auto; + left: 0; + span:after { + content: @icon-arrow-left-thick; + } + } + .action.close { + position: absolute; + top: 10px; + right: 15px; + } + p { + clear: both; + } +} + +.block.minicart.empty > .title, +.eq-ie8 .minicart.wrapper.active:before { + display: none; +} + +/* + Product options +-------------------------------------- */ +.minicart { + @textColor: @primary6; + @optionsBg: rgba(0, 0, 0, .8); + @optionsColor: #fff; + .product.options.wrapper { + position: relative; + display: inline; + z-index: 1; + margin: 7px 0; + .more { + color: @textColor; + font-size: @baseFontSizeMiddle; + line-height: 1; + padding: 0; + border-bottom: 1px dotted @textColor; + cursor: help; + } + &:hover { + z-index: 99; + .product.options.details { + display: block; + } + &:before { + content: ''; + border-left: 10px solid @optionsBg; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + height: 0; + width: 0; + overflow: hidden; + display: block; + position: absolute; + top: 0; + margin-top: 0; + left: -10px; + zoom: 1; + z-index: 2; + } + } + + } + .product.options.details { + display: none; + position: absolute; + background: @optionsBg; + border-radius: 6px; + padding: 10px; + right: 100%; + top: 50%; + margin-top: -20px; + margin-right: 10px; + float: left; + max-width: 200px; + min-width: 100px; + .title { + font-weight: 600; + } + color: @optionsColor; + } + .product.options.list { + padding-left: 10px; + dt { + font-size: @baseFontSizeMiddle; + display: inline; + margin: 0; + padding: 0; + font-weight: 600; + &:after { + content: ': '; + } + &:before { + content: ''; + display: block; + } + } + dd { + font-size: @baseFontSizeMiddle; + display: inline-block; + padding: 0; + margin: 0; + } + } + .item:not(.shown) + .shown, + :first-child { + .product.options.details { + right: auto; + left: 100%; + margin-left: 10px; + } + .product.options.wrapper:before { + border-right: 10px solid @optionsBg; + border-left: 0; + left: auto; + right: -10px; + } + } +} + +.minicart.wrapper .block.minicart > .content > .actions .primary { + .clearfix(); + text-align: center; + .checkout.paypal { + display: inline; + input[type="image"] { + margin-top: 5px; + float: left; + } + &:after { + float: none; + } + } + .checkout.paypal + .action.checkout { + float: right; + } +} + +.block.minicart { + .products.minilist { + @itemWidth : 187px; + float: left; + padding: 0; + border-right: 1px solid darken(@primary1, 13%); + max-width: @itemWidth*3; + padding: 0 30px; + position: relative; + z-index: 1; + .minilist.items { + position: relative; + white-space: nowrap; + } + &.animation { + .items-wrapper { + overflow: hidden; + } + position: relative; + .item { + visibility: visible; + } + } + .item { + padding: 0 20px; + .box-sizing(); + vertical-align: top; + text-align: left; + &:before { + content: ''; + width: 0; + display: block; + border-left: 1px solid darken(@primary1, 13%); + height: 100%; + margin-left: -20px; + position: absolute; + } + &.item:not(.shown) + .shown:before, + &:first-child:before { + display: none; + } + white-space: normal; + display: none; + display: inline-block; + width: @itemWidth; + visibility: hidden; + .box-sizing(); + margin-left: 0; + + .wrapper.active &.shown { + visibility: visible; + } + &.hidden { + margin-left: -@itemWidth !important; + } + + .product.photo { + display: block; + margin-bottom: 10px; + .photo.container { + overflow: visible !important; + margin: 0 auto; + } + .photo.image { + border: 1px solid darken(@primary1, 11%); + display: block; + margin: 0 auto; + } + } + .pricing { + margin-top: 10px; + &:not(.complex) { + .label.display { + display: none; + } + } + .label:after { + content: ': '; + } + } + .actions { + float: right; + } + .action.edit { + font-size: @baseFontSizeMiddle; + } + .product.options.wrapper + .action.edit { + margin-right:8px; + &:before { + content: '|'; + display: inline-block; + text-decoration: none; + padding: 0 8px; + margin-right:-16px; + } + &:hover:before { + color: @primary6; + } + } + .action.delete { + position: absolute; + margin-left: -5px; + margin-top: -1.35em; + bottom: 0; + } + } + } +} + +.eq-ie8 .block.minicart { + .products.minilist { + .action.delete, + .action.edit { + visibility: hidden; + } + .shown { + .action.delete, + .action.edit { + visibility: visible; + } + } + .item { + &:before { + border-left: 0; + } + } + } +} + +.action.delete { + display: inline-block; + span { + color: @primary3; + .iconAfter(@content: @icon-trash, @font: 'icons'); + .iconHideText(); + } + &:focus, + &:active, + &:hover { + outline: none; + span { + color: @primary4; + } + } +} + +.action.checkout { + &:extend(.primary.action all); +} + +.action.checkout.shadow { + span { + text-shadow: 0px 1px 2px #000; + } +} + +.action.close { + .resetAction; + span { + .iconAfter(@content: @icon-close-thick, @size: 11px, @font: 'icons'); + .iconHideText(11px); + } +} + +.action.showcart { + .iconAfter(@content: @icon-cart, @size: 32px, @font: 'icons'); + .iconHideText(32px); + margin-top: 20px; + margin-left: 20px; + color: @primary5; + position: relative; + &:hover, + &:active, + &:focus, + &.active { + color: @primary4; + outline: none; + } + + .qty { + position: absolute; + left: 70%; + top: 0; + margin-top: -30%; + text-indent: 0; + background: @secondary1; + display: inline-block; + border: 1px solid @secondary1; + border-radius: 50px; + font-size: @baseFontSize; + font-weight: 600; + color: #fff; + @height: 1.7em; + line-height: @height; + vertical-align: middle; + .box-sizing(); + min-width: 1.1 * @height; + min-height: @height; + text-align: center; + padding: 0 4px; + } + .qty.empty { + display: none; + } +} + +/* + Paypal button +-------------------------------------- */ +.checkout.paypal { + display: none; + input[type="image"] { + display: inline-block; + vertical-align: top; + } + display: inline-block; + vertical-align: top; + &.before:before { + content: "- " attr(data-label) " -"; + text-transform: uppercase; + display: inline-block; + line-height: 32px; + font-size: @baseFontSize; + vertical-align: middle; + margin: 0 5px; + } + &.after:after { + content: "- " attr(data-label) " -"; + text-transform: uppercase; + display: inline-block; + line-height: 32px; + font-size: 14px; + vertical-align: middle; + margin: 0 5px; + } +} + +.box.tocart .checkout.paypal { + &.after:after { + display: none; + } + &.after:before { + content: "- " attr(data-label) " -"; + text-transform: uppercase; + display: inline-block; + line-height: 32px; + font-size: @baseFontSize; + vertical-align: middle; + margin: 0 5px; + } +} + +.checkout.methods .checkout.paypal { + &.after:after { + display: block; + text-align: center; + } +} + +/* + Magento_Sales +-------------------------------------- */ +.block.reorder { + padding-right: 30px; + .item { + padding-left: 20px; + input { + float: left; + margin-top: 2px; + margin-left: -20px; + } + } + .subtitle { + display: block; + margin: 0 0 15px; + font-weight: 600; + } + .actions { + margin: 15px 0 0; + .primary, + .secondary { + margin-right: 5px; + display: inline-block; + vertical-align: middle; + } + } +} + +/* + Magento_Newsletter +-------------------------------------- */ +.block.newsletter { + @fit: 45px; + text-align: left; + .title { + display: none; + } + .field { + .clearfix(); + } + .label { + display: block; + font-size: 16px; + margin-bottom: 10px; + line-height: 1.2; + } + .control { + float: left; + width: 100%; + .box-sizing(); + padding-right: @fit; + } + .actions { + padding-left: 10px; + float: right; + margin-left: -@fit; + } + input[type="text"] { + width: 100%; + } + .footer & { + width: 310px; + float: right; + } +} + +.action.subscribe { + .resetAction(); + background: @secondary1; + border-radius: 3px; + padding: 7px; + border: 1px solid @secondary1; + vertical-align: top; + span { + .iconAfter(@content: @icon-envelope, @font: 'icons'); + .iconHideText(); + color: #fff; + } +} + +.form.newsletter.manage { + .fieldset { + margin: 0 0 20px; + padding: 0; + border: 0; + .legend { + float: left; + margin: 0 0 20px; + font-weight: 600; + } + .legend + br { + display: block; + clear: both; + } + } + .action.save { + &:extend(.primary.action all); + } + .actions .primary { + margin-bottom: 15px; + } +} + +/* + Widgets +-------------------------------------- */ +.widget ul { + .resetList(); +} + +/* + Magento_Catalog + Compare +-------------------------------------- */ +.block.compare { + > .title .qty { + font-size: 16px; + margin-right: -5px; + &:before { + content: '('; + } + &:after { + content: ')'; + } + } + .item { + padding-right: 20px; + overflow: hidden; + } + .product.name { + float: left; + } + .action.delete { + margin-right: -20px; + float: right; + } + .action.compare { + &:extend(.secondary.action all); + float: right; + } + .action.clear { + float: left; + margin-top: 10px; + } + .actions { + .clearfix(); + margin-top: 15px; + } +} + +.catalog-product-compare-index { + .action.print { + float: right; + margin-top: -50px; + } +} + +.comparison.wrapper { + clear: both; + position: relative; + z-index: 1; + &:after { + content: ''; + position: absolute; + z-index: 2; + right: 0; + top: 0; + height: 100%; + width: 15px; + } + margin-bottom: 50px; +} + +.comparison.container { + overflow-y: hidden; + overflow-x: auto; +} + +.data.comparison { + table-layout: fixed; + + .cell.label { + width: 130px; + padding-left: 10px; + font-weight: 600; + text-align: left; + border-right: 1px solid @primary2; + .attribute.label { + display: block; + width: 100%; + word-break: break-all; + } + &.product { + border-bottom: 1px solid @primary2; + } + } + .cell { + padding: 15px; + vertical-align: top; + p:first-child { + margin-top: 0; + } + .attibute.value { + width: 100%; + overflow: hidden; + } + } + .cell.product { + width: 140px; + &.info { + border-bottom: 1px solid @primary2; + } + } + .cell.attribute { + font-size: @baseFontSizeMiddle; + } + td:last-child { + border-right: 1px solid @primary2; + } + tr:nth-child(odd) .cell.attribute { + background-color: @primary1; + } + .product.photo { + .img.photo.container { + display: inline-block !important; + } + text-align: center; + display: block; + margin: 0 auto 15px; + } + .actions, + .price-box, + .product.rating, + .product.name { + margin: 15px 0; + } + .addto.links { + margin-top: 15px; + padding-top: 15px; + border-top: 1px solid @primary2; + font-size: @baseFontSizeMiddle; + } + .cell.remove { + padding-top: 0; + padding-bottom: 0; + text-align: right; + .action.delete { + &:extend(.secondary.action all); + float: right; + padding: 4px; + span { + overflow: hidden; + line-height: 0; + &:after { + content: @icon-close-thick; + font-size: @baseFontSizeMiddle; + color: #fff; + } + } + margin-right: -15px; + } + } +} + +.comparison.headings { + position: absolute; + z-index: 2; + top: 0; + left: 0; + width: auto; + background-color: @pageMainBg; + th { + background-color: @pageMainBg; + } +} + +/* + Magento_Catalog + Compare +-------------------------------------- */ +.item.link.compare { + .qty { + &:before { + content: '('; + } + &:after { + content: ')'; + } + } +} + +/* + Magento_Catalog + Product lists +-------------------------------------- */ +.productItems() { + @spacing: 0 0 10px; + .item.product { + .column(4); + .box-sizing(); + .col3-layout & { + width: 50%; + } + display: inline-block; + vertical-align: top; + margin: 0; + padding: 20px; + float: none; + .product.photo { + float: left; + margin-right: 20px; + } + .product.details { + overflow: hidden; + } + .product.name, + .price-box { + margin: @spacing; + } + .addto.links { + .action:after { + content: ''; + display: block; + } + } + .actions { + visibility: hidden; + .primary { + margin: 0 0 10px; + } + } + &:hover { + .actions { + visibility: visible; + } + } + } +} + +.blocklist() { + clear: both; + margin: 30px 0; + padding-top: 25px; + border-top: 1px solid @primary2; + .products.list { + clear: both; + margin: 0 -20px; + .productItems(); + } +} + +.block.related { + .action.select { + .resetAction(); + .actionLink(); + } + .field.choice.related { + margin: 0 0 10px; + } +} + +.block.widget.viewed, +.block.crosssell, +.block.upsell, +.block.related, +.block.widget.new, +.block.widget.compared { + .blocklist(); +} + +.block.crosssell { + .products.list.items.crosssell { + margin: 0 -13px; + .item.product { + .column(2); + padding: 13px; + .product.photo { + float: none; + display: block; + margin: 0 0 10px; + } + margin-bottom: 90px; + .actions { + position: absolute; + } + } + } +} + +.block.widget.viewed { + .products.list.items.widget-viewed-grid { + .item.product { + .column(2); + float: none; + display: inline-block; + .col2-left-layout &, + .col2-right-layout & { + width: 19.99%; + } + .col3-layout & { + width: 25%; + } + .product.photo { + float: none; + display: block; + margin: 0 0 10px; + } + } + } + .products.list.items.widget-viewed-list { + .item.product { + .column(12); + float: none; + display: inline-block; + } + } +} + +.block.widget.compared { + .products.list.items.widget-compared-grid { + .item.product { + .column(2); + float: none; + display: inline-block; + .col2-left-layout &, + .col2-right-layout & { + width: 19.99%; + } + .col3-layout & { + width: 25%; + } + .product.photo { + float: none; + display: block; + margin: 0 0 10px; + } + } + } + .products.list.items.widget-compared-list { + .item.product { + .column(12); + float: none; + display: inline-block; + } + } +} + +.block.widget.new { + .products.list.items.widget-new-grid { + .item.product { + width: 20%; + float: none; + display: inline-block; + .col2-left-layout &, + .col2-right-layout & { + .column(3); + float: none; + display: inline-block; + } + .col3-layout & { + .column(4); + float: none; + display: inline-block; + } + .product.photo { + float: none; + display: block; + margin: 0 0 10px; + } + } + } + .products.list.items.widget-new-list { + .item.product { + .column(12); + float: none; + display: inline-block; + } + } +} + +.product.info.detailed + .block.upsell, +.product.info.detailed + .block.related { + margin-top: 70px; + clear: none; + float: right; + width: 140px; + border-top: 0; + padding-top: 0; + padding-left: 25px; + border-left: 1px solid @primary2; + .products.list { + margin: 0; + .item.product { + display: block; + width: auto; + padding: 13px 0; + .product.photo { + float: none; + display: block; + margin: 0 0 10px; + } + } + } +} + +.block.widget { + @optionsHeigth: 23px; + .pager { + float: right; + .amount { + float: left; + line-height: @optionsHeigth + 2px; + margin: 2px 15px 0 0; + display: none; + } + .text { + display: none; + } + } + .pages { + margin-left: 15px; + float: left; + .label { + line-height: @optionsHeigth + 2px; + display: inline-block; + } + strong.label { + font-weight: 400; + float: left; + line-height: @optionsHeigth + 2px; + margin-top: 2px; + margin-right: 5px; + display: none; + } + input { + width: 30px; + margin: 0 5px; + text-align: center; + padding: 0 5px; + height: @optionsHeigth + 2px; + line-height: @optionsHeigth + 2px; + } + > ol { + .resetList; + display: inline-block; + vertical-align: top; + margin-top: 2px; + line-height: @optionsHeigth + 2px; + vertical-align: middle; + li { + display: inline; + } + strong, + a { + padding: 0 3px; + } + strong { + font-weight: 400; + color: @secondary1; + } + } + } + .action.next, + .action.previous { + overflow: hidden; + display: inline-block; + vertical-align: middle; + span { + color: @primary3; + .iconAfter(@content: '', @font: "icons"); + .iconHideText(); + } + } + .action.next span:after { + content: @icon-arrow-right-thin; + } + .action.previous span:after { + content: @icon-arrow-left-thin; + } +} + +/* + Magento_Catalog + Layered Navigation +-------------------------------------- */ +.block.filter { + .subtitle { + display: none; + } + > .content { + padding: 0; + } + .filtered { + .item { + border-top: 1px solid @primary3; + padding: 2px 0 5px; + margin: 0 0 5px; + position: relative; + z-index: 1; + } + .label { + font-weight: 600; + text-transform: uppercase; + display: block; + } + } + .action.remove { + overflow: hidden; + display: inline-block; + padding: 4px; + position: absolute; + top: -1px; + right: 0; + background: @primary3; + span { + color: #fff; + .iconAfter(@content: @icon-close-thick, @size: 13px, @font: "icons"); + .iconHideText(13px); + } + } + .actions { + margin-bottom: 30px; + } + .action.reset { + font-size: 12px; + text-transform: lowercase; + text-decoration: underline; + } + dt { + text-transform: uppercase; + } + dd { + margin: 0; + padding: 15px 0 25px; + } + .count { + font-size: 12px; + &:before { + content: ' ('; + } + &:after { + content: ')'; + } + } +} + +/* + Magento_Catalog + Product Listing +-------------------------------------- */ +.toolbar { + @optionsHeigth: 23px; + clear: both; + margin: 17px 0; + &:first-child { + margin-top: 0; + } + &.alternative { + direction: rtl; + .pager { + direction: ltr; + } + .settings { + display: inline; + direction: ltr; + } + .pages, + .amount, + .limiter { + border-left: 1px solid @primary2; + padding: 2px 0 2px 15px; + } + } + .amount { + display: none; + } + .clearfix(); + .settings { + display: inline; + } + .modes { + margin-left: 30px; + display: inline-block; + margin-top: 3px; + margin-right: 14px; + vertical-align: top; + .label { + display: none; + } + } + .limiter, + .sorter { + .clearfix(); + padding: 2px 0; + float: left; + display: inline-block; + select { + margin-top: 1px; + margin-right: 5px; + } + } + .options { + float: left; + border: 1px solid @primary2; + white-space: nowrap; + height: @optionsHeigth; + line-height: @optionsHeigth; + overflow: visible; + display: block; + padding: 0 7px; + .current { + font-weight: 400; + float: left; + padding-right: 7px; + } + ul { + .resetList(); + height: 0; + overflow: hidden; + clear: both; + padding: 0 30px 0 7px; + margin: 0 -8px; + border: 1px solid @primary3; + visibility: hidden; + top: -(@optionsHeigth + 1px); + background: #fff; + position: relative; + z-index: 2; + } + .action.switch { + float: right; + margin-top: 4px; + } + .selected { + color: @secondary1; + } + &.active { + ul { + height: auto; + visibility: visible; + } + } + } + .pager { + float: right; + .amount { + float: left; + line-height: @optionsHeigth + 2px; + margin: 2px 15px 0 0; + } + .text { + display: none; + } + } + .pages { + margin-left: 15px; + float: left; + .label { + line-height: @optionsHeigth + 2px; + display: inline-block; + } + strong.label { + font-weight: 400; + float: left; + line-height: @optionsHeigth + 2px; + margin-top: 2px; + margin-right: 5px; + display: none; + } + input { + width: 30px; + margin: 0 5px; + text-align: center; + padding: 0 5px; + height: @optionsHeigth + 2px; + line-height: @optionsHeigth + 2px; + } + > ol { + .resetList(); + display: inline-block; + vertical-align: top; + margin-top: 2px; + line-height: @optionsHeigth + 2px; + vertical-align: middle; + li { + display: inline; + } + strong, + a { + padding: 0 3px; + } + strong { + font-weight: 400; + color: @secondary1; + } + } + } +} + +/* + Magento_Catalog + Product List +-------------------------------------- */ +@imageHeight: 180px; +@imageWidth: 180px; + +.products.wrapper .products.list { + .item { + .product.photo { + display: block; + margin-bottom: 10px; + text-align: center; + > .photo { + display: block; + margin: 0 auto; + } + } + z-index: 1; + position: relative; + border: 1px solid transparent; + background: transparent; + &:hover { + border: 1px solid @primary3; + background: @primary1; + .product.actions { + opacity: 1; + visibility: hidden; + .action.tocart, + .secondary { + visibility: visible; + } + } + z-index: 99; + } + .product.actions { + opacity: 0.8; + visibility: hidden; + .action.tocart, + .secondary { + visibility: hidden; + } + } + .price-box, + .product.reviews { + display: block; + margin-bottom: 7px; + } + .secondary { + border: solid @primary3; + .box-sizing(); + white-space: nowrap; + position: absolute; + .action { + padding: 10px; + white-space: normal; + vertical-align: top; + display: inline-block; + line-height: 1; + } + } + } +} + +.products.wrapper.grid { + margin-bottom: 20px; +} + +.products.wrapper.grid .products.list { + .item.product { + @total-columns: 10; + .column(2); + display: inline-block; + float: none; + .col2-left-layout &, + .col2-right-layout & { + @total-columns: 12; + .column(3); + display: inline-block; + float: none; + margin-bottom: 30px; + } + .col3-layout & { + @total-columns: 12; + .column(4); + display: inline-block; + float: none; + margin-bottom: 30px; + } + padding: 9px 9px 9px; + vertical-align: top; + } + .secondary { + border-width: 1px; + background: @primary1; + top: 100%; + .box-sizing(); + left: -1px; + right: -1px; + .action { + padding: 10px 0; + text-align: center; + width: 49%; + } + } +} + +.products.wrapper.list .products.list { + margin-bottom: 20px; + .item.product { + .clearfix(); + display: block; + border-bottom: 1px solid @primary3; + padding: 9px 9px 9px 9px; + .product.details { + padding-bottom: 40px; + } + margin-bottom: -1px; + } + .product.details { + display: table; + } + .product.photo { + float: left; + margin-right: 9px; + margin-bottom: 0; + } + .secondary { + bottom: 0; + top: auto !important; + margin-left: 18px; + border-width: 1px 0 0; + right: 20px; + } + .product.description { + margin: 9px 0; + } +} + +/* + General product item styling +-------------------------------------- */ +.product.name { + color: @primary6; + font-weight: 600; + line-height: 1.2; + display: block; + margin-bottom: 10px; +} + +.price-box p, +.pricing p { + margin: 5px 0; + &:first-child { + margin-top: 0; + } + &:last-child { + margin-bottom: 0; + } +} + +.stock[title] { + line-height: 16px; + span:before { + content: ''; + line-height: 16px; + background: #42b649; + display: inline-block; + border-radius: 5px; + width: 10px; + height: 10px; + margin-right: 5px; + vertical-align: middle; + } + &.unavailable { + color: @primary3; + span:before { + background: @primary3; + } + } +} + +.product.item .product.description { + font-size: @baseFontSizeMiddle; +} + +.action.tocart { + &:extend(.primary.action all); + padding: 5px 11px; + + .block .product.actions & { + display: inline-block; + margin: 10px 0; + } +} + +.action.tocompare, +.action.towishlist { + font-size: 12px; + span:before { + content: "\002B\00A0"; + } + .item.product & { + margin-left: 0; + } +} + +/* + Magento_Catalog + Product View +-------------------------------------- */ +.fieldset { + .formFieldset(); + > .field { + .formField(); + } +} + +.product.info.main { + float: right; + width: 430px; + padding-bottom: 30px; + + .col2-left-layout &, + .col2-right-layout & { + width: 370px; + } + .col3-layout & { + float: none; + width: 100%; + } +} + +.product.info.main { + .price-box { + font-size: 20px; + padding-bottom: 10px; + margin: 15px 0; + line-height: 1.2; + font-weight: @baseFontWeightLighter; + } + .page.title.product + .price-box { + border-bottom: 1px solid @primary2; + } + p { + margin: 5px 0; + } + .old-price { + font-size: @baseFontSizeBigger; + .price-label { + //display: none; + } + .price { + text-decoration: line-through; + } + } + .special-price { + color: @secondary1; + } + .stock { + margin: 15px 0; + } + .product.options.bottom { + .price-box { + display: none; + } + } + .product.addto.links { + margin: 15px 0 0; + padding-top: 10px; + border-top: 1px solid @primary2; + .action { + float: left; + margin-right: 15px; + } + } +} + +.product.main.info { + .product.options.wrapper { + .field { + .fieldStyle(); + .formField(); + &:not(.choice) > .label { + .labelStyle(); + } + } + .type-configurable & { + select { + min-width: 40%; + width: auto; + padding: 2px; + } + } + } + .product.options.wrapper .fieldset { + margin: 0; + .field.required .control .field.choice .label span:after { + content: ""; + } + .field.date { + input[type="text"] { + width: auto; + } + } + .datetime-picker + .ui-datepicker-trigger { + margin: 0 15px 0 7px; + } + } +} + +.action.primary.customize, +.action.primary.tocart { + &:extend(.primary.action all); + line-height: 16px; + padding: 9px 15px; + span { + font-weight: 400; + font-size: @baseFontSizeBigger; + } +} + +.product.media { + float: left; + width: 540px; + padding-bottom: 30px; + + .col2-left-layout &, + .col2-right-layout & { + width: 400px; + } + .col3-layout & { + float: none; + width: 100%; + } +} + +.box.tocart { + .clearfix(); + margin: 15px 0; + .field { + float: left; + padding-right: 10px; + } + .label { + display: block; + text-align: left; + font-weight: 600; + text-transform: uppercase; + line-height: 25px; + } + .control { + width: 60px; + text-align: center; + } + .actions { + float: left; + padding-top: 24px; + } + .qty { + text-align: center; + } +} + +.prices.tier { + padding: 20px; + margin: 15px 0; + background: @primary1; + strong { + font-weight: @baseFontWeight; + } +} + +.product.social.links { + float: right; + text-align: right; +} + +.action.mailto { + span { + .iconAfter(@content: @icon-envelope, @font: "icons"); + .iconHideText(); + color: @primary3; + } +} + +.product.photo.thumbs { + float: left; + padding-left: 15px; + .title { + display: none; + } + .item.thumb { + margin-bottom: 8px; + img { + border: 1px solid transparent; + } + .active img { + border: 1px solid @primary5; + } + } +} + +.product.photo.main { + float: left; + text-align: center; + .notice { + font-size: 11px; + } +} + +.product.attibute.sku { + font-size: @baseFontSizeMiddle; + .value { + display: inline + } + .type:after { + content: '#'; + } +} + +@media only screen +and (max-width : 99999px) { + .product.data { + .column(10); + .data-tabs(); + .data-tabs-styling(); + } + + .temp-upsell-placeholder { + .column(2); + background: red; + height: 200px; + margin-top: 50px; + } +} + +@media only screen +and (max-width : 768px) { + .product.data { + .column(12); + .data-accordion(); + .data-accordion-styling(); + } + + .temp-upsell-placeholder { + .column(12); + background: red; + height: 200px; + margin-top: 20px; + } +} + +/* + Magento_Bundle + Product View +-------------------------------------- */ +body.type-bundle { + overflow-x: hidden; +} + +@media only screen +and (max-width : 768px) { + body.type-bundle { + overflow: auto; + .customize { + &:before { + left: -10px; + right: -10px; + + } + } + } +} + +.product.info.main { + .action.primary.customize { + margin: 40px 0; + } +} + +.bundle.options.container { + margin: 45px 0; + clear: both; + position: relative; + z-index: 1; + &:before { + position: relative; + z-index: 1; + content: ''; + display: block; + position: absolute; + left: -999em; + right: -999em; + z-index: -1; + background: @primary1; + top: 0; + bottom: 0; + } + + .product.add.form { + .clearfix(); + position: relative; + z-index: 1; + display: none; + padding: 45px 0; + } + .product.options.wrapper { + float: left; + width: 500px; + + .col2-left-layout &, + .col2-right-layout & { + width: 450px; + } + .col3-layout & { + width: 360px; + } + } + .product.options.bottom { + float: left; + width: 500px; + clear: left; + } +} + +.fieldset.bundle.options { + border: 0; + padding: 0; + margin: 0; + .legend { + font-size: 26px; + font-weight: 200; + float: left; + margin-bottom: 20px; + } + .legend + br { + display: block; + clear: both; + } + .bundle-slide-back { + float: right; + } + > .field { + > .label { + font-size: 20px; + font-weight: 200; + display: block; + margin-bottom: 20px; + } + margin: 0 0 50px; + padding: 20px; + background: @primary7; + &:last-child { + margin-bottom: 0; + } + } + .nested { + .field { + margin: 10px 0; + } + .field.qty { + margin-top: 20px; + .label { + display: inline-block; + vertical-align: middle; + span:after { + content: ':'; + } + } + .control { + width: 60px; + display: inline-block; + vertical-align: middle; + } + input { + text-align: center; + } + } + } +} + +.product.options.wrapper { + .nested.mage-error-group { + position: relative; + z-index: 1; + .field { + z-index: 2; + position: relative; + } + &:before { + z-index: 1; + border:1px solid @nonValidHilight !important; + background: fadeout(@nonValidHilight,96%); + content: ''; + left:-8px; + right:-8px; + top:-5px; + bottom:-5px; + display: block; + position: absolute; + } + } +} + +.block.bundle.summary { + background: @primary7; + margin-top: 54px; + float: right; + position: relative; + width: 380px; + + .col2-left-layout &, + .col2-right-layout & { + width: 320px; + } + .col3-layout & { + width: 230px; + } + > .title { + font-weight: 400; + border-bottom: 3px solid @primary2; + line-height: 1; + padding: 20px 20px 10px; + margin-bottom: 0; + } + .photo { + float: left; + border: 1px solid @primary2; + margin-right: 20px; + .photo { + float: none; + border: none; + margin-right: 0; + } + } + > .content { + padding: 20px; + } + .price-box { + .clearfix(); + padding: 20px 0 0; + clear: both; + line-height: 24px; + .price-label { + float: left; + font-size: 18px; + font-weight: 600; + } + .full-product-price { + float: right; + .price { + color: @secondary1; + font-weight: 700; + font-size: 24px; + } + } + } + .box.tocart { + padding: 10px 0 20px; + border-top: 1px solid @primary2; + border-bottom: 1px solid @primary2; + } + .addto.links { + .action { + font-size: 14px; + margin-right: 20px; + &:last-child { + margin-right: 0; + } + } + } + .subtitle { + display: block; + margin: 20px -20px 0; + font-weight: @baseFontWeightLighter; + font-size: 20px; + border-bottom: 3px solid @primary2; + line-height: 1; + padding: 20px 20px 10px; + margin-bottom: 0; + } + .bundle.summary { + div > ul { + list-style: none; + margin: 10px 0 0; + padding: 0; + > li { + margin: 0 0 10px; + > div > div { + margin: 0 0 5px; + } + } + } + } +} + +.action.back.customization { + .resetAction(); + .actionLink(); + position: absolute; + top: 57px; + right: 0; +} + +/* + CMS +-------------------------------------- */ +img[align="left"] { + margin: 0 22px 22px 0; +} + +img[align="right"] { + margin: 0 0 22px 22px; +} + +.home.main.slider { + img { + width: 100%; + display: block; + } +} + +/* + Magento_Customer +-------------------------------------- */ +.customer.welcome { + display: inline-block !important; + position: relative; + z-index: 1; + cursor: pointer; + .menu > ul { + font-weight: 600; + font-size: @baseFontSizeMiddle; + margin: 0; + position: absolute; + top: 100%; + margin-left: -11px; + float: left; + right: 0; + text-align: left; + background: @primary1; + border: 1px solid darken(@headerBg, 5%); + visibility: hidden; + opacity: 0; + .transition(visibility 0s linear .2s); + li { + margin: 15px; + display: block; + white-space: nowrap; + } + } + &.active { + z-index: 9999; + .menu > ul { + visibility: visible; + opacity: 1; + .transitionDelay(0s); + } + } + .header .content & .customer.name { + font-weight: 400; + span { + color: @primary5; + .iconAfter(@content: @icon-arrow-bottom-filled, @font: "icons"); + &:after { + line-height: @base-font-size; + } + } + &:focus span, + &:hover span, + &.active span { + color: @primary6; + outline: 0; + } + &.active span:after { + content: @icon-arrow-up-filled; + } + } + & + li { + display: none; + } +} + +.customer.welcome + li { + display: none !important; +} + +.login.container { + .clearfix(); + background: @primary1; + padding: 40px; + position: relative; + z-index: 1; + padding-bottom: 150px; + .block { + .box-sizing(); + float: left; + width: 50%; + > .title { + margin-bottom: 25px; + } + .actions { + .box-sizing(); + text-align: right; + position: absolute; + bottom: 140px; + width: 50%; + padding: 0 40px; + .secondary { + margin-bottom: -2em; + margin-top: 0.8em; + line-height: 1.2em; + float: right; + } + } + &.login { + padding-right: 90px; + .actions { + margin-left: -90px; + } + } + &.new { + padding-left: 40px; + .actions { + margin-left: -40px; + } + &:before { + content: ''; + border-left: 1px solid; + .borderColor(@primary1); + position: absolute; + top: 40px; + margin-left: -40px; + bottom: 60px; + } + } + } + .action.login, + .action.create { + &:extend(.primary.action all); + } +} + +.form.login { + .fieldset.login { + .formFieldset(); + .formInline(40%); + margin: 0; + padding: 0; + border: 0; + .field { + .fieldStyle(); + .label { + padding-top: 7px; + padding-right: 10px; + text-align: right; + } + } + } +} + +.action.reload { + .resetAction(); + position: absolute; + background: #fff; + padding: 2px; + span { + // TODO: add 'reload' icon to mui + .iconAfter(@content: @icon-info, @size: 22px, @font: "icons"); + .iconHideText(22px); + color: @secondary1; + text-shadow: 0px 1px rgba(0, 0, 0, 0.4); + } +} + +/* + Registration +-------------------------------------- */ +.form.send.friend, +.form.address.edit, +.form.edit.account, +.form.search.advanced, +.form.orders.search, +.form.contact, +.form.password.forget, +.form.create.account, +.form.wishlist.share, +.form.password.reset, +.form.paypal.review { + .fieldset { + .box-sizing(); + .formCols(); + .formFieldset(); + width: 690px; + background: @primary1; + padding: 30px 10px 30px 30px; + border: 0; + margin: 0 0 40px; + position: relative; + z-index: 1; + .legend { + float: left; + line-height: 1.2; + font-size: 20px; + font-weight: @baseFontWeight; + padding-bottom: 20px; + width: 100%; + padding: 0 40px 20px 0; + background: #fff; + margin: -30px -10px 30px -30px; + & + br { + display: block; + clear: both; + } + } + > .field { + .formField(); + .fieldStyle(); + > .label { + display: block; + padding: 0 0 5px; + } + margin-bottom: 20px; + } + > .field.note, + .field.street, + .field.choice.newsletter { + width: 100%; + } + .field.fullname { + width: 100%; + .fields.group-5 .field { + width: 20%; + } + } + .field.dob { + .fields.group .field { + width: 33%; + position: relative; + z-index: 1; + .label { + position: absolute; + bottom: 0; + font-size: @baseFontSizeMiddle; + line-height: 16px; + } + input { + margin-bottom: 16px; + } + } + } + } + .action.save, + .action.submit, + .action.add { + &:extend(.primary.action all); + } + .actions { + .clearfix(); + .primary { + float: right; + } + .secondary { + float: left; + } + width: 690px; + } + .fieldset.create.account { + &:after { + content: attr(data-hasrequired); + display: block; + position: absolute; + top: 100%; + left: 0; + padding: 10px 0 0; + letter-spacing: normal; + word-spacing: normal; + color: @secondary1; + } + } +} + +.form.send.friend { + .fieldset.recipients { + .fields { + .clearfix(); + margin-bottom: 30px; + position: relative; + z-index: 1; + .field { + .box-sizing(); + width: 50%; + padding-right: 20px; + float: left; + } + .action.delete { + position: absolute; + right: 0; + top: 50%; + } + } + } + .actions > .primary { + .action.submit { + float: right; + margin-left: 10px; + } + float: right; + text-align: right; + .action.add { + &:extend(.secondary.action all) + ; + } + .limit { + margin: 0; + display: inline-block; + } + } +} + +.form.address.edit .field.company, +.form.edit.account .field.password.current, +.form.edit.account .field.choice { + margin-right: 30%; +} + +.form.address.edit .field.note.default, +.form.address.edit .field.choice.set, +.form.wishlist.share .field.emails, +.form.wishlist.share .field.text, +.form.wishlist.share .field.choice { + width: 100%; +} + +// Move to other place +.form.search.advanced, +.form.orders.search, +.form.contact { + .box-sizing(); + background: @primary1; + padding: 40px; + .fieldset { + width: auto; + background: none; + margin-bottom: 0; + .legend { + background: none; + } + } + .actions { + width: auto; + padding-right: 30px; + text-align: right; + } + .action { + &:extend(.primary.action all); + } + .fields.range { + .field:first-child { + .control { + padding-right: 30px; + position: relative; + &:after { + content: '\2014'; + display: inline-block; + margin-right: 0; + position: absolute; + right: 6px; + top: 5px; + text-align: center; + width: 25px; + } + } + } + } +} + +.form.contact { + .fieldset { + .field { + float: left; + width: 40%; + margin-right: 60%; + &.comment { + width: 55%; + margin-left: -55%; + margin-right: 0; + float: none; + textarea { + min-height: 13.2em; + } + } + } + } +} + +/* + Review paypal express checkout order +-------------------------------------- */ +.paypal.review.view { + .paypal.subtitle.caption { + margin-bottom: 25px; + .action { + margin-left: 10px; + } + strong { + font-size: 20px; + font-weight: 200; + line-height: 1.2; + } + } + .form.paypal.review { + .fieldset { + width: 100%; + &.shipping.address { + float: right; + width: 49%; + } + &.billing.address { + float: left; + width: 49%; + } + &.shipping.method { + clear: both; + } + .nested { + margin-top: 10px; + } + } + } + .actions { + margin-top: 35px; + .action.update { + &:extend(.secondary.action all) + ; + margin-left: 10px; + } + } + .data.table.paypal.review.items { + width: 100%; + td, + th { + padding: 10px 20px; + text-align: left; + &.col.total { + text-align: right; + } + } + th { + font-size: 16px; + font-weight: 400; + } + tbody tr:nth-child(odd) td { + background: @primary1; + } + tfoot tr:first-child td { + border-top: 3px solid @primary2; + padding-top: 15px; + } + } +} + +/* + MISC +-------------------------------------- */ +.action.back { + span:before { + content: '\00AB\00A0'; + } +} + +/* + Magento_Customer + Account +-------------------------------------- */ +.col2-left-layout.account { + .column.main { + .column(9); + } + .column.left { + .column(3); + } +} + +.block.account.nav { + .title { + font-size: 18px; + } + .item { + margin-bottom: 10px; + &.current { + color: @secondary1; + } + } + .item strong { + font-weight: 400; + } +} + +.my-account { + .pager { + .amount, + .limiter { + display: inline-block; + } + } + .form { + .fieldset > .legend { + margin: 0 0 30px; + } + } + > .actions, + .form > .actions, + .block > .actions { + .clearfix(); + margin: 30px 0 0; + > .primary { + float: right; + } + > .secondary { + float: left; + } + } + + .data.table { + width: 100%; + td, + th { + padding: 10px 20px; + text-align: left; + &.col.actions { + white-space: nowrap; + .action:last-child { + margin-left: 20px; + } + } + em { + font-style: normal; + } + } + th { + font-size: 16px; + font-weight: @baseFontWeight; + } + tr:nth-child(odd) td { + background: @primary1; + } + } +} + +.block.dashboard { + .title .action, + .subtitle .action { + font-weight: @baseFontWeight; + font-size: @baseFontSize; + margin-left: 20px; + text-decoration: underline; + display: inline-block; + text-transform: lowercase; + span { + } + &:first-letter { + text-transform: uppercase; + } + } + .box { + .box-sizing(); + float: left; + width: 50%; + line-height: 1.666; + address { + font-style: normal; + } + } + .content { + .clearfix(); + } +} + +.block.dashboard:not(.welcome):not(.orders) { + .content { + background: @primary1; + padding: 30px; + } + .subtitle { + font-size: 18px; + font-weight: @baseFontWeightLighter; + display: block; + margin-bottom: 20px; + } +} + +.data.table.orders { + td, + th { + &.col.total { + text-align: right; + } + } +} + +/* + Address book +-------------------------------------- */ +.block.addresses:not(.dashboard) { + .box-sizing(); + float: left; + .title .action, + .subtitle .action { + font-weight: @baseFontWeight; + font-size: @baseFontSize; + margin-left: 20px; + text-decoration: underline; + display: inline-block; + text-transform: lowercase; + &:first-letter { + text-transform: uppercase; + } + } + .content { + background: @primary1; + padding: 30px; + } + .subtitle { + font-size: 18px; + font-weight: @baseFontWeightLighter; + display: block; + margin-bottom: 20px; + } + .box { + &:first-child { + margin-bottom: 30px; + } + } + address { + line-height: 1.666; + font-style: normal; + } + &.default { + float: left; + width: 60%; + } + &.list { + float: right; + width: 35%; + .item { + margin-bottom: 30px; + } + .item.actions { + margin-top: 15px; + } + .action { + margin-right: 10px; + } + } +} + +.customer-address-index .column.main .actions { + clear: left; +} + +/* + My Account -> My Product Reviews +-------------------------------------- */ +.data.table.reviews { + .product.name { + margin: 0; + } +} + +/* + My Account -> My Wishlist +-------------------------------------- */ +.data.table.wishlist { + @optionsBg: rgba(0, 0, 0, .8); + @optionsColor: #fff; + + margin-bottom: 15px; + + thead th { + padding-top: 0; + padding-bottom: 10px; + text-align: left; + font-weight: @baseFontWeight; + font-size: @baseFontSizeBigger; + } + + td, + th { + padding: 16px 10px 10px; + vertical-align: top; + } + + td:first-child, + th:first-child { + padding-left: 20px; + } + + td:last-child, + th:last-child { + padding-right: 20px; + } + + tbody tr:nth-child(even) { + background: @primary1; + } + + textarea { + width: 100%; + } + + .box.tocart .qty { + width: 50px; + } + + & + .actions { + .primary { + margin-bottom: 15px; + .action.share, + .action.update { + &:extend(.primary.action all); + padding: 5px 11px; + } + .action.update { + margin-left: 5px; + } + } + } + + .col.photo { + width: 100px; + } + .col.actions { + width: 200px; + } + + .item-options { + background: @optionsBg; + color: @optionsColor; + display: none; + position: absolute; + border-radius: 5px; + padding: 10px; + right: 100%; + top: 50%; + margin-top: -20px; + margin-right: 15px; + max-width: 200px; + min-width: 100px; + > p { + margin-top: 0; + } + dl { + margin: 0; + dt { + display: inline; + float: left; + clear: left; + font-weight: 600; + &:after { + content: ':'; + margin-right: 5px; + } + } + dd { + margin: 0; + } + } + } + + .truncated { + .truncated_full_value { + position: relative; + &.show { + &:before { + content: ''; + border-left: 10px solid @optionsBg; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + height: 0; + width: 0; + overflow: hidden; + display: block; + position: absolute; + top: 3px; + margin-top: 0; + left: -15px; + z-index: 2; + } + .item-options { + display: block; + } + } + } + .details { + font-size: @baseFontSizeMiddle; + border-bottom: 1px dotted @link; + cursor: help; + } + } +} + +/* + Page -> Advanced Search +-------------------------------------- */ +.form.search.advanced { + .range.price.fields.group { + .field { + .box-sizing(); + .column(6); + padding-right: 0; + } + .field:first-child input { + width: 96%; + } + } + .range.dates.fields.group { + .field { + .box-sizing(); + .column(6); + padding-right: 0; + .control { + padding-right: 20px; + } + } + .field:first-child .control { + padding-right: 50px; + .ui-datepicker-trigger { + right: 32px; + } + } + } + .group.price { + .addon { + .addafter { + color: @textColor; + border: none; + background: none; + } + } + } +} + +/* + Popular Search Terms +-------------------------------------- */ +.search.terms { + .resetList(); + .item { + display: inline-block; + margin-right: 3px; + } +} + +/* + My Account -> My orders +-------------------------------------- */ +.order.details { + .clearfix(); + + .status { + margin: 0 0 .5em; + line-height: 1.2; + font-weight: 400; + font-size: 30px; + float: left; + } + + .subtitle.caption, + .title { + strong { + line-height: 1.2; + font-weight: 200; + font-size: 20px; + } + .action { + margin-left: 10px; + } + } + + .subtitle.caption { + margin-bottom: 45px; + } + + .order.toolbar { + clear: none; + float: right; + + .action { + margin-left: 10px; + } + } + + .block.order { + float: left; + width: 48%; + padding-right: 2%; + + &.billing.address { + clear: left; + } + .content { + background: @primary1; + padding: 30px; + } + } + + .order.info { + clear: both; + + > dt { + line-height: 1.2; + font-weight: 200; + font-size: 20px; + } + + > dd { + margin: 10px 0 0 0; + background: @primary1; + padding: 30px; + + .items { + .clearfix(); + .item { + float: left; + margin-right: 15px; + } + } + } + } + + .additional.details { + margin-bottom: 45px; + .order.comments { + background: @primary1; + padding: 30px; + } + .subtitle.caption { + font-size: 20px; + font-weight: 200; + line-height: 1.2; + margin-bottom: 15px; + } + &.gift { + .gift.message { + background: @primary1; + padding: 30px; + dt { + margin: 0; + } + dd { + margin: 0 0 0 40px; + } + } + } + } +} + +.order.details.items { + .order.toolbar { + margin: 5px 0 0 0; + } + .order.title { + margin-bottom: 10px; + } + h3.product-name { + margin: 0; + } + .action.show { + text-decoration: none; + .iconAfter(@content: @icon-arrow-up-filled, @size: 12px, @font: "icons"); + &.expanded:after { + content: @icon-arrow-bottom-filled; + } + } +} + +.shipping-tracking-popup { + .action.close { + &:extend(.secondary.action all); + text-indent: 0; + + span { + width: auto; + text-indent: 0; + &:after { + content: ""; + display: none; + } + } + } +} + +.data.table.order { + margin-bottom: 45px; + width: 100%; + + thead th { + padding: 0 10px; + } + + thead tr:last-child th { + padding-bottom: 10px; + } + + td.col.qty { + width: 90px; + text-align: left; + } + + td.col.price, + td.col.subtotal { + text-align: left; + } + td { + padding: 16px 10px 10px; + vertical-align: top; + + h4 { + margin: 0; + } + } + td:first-child, + th:first-child { + padding-left: 20px; + } + td:last-child, + th:last-child { + padding-right: 20px; + } + tbody:nth-child(even) tr { + background: @primary1; + } + th { + text-align: left; + font-weight: 400; + font-size: 14px; + vertical-align: top; + } + tr:first-child th { + font-weight: 400; + font-size: 16px; + } + .item-options { + margin: 5px 0; + + dt { + font-weight: 400; + display: inline; + margin-right: 10px; + float: left; + clear: left; + + &:after { + content: ': '; + } + } + dd { + font-weight: 200; + margin: 0 0 5px 10px; + padding: 0; + } + } + + tfoot tr:first-child td { + border-top: 3px solid @primary2; + padding-top: 15px; + } + + &.tracking { + th, td { + padding: 0; + } + .label { + width: 40%; + } + } +} + +/* + My Account -> Billing agreements +-------------------------------------- */ +.billing.agreements { + .data.table { + margin-bottom: 40px; + } + .form.new.agreement { + .formCols(30%); + + .fieldset { + margin: 0; + > .legend { + margin: 0 0 20px; + } + } + + .action.create { + padding-top: 7px; + padding-bottom: 6px; + } + } +} + +/* + Overlay popup +-------------------------------------- */ +.window.overlay { + background: @primeBlackOpacity; + display: none; + min-height: 100%; + position: absolute; + top: 0; + left: 0; + width: 100%; + z-index: 990; + &.active { + display: block; + } +} + +.popup { + background: @primary7; + left: 50%; + top: 40%; + position: absolute; + margin: -85px 0 0 -250px; + width: 500px; + z-index: 1000; + position: fixed; + display: none; + &.active { + display: block; + } + .close span { + .iconHideText(); + } + .title { + font-size: 18px; + margin: 0 0 30px; + } +} diff --git a/app/design/frontend/magento_plushe/less/styles/base.less b/app/design/frontend/magento_plushe/less/styles/base.less new file mode 100644 index 00000000000..eeff2fad496 --- /dev/null +++ b/app/design/frontend/magento_plushe/less/styles/base.less @@ -0,0 +1,429 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ + +// #General reset +// For resetting default browser styles of standard html elements ClearLess library provides normalize or reset solution. Here we use **normalize**. It sets default parameters to certain values. +// +// **If the property of an element is not set directly in this document, it is inherited from normalize** (http://github.com/necolas/normalize.css) +// +// #General settings +// +// Applying custom font +// +// Setting font for html, body, button, input, select, textarea +// +// Reseting elements styles: nav ul, nav ol +// + +.font-face( "sourcesanspro", "@{baseDir}/fonts/sourcesanspro/sourcesanspro-200-normal-webfont", 200, normal, true ); +.font-face( "sourcesanspro", "@{baseDir}/fonts/sourcesanspro/sourcesanspro-200-normal-webfont", 200, normal, true ); +.font-face( "sourcesanspro", "@{baseDir}/fonts/sourcesanspro/sourcesanspro-400-normal-webfont", 400, normal, true ); +.font-face( "sourcesanspro", "@{baseDir}/fonts/sourcesanspro/sourcesanspro-600-normal-webfont", 600, normal, true ); +.font-face( "sourcesanspro", "@{baseDir}/fonts/sourcesanspro/sourcesanspro-700-normal-webfont", 700, normal, true ); +.font-face( "marvel", "@{baseDir}/fonts/marvel/marvel-400-normal-webfont", 400, normal, true ); + +.font-face( "icons", "@{baseDir}/fonts/icons/icons", 400, normal, true ); + +@baseDir: ~".."; //default + +html, body, button, input, select, textarea { + font: @baseFontWeight @baseFontSize/@baseLineHeight @baseFont; + color: @baseColor; +} + +nav ul, nav ol { + .resetList(); +} + +// # Headings +// +// ```html +// <h1>Heading 1</h1> +// +// <h2>Heading 2</h2> +// +// <h3>Heading 3</h3> +// +// <h4>Heading 4</h4> +// +// <h5>Heading 5</h5> +// +// <h6>Heading 6</h6> +// ``` +// + +h1 { + color: @h1color; + font: @h1font; +} + +h2 { + color: @h2color; + font: @h2font; +} + +h3 { + color: @h3color; + font: @h3font; +} + +h4 { + color: @h4color; + font: @h4font; +} + +h5 { + color: @h5color; + font: @h5font; +} + +h6 { + color: @h6color; + font: @h6font; +} + +// #Links +// +// ```html +// <a href="#">Link</a> +// <a class=":visited" href="#">Visited link</a> +// <a class=":hover" href="#">Hovered link</a> +// <a class=":active" href="#">Active link</a> +// ``` +// + +a { + color: @link; + text-decoration: none; + &:visited { + color: @link; + } + &:hover, + &:active { + color: @linkHover; + } +} + +// #Inline markup +// +// #abbr +// +// ```html +// The <abbr>abbr element</abbr> and <abbr title="Title text">abbr element with title</abbr> examples +// ``` + + +// #b +// +// ```html +// The <b>b element</b> example +// ``` + +// #strong +// +// ```html +// The <strong>strong element</strong> example +// ``` + +// #em +// +// ```html +// The <em>em element</em> example +// ``` +// + +// #i +// +// ```html +// The <i>i element</i> example +// ``` +// + +// #cite +// +// ```html +// The <cite>cite element</cite> example +// ``` +// + +// #code +// +// ```html +// The <code>code element</code> example +// ``` +// + +// #del +// +// ```html +// The <del>del element</del> example +// ``` +// + +// #s +// +// ```html +// The <s>s element</s> example +// ``` +// + +// #img +// +// ```html +// The img element <img src="http://lorempixel.com/16/16/abstract" alt="example"> example +// ``` +// + +// #mark +// +// ```html +// The <mark>mark element</mark> example +// ``` +// + +// #q +// +// ```html +// The <q>q element <q>inside</q> a q element</q> example +// ``` +// + +q { + &:before { + content: "\201c"; + } + &:after { + content: "\201d"; + } + q { + &:before { + content: "\2018"; + } + &:after { + content: "\2019"; + } + } +} + +// #small +// +// ```html +// The <small>small element</small> example +// ``` +// + +// #sub +// +// ```html +// The <sub>subscript element</sub> example +// ``` +// + +// #sup +// +// ```html +// The <sup>superscript element</sup> example +// ``` +// + +// #u +// +// ```html +// The <u>u element</u> example +// ``` +// + +// #Paragraph +// +// ```html +// <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi luctus. Duis lobortis. Nulla nec velit. Mauris pulvinar erat non massa. Suspendisse tortor turpis, porta nec, tempus vitae, iaculis semper, pede.</p> +// <p>Cras vel libero id lectus rhoncus porta. Suspendisse convallis felis ac enim. Vivamus tortor nisl, lobortis in, faucibus et, tempus at, dui.</p> +// ``` +// + +// #Ordered list +// +// ```html +// <ol> +// <li>Item 1</li> +// <li>Item 2</li> +// <li>Item 3 +// <ol> +// <li>Item 1</li> +// <li>Item 2</li> +// <li>Item 3</li> +// </ol> +// </li> +// <li>Item 4</li> +// </ol> +// ``` +// + +// #Unordered list +// +// ```html +// <ul> +// <li>Item 1</li> +// <li>Item 2</li> +// <li>Item 3 +// <ol> +// <li>Item 1</li> +// <li>Item 2</li> +// <li>Item 3</li> +// </ol> +// </li> +// <li>Item 4</li> +// </ul> +// ``` +// + +// #Descriptions +// +// ```html +// <dl> +// <dt>Title 1</dt> +// <dd>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi luctus. Duis lobortis. Nulla nec velit. Mauris pulvinar erat non massa. Suspendisse tortor turpis, porta nec, tempus vitae, iaculis semper, pede. Cras vel libero id lectus rhoncus porta. Suspendisse convallis felis ac enim. Vivamus tortor nisl, lobortis in, faucibus et, tempus at, dui. Nunc risus. Proin scelerisque augue. Nam ullamcorper. Phasellus id massa. Pellentesque nisl. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc augue. Aenean sed justo non leo vehicula laoreet. Praesent ipsum libero, auctor ac, tempus nec, tempor nec, justo.</dd> +// <dt>Title 2</dt> +// <dd>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi luctus. Duis lobortis. Nulla nec velit. Mauris pulvinar erat non massa. Suspendisse tortor turpis, porta nec, tempus vitae, iaculis semper, pede. Cras vel libero id lectus rhoncus porta. Suspendisse convallis felis ac enim. Vivamus tortor nisl, lobortis in, faucibus et, tempus at, dui. Nunc risus. Proin scelerisque augue. Nam ullamcorper. Phasellus id massa. Pellentesque nisl. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc augue. Aenean sed justo non leo vehicula laoreet. Praesent ipsum libero, auctor ac, tempus nec, tempor nec, justo.</dd> +// </dl> +// ``` +// + +// #Table +// +// ```html +// <table> +// <thead> +// <tr> +// <th>#</th> +// <th>Column 1</th> +// <th>Column 2</th> +// <th>Column 3</th> +// </tr> +// </thead> +// <tbody> +// <tr> +// <td>1</td> +// <td>Cell 4</td> +// <td>Cell 5</td> +// <td>Cell 6</td> +// </tr> +// <tr> +// <td>2</td> +// <td>Cell 7</td> +// <td>Cell 8</td> +// <td>Cell 9</td> +// </tr> +// <tr> +// <td>3</td> +// <td>Cell 10</td> +// <td>Cell 11</td> +// <td>Cell 12</td> +// </tr> +// <tr> +// <td>4</td> +// <td>Cell 13</td> +// <td>Cell 14</td> +// <td>Cell 15</td> +// </tr> +// <tr> +// <td>5</td> +// <td>Cell 16</td> +// <td>Cell 17</td> +// <td>Cell 18</td> +// </tr> +// </tbody> +// </table> +// ``` +// + +table { + th { + border-right: 1px solid @primary2; + font-size: @baseFontSizeBigger; + padding: 7px 10px; + &:last-child { + border-right: 0; + } + } + td { + border-right: 1px solid @primary2; + padding: 7px 10px; + vertical-align: top; + &:last-child { + border-right: 0; + } + } + tbody tr:nth-child(odd) td { + background: @primary1; + } +} + +// #Blockquote +// +// ```html +// <blockquote> +// <p>The cite element represents the title of a work (e.g. a book, a paper, an essay, a poem, a score, a song, a script, a film, a TV show, a game, a sculpture, a painting, a theatre production, a play, an opera, a musical, an exhibition, a legal case report, etc). This can be a work that is being quoted or referenced in detail (i.e. a citation), or it can just be a work that is mentioned in passing.</p> +// <p>A person's name is not the title of a work — even if people call that person a piece of work — and the element must therefore not be used to mark up people's names. (In some cases, the b element might be appropriate for names; e.g. in a gossip article where the names of famous people are keywords rendered with a different style to draw attention to them. In other cases, if an element is really needed, the span element can be used.)</p> +// <cite>http://www.w3.org/html/wg/drafts/html/master/text-level-semantics.html</cite> +// </blockquote> +// ``` +// + +blockquote { + margin: 10px 20px 10px 40px; + &:before { + color: @primary4; + content: "\201C"; + display: block; + font-family: Georgia, serif; + font-size: 60px; + font-style: italic; + position: absolute; + left: 15px; + top: 10px; + } + cite { + color: @primary4; + font-style: italic; + font-size: @baseFontSizeMiddle; + margin: 1em 0; + } +} + +// #HR +// +// ```html +// <hr> +// ``` +// + +hr { + background: @primary3; + border: 0; + color: @primary3; + height: 1px; + margin: 1em 0; +} diff --git a/app/design/frontend/magento_plushe/less/styles/magento.less b/app/design/frontend/magento_plushe/less/styles/magento.less new file mode 100644 index 00000000000..79fd72340b5 --- /dev/null +++ b/app/design/frontend/magento_plushe/less/styles/magento.less @@ -0,0 +1,1549 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ + +// #Mixins +// +// Common mixins used for styling magento elements +// + +.pagerLabel() { + font-weight: @baseFontWeight; + line-height: 25px; + margin-right: 5px; +} + +// #Search form +// +// ```html +// <div class="block search"> +// <div class="title"><strong>Search</strong></div> +// <div class="content search"> +// <form class="form minisearch"> +// <div class="field search"> +// <label for="search" class="label">Search</label> +// <div class="control"> +// <input type="text" class="input-text" placeholder="Search entire store here..." value="" name="q"> +// <a href="#" class="action advanced">Advanced Search</a> +// </div> +// </div> +// <div class="actions"> +// <button class="action search" type="submit"><span>Search</span></button> +// </div> +// </form> +// </div> +// </div> +// ``` +// + +.block.search { + input { + border-radius: 3px 0 0 3px; + border-right: 0; + float: left; + width: 100%; + &:focus + { + border-color: @primary3; + } + } + .field .control { + width: 260px; + } + .label, + > .title, + .action.advanced { + display: none; + } + .action.search { + background: @primary7; + border: 1px solid @primary3; + border-radius: 0 3px 3px 0; + color: @primary3; + float: left; + padding: 7px; + &:hover { + color: @primary6; + } + span { + .iconAfter(@icon-magnifying-glass, 16px, 0, 'icons'); + .iconHideText(16px); + } + .search.autocomplete { + display: none !important; + } + } + ::-webkit-input-placeholder { + color: @primary4; + } + :-moz-placeholder { + color: @primary4; + } + ::-moz-placeholder { + color: @primary4; + } + :-ms-input-placeholder { + color: @primary4; + } +} + +// #Newsletter sign up form +// +// ```html +// <div class="block newsletter"> +// <div class="title"><strong>Newsletter</strong></div> +// <div class="content"> +// <form> +// <div class="field newsletter"> +// <label for="newsletter" class="label">Sign Up for Our Newsletter:</label> +// <div class="control"> +// <input type="text" placeholder="Enter your email address" name="email"> +// </div> +// <div class="actions"> +// <button type="submit" title="Subscribe" class="action subscribe"> +// <span>Subscribe</span> +// </button> +// </div> +// </div> +// </form> +// </div> +// </div> +// ``` +// + +.block.newsletter { + > .title { + display: none; + } + .label { + display: block; + font-size: @baseFontSizeBigger; + line-height: 1.2; + margin-bottom: 10px; + } + .control { + .box-sizing(); + float: left; + padding-right: 45px; + width: 100%; + } + input[type="text"] { + width: 100%; + } + .actions { + float: right; + margin-left: -45px; + padding-left: 10px; + } + .action.subscribe { + .box-sizing(); + background: @primaryActionBg; + border-radius: 3px; + border: 1px solid @primaryActionBg; + padding: 7px; + vertical-align: top; + &:hover { + background: @primaryActionBgH; + } + span { + .iconAfter(@icon-envelope, 16px, 0, "icons"); + .iconHideText(16px); + color: @primary7; + } + } +} + +// #Mage Catalog +// +// #Breadcrumbs +// +// ```html +// <div class="breadcrumbs"> +// <ul class="items"> +// <li class="item"> +// <a href="#">Home</a> +// </li> +// <li class="item"> +// <a href="#">Level 1</a> +// </li> +// <li class="item"> +// <strong>Level 2</strong> +// </li> +// </ul> +// </div> +// ``` +// + +.breadcrumbs { + font-size: @baseFontSizeMiddle; + .items { + margin: 0; + padding: 0; + } + .item { + display: inline; + font-weight: @baseFontWeightLighter; + &:before { + content: " / "; + } + &:first-child:before { + content: ""; + } + } + strong { + font-weight: @baseFontWeight; + } +} + +// #Pager +// +// ```html +// <div class="pages"> +// <strong class="label">Page</strong> +// <ol class="items"> +// <li class="item"><a href="#" class="action previous"><span>Previous</span></a></li> +// <li class="item"><a href="#"><span>1</span></a></li> +// <li class="item current"><strong><span>2</span></strong></li> +// <li class="item"><a href="#"><span>3</span></a></li> +// <li class="item"><a title="Next" href="#" class="action next"><span>Next</span></a></li> +// </ol> +// </div> +// ``` +// + +.pages { + ol { + .resetList(); + } + .item { + display: inline-block; + } + a { + padding: 0 3px; + } + strong { + color: @secondary1; + font-weight: normal; + padding: 0 3px; + } + > .label { + display: none; + } + .action { + &.previous { + .iconAfter(@icon-arrow-left-thick, 16px, 0, "icons"); + .iconHideText(16px); + display: inline-block; + } + &.next { + .iconAfter(@icon-arrow-right-thick, 16px, 0, "icons"); + .iconHideText(16px); + display: inline-block; + } + color: @primary3; + &:hover { + color: darken(@primary3, 20%); + } + } +} + +// #View switcher +// +// ```html +// <div class="modes"> +// <strong class="label">View as</strong> +// <strong class="mode active grid"> +// <span>Grid</span> +// </strong> +// <a href="#" class="mode list"> +// <span>List</span> +// </a> +// <strong class="label">View as</strong> +// <a href="#" class="mode grid"> +// <span>Grid</span> +// </a> +// <strong class="mode active list"> +// <span>List</span> +// </strong> +// </div> +// ``` +// + +.modes { + .label { + display: none; + } + .mode { + border: 1px solid @primary3; + color: @primary3; + display: inline-block; + margin: 0 3px; + overflow: hidden; + padding: 4px; + &.active { + background: @primary3; + border-color: @primary3; + cursor: default; + color: @primary7; + span { + color: @primary7; + } + &:hover { + background: @primary3; + border-color: @primary3; + color: @primary7; + span { + color: @primary7; + } + } + } + &:hover { + background: @primary4; + border-color: @primary4; + color: @primary7; + span { + color: @primary7; + } + } + &.grid { + .iconAfter(@icon-grid, 13px, 0, "icons"); + .iconHideText(13px); + display: inline-block; + } + &.list { + .iconAfter(@icon-list, 13px, 0, "icons"); + .iconHideText(13px); + display: inline-block; + } + } +} + +// #"Sort by" switcher +// +// ```html +// <div class="sorter"> +// <label for="sorter" class="label">Sort By</label> +// <select data-mage-redirect="{'event':'change'}" id="sorter"> +// <option selected="selected" value="">Position</option> +// <option value="">Name</option> +// <option value="">Price</option> +// </select> +// <a class="action sort desc" title="Set Ascending Direction" href="#"> +// <span>Set Ascending Direction</span> +// </a> +// <a class="action sort asc" title="Set Descending Direction" href="#"> +// <span>Set Descending Direction</span> +// </a> +// </div> +// ``` +// + +.sorter { + .label { + .pagerLabel(); + } + select { + padding: 0; + } + .action.sort { + &.desc { + .iconAfter(@icon-arrow-down-thick, 13px, 0, "icons"); + .iconHideText(13px); + display: inline-block; + } + &.asc { + .iconAfter(@icon-arrow-up-thick, 13px, 0, "icons"); + .iconHideText(13px); + display: inline-block; + } + } +} + +// #Pager limiter +// +// ```html +// <div class="limiter"> +// <strong class="label">Show</strong> +// <select data-mage-redirect="{'event':'change'}" id="limiter"> +// <option selected="selected" value="">5</option> +// <option value="">10</option> +// <option value="">15</option> +// <option value="">All</option> +// </select> +// <span class="text">per page</span> +// </div> +// ``` +// + +.limiter { + .label { + .pagerLabel(); + } + select { + padding: 0; + } + .text { + display: none; + } +} + +// #Tags +// +// ```html +// <ul class="tags items cloud"> +// <li class="tag item"> +// <a class="tag text" href="#" style="font-size:75%;">widget</a> +// <span class="amount">34</span> +// </li> +// <li class="tag item"> +// <a class="tag text" href="#" style="font-size:75%;">plugin</a> +// <span class="amount">6</span> +// </li> +// <li class="tag item"> +// <a class="tag text" href="#" style="font-size:145%;">admin</a> +// <span class="amount">2</span> +// </li> +// <li class="tag item"> +// <a class="tag text" href="#" style="font-size:75%;">sidebar</a> +// <span class="amount">4</span> +// </li> +// <li class="tag item"> +// <a class="tag text" href="#" style="font-size:110%;">comments</a> +// <span class="amount">1</span> +// </li> +// </ul> +// ``` +// + +.tags.items.cloud { + .resetList(); + margin: 0 0 20px; + .item { + .resetList(); + display: inline-block; + margin: 0 0 5px 5px; + &:first-child { + margin-left: 0; + } + } + .amount { + margin-left: 3px; + &:before { + content: '('; + } + &:after { + content: ')'; + } + } +} + +// #Ratings +// +// ```html +// <div class="field ratings"> +// <label class="label"><span>How do you rate this product?</span></label> +// <div class="control"> +// <div class="nested"> +// <div class="field rating"> +// <label class="label"><span>Price</span></label> +// <div class="control"> +// <input type="radio" name="ratings[3]" id="Price_1" value="11"> +// <label class="rating-1" for="Price_1" title="1 star"> +// <span>1 star</span> +// </label> +// <input type="radio" name="ratings[3]" id="Price_2" value="12"> +// <label class="rating-2" for="Price_2" title="2 stars"> +// <span>2 stars</span> +// </label> +// <input type="radio" name="ratings[3]" id="Price_3" value="13"> +// <label class="rating-3" for="Price_3" title="3 stars"> +// <span>3 stars</span> +// </label> +// <input type="radio" name="ratings[3]" id="Price_4" value="14"> +// <label class="rating-4" for="Price_4" title="4 stars"> +// <span>4 stars</span> +// </label> +// <input type="radio" name="ratings[3]" id="Price_5" value="15"> +// <label class="rating-5" for="Price_5" title="5 stars"> +// <span>5 stars</span> +// </label> +// </div> +// </div> +// <div class="field rating"> +// <label class="label"><span>Value</span></label> +// <div class="control"> +// <input type="radio" name="ratings[2]" id="Value_1" value="6"> +// <label class="rating-1" for="Value_1" title="1 star"> +// <span>1 star</span> +// </label> +// <input type="radio" name="ratings[2]" id="Value_2" value="7"> +// <label class="rating-2" for="Value_2" title="2 stars"> +// <span>2 stars</span> +// </label> +// <input type="radio" name="ratings[2]" id="Value_3" value="8"> +// <label class="rating-3" for="Value_3" title="3 stars"> +// <span>3 stars</span> +// </label> +// <input type="radio" name="ratings[2]" id="Value_4" value="9"> +// <label class="rating-4" for="Value_4" title="4 stars"> +// <span>4 stars</span> +// </label> +// <input type="radio" name="ratings[2]" id="Value_5" value="10"> +// <label class="rating-5" for="Value_5" title="5 stars"> +// <span>5 stars</span> +// </label> +// </div> +// </div> +// <div class="field rating"> +// <label class="label"><span>Quality</span></label> +// <div class="control"> +// <input type="radio" name="ratings[1]" id="Quality_1" value="1"> +// <label class="rating-1" for="Quality_1" title="1 star"> +// <span>1 star</span> +// </label> +// <input type="radio" name="ratings[1]" id="Quality_2" value="2"> +// <label class="rating-2" for="Quality_2" title="2 stars"> +// <span>2 stars</span> +// </label> +// <input type="radio" name="ratings[1]" id="Quality_3" value="3"> +// <label class="rating-3" for="Quality_3" title="3 stars"> +// <span>3 stars</span> +// </label> +// <input type="radio" name="ratings[1]" id="Quality_4" value="4"> +// <label class="rating-4" for="Quality_4" title="4 stars"> +// <span>4 stars</span> +// </label> +// <input type="radio" name="ratings[1]" id="Quality_5" value="5"> +// <label class="rating-5" for="Quality_5" title="5 stars"> +// <span>5 stars</span> +// </label> +// </div> +// </div> +// </div> +// </div> +// </div> +// ``` +// + +.field.ratings { + @starSize: 16px; + border-bottom: 1px solid; + .borderColor(@primary1); + padding-bottom: 15px; + margin-bottom: 30px; + overflow: hidden; + position: relative; + z-index: 1; + .nested { + display: table; + } + .field.rating { + display: table-row; + > .label { + display: table-cell; + vertical-align: top; + padding: 6px 0; + } + .control { + padding: 5px 10px; + display: table-cell; + z-index: 1; + &:before { + letter-spacing: 0.2em; + position: absolute; + z-index: 1; + display: block; + float: left; + font-family: "icons"; + content: "\e009\e009\e009\e009\e009"; + font-style: normal; + font-size: @starSize; + color: fade(@secondary1, 30%); + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + } + input:focus + label:before, + input:checked + label:before { + color: @secondary1; + opacity: 1; + } + input[type="radio"] { + position: absolute; + margin-left: -999em; + } + label { + position: absolute; + display: block; + span { + display: none; + } + &:before { + letter-spacing: 0.2em; + font-family: "icons"; + font-style: normal; + font-size: @starSize; + speak: none; + font-weight: normal; + -webkit-font-smoothing: antialiased; + opacity: 0; + } + &:hover { + &:before { + color: @secondary1; + opacity: 1; + } + & ~ label:before { + opacity: 0 !important; + } + } + cursor: pointer; + } + .rating-1 { + z-index: 6; + &:before { + content: "\e009"; + } + } + .rating-2 { + z-index: 5; + &:before { + content: "\e009\e009"; + } + } + .rating-3 { + z-index: 4; + &:before { + content: "\e009\e009\e009"; + } + } + .rating-4 { + z-index: 3; + &:before { + content: "\e009\e009\e009\e009"; + } + } + .rating-5 { + z-index: 2; + &:before { + content: "\e009\e009\e009\e009\e009"; + } + } + } + } +} + +// #Login form +// The login form's design differs from default form layout: labels are in the same line as inputs (in default form layout labels and corresponding inputs are in different lines) The code is the same, it differs only with styles. +// +// ```html +// <fieldset class="fieldset login"> +// <div class="field email required"> +// <label for="email" class="label"><span>Email Address</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="login[username]"> +// </div> +// </div> +// <div class="field password required"> +// <label class="label" for="pass"><span>Password</span></label> +// <div class="control"> +// <input type="password" class="input-text" name="login[password]"> +// </div> +// </div> +// <div class="actions"> +// <div class="primary"> +// <button id="send2" name="send" class="action login" type="submit"><span>Login</span></button> +// </div> +// <div class="secondary"><a href="#" class="action remind"><span>Forgot Your Password?</span></a></div> +// </div> +// </fieldset> +// ``` +// + +.fieldset { + &.login { + margin: 0; + padding: 0; + > .field { + .clearfix(); + > .label { + .box-sizing(); + float: left; + margin: 0; + padding-right: 10px; + padding-top: 7px; + text-align: right; + width: 40%; + } + > .control { + float: left; + margin: 0; + width: 60%; + } + } + .actions { + text-align: right; + .action.login { + &:extend(.primary.action all); + } + .secondary { + margin-top: 0.8em; + } + } + } +} + +// #Loader +// +// ```html +// <div class="loader"></div> +// ``` +// + +.loader { + background: url("@{baseDir}/images/loader.gif") no-repeat 50% 50%; + .size(20px); +} + +// #Button with loader +// +// ```html +// <button class="action mySecondaryButton loading">Loading</button> +// ``` +// + +.action.mySecondaryButton { + &:extend(.secondary.action all); + &.loading { + padding-right: 30px; + position: relative; + &:after { + background: url("@{baseDir}/images/loader.gif") no-repeat 50% 50%; + .size(16px); + content: ""; + margin: -8px 0 0; + position: absolute; + right: 7px; + top: 50%; + } + } +} + +// #Text block under loader +// +// ```html +// <div class="textUnderLoader loading"> +// <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed lobortis magna, quis tincidunt elit. Donec molestie scelerisque ligula, ut eleifend nisl laoreet nec. Vivamus dapibus urna id risus porttitor cursus.</p> +// <p>Etiam lorem leo, accumsan quis est sit amet, tempus pellentesque ante. Donec rutrum convallis lacus, ac iaculis nulla scelerisque a. Pellentesque malesuada, mi eu condimentum volutpat, mi turpis congue sapien, et ornare nunc nunc vitae nibh. Duis scelerisque purus a sapien ultrices tempor. Sed nec blandit mauris, vel volutpat dolor.</p> +// <p>Vestibulum viverra tempus mi a accumsan. Nunc congue quis leo sed scelerisque. Fusce scelerisque magna nulla, sed malesuada nunc congue vel. Donec placerat malesuada bibendum. Nam bibendum nunc at neque consequat placerat. Aenean eu rutrum sapien. Vivamus vel mi urna. Suspendisse sit amet elit nunc.</p> +// </div> +// ``` +// + +.textUnderLoader { + background: @primary1; + border: 1px solid @primary3; + padding: 10px 20px; + &.loading { + position: relative; + &:before { + background: @primary7; + opacity: 0.7; + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + } + &:after { + background: url("@{baseDir}/images/loader.gif") no-repeat 50% 50%; + .size(16px); + content: ""; + margin: -8px 0 0 -8px; + position: absolute; + left: 50%; + top: 50%; + } + } +} + +// #Mage Checkout +// +// #Checkout address form +// The checkout address form has specific logical fields grouping. Here styles are provided to separate the logical groups. The code is the same, it differs only with styles. +// +// ```html +// <div class="opc wrapper"> +// <form data-hasrequired="* Required Fields" class="form billing"> +// <div class="field addresses"> +// <label for="billing-address-select" class="label"><span>Select a billing address from your address book or enter a new address.</span></label> +// <div class="control"> +// <select class="address-select" name="billing_address_id"> +// <option value="">New Address</option> +// </select> +// </div> +// </div> +// <fieldset class="fieldset address"> +// <div class="field name-firstname required"> +// <label for="billing:firstname" class="label"><span>First Name</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="billing[firstname]"> +// </div> +// </div> +// <div class="field name-lastname required"> +// <label for="billing:lastname" class="label"><span>Last Name</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="billing[lastname]"> +// </div> +// </div> +// <div class="field company"> +// <label for="billing:company" class="label"><span>Company</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="billing[company]"> +// </div> +// </div> +// <div class="field street required"> +// <label for="billing:street1" class="label"><span>Address</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="billing[street][]"> +// <div class="nested"> +// <div class="field additional no-label"> +// <div class="control"> +// <input type="text" class="input-text " value="" name="billing[street][]"> +// </div> +// </div> +// </div> +// </div> +// </div> +// <div class="field city required"> +// <label for="billing:city" class="label"><span>City</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="billing[city]"> +// </div> +// </div> +// <div class="field region required"> +// <label for="billing:region_id" class="label"><span>State/Province</span></label> +// <div class="control"> +// <select name="billing[region_id]" defaultvalue="43"> +// <option value="">Please select region, state or province</option> +// <option title="Alabama" value="1">Alabama</option> +// <option title="Alaska" value="2">Alaska</option> +// <option title="Arizona" value="4">Arizona</option> +// </select> +// </div> +// </div> +// <div class="field zip required"> +// <label for="billing:postcode" class="label"><span>Zip/Postal Code</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="billing[postcode]"> +// </div> +// </div> +// <div class="field country required"> +// <label for="billing:country_id" class="label"><span>Country</span></label> +// <div class="control"> +// <select class="validate-select" name="billing[country_id]"> +// <option value=""></option> +// <option value="GB">United Kingdom</option> +// <option value="US">United States</option> +// </select> +// </div> +// </div> +// <div class="field telephone required"> +// <label for="billing:telephone" class="label"><span>Telephone</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="billing[telephone]"> +// </div> +// </div> +// <div class="field fax"> +// <label for="billing:fax" class="label"><span>Fax</span></label> +// <div class="control"> +// <input type="text" class="input-text" value="" name="billing[fax]"> +// </div> +// </div> +// <div class="field save choice"> +// <input type="checkbox" class="checkbox" value="1" name="billing[save_in_address_book]"> +// <label for="billing:save_in_address_book" class="label"><span>Save in address book</span></label> +// </div> +// </fieldset> +// <div class="field choice"> +// <input type="radio" class="radio" checked="checked" value="1" name="billing[use_for_shipping]"> +// <label for="billing:use_for_shipping_yes" class="label"><span>Ship to this address</span></label> +// </div> +// <div class="field choice"> +// <input type="radio" class="radio" value="0" name="billing[use_for_shipping]"> +// <label for="billing:use_for_shipping_no" class="label"><span>Ship to different address</span></label> +// </div> +// <div id="billing-buttons-container" class="actions buttons-set form-buttons btn-only"> +// <div class="primary"> +// <button class="button action continue" type="button"><span>Continue</span></button> +// </div> +// </div> +// </form> +// </div> +// ``` +// + +.opc { + .fieldset { + margin: 20px 0; + .formCols(); + } + .field { + margin-bottom: 10px; + } + .field.fullname + .field.company, + .field.name-lastname + .field.company, + .field.country, + .field.taxvat { + margin: 0 40% 30px 0; + } + .actions .primary .action { + &:extend(.primary.action all); + } + .form { + &:extend(.hasRequired all); + } +} + +// #Payment method credit card form +// This form differs from the standard layout by its code and by design. Here labels are in the same line as inputs. It is necessary to replace the code by the new one. +// +// ```html +// <ul class="form-list"> +// <li> +// <label for="ccsave_cc_type" class="required"><em>*</em>Credit Card Type</label> +// <div class="input-box"> +// <select id="ccsave_cc_type" name="payment[cc_type]"> +// <option value="">--Please Select--</option> +// <option value="AE">American Express</option> +// <option value="VI">Visa</option> +// <option value="MC">MasterCard</option> +// <option value="DI">Discover</option> +// </select> +// </div> +// </li> +// <li> +// <label for="ccsave_cc_number" class="required"><em>*</em>Credit Card Number</label> +// <div class="input-box"> +// <input type="text" name="payment[cc_number]" class="input-text" value=""> +// </div> +// </li> +// <li> +// <label for="ccsave_expiration" class="required"><em>*</em>Expiration Date</label> +// <div class="input-box"> +// <div class="v-fix"> +// <select name="month" class="month"> +// <option value="" selected="selected">Month</option> +// <option value="1">01 - January</option> +// <option value="2">02 - February</option> +// <option value="3">03 - March</option> +// <option value="4">04 - April</option> +// <option value="5">05 - May</option> +// <option value="6">06 - June</option> +// <option value="7">07 - July</option> +// <option value="8">08 - August</option> +// <option value="9">09 - September</option> +// <option value="10">10 - October</option> +// <option value="11">11 - November</option> +// <option value="12">12 - December</option> +// </select> +// </div> +// <div class="v-fix"> +// <select name="year" class="year"> +// <option value="" selected="selected">Year</option> +// <option value="2013">2013</option> +// <option value="2014">2014</option> +// <option value="2015">2015</option> +// <option value="2016">2016</option> +// <option value="2017">2017</option> +// <option value="2018">2018</option> +// <option value="2019">2019</option> +// <option value="2020">2020</option> +// <option value="2021">2021</option> +// <option value="2022">2022</option> +// <option value="2023">2023</option> +// </select> +// </div> +// </div> +// </li> +// </ul> +// ``` +// + +.form-list { + .resetList(); + .required { + em { + display: none; + } + &:first-child:after { + color: @requiredField; + content: '*'; + } + } + > li { + .clearfix(); + margin: 0 0 10px; + .field { + .clearfix(); + margin: 10px 0 0; + &:first-child { + margin: 0; + } + } + > label, + .field > label { + .box-sizing(); + clear: left; + float: left; + padding: 7px 10px 0 0; + text-align: right; + width: 30%; + } + .input-box { + float: left; + width: 70%; + > input, + > select, + > textarea { + width: 100%; + } + > .v-fix { + float: left; + margin: 0 10px 0 0; + } + } + } +} + +// #Shopping Cart +// #Shopping cart estimation settings +// The shopping card estimation settings design differs from standard form layout by the code and by the design. Here the code and the styles are provided. +// +// ```html +// <div class="cart summary"> +// +// <div class="block shipping active"> +// <div class="title active"><strong>Estimate Shipping and Tax</strong></div> +// <div class="content"> +// <form> +// <fieldset class="fieldset estimate"> +// <p class="field note">Enter your destination to get a shipping estimate.</p> +// <div class="field country"> +// <label for="country" class="label"><span>Country</span></label> +// <div class="control"> +// <select name="country_id" id="country" class="validate-select" title="Country"> +// <option value=""></option> +// <option value="GB">United Kingdom</option> +// <option value="US">United States</option> +// </select> +// </div> +// </div> +// <div class="field region"> +// <label for="region_id" class="label"><span>State/Province</span></label> +// <div class="control"> +// <select name="region_id" title="State/Province" class="required-entry" defaultvalue="43"> +// <option value=""></option> +// <option value="1" title="Alabama">Alabama</option> +// <option value="2" title="Alaska">Alaska</option> +// <option value="4" title="Arizona">Arizona</option> +// </select> +// </div> +// </div> +// <div class="field city"> +// <label for="city" class="label"><span>City</span></label> +// <div class="control"> +// <input class="input-text" type="text" name="estimate_city" value=""> +// </div> +// </div> +// <div class="field postcode"> +// <label for="postcode" class="label"><span>Zip/Postal Code</span></label> +// <div class="control"> +// <input class="input-text validate-postcode required-entry" type="text" name="estimate_postcode" value=""> +// </div> +// </div> +// <div class="actions"> +// <button type="submit" class="action quote"><span>Get a Quote</span></button> +// </div> +// </fieldset> +// </form> +// <form> +// <fieldset class="fieldset rates"> +// <dl class="items methods"> +// <dt class="item title"><span>Flat Rate</span></dt> +// <dd class="item options"> +// <div class="field choice item"> +// <input type="radio" class="radio" value="flatrate_flatrate" name="estimate_method"> +// <label for="s_method_flatrate_flatrate" class="label"> +// <span>Fixed</span> +// <span class="price">$15.00</span> +// </label> +// </div> +// </dd> +// </dl> +// <div class="actions"> +// <button value="Update Total" name="do" class="action update" type="submit"><span>Update Total</span></button> +// </div> +// </fieldset> +// </form> +// </div> +// +// <div class="block discount active"> +// <div class="title active"><strong>Discount Codes</strong></div> +// <div class="content"> +// <form> +// <fieldset class="fieldset coupon"> +// <div class="field"> +// <label class="label" for="coupon_code"><span>Enter your coupon code if you have one.</span></label> +// +// <div class="control"> +// <input type="text" value="" name="coupon_code" class="input-text"> +// </div> +// </div> +// <div class="actions"> +// <div class="primary"> +// <button value="Apply Coupon" type="button" class="action apply"> +// <span>Apply Coupon</span> +// </button> +// </div> +// </div> +// </fieldset> +// </form> +// </div> +// </div> +// </div> +// +// +// </div> +// ``` +// + +.cart.summary { + .fieldset { + border: 0; + font-size: @baseFontSizeMiddle; + padding: 0; + margin: 0; + .field { + margin: 0 0 10px; + &:not(.choice) { + .label { + padding: 0 0 5px; + display: block; + } + } + } + .action:not(.check) { + &:extend(.primary.action all); + padding: 6px 11px 5px; + span { + font-size: @baseFontSizeMiddle; + line-height: @baseFontSizeMiddle; + } + } + &.coupon, + &.estimate { + .actions { + display: table-cell; + width: 1%; + white-space: nowrap; + vertical-align: bottom; + } + } + &.coupon .field, + .field.postcode { + display: table-cell; + padding-right: 10px; + vertical-align: bottom; + width: 99%; + div.mage-error { + position: absolute; + } + } + &.rates { + padding-top: 25px; + .actions { + text-align: right; + } + } + } + .title { + cursor: pointer; + line-height: @baseFontSizeBigger; + margin: 0; + padding: 10px 5px; + } + .content { + padding: 15px 15px 20px; + } + input[type="text"] { + padding: 0 5px; + font-size: 12px; + height: 30px; + } + select { + padding: 5px 5px 4px; + font-size: 12px; + } + .items.methods { + dt { + font-weight: @baseFontWeightBolder; + } + dd { + margin: 10px 10px 25px; + } + } +} + +// #Popup +// ```html +// <div class="popup"> +// <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed lobortis magna, quis tincidunt elit. Donec molestie scelerisque ligula, ut eleifend nisl laoreet nec. Vivamus dapibus urna id risus porttitor cursus.</p> +// <p>Etiam lorem leo, accumsan quis est sit amet, tempus pellentesque ante. Donec rutrum convallis lacus, ac iaculis nulla scelerisque a. Pellentesque malesuada, mi eu condimentum volutpat, mi turpis congue sapien, et ornare nunc nunc vitae nibh. Duis scelerisque purus a sapien ultrices tempor. Sed nec blandit mauris, vel volutpat dolor.</p> +// <p>Vestibulum viverra tempus mi a accumsan. Nunc congue quis leo sed scelerisque. Fusce scelerisque magna nulla, sed malesuada nunc congue vel. Donec placerat malesuada bibendum. Nam bibendum nunc at neque consequat placerat. Aenean eu rutrum sapien. Vivamus vel mi urna. Suspendisse sit amet elit nunc.</p> +// <span data-dismiss="popup" class="close"></span> +// </div> +// <br> +// <br> +// <div class="popup system"> +// <header class="header"> +// Popup header +// </header> +// <div class="content"> +// <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed lobortis magna, quis tincidunt elit. Donec molestie scelerisque ligula, ut eleifend nisl laoreet nec. Vivamus dapibus urna id risus porttitor cursus.</p> +// <p>Etiam lorem leo, accumsan quis est sit amet, tempus pellentesque ante. Donec rutrum convallis lacus, ac iaculis nulla scelerisque a. Pellentesque malesuada, mi eu condimentum volutpat, mi turpis congue sapien, et ornare nunc nunc vitae nibh. Duis scelerisque purus a sapien ultrices tempor. Sed nec blandit mauris, vel volutpat dolor.</p> +// <p>Vestibulum viverra tempus mi a accumsan. Nunc congue quis leo sed scelerisque. Fusce scelerisque magna nulla, sed malesuada nunc congue vel. Donec placerat malesuada bibendum. Nam bibendum nunc at neque consequat placerat. Aenean eu rutrum sapien. Vivamus vel mi urna. Suspendisse sit amet elit nunc.</p> +// </div> +// <footer class="footer"> +// <div class="actions"> +// <button type="button" class="action submit">OK</button> +// <button type="button" class="action cancel">Cancel</button> +// </div> +// </footer> +// <span data-dismiss="popup" class="close"></span> +// </div> +// </div> +// +// <div class="wrapper"> +// <div class="fade"> +// <div class="popup"> +// <header class="header"> +// Popup header +// </header> +// <div class="content"> +// <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sed lobortis magna, quis tincidunt elit. Donec molestie scelerisque ligula, ut eleifend nisl laoreet nec. Vivamus dapibus urna id risus porttitor cursus.</p> +// <p>Etiam lorem leo, accumsan quis est sit amet, tempus pellentesque ante. Donec rutrum convallis lacus, ac iaculis nulla scelerisque a. Pellentesque malesuada, mi eu condimentum volutpat, mi turpis congue sapien, et ornare nunc nunc vitae nibh. Duis scelerisque purus a sapien ultrices tempor. Sed nec blandit mauris, vel volutpat dolor.</p> +// <p>Vestibulum viverra tempus mi a accumsan. Nunc congue quis leo sed scelerisque. Fusce scelerisque magna nulla, sed malesuada nunc congue vel. Donec placerat malesuada bibendum. Nam bibendum nunc at neque consequat placerat. Aenean eu rutrum sapien. Vivamus vel mi urna. Suspendisse sit amet elit nunc.</p> +// </div> +// <footer class="footer"> +// Some footer text +// <div class="actions"> +// <button type="button" class="action submit">OK</button> +// <button type="button" class="action cancel">Cancel</button> +// </div> +// </footer> +// <span class="close" data-dismiss="popup"></span> +// </div> +// </div> +// </div> +// ``` +// + +.popup { + background: @primary2; + border: 1px solid @primary3; + display: inline-block; + padding: 20px; + position: relative; + .close { + color: @primary4; + cursor: pointer; + position: absolute; + right: 5px; + top: 3px; + .iconBefore(@icon-close-thick, 12px, 0, "icons"); + &:hover { + color: @primary6; + } + } + .fade & { + background: @pageMainBg; + box-shadow: 0 0 10px 0 @primary4; + } + > .header, + > .content { + margin: 0 0 5px; + } + > .header { + font-size: @baseFontSizeBigger; + font-weight: @baseFontWeightBolder; + } + .actions { + margin: 15px 0 0; + .action.submit { + &:extend(.primary.action all); + margin-right: 10px; + } + .action.cancel { + &:extend(.secondary.action all); + } + } + &.system { + background: @pageMainBg; + padding: 0; + > .header { + background: @primary2; + border-bottom: 1px solid @primary3; + border-radius: 5px 5px 0 0; + cursor: move; + padding: 10px 20px; + } + > .content { + padding: 20px; + } + > .footer { + border-top: 1px solid @primary3; + padding: 10px 20px; + } + .actions { + margin: 0; + } + .close { + right: 8px; + top: 8px; + } + } +} + +.fade { + background-color: @primeBlackOpacity; + position: relative; + left: 0; + top: 0; + right: 0; + bottom: 0; + padding: 10%; +} + + +// #CSS tooltip +// +// ####Accepted parameters +// **.tooltipSimple(*[background]*, *[color]*, *[fontSize]*, *[margin]*, *[padding]*, *[maxWidth]*, *[cursor]*);** +// +// Tooltip can be added to any element +// ```html +// Projects in Sublime Text capture the full contents of the workspace, +// <span class="tooltip"> +// <strong>Your content</strong> +// <div class="tooltip-content">Tooltip content</div> +// </span> +// including modified and unsaved files. +// You can switch between projects in a manner similar to Goto Anything, +// and the switch is instant, with no save prompts - all your modifications will be restored next time the project is opened. +// ``` +// + +// #Radiobutton tooltip +// +// ```html +// <div class="field choice tooltip"> +// <input type="radio" class="radio" checked="" value="1" name="inputRadio"> +// <label for="inputRadio" class="label"><span>Radiobutton choice</span></label> +// <div class="tooltip-content">Tooltip content</div> +// </div> +// ``` + +.tooltip { + .tooltipCSS(rgba(0,0,0,.5), #fff, 16px, 10px 0 0, 8px, 500px, help); +} + +// #JS tooltip: +// +// ####Accepted parameters +// **.tooltipJS(*[background]*, *[color]*, *[fontSize]*, *[padding]*, *[maxWidth]*);** +// +// ####Add attributes to the tag: +// +// **tooltip**="text tooltip" +// +// **tooltip-position**="n, nw, ne, w, e, s, sw, se" +// +// ```html +// <div class="example-tooltips"> +// <button tooltip="Tooltip content positioned by <strong class='example-tooltip-elem'>tooltip-position='nw'</strong>" tooltip-position="nw"> +// <span>↖</span> +// </button> +// <button tooltip="Tooltip content positioned by <strong class='example-tooltip-elem'>tooltip-position='n'</strong>" tooltip-position="n"> +// <span>↑</span> +// </button> +// <button tooltip="Tooltip content positioned by <strong class='example-tooltip-elem'>tooltip-position='ne'</strong>" tooltip-position="ne"> +// <span>↗</span> +// </button> +// <div class="separator"></div> +// <button tooltip="Tooltip content positioned by <strong class='example-tooltip-elem'>tooltip-position='w'</strong>" tooltip-position="w"> +// <span>←</span> +// </button> +// <button tooltip="Default tooltip content from <strong class='example-tooltip-elem'>'tooltip'</strong> attribute"> +// <span>Default</span> +// </button> +// <button tooltip="Tooltip content positioned by <strong class='example-tooltip-elem'>tooltip-position='e'</strong>" tooltip-position="e"> +// <span>→</span> +// </button> +// <div class="separator"></div> +// <button tooltip="Tooltip content positioned by <strong class='example-tooltip-elem'>tooltip-position='sw'</strong>" tooltip-position="sw"> +// <span>↙</span> +// </button> +// <button tooltip="Tooltip content positioned by <strong class='example-tooltip-elem'>tooltip-position='s'</strong>" tooltip-position="s"> +// <span>↓</span> +// </button> +// <button tooltip="Tooltip content positioned by <strong class='example-tooltip-elem'>tooltip-position='se'</strong>" tooltip-position="se"> +// <span>↘</span> +// </button> +// <div> +// ``` + +.tipsy { + .tooltipJS(rgba(0,0,0,.9), #fff); +} + +// #Tooltip mixins: +.tooltipCSS(@background: @primeBlackOpacity, @color: @primary7, @fontSize: 16px, @margin: 10px 0 0, @padding: 4px 8px, @maxWidth: 200px, @cursor: help) { + display: inline-block; + vertical-align: middle; + line-height: 1.1; + cursor: @cursor; + .tooltip-content { + display: none; + position: absolute; + max-width: @maxWidth; + margin: @margin; + padding: @padding; + background: @background; + color: @color; + border-radius: 3px; + z-index: 20; + &: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 @background; + } + } + &:hover > .tooltip-content { + display: block; + } +} + +.tooltipJS(@background: @primeBlackOpacity, @color: @primary7, @fontSize: 16px, @padding: 5px, @maxWidth: 200px) { + position: absolute; + left: 0; + top: 0; + display: none; + padding: @padding; + font-size: @fontSize; + z-index: 9999; + .tipsy-inner { + padding: 5px 8px 4px; + background-color: @background; + color: @color; + max-width: @maxWidth; + border-radius: 3px; + } + .tipsy-arrow { + position: absolute; + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 5px solid @background; + } + &.tipsy-s .tipsy-arrow { + top: 0; + left: 50%; + margin-left: -4px; + } + &.tipsy-se .tipsy-arrow { + top: 0; + left: 10px; + } + &.tipsy-sw .tipsy-arrow { + top: 0; + right: 10px; + } + &.tipsy-n .tipsy-arrow, + &.tipsy-ne .tipsy-arrow, + &.tipsy-nw .tipsy-arrow { + bottom: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid @background; + border-bottom: none; + } + &.tipsy-n .tipsy-arrow { + left: 50%; + margin-left: -4px; + } + &.tipsy-ne .tipsy-arrow { + left: 10px; + } + &.tipsy-nw .tipsy-arrow { + right: 10px; + } + &.tipsy-w .tipsy-arrow, + &.tipsy-e .tipsy-arrow { + top: 50%; + margin-top: -4px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + } + &.tipsy-w .tipsy-arrow { + right: 0; + border-right: none; + border-left: 5px solid @background; + } + &.tipsy-e .tipsy-arrow { + left: 0; + border-right: 5px solid @background; + border-left: none; + } +} + + +.example-tooltips {/*presentation styles*/ + padding: 70px; + text-align: center; +} + +.example-tooltips button {/*presentation styles*/ + width: 70px; + height: 70px; + font-size: 18px; + margin: 10px 5px; +} diff --git a/app/design/frontend/magento_plushe/less/vars.less b/app/design/frontend/magento_plushe/less/vars.less new file mode 100644 index 00000000000..6d3b1a25522 --- /dev/null +++ b/app/design/frontend/magento_plushe/less/vars.less @@ -0,0 +1,131 @@ +// /** +// * 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 design +// * @package magento2_reference +// * @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) +// */ + +// Primary colors +@primary1: #f8f8f8; +@primary2: #e5e5e5; +@primary3: #c2c2c2; +@primary4: #999; +@primary5: #837d75; +@primary6: #675f55; +@primary7: #fff; +@primeBlack: #7f7f7f; +@primeBlackOpacity: rgba(0, 0, 0, 0.5); +@commonBg: #fff; + +// Secondary colors +@secondary1: #da370a; +@secondary2: #55c2e6; + +// Buttons +@primaryActionBg: @secondary1; +@primaryActionBgH: darken(@secondary1, 10%); +@primaryActionColor: #fff; + +@secondaryActionBg: @primary3; +@secondaryActionBgH: darken(@primary3, 10%); +@secondaryActionColor: #fff; + +@actionFont: 600 14px/16px; + +// Layout +@LayoutMaxWidth: 1025px; +@LayoutMinWidth: 1025px; + +// Links +@link: #332e29; +@linkHover: @secondary1; + +// Base font +@baseFont: "sourcesanspro"; +@baseFontSizeBigger: 16px; +@base-font-size: 14px; // re-declarate base font size for clearLess +@baseFontSize: 14px; +@baseFontSizeMiddle: 12px; +@baseFontSizeSmall: 10px; +@baseFontWeight: 400; +@baseFontWeightLighter: 200; +@baseFontWeightBolder: 700; +@baseLineHeight: 1.33; +@baseColor: @primary6; + +@pageMainBg: #fff; +@headerBg: #d6d7d2; +@headerBgImage: url("@{baseDir}/images/header-bg.jpg"); +@pageBottomBg: @pageMainBg; +@footerBg: @pageMainBg; +@textColor: @primary6; +@linksColor: @primary6; +@gutter-width: 0; +@using-ieclasses: false; + +// Headings: +// H1 +@h1font: 200 30px/1.2 @baseFont; +@h1color: @primary6; + +// H2 +@h2font: 400 20px/1.2 @baseFont; +@h2color: @primary6; + +// H3 +@h3font: 600 18px/1.2 @baseFont; +@h3color: @primary6; + +// H4 +@h4font: 600 16px/1.2 @baseFont; +@h4color: @primary6; + +// H5 +@h5font: 600 14px/1.2 @baseFont; +@h5color: @primary6; + +// H6 +@h6font: 600 12px/1.2 @baseFont; +@h6color: @primary6; + +// Forms +@legendFontSize: 20px; +@fieldBg: #fff; + +// Required fields and validation +@requiredField: #da370a; +@nonValidHilight: #da370a; +@validHilight: #42b649; + +// Messages colors +@messageIconColor: #fff; +// Success message +@messageSuccessColor: #1b6720; +@messageSuccessBg: #d3edd5; +@messageSuccessIconBg: #42b649; +// Error message +@messageErrorColor: #911c00; +@messageErrorBg: #ffd9d0; +@messageErrorIconBg: #ff3200; +// Notice message, Info message +@messageNoticeColor: #926e00; +@messageNoticeBg: #ffedb8; +@messageNoticeIconBg: #ffc000; diff --git a/app/design/frontend/magento_plushe/media/preview.jpg b/app/design/frontend/magento_plushe/media/preview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c15840788eda96da49e92c32fe285a3130126ea0 GIT binary patch literal 113913 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 literal 0 HcmV?d00001 diff --git a/app/design/frontend/magento_plushe/theme.xml b/app/design/frontend/magento_plushe/theme.xml new file mode 100644 index 00000000000..a1b34af9cc9 --- /dev/null +++ b/app/design/frontend/magento_plushe/theme.xml @@ -0,0 +1,33 @@ +<!-- +/** + * 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 Design + * @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) + */ +--> +<theme> + <title>Magento Plushe</title> + <version>1.0.0.0</version> + <media> + <preview_image>media/preview.jpg</preview_image> + </media> +</theme> diff --git a/app/design/frontend/magento_plushe/view.xml b/app/design/frontend/magento_plushe/view.xml new file mode 100644 index 00000000000..bdad3bdb43e --- /dev/null +++ b/app/design/frontend/magento_plushe/view.xml @@ -0,0 +1,298 @@ +<?xml version="1.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 Design + * @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) + */ +--> +<view> + <vars module="Magento_Catalog"> + <var name="product_small_image_sidebar_size">100</var> <!-- Override for small product image --> + <var name="product_base_image_size">275</var> <!-- Override for base product image --> + <var name="product_base_image_icon_size">48</var> <!-- Base product image icon size --> + + <var name="product_list_image_size">166</var> <!-- New Product image size used in product list --> + <var name="product_zoom_image_size">370</var> <!-- New Product image size used for zooming --> + + <var name="product_image_white_borders">0</var> + + <var name="review_page_product_image:type">small_image</var> + <var name="review_page_product_image:width">285</var> + <var name="review_page_product_image:ratio">1</var> + <var name="review_page_product_image:height">285</var> + + <var name="customer_account_product_review_page:type">image</var> + <var name="customer_account_product_review_page:width">285</var> + <var name="customer_account_product_review_page:ratio">1</var> + <var name="customer_account_product_review_page:height">285</var> + + <var name="category_page_list:type">small_image</var> + <var name="category_page_list:width">180</var> + <var name="category_page_list:ratio">1</var> + <var name="category_page_list:height">230</var> + + <var name="category_page_grid:type">small_image</var> + <var name="category_page_grid:width">180</var> + <var name="category_page_grid:ratio">1</var> + <var name="category_page_grid:height">230</var> + + <var name="product_comparison_list:type">small_image</var> + <var name="product_comparison_list:width">140</var> + <var name="product_comparison_list:ratio">1</var> + <var name="product_comparison_list:height">140</var> + + <var name="related_products_list:type">small_image</var> + <var name="related_products_list:width">140</var> + <var name="related_products_list:ratio">1</var> + <var name="related_products_list:height">140</var> + + <var name="upsell_products_list:type">small_image</var> + <var name="upsell_products_list:width">140</var> + <var name="upsell_products_list:ratio">1</var> + <var name="upsell_products_list:height">140</var> + + <var name="product_page_main_image:type">image</var> + <var name="product_page_main_image:width">400</var> + <var name="product_page_main_image:ratio">1</var> + <var name="product_page_main_image:height">495</var> + + <var name="product_page_main_image_default:type">image</var> + <var name="product_page_main_image_default:width">400</var> + <var name="product_page_main_image_default:ratio">1</var> + <var name="product_page_main_image_default:height">495</var> + + <var name="product_page_more_views:type">thumbnail</var> + <var name="product_page_more_views:width">90</var> + <var name="product_page_more_views:ratio">1</var> + <var name="product_page_more_views:height">90</var> + + <var name="side_column_widget_product_thumbnail:type">thumbnail</var> + <var name="side_column_widget_product_thumbnail:width">50</var> + <var name="side_column_widget_product_thumbnail:ratio">1</var> + <var name="side_column_widget_product_thumbnail:height">50</var> + + <var name="new_products_content_widget_list:type">small_image</var> + <var name="new_products_content_widget_list:width">166</var> + <var name="new_products_content_widget_list:ratio">1</var> + <var name="new_products_content_widget_list:height">166</var> + + <var name="new_products_content_widget_grid:type">small_image</var> + <var name="new_products_content_widget_grid:width">166</var> + <var name="new_products_content_widget_grid:ratio">1</var> + <var name="new_products_content_widget_grid:height">166</var> + + <var name="recently_compared_products_images_names_widget:type">thumbnail</var> + <var name="recently_compared_products_images_names_widget:width">50</var> + <var name="recently_compared_products_images_names_widget:ratio">1</var> + <var name="recently_compared_products_images_names_widget:height">50</var> + + <var name="recently_viewed_products_images_names_widget:type">small_image</var> + <var name="recently_viewed_products_images_names_widget:width">50</var> + <var name="recently_viewed_products_images_names_widget:ratio">1</var> + <var name="recently_viewed_products_images_names_widget:height">50</var> + + <var name="recently_compared_products_images_only_widget:type">thumbnail</var> + <var name="recently_compared_products_images_only_widget:width">76</var> + <var name="recently_compared_products_images_only_widget:ratio">1</var> + <var name="recently_compared_products_images_only_widget:height">76</var> + + <var name="recently_viewed_products_images_only_widget:type">small_image</var> + <var name="recently_viewed_products_images_only_widget:width">76</var> + <var name="recently_viewed_products_images_only_widget:ratio">1</var> + <var name="recently_viewed_products_images_only_widget:height">76</var> + + <var name="bundled_product_customization_page:type">thumbnail</var> + <var name="bundled_product_customization_page:width">140</var> + <var name="bundled_product_customization_page:ratio">1</var> + <var name="bundled_product_customization_page:height">140</var> + + <var name="recently_compared_products_grid_content_widget:type">small_image</var> + <var name="recently_compared_products_grid_content_widget:width">135</var> + <var name="recently_compared_products_grid_content_widget:ratio">1</var> + <var name="recently_compared_products_grid_content_widget:height">135</var> + + <var name="recently_compared_products_list_content_widget:type">small_image</var> + <var name="recently_compared_products_list_content_widget:width">166</var> + <var name="recently_compared_products_list_content_widget:ratio">1</var> + <var name="recently_compared_products_list_content_widget:height">166</var> + + <var name="recently_viewed_products_grid_content_widget:type">small_image</var> + <var name="recently_viewed_products_grid_content_widget:width">135</var> + <var name="recently_viewed_products_grid_content_widget:ratio">1</var> + <var name="recently_viewed_products_grid_content_widget:height">135</var> + + <var name="recently_viewed_products_list_content_widget:type">small_image</var> + <var name="recently_viewed_products_list_content_widget:width">166</var> + <var name="recently_viewed_products_list_content_widget:ratio">1</var> + <var name="recently_viewed_products_list_content_widget:height">166</var> + + <var name="customer_shared_wishlist:type">small_image</var> + <var name="customer_shared_wishlist:width">113</var> + <var name="customer_shared_wishlist:ratio">1</var> + <var name="customer_shared_wishlist:height">113</var> + + <var name="wishlist_thumbnail:type">small_image</var> + <var name="wishlist_thumbnail:width">113</var> + <var name="wishlist_thumbnail:ratio">1</var> + <var name="wishlist_thumbnail:height">113</var> + + <var name="wishlist_sidebar_block:type">thumbnail</var> + <var name="wishlist_sidebar_block:width">50</var> + <var name="wishlist_sidebar_block:ratio">1</var> + <var name="wishlist_sidebar_block:height">50</var> + + <var name="shared_wishlist_email:type">small_image</var> + <var name="shared_wishlist_email:width">135</var> + <var name="shared_wishlist_email:ratio">1</var> + <var name="shared_wishlist_email:height">135</var> + + <var name="customer_account_my_tags_tag_view:type">small_image</var> + <var name="customer_account_my_tags_tag_view:width">100</var> + <var name="customer_account_my_tags_tag_view:ratio">1</var> + <var name="customer_account_my_tags_tag_view:height">100</var> + + <var name="cart_cross_sell_products:type">thumbnail</var> + <var name="cart_cross_sell_products:width">140</var> + <var name="cart_cross_sell_products:ratio">1</var> + <var name="cart_cross_sell_products:height">140</var> + + <var name="gift_messages_checkout_thumbnail:type">thumbnail</var> + <var name="gift_messages_checkout_thumbnail:width">75</var> + <var name="gift_messages_checkout_thumbnail:ratio">1</var> + <var name="gift_messages_checkout_thumbnail:height">75</var> + + <var name="gift_messages_checkout_small_image:type">small_image</var> + <var name="gift_messages_checkout_small_image:width">75</var> + <var name="gift_messages_checkout_small_image:ratio">1</var> + <var name="gift_messages_checkout_small_image:height">75</var> + + <var name="mini_cart_product_thumbnail:type">thumbnail</var> + <var name="mini_cart_product_thumbnail:width">78</var> + <var name="mini_cart_product_thumbnail:ratio">1</var> + <var name="mini_cart_product_thumbnail:height">78</var> + + <var name="new_products_images_only_widget:type">small_image</var> + <var name="new_products_images_only_widget:width">78</var> + <var name="new_products_images_only_widget:ratio">1</var> + <var name="new_products_images_only_widget:height">78</var> + + <var name="cart_page_product_thumbnail:type">thumbnail</var> + <var name="cart_page_product_thumbnail:width">80</var> + <var name="cart_page_product_thumbnail:ratio">1</var> + <var name="cart_page_product_thumbnail:height">80</var> + + <var name="product_stock_alert_email_product_image:type">small_image</var> + <var name="product_stock_alert_email_product_image:width">76</var> + <var name="product_stock_alert_email_product_image:ratio">1</var> + <var name="product_stock_alert_email_product_image:height">76</var> + </vars> + <vars module="Magento_Bundle"> + <var name="product_summary_image_size">58</var> <!-- New Product image size used for summary block--> + </vars> + <vars module="Magento_DesignEditor"> + <var name="store-name:font-picker">"marvel"</var> + <var name="store-name:color-picker">#837d75</var> + <var name="store-name:logo-uploader"></var> + <var name="header-background:color-picker">#d6d7d2</var> + <var name="header-background:image-uploader">header-bg.jpg</var> + <var name="header-background:tile">repeat</var> + + <var name="menu-background">#f8f8f8</var> + <var name="menu-stroke">#c2c2c2</var> + <var name="menu-links">#675f55</var> + <var name="menu-links-hover">#f47a1f</var> + + <var name="header-links">#837d75</var> + <var name="header-links-hover">#675f55</var> + <var name="header-scroll-bar-background">#ffffff</var> + <var name="header-scroll-bar-handle">#e5e5e5</var> + <var name="search-field">#ffffff</var> + <var name="search-field-text">#675f55</var> + <var name="search-field-stroke">#c2c2c2</var> + + <var name="page-background:color-picker">#ffffff</var> + <var name="page-background:image-uploader"></var> + <var name="page-background:tile">no-repeat</var> + + <var name="form-background">#f8f8f8</var> + <var name="form-stroke">#c2c2c2</var> + <var name="form2-background">#e5e5e5</var> + <var name="form2-stroke">#c2c2c2</var> + + <var name="form-field-stroke">#c2c2c2</var> + <var name="form-field-stroke-clicked">#999999</var> + <var name="image-stroke-keylines">#e5e5e5</var> + <var name="scroll-bar-background">#f8f8f8</var> + <var name="scroll-bar-handle">#c2c2c2</var> + + <var name="radio-checkbox-icon">#675f55</var> + <var name="radio-checkbox-background">#e5e5e5</var> + <var name="radio-checkbox-stroke">#999999</var> + + <var name="button-background">#f47a1f</var> + <var name="button-text">#ffffff</var> + <var name="button-hover">#ff953b</var> + <var name="icons">#c2c2c2</var> + <var name="icons-hover">#999999</var> + <var name="icons2">#837d75</var> + + <var name="accents">#55c2e6</var> + <var name="size-swatches">#f8f8f8</var> + <var name="size-swatches-unavailable">#e5e5e5</var> + <var name="size-swatches-hover">#675f55</var> + + <var name="tooltip-text">#675f55</var> + <var name="tooltip-box">#ffffff</var> + <var name="tooltip-stroke">#c2c2c2</var> + <var name="tooltip2-text">#ffffff</var> + <var name="tooltip2-box">#000000</var> + <var name="tooltip2-stroke">#c2c2c2</var> + + <var name="error-box">#ff3200</var> + <var name="error-icon">#ffffff</var> + <var name="success-box">#d3edd5</var> + <var name="success-icon">#ffffff</var> + <var name="notice-box">#ffedb8</var> + <var name="notice-icon">#ffffff</var> + + <var name="banner-text:font-picker">"marvel", Arial, sans-serif</var> + <var name="banner-text:color-picker">#675f55</var> + <var name="page-headings:font-picker">"sourcesanspro", Arial, sans-serif</var> + <var name="page-headings:color-picker">#675f55</var> + <var name="menu:font-picker">"sourcesanspro", Arial, sans-serif</var> + <var name="menu:color-picker">#675f55</var> + + <var name="body-text:font-picker">"sourcesanspro", Arial, sans-serif</var> + <var name="body-text:color-picker">#675f55</var> + + <var name="buttons:font-picker">"sourcesanspro", Arial, sans-serif</var> + <var name="buttons:color-picker">#ffffff</var> + + <var name="text-links">#675f55</var> + <var name="text-links-hover">#f47a1f</var> + <var name="text-links-active">#f47a1f</var> + <var name="text-links-product">#675f55</var> + <var name="small-links">#675f55</var> + <var name="small-links-hover">#c2c2c2</var> + </vars> +</view> diff --git a/app/etc/di.xml b/app/etc/di.xml index 1546dee34ea..3d1c255a248 100644 --- a/app/etc/di.xml +++ b/app/etc/di.xml @@ -24,33 +24,48 @@ */ --> <config> - <preference for="Magento\Core\Model\Db\UpdaterInterface" type="Magento\Core\Model\Db\Updater" /> + <preference for="Magento\App\RequestInterface" type="Magento\App\Request\Http" /> + <preference for="Magento\App\Request\PathInfoProcessorInterface" type="Magento\Core\App\Request\PathInfoProcessor" /> + <preference for="Magento\App\ResponseInterface" type="Magento\App\Response\Http" /> + <preference for="Magento\App\RouterListInterface" type="Magento\App\RouterList" /> + <preference for="Magento\App\FrontControllerInterface" type="Magento\App\FrontController" /> + <preference for="Magento\App\UpdaterInterface" type="Magento\App\Updater" /> <preference for="Magento\Core\Model\AppInterface" type="Magento\Core\Model\App\Proxy" /> <preference for="Magento\Core\Model\CacheInterface" type="Magento\Core\Model\Cache\Proxy" /> <preference for="Magento\Core\Model\Cache\StateInterface" type="Magento\Core\Model\Cache\State" /> <preference for="Magento\Core\Model\Cache\TypeListInterface" type="Magento\Core\Model\Cache\TypeList" /> <preference for="Magento\Core\Model\Store\ConfigInterface" type="Magento\Core\Model\Store\Config" /> <preference for="Magento\Core\Model\StoreManagerInterface" type="Magento\Core\Model\StoreManager" /> - <preference for="Magento\Core\Model\View\DesignInterface" type="Magento\Core\Model\View\Design" /> + <preference for="Magento\View\DesignInterface" type="Magento\Core\Model\View\Design" /> + <preference for="Magento\View\Design\ThemeInterface" type="Magento\Core\Model\Theme" /> + <preference for="Magento\View\ConfigInterface" type="Magento\Core\Model\View\Config" /> <preference for="Magento\Core\Model\LocaleInterface" type="Magento\Core\Model\Locale" /> - <preference for="Magento\Core\Model\UrlInterface" type="Magento\Core\Model\Url" /> - <preference for="Magento\Core\Model\Event\InvokerInterface" type="Magento\Core\Model\Event\Invoker\InvokerDefault" /> + <preference for="Magento\UrlInterface" type="Magento\Core\Model\Url" /> <preference for="Magento\Data\Collection\Db\FetchStrategyInterface" type="Magento\Data\Collection\Db\FetchStrategy\Query" /> - <preference for="Magento\Config\ScopeInterface" type="Magento\Core\Model\Config\Scope" /> + <preference for="Magento\Config\ScopeInterface" type="Magento\Config\Scope" /> <preference for="Magento\Config\FileResolverInterface" type="Magento\Core\Model\Config\FileResolver" /> <preference for="Magento\Config\CacheInterface" type="Magento\Core\Model\Cache\Type\Config" /> <preference for="Magento\Config\ValidationStateInterface" type="Magento\Core\Model\Config\ValidationState" /> - <preference for="Magento\Core\Model\ModuleListInterface" type="Magento\Core\Model\ModuleList" /> - <preference for="Magento\Core\Model\Event\ConfigInterface" type="Magento\Core\Model\Event\Config" /> + <preference for="Magento\App\ModuleListInterface" type="Magento\App\ModuleList" /> + <preference for="Magento\Event\ConfigInterface" type="Magento\Event\Config" /> + <preference for="Magento\Event\InvokerInterface" type="Magento\Event\Invoker\InvokerDefault" /> <preference for="Magento\Interception\PluginList" type="Magento\Interception\PluginList\PluginList" /> - <type name="Magento\Core\Model\App\State"> + <preference for="Magento\Event\ManagerInterface" type="Magento\Event\Manager\Proxy" /> + <preference for="Magento\View\LayoutInterface" type="Magento\Core\Model\Layout" /> + <preference for="Magento\View\Layout\ProcessorInterface" type="Magento\Core\Model\Layout\Merge" /> + <type name="Magento\App\State"> <param name="installDate"> - <value type="argument">Magento\Core\Model\App\State::PARAM_INSTALL_DATE</value> + <value type="argument">Magento\App\State::PARAM_INSTALL_DATE</value> </param> <param name="mode"> <value type="argument">Magento\Core\Model\App::PARAM_MODE</value> </param> </type> + <type name="Magento\Core\App\FrontController\Plugin\Install"> + <param name="cache"> + <instance type="Magento\Core\Model\Cache\Type\Config" /> + </param> + </type> <type name="Magento\Core\Model\Config\ValidationState"> <param name="appMode"> <value type="argument">Magento\Core\Model\App::PARAM_MODE</value> @@ -64,7 +79,7 @@ <value type="argument">Magento\Core\Model\App::PARAM_CUSTOM_LOCAL_CONFIG</value> </param> </type> - <type name="Magento\Core\Model\Module\Declaration\Reader\Filesystem"> + <type name="Magento\App\Module\Declaration\Reader\Filesystem"> <param name="allowedModules"> <value type="argument">Magento\Core\Model\App::PARAM_ALLOWED_MODULES</value> </param> @@ -87,14 +102,6 @@ <value type="argument">Magento\Core\Model\App::PARAM_RUN_TYPE</value> </param> </type> - <type name="Magento\Core\Model\Cache"> - <param name="cacheTypes"> - <instance type="Magento\Core\Model\Cache\Types\Proxy" /> - </param> - <param name="config"> - <instance type="Magento\Core\Model\Config\Proxy" /> - </param> - </type> <type name="Magento\Core\Model\Config"> <param name="storage"> <instance type="Magento\Core\Model\Config\Storage" /> @@ -105,11 +112,6 @@ <instance type="Magento\Core\Model\Config\Loader\Proxy" /> </param> </type> - <type name="Magento\Core\Model\Event\Config"> - <param name="config"> - <instance type="Magento\Core\Model\Config\Proxy" /> - </param> - </type> <type name="Magento\Core\Model\Translate"> <param name="cache"> <instance type="Magento\Core\Model\Cache\Type\Translate" /> @@ -131,16 +133,6 @@ </param> </type> <type name="Magento\Data\Structure" shared="false" /> - <type name="Magento\HTTP\Handler\Composite"> - <param name="handlers"> - <value> - <app> - <sortOrder>50</sortOrder> - <class>Magento\Core\Model\App\Handler</class> - </app> - </value> - </param> - </type> <type name="Magento\Core\Model\DataService\Path\Composite"> <param name="items"> <value> @@ -149,42 +141,16 @@ </value> </param> </type> - <type name="Magento\Core\Helper\Url"> - <param name="translate"> - <instance type="Magento\Core\Model\Translate\Proxy" /> - </param> - </type> - <type name="Magento\Core\Model\Design"> - <param name="eventDispatcher"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> <type name="Magento\Core\Model\View\Design"> <param name="storeManager"> <instance type="Magento\Core\Model\StoreManager\Proxy" /> </param> </type> <type name="Magento\Acl" shared="false" /> - <type name="Magento\Core\Model\Context"> - <param name="eventDispatcher"> - <instance type="Magento\Core\Model\Event\Manager\Proxy" /> - </param> - </type> - <type name="Magento\Core\Model\ModuleManager"> - <param name="config"> - <instance type="Magento\Core\Model\Config\Proxy" /> - </param> - </type> <type name="Magento\Core\Model\ObjectManager\ConfigLoader"> <param name="cache"> <instance type="Magento\Core\Model\Cache\Type\Config"/> </param> - <param name="modulesReader"> - <instance type="Magento\Core\Model\Config\Modules\Reader\Proxy" /> - </param> - <param name="mode"> - <value type="argument">Magento\Core\Model\App::PARAM_MODE</value> - </param> </type> <type name="Magento\Core\Model\ObjectManager\ConfigCache"> <param name="cacheFrontend"> @@ -211,11 +177,6 @@ <param name="cacheId"> <value>interception</value> </param> - <param name="scopePriorityScheme"> - <value> - <first>global</first> - </value> - </param> </type> <type name="Magento\Interception\PluginList\PluginList"> <param name="cache"> @@ -241,6 +202,14 @@ <value type="argument">Magento\Core\Model\Resource::PARAM_TABLE_PREFIX</value> </param> </type> + <type name="Magento\Config\Scope"> + <param name="defaultScope"> + <value>global</value> + </param> + <param name="areaList"> + <instance type="Magento\App\AreaListProxy" /> + </param> + </type> <type name="Magento\Core\Model\Url"> <param name="session"> <instance type="Magento\Core\Model\Session\Proxy" /> diff --git a/dev/tests/integration/framework/Magento/TestFramework/Application.php b/dev/tests/integration/framework/Magento/TestFramework/Application.php index f32d6277683..27a5696660f 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/Application.php +++ b/dev/tests/integration/framework/Magento/TestFramework/Application.php @@ -135,12 +135,12 @@ class Application $generationDir = "$installDir/generation"; $this->_initParams = array( \Magento\Core\Model\App::PARAM_APP_DIRS => array( - \Magento\Core\Model\Dir::CONFIG => $this->_installEtcDir, - \Magento\Core\Model\Dir::VAR_DIR => $installDir, - \Magento\Core\Model\Dir::MEDIA => "$installDir/media", - \Magento\Core\Model\Dir::STATIC_VIEW => "$installDir/pub_static", - \Magento\Core\Model\Dir::PUB_VIEW_CACHE => "$installDir/pub_cache", - \Magento\Core\Model\Dir::GENERATION => $generationDir, + \Magento\App\Dir::CONFIG => $this->_installEtcDir, + \Magento\App\Dir::VAR_DIR => $installDir, + \Magento\App\Dir::MEDIA => "$installDir/media", + \Magento\App\Dir::STATIC_VIEW => "$installDir/pub_static", + \Magento\App\Dir::PUB_VIEW_CACHE => "$installDir/pub_cache", + \Magento\App\Dir::GENERATION => $generationDir, ), \Magento\Core\Model\App::PARAM_MODE => $appMode ); @@ -212,14 +212,14 @@ class Application )); $objectManager->addSharedInstance($config, 'Magento\Core\Model\Config\Primary'); - $objectManager->addSharedInstance($config->getDirectories(), 'Magento\Core\Model\Dir'); + $objectManager->addSharedInstance($config->getDirectories(), 'Magento\App\Dir'); $objectManager->configure(array( 'preferences' => array( 'Magento\Core\Model\Cookie' => 'Magento\TestFramework\Cookie' ) )); $objectManager->loadPrimaryConfig($this->_primaryConfig); - $verification = $objectManager->get('Magento\Core\Model\Dir\Verification'); + $verification = $objectManager->get('Magento\App\Dir\Verification'); $verification->createAndVerifyDirectories(); $objectManager->configure( $objectManager->get('Magento\Core\Model\ObjectManager\ConfigLoader')->load('global') @@ -232,7 +232,9 @@ class Application 'type' => 'Magento\TestFramework\Db\ConnectionAdapter' ), 'preferences' => array( - 'Magento\Core\Model\Cookie' => 'Magento\TestFramework\Cookie' + 'Magento\Core\Model\Cookie' => 'Magento\TestFramework\Cookie', + 'Magento\App\RequestInterface' => 'Magento\TestFramework\Request', + 'Magento\App\ResponseInterface' => 'Magento\TestFramework\Response', ), )); } @@ -241,8 +243,8 @@ class Application ->setCache($objectManager->get('Magento\Core\Model\CacheInterface')); /** Register event observer of Integration Framework */ - /** @var \Magento\Core\Model\Event\Config\Data $eventConfigData */ - $eventConfigData = $objectManager->get('Magento\Core\Model\Event\Config\Data'); + /** @var \Magento\Event\Config\Data $eventConfigData */ + $eventConfigData = $objectManager->get('Magento\Event\Config\Data'); $eventConfigData->merge( array('core_app_init_current_store_after' => array('integration_tests' => @@ -254,8 +256,8 @@ class Application ) ) ); - /** @var \Magento\Core\Model\Dir\Verification $verification */ - $verification = $objectManager->get('Magento\Core\Model\Dir\Verification'); + /** @var \Magento\App\Dir\Verification $verification */ + $verification = $objectManager->get('Magento\App\Dir\Verification'); $verification->createAndVerifyDirectories(); $this->loadArea(\Magento\TestFramework\Application::DEFAULT_APP_AREA); @@ -276,15 +278,13 @@ class Application /** * Run application normally, but with encapsulated initialization options - * - * @param \Magento\TestFramework\Request $request - * @param \Magento\TestFramework\Response $response */ - public function run(\Magento\TestFramework\Request $request, \Magento\TestFramework\Response $response) + public function run() { - $composer = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $handler = $composer->get('Magento\HTTP\Handler\Composite'); - $handler->handle($request, $response); + $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + $config = new \Magento\Core\Model\Config\Primary(BP, array()); + $entryPoint = new \Magento\Core\Model\EntryPoint\Http($config, $objectManager); + $entryPoint->processRequest(); } /** @@ -341,8 +341,8 @@ class Application $this->initialize(); /* Run all install and data-install scripts */ - /** @var $updater \Magento\Core\Model\Db\Updater */ - $updater = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Db\Updater'); + /** @var $updater \Magento\App\Updater */ + $updater = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Updater'); $updater->updateScheme(); $updater->updateData(); @@ -370,8 +370,8 @@ class Application /* Switch an application to installed mode */ $this->initialize(); //hot fix for \Magento\Catalog\Model\Product\Attribute\Backend\SkuTest::testGenerateUniqueLongSku - /** @var $appState \Magento\Core\Model\App\State */ - $appState = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App\State'); + /** @var $appState \Magento\App\State */ + $appState = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\State'); $appState->setInstallDate(date('r', strtotime('now'))); } diff --git a/dev/tests/integration/framework/Magento/TestFramework/Cookie.php b/dev/tests/integration/framework/Magento/TestFramework/Cookie.php index 3fce9302cd2..e475842f533 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/Cookie.php +++ b/dev/tests/integration/framework/Magento/TestFramework/Cookie.php @@ -35,19 +35,19 @@ class Cookie extends \Magento\Core\Model\Cookie /** * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\StoreManager $storeManager - * @param \Magento\Core\Controller\Request\Http $request - * @param \Magento\Core\Controller\Response\Http $response + * @param \Magento\App\RequestInterface $request + * @param \Magento\App\ResponseInterface $response */ public function __construct( \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\StoreManager $storeManager, - \Magento\Core\Controller\Request\Http $request = null, - \Magento\Core\Controller\Response\Http $response = null + \Magento\App\RequestInterface $request = null, + \Magento\App\ResponseInterface $response = null ) { $this->_storeManager = $storeManager; $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $request = $request ?: $objectManager->get('Magento\Core\Controller\Request\Http'); - $response = $response ?: $objectManager->get('Magento\Core\Controller\Response\Http'); + $request = $request ?: $objectManager->get('Magento\App\RequestInterface'); + $response = $response ?: $objectManager->get('Magento\App\ResponseInterface'); parent::__construct($request, $response, $coreStoreConfig, $storeManager); } diff --git a/dev/tests/integration/framework/Magento/TestFramework/Helper/Bootstrap.php b/dev/tests/integration/framework/Magento/TestFramework/Helper/Bootstrap.php index e8a3e3992a0..b0ed7bbadae 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/Helper/Bootstrap.php +++ b/dev/tests/integration/framework/Magento/TestFramework/Helper/Bootstrap.php @@ -140,15 +140,12 @@ class Bootstrap } /** - * Perform the full request processing by the application instance optionally passing parameters to be overridden. + * Perform the full request processing by the application instance. * Intended to be used by the controller tests. - * - * @param \Magento\TestFramework\Request $request - * @param \Magento\TestFramework\Response $response */ - public function runApp(\Magento\TestFramework\Request $request, \Magento\TestFramework\Response $response) + public function runApp() { - $this->_bootstrap->getApplication()->run($request, $response); + $this->_bootstrap->getApplication()->run(); } /** diff --git a/dev/tests/integration/framework/Magento/TestFramework/Helper/Config.php b/dev/tests/integration/framework/Magento/TestFramework/Helper/Config.php index cbc499e291b..d52283543d9 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/Helper/Config.php +++ b/dev/tests/integration/framework/Magento/TestFramework/Helper/Config.php @@ -41,7 +41,7 @@ class Config { $result = array(); $moduleList = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\ModuleListInterface'); + ->get('Magento\App\ModuleListInterface'); foreach ($moduleList->getModules() as $module) { $result[] = $module['name']; } diff --git a/dev/tests/integration/framework/Magento/TestFramework/Request.php b/dev/tests/integration/framework/Magento/TestFramework/Request.php index 7928395d335..bb91af0d326 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/Request.php +++ b/dev/tests/integration/framework/Magento/TestFramework/Request.php @@ -30,7 +30,7 @@ */ namespace Magento\TestFramework; -class Request extends \Magento\Core\Controller\Request\Http +class Request extends \Magento\App\Request\Http { /** * Server super-global mock diff --git a/dev/tests/integration/framework/Magento/TestFramework/Response.php b/dev/tests/integration/framework/Magento/TestFramework/Response.php index e5f6dfed77b..2ac3e623fcc 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/Response.php +++ b/dev/tests/integration/framework/Magento/TestFramework/Response.php @@ -34,7 +34,7 @@ namespace Magento\TestFramework; * @package Magento\TestFramework * @SuppressWarnings(PHPMD.LongVariable) */ -class Response extends \Magento\Core\Controller\Response\Http +class Response extends \Magento\App\Response\Http { /** * @inherit @@ -58,6 +58,5 @@ class Response extends \Magento\Core\Controller\Response\Http public function sendResponse() { - $this->_eventManager->dispatch('http_response_send_before', array('response'=>$this)); } } diff --git a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractConfigFiles.php b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractConfigFiles.php index bcfb0879268..d914765ffb2 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractConfigFiles.php +++ b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractConfigFiles.php @@ -72,8 +72,8 @@ abstract class AbstractConfigFiles extends \PHPUnit_Framework_TestCase ) ); - $dirs = $this->_objectManager->get('Magento\Core\Model\Dir'); - $modulesDir = $dirs->getDir(\Magento\Core\Model\Dir::MODULES); + $dirs = $this->_objectManager->get('Magento\App\Dir'); + $modulesDir = $dirs->getDir(\Magento\App\Dir::MODULES); $this->_schemaFile = $modulesDir . $this->_getXsdPath(); } } @@ -148,7 +148,7 @@ abstract class AbstractConfigFiles extends \PHPUnit_Framework_TestCase public function getXmlConfigFiles() { return glob( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir')->getDir('app') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir')->getDir('app') . $this->_getConfigFilePathGlob() ); } diff --git a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php index 76f0fd72b9a..b7fce6df776 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php +++ b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractController.php @@ -77,13 +77,10 @@ abstract class AbstractController extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_assertSessionErrors = false; - $this->_objectManager = \Magento\TestFramework\ObjectManager::getInstance(); - $this->_objectManager->configure(array( - 'preferences' => array( - 'Magento\Core\Controller\Request\Http' => 'Magento\TestFramework\Request', - 'Magento\Core\Controller\Response\Http' => 'Magento\TestFramework\Response' - ) - )); + $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();; + $this->_objectManager->removeSharedInstance('Magento\App\ResponseInterface'); + $this->_objectManager->removeSharedInstance('Magento\App\RequestInterface'); + } protected function tearDown() @@ -112,18 +109,18 @@ abstract class AbstractController extends \PHPUnit_Framework_TestCase public function dispatch($uri) { $this->getRequest()->setRequestUri($uri); - $this->_getBootstrap()->runApp($this->getRequest(), $this->getResponse()); + $this->_getBootstrap()->runApp(); } /** * Request getter * - * @return \Magento\TestFramework\Request + * @return \Magento\App\RequestInterface */ public function getRequest() { if (!$this->_request) { - $this->_request = $this->_objectManager->get('Magento\TestFramework\Request'); + $this->_request = $this->_objectManager->get('Magento\App\RequestInterface'); } return $this->_request; } @@ -131,12 +128,12 @@ abstract class AbstractController extends \PHPUnit_Framework_TestCase /** * Response getter * - * @return \Magento\TestFramework\Response + * @return \Magento\App\ResponseInterface */ public function getResponse() { if (!$this->_response) { - $this->_response = $this->_objectManager->get('Magento\TestFramework\Response'); + $this->_response = $this->_objectManager->get('Magento\App\ResponseInterface'); } return $this->_response; } diff --git a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractIntegrity.php b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractIntegrity.php index 9eff02d9c7b..028635761a1 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractIntegrity.php +++ b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractIntegrity.php @@ -84,7 +84,7 @@ abstract class AbstractIntegrity extends \PHPUnit_Framework_TestCase /** @var $themeCollection \Magento\Core\Model\Theme\Collection */ $themeCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Core\Model\Resource\Theme\Collection'); - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($themeCollection as $theme) { $themeItems[$theme->getId()] = $theme; } diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php index b254dde834d..4aa324bc239 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php @@ -38,7 +38,7 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase { $dbInstance = $this->getMockForAbstractClass('Magento\TestFramework\Db\AbstractDb', array(), '', false); $installDir = '/install/dir'; - $appMode = \Magento\Core\Model\App\State::MODE_DEVELOPER; + $appMode = \Magento\App\State::MODE_DEVELOPER; $object = new \Magento\TestFramework\Application( $dbInstance, @@ -59,7 +59,7 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase $this->assertArrayHasKey(\Magento\Core\Model\App::PARAM_MODE, $initParams, 'Application mode is not configured'); $this->assertEquals( - \Magento\Core\Model\App\State::MODE_DEVELOPER, + \Magento\App\State::MODE_DEVELOPER, $initParams[\Magento\Core\Model\App::PARAM_MODE], 'Wrong application mode configured' ); diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/CookieTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/CookieTest.php index 79949584d61..f8308c9e807 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/CookieTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/CookieTest.php @@ -48,11 +48,12 @@ class CookieTest extends \PHPUnit_Framework_TestCase $coreStoreConfig, $this->getMock('Magento\Core\Model\StoreManager', array(), array(), '', false), new \Magento\TestFramework\Request( - $this->getMock('Magento\Core\Model\StoreManager', [], [], '', false), - $this->getMock('Magento\Backend\Helper\Data', [], [], '', false) + $this->getMock('Magento\App\RouterListInterface'), + 'http://example.com', + $this->getMock('Magento\App\Request\PathInfoProcessorInterface') ), new \Magento\TestFramework\Response( - $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false) + $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false) ) ); } diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Helper/BootstrapTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Helper/BootstrapTest.php index 2e6d4d0ce60..8ea05427755 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Helper/BootstrapTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Helper/BootstrapTest.php @@ -54,8 +54,8 @@ class BootstrapTest extends \PHPUnit_Framework_TestCase */ protected $_fixtureInitParams = array( \Magento\Core\Model\App::PARAM_APP_DIRS => array( - \Magento\Core\Model\Dir::CONFIG => __DIR__, - \Magento\Core\Model\Dir::VAR_DIR => __DIR__, + \Magento\App\Dir::CONFIG => __DIR__, + \Magento\App\Dir::VAR_DIR => __DIR__, ), ); @@ -191,14 +191,7 @@ class BootstrapTest extends \PHPUnit_Framework_TestCase public function testRunApp() { - $requestMock = $this->getMock('Magento\TestFramework\Request', array(), array(), '', false); - $responseMock = $this->getMock('Magento\TestFramework\Response', array(), array(), '', false); - - $this->_application - ->expects($this->once()) - ->method('run') - ->with($requestMock, $responseMock) - ; - $this->_object->runApp($requestMock, $responseMock); + $this->_application->expects($this->once())->method('run'); + $this->_object->runApp(); } } diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ObjectManagerTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ObjectManagerTest.php index b7394864f66..788dc275056 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ObjectManagerTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ObjectManagerTest.php @@ -48,8 +48,8 @@ class ObjectManagerTest extends \PHPUnit_Framework_TestCase $instanceConfig = new \Magento\TestFramework\ObjectManager\Config(); $primaryConfig = $this->getMock('Magento\Core\Model\Config\Primary', array(), array(), '', false); $primaryConfig->expects($this->any())->method('getParams')->will($this->returnValue(array())); - $dirs = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); - $verification = $this->getMock('Magento\Core\Model\Dir\Verification', array(), array(), '', false); + $dirs = $this->getMock('Magento\App\Dir', array(), array(), '', false); + $verification = $this->getMock('Magento\App\Dir\Verification', array(), array(), '', false); $cache = $this->getMock('Magento\Core\Model\CacheInterface'); $configLoader = $this->getMock('Magento\Core\Model\ObjectManager\ConfigLoader', array(), array(), '', false); $configLoader->expects($this->once())->method('load')->will($this->returnValue(array())); @@ -62,7 +62,7 @@ class ObjectManagerTest extends \PHPUnit_Framework_TestCase $model = new \Magento\TestFramework\ObjectManager( $primaryConfig, $instanceConfig, array( - 'Magento\Core\Model\Dir\Verification' => $verification, + 'Magento\App\Dir\Verification' => $verification, 'Magento\Core\Model\Cache\Type\Config' => $cache, 'Magento\Core\Model\ObjectManager\ConfigLoader' => $configLoader, 'Magento\Core\Model\ObjectManager\ConfigCache' => $configCache, diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/RequestTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/RequestTest.php index 7f79f37301b..6a81be56265 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/RequestTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/RequestTest.php @@ -37,8 +37,7 @@ class RequestTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_model = new \Magento\TestFramework\Request( - $this->getMock('Magento\Core\Model\StoreManager', ['__wakeup'], [], '', false), - $this->getMock('Magento\Backend\Helper\Data', [], [], '', false) + $this->getMock('Magento\App\RouterListInterface', array(), array(), '', false) ); } diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ResponseTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ResponseTest.php index 41473ce22d4..09214ed5478 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ResponseTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ResponseTest.php @@ -32,7 +32,7 @@ class ResponseTest extends \PHPUnit_Framework_TestCase public function testCanSendHeaders() { $response = new \Magento\TestFramework\Response( - $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false) + $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false) ); $this->assertTrue($response->canSendHeaders()); $this->assertTrue($response->canSendHeaders(false)); diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/TestCase/ControllerAbstractTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/TestCase/ControllerAbstractTest.php index 9d196ca7e20..0ac47a15e2e 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/TestCase/ControllerAbstractTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/TestCase/ControllerAbstractTest.php @@ -46,12 +46,9 @@ class ControllerAbstractTest extends \Magento\TestFramework\TestCase\AbstractCon ; $session = new \Magento\Object(array('messages' => $messagesCollection)); $request = new \Magento\TestFramework\Request( - $this->getMock('Magento\Core\Model\StoreManager', [], [], '', false), - $this->getMock('Magento\Backend\Helper\Data', [], [], '', false) - ); - $response = new \Magento\TestFramework\Response( - $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false) + $this->getMock('Magento\App\RouterListInterface', array(), array(), '', false) ); + $response = new \Magento\TestFramework\Response(); $this->_objectManager = $this->getMock( 'Magento\TestFramework\ObjectManager', array('get', 'create'), array(), '', false @@ -59,8 +56,8 @@ class ControllerAbstractTest extends \Magento\TestFramework\TestCase\AbstractCon $this->_objectManager->expects($this->any()) ->method('get') ->will($this->returnValueMap(array( - array('Magento\TestFramework\Request', $request), - array('Magento\TestFramework\Response', $response), + array('Magento\App\RequestInterface', $request), + array('Magento\App\ResponseInterface', $response), array('Magento\Core\Model\Session', $session), ))); } @@ -126,7 +123,7 @@ class ControllerAbstractTest extends \Magento\TestFramework\TestCase\AbstractCon public function testAssertRedirect() { /* - * Prevent calling \Magento\Core\Controller\Response\Http::setRedirect() because it dispatches event, + * Prevent calling \Magento\App\Response\Http::setRedirect() because it dispatches event, * which requires fully initialized application environment intentionally not available * for unit tests */ diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Attribute/Set/Toolbar/AddTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Attribute/Set/Toolbar/AddTest.php index 8249d297d2c..dd6c8726f3f 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Attribute/Set/Toolbar/AddTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Attribute/Set/Toolbar/AddTest.php @@ -35,7 +35,7 @@ class AddTest extends \PHPUnit_Framework_TestCase public function testToHtmlFormId() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); $block = $layout->addBlock('Magento\Adminhtml\Block\Catalog\Product\Attribute\Set\Toolbar\Add', 'block'); $block->setArea('adminhtml')->unsetChild('setForm'); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Options/OptionTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Options/OptionTest.php index 0963b50f4c7..81e11184211 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Options/OptionTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Options/OptionTest.php @@ -34,7 +34,7 @@ class OptionTest extends \PHPUnit_Framework_TestCase { public function testGetOptionValuesCaching() { - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Catalog\Product\Edit\Tab\Options\Option'); /** @var $productWithOptions \Magento\Catalog\Model\Product */ $productWithOptions = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Options/Type/SelectTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Options/Type/SelectTest.php index 504cfe9ea38..b5a1ad6dc4c 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Options/Type/SelectTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Options/Type/SelectTest.php @@ -35,7 +35,7 @@ class SelectTest extends \PHPUnit_Framework_TestCase public function testToHtmlFormId() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Adminhtml\Block\Catalog\Product\Edit\Tab\Options\Type_Select */ $block = $layout->createBlock('Magento\Adminhtml\Block\Catalog\Product\Edit\Tab\Options\Type\Select', 'select'); $html = $block->getPriceTypeSelectHtml(); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/Config/MatrixTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/Config/MatrixTest.php index 11164d17846..baf77d4275d 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/Config/MatrixTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/Config/MatrixTest.php @@ -43,7 +43,7 @@ class MatrixTest extends \PHPUnit_Framework_TestCase $objectManager->get('Magento\Core\Model\Registry') ->register('current_product', \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Catalog\Model\Product')->load(1)); - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text', 'head'); /** @var $usedAttribute \Magento\Catalog\Model\Entity\Attribute */ $usedAttribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() @@ -54,7 +54,7 @@ class MatrixTest extends \PHPUnit_Framework_TestCase ); $attributeOptions = $usedAttribute->getSource()->getAllOptions(false); /** @var $block \Magento\Adminhtml\Block\Catalog\Product\Edit\Tab\Super\Config_Matrix */ - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock(preg_replace('/Test$/', '', __CLASS__)); $variations = $block->getVariations(); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/ConfigTest.php index e85fef2daa5..82f474152bd 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/ConfigTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/ConfigTest.php @@ -42,7 +42,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase $objectManager->get('Magento\Core\Model\Registry') ->register('current_product', $objectManager->create('Magento\Catalog\Model\Product')); /** @var $block \Magento\Adminhtml\Block\Catalog\Product\Edit\Tab\Super\Config */ - $block = $objectManager->get('Magento\Core\Model\Layout') + $block = $objectManager->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Catalog\Product\Edit\Tab\Super\Config'); $this->assertEquals(array(), $block->getSelectedAttributes()); } @@ -57,14 +57,14 @@ class ConfigTest extends \PHPUnit_Framework_TestCase $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $objectManager->get('Magento\Core\Model\Registry') ->register('current_product', $objectManager->create('Magento\Catalog\Model\Product')->load(1)); - $objectManager->get('Magento\Core\Model\Layout')->createBlock('Magento\Core\Block\Text', 'head'); + $objectManager->get('Magento\View\LayoutInterface')->createBlock('Magento\Core\Block\Text', 'head'); $usedAttribute = $objectManager->get('Magento\Catalog\Model\Entity\Attribute')->loadByCode( \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Eav\Model\Config') ->getEntityType('catalog_product')->getId(), 'test_configurable' ); /** @var $block \Magento\Adminhtml\Block\Catalog\Product\Edit\Tab\Super\Config */ - $block = $objectManager->get('Magento\Core\Model\Layout') + $block = $objectManager->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Catalog\Product\Edit\Tab\Super\Config'); $selectedAttributes = $block->getSelectedAttributes(); $this->assertEquals(array($usedAttribute->getId()), array_keys($selectedAttributes)); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/SettingsTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/SettingsTest.php index ffaef757f40..b1f4ba55737 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/SettingsTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/SettingsTest.php @@ -57,7 +57,7 @@ class SettingsTest extends \PHPUnit_Framework_TestCase $context = $objectManager->create('Magento\Backend\Block\Template\Context', array('urlBuilder' => $urlModel)); /** @var $layout \Magento\Core\Model\Layout */ - $layout = $objectManager->get('Magento\Core\Model\Layout'); + $layout = $objectManager->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Adminhtml\Block\Catalog\Product\Edit\Tab\Super\Settings */ $block = $layout->createBlock( 'Magento\Adminhtml\Block\Catalog\Product\Edit\Tab\Super\Settings', diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/TabsTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/TabsTest.php index f16b59b3e53..4424a309dd8 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/TabsTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Edit/TabsTest.php @@ -39,10 +39,10 @@ class TabsTest extends \PHPUnit_Framework_TestCase public function testPrepareLayout() { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $objectManager->get('Magento\Core\Model\View\DesignInterface') + $objectManager->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML) ->setDefaultDesignTheme(); - $objectManager->get('Magento\Core\Model\Config\Scope') + $objectManager->get('Magento\Config\ScopeInterface') ->setCurrentScope(\Magento\Core\Model\App\Area::AREA_ADMINHTML); /** @var $product \Magento\Catalog\Model\Product */ $product = $objectManager->create('Magento\Catalog\Model\Product'); @@ -50,7 +50,7 @@ class TabsTest extends \PHPUnit_Framework_TestCase $objectManager->get('Magento\Core\Model\Registry')->register('product', $product); /** @var $layout \Magento\Core\Model\Layout */ - $layout = $objectManager->get('Magento\Core\Model\Layout'); + $layout = $objectManager->get('Magento\View\LayoutInterface'); $layout->addBlock('Magento\Core\Block\Text', 'head'); $layout->setArea('nonexisting'); // prevent block templates rendering /** @var $block \Magento\Adminhtml\Block\Catalog\Product\Edit\Tabs */ diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/EditTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/EditTest.php index 0a5a2aaaf15..55139cb21f4 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/EditTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/EditTest.php @@ -50,7 +50,7 @@ class EditTest extends \PHPUnit_Framework_TestCase /** @var $objectManager \Magento\TestFramework\ObjectManager */ $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $objectManager->get('Magento\Core\Model\Registry')->register('current_product', $product); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Catalog\Product\Edit'); } diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Helper/Form/Gallery/ContentTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Helper/Form/Gallery/ContentTest.php index 6ebb9740710..2579bf435a8 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Helper/Form/Gallery/ContentTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Helper/Form/Gallery/ContentTest.php @@ -35,7 +35,7 @@ class ContentTest extends \PHPUnit_Framework_TestCase public function testGetUploader() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Adminhtml\Block\Catalog\Product\Helper\Form\Gallery\Content */ $block = $layout->createBlock('Magento\Adminhtml\Block\Catalog\Product\Helper\Form\Gallery\Content', 'block'); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Options/AjaxTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Options/AjaxTest.php index 707219bc935..41c13382db5 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Options/AjaxTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Catalog/Product/Options/AjaxTest.php @@ -40,7 +40,7 @@ class AjaxTest extends \PHPUnit_Framework_TestCase protected function setUp() { parent::setUp(); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Catalog\Product\Options\Ajax'); } diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Cms/Page/Edit/Tab/DesignTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Cms/Page/Edit/Tab/DesignTest.php index 98286908cd6..f065f2a10bc 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Cms/Page/Edit/Tab/DesignTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Cms/Page/Edit/Tab/DesignTest.php @@ -40,10 +40,10 @@ class DesignTest extends \PHPUnit_Framework_TestCase { /** @var $objectManager \Magento\TestFramework\ObjectManager */ $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $objectManager->get('Magento\Core\Model\View\DesignInterface') + $objectManager->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML) ->setDefaultDesignTheme(); - $objectManager->get('Magento\Core\Model\Config\Scope') + $objectManager->get('Magento\Config\ScopeInterface') ->setCurrentScope(\Magento\Core\Model\App\Area::AREA_ADMINHTML); $objectManager->get('Magento\Core\Model\Registry') ->register('cms_page', $objectManager->create('Magento\Cms\Model\Page')); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Dashboard/GraphTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Dashboard/GraphTest.php index 3f3197c633c..8fd9077f8ca 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Dashboard/GraphTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Dashboard/GraphTest.php @@ -40,7 +40,7 @@ class GraphTest extends \PHPUnit_Framework_TestCase protected function setUp() { parent::setUp(); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Dashboard\Graph'); $this->_block->setDataHelperName('Magento\Adminhtml\Helper\Dashboard\Order'); } diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Newsletter/Queue/Edit/FormTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Newsletter/Queue/Edit/FormTest.php index 5f1197eee24..73936e9674d 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Newsletter/Queue/Edit/FormTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Newsletter/Queue/Edit/FormTest.php @@ -38,11 +38,11 @@ class FormTest extends \PHPUnit_Framework_TestCase */ public function testPrepareForm() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML) ->setDefaultDesignTheme(); \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Config\Scope') + ->get('Magento\Config\ScopeInterface') ->setCurrentScope(\Magento\Core\Model\App\Area::AREA_ADMINHTML); $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Adminhtml\Block\Newsletter\Queue\Edit\Form'); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Newsletter/SubscriberTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Newsletter/SubscriberTest.php index 114f1155615..85bdb121a2f 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Newsletter/SubscriberTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Newsletter/SubscriberTest.php @@ -35,7 +35,7 @@ class SubscriberTest extends \PHPUnit_Framework_TestCase public function testGetShowQueueAdd() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Adminhtml\Block\Newsletter\Subscriber */ $block = $layout->createBlock('Magento\Adminhtml\Block\Newsletter\Subscriber', 'block'); /** @var $childBlock \Magento\Core\Block\Template */ diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Page/HeadTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Page/HeadTest.php index 38275e41997..4dbab16ae67 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Page/HeadTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Page/HeadTest.php @@ -33,7 +33,7 @@ class HeadTest extends \PHPUnit_Framework_TestCase { $this->assertInstanceOf( 'Magento\Adminhtml\Block\Page\Head', - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Page\Head') ); } diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Page/HeaderTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Page/HeaderTest.php index 801ddd8cc0f..5100a6c818d 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Page/HeaderTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Page/HeaderTest.php @@ -41,7 +41,7 @@ class HeaderTest extends \PHPUnit_Framework_TestCase protected function setUp() { parent::setUp(); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Page\Header'); } diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Promo/Catalog/Edit/Tab/MainTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Promo/Catalog/Edit/Tab/MainTest.php index 12823bacd0a..68eead7ccb7 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Promo/Catalog/Edit/Tab/MainTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Promo/Catalog/Edit/Tab/MainTest.php @@ -41,7 +41,7 @@ class MainTest extends \PHPUnit_Framework_TestCase { /** @var $objectManager \Magento\TestFramework\ObjectManager */ $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $objectManager->get('Magento\Core\Model\View\DesignInterface') + $objectManager->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML) ->setDefaultDesignTheme(); $rule = $objectManager->create('Magento\CatalogRule\Model\Rule'); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Promo/Quote/Edit/Tab/LabelsTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Promo/Quote/Edit/Tab/LabelsTest.php index 2b5542a0b29..5486fb59eed 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Promo/Quote/Edit/Tab/LabelsTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Promo/Quote/Edit/Tab/LabelsTest.php @@ -33,7 +33,7 @@ class LabelsTest extends \PHPUnit_Framework_TestCase { $this->assertInstanceOf( 'Magento\Adminhtml\Block\Promo\Quote\Edit\Tab\Labels', - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Promo\Quote\Edit\Tab\Labels') ); } diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Promo/Quote/Edit/Tab/MainTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Promo/Quote/Edit/Tab/MainTest.php index 74780a9d14b..c68ca6b29a4 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Promo/Quote/Edit/Tab/MainTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Promo/Quote/Edit/Tab/MainTest.php @@ -40,7 +40,7 @@ class MainTest extends \PHPUnit_Framework_TestCase public function testPrepareForm() { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $objectManager->get('Magento\Core\Model\View\DesignInterface') + $objectManager->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML) ->setDefaultDesignTheme(); $objectManager->get('Magento\Core\Model\Registry') diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Rating/Edit/Tab/FormTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Rating/Edit/Tab/FormTest.php index 6b5b7bf2fcf..bddd226d6fe 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Rating/Edit/Tab/FormTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Rating/Edit/Tab/FormTest.php @@ -33,7 +33,7 @@ class FormTest extends \PHPUnit_Framework_TestCase { $this->assertInstanceOf( 'Magento\Adminhtml\Block\Rating\Edit\Tab\Form', - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Rating\Edit\Tab\Form') ); } diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Filter/FormTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Filter/FormTest.php index 0b63e845f16..6315c59eb76 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Filter/FormTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Filter/FormTest.php @@ -38,7 +38,7 @@ class FormTest extends \PHPUnit_Framework_TestCase */ public function testPrepareForm() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML) ->setDefaultDesignTheme(); $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Core\Model\Layout'); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Bestsellers/GridTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Bestsellers/GridTest.php index ff62debbb48..4472f31e9d6 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Bestsellers/GridTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Bestsellers/GridTest.php @@ -40,7 +40,7 @@ class GridTest extends \PHPUnit_Framework_TestCase protected function setUp() { parent::setUp(); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Report\Sales\Bestsellers\Grid'); } diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Coupons/GridTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Coupons/GridTest.php index 12426583a96..f7befb8871b 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Coupons/GridTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Coupons/GridTest.php @@ -40,7 +40,7 @@ class GridTest extends \PHPUnit_Framework_TestCase */ protected function _createBlock($reportType = null) { - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Report\Sales\Coupons\Grid'); $filterData = new \Magento\Object(); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Invoiced/GridTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Invoiced/GridTest.php index 5c07b54d889..5e39ca592de 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Invoiced/GridTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Invoiced/GridTest.php @@ -40,7 +40,7 @@ class GridTest extends \PHPUnit_Framework_TestCase */ protected function _createBlock($reportType = null) { - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Report\Sales\Invoiced\Grid'); $filterData = new \Magento\Object(); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Refunded/GridTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Refunded/GridTest.php index 5a6e7a85959..ad6d42391ae 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Refunded/GridTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Refunded/GridTest.php @@ -40,7 +40,7 @@ class GridTest extends \PHPUnit_Framework_TestCase */ protected function _createBlock($reportType = null) { - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Report\Sales\Refunded\Grid'); $filterData = new \Magento\Object(); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Sales/GridTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Sales/GridTest.php index 4d2c521fe09..e6d091edb27 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Sales/GridTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Sales/GridTest.php @@ -40,7 +40,7 @@ class GridTest extends \PHPUnit_Framework_TestCase */ protected function _createBlock($reportType = null) { - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Report\Sales\Sales\Grid'); $filterData = new \Magento\Object(); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Shipping/GridTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Shipping/GridTest.php index c35c0a142e1..7f1de78a63a 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Shipping/GridTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Shipping/GridTest.php @@ -40,7 +40,7 @@ class GridTest extends \PHPUnit_Framework_TestCase */ protected function _createBlock($reportType = null) { - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Report\Sales\Shipping\Grid'); $filterData = new \Magento\Object(); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Tax/GridTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Tax/GridTest.php index ef54d95c59c..db75c6a0635 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Tax/GridTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Report/Sales/Tax/GridTest.php @@ -40,7 +40,7 @@ class GridTest extends \PHPUnit_Framework_TestCase */ protected function _createBlock($reportType = null) { - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Report\Sales\Tax\Grid'); $filterData = new \Magento\Object(); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Sales/Items/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Sales/Items/AbstractTest.php index f0274d482d0..09f4998df14 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Sales/Items/AbstractTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Sales/Items/AbstractTest.php @@ -35,7 +35,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase public function testGetItemExtraInfoHtml() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Adminhtml\Block\Sales\Items\AbstractItems */ $block = $layout->createBlock('Magento\Adminhtml\Block\Sales\Items\AbstractItems', 'block'); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Sales/Order/Create/Form/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Sales/Order/Create/Form/AbstractTest.php index 63051266b44..c78a8840864 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Sales/Order/Create/Form/AbstractTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Sales/Order/Create/Form/AbstractTest.php @@ -39,7 +39,7 @@ class AbstractTest public function testAddAttributesToForm() { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $objectManager->get('Magento\Core\Model\View\DesignInterface') + $objectManager->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML) ->setDefaultDesignTheme(); $arguments = array( diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Account/Edit/FormTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Account/Edit/FormTest.php index 1dcbe0fe832..5a3db2399e6 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Account/Edit/FormTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Account/Edit/FormTest.php @@ -43,7 +43,7 @@ class FormTest extends \PHPUnit_Framework_TestCase $session->setUser($user); /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var \Magento\Adminhtml\Block\System\Account\Edit\Form */ $block = $layout->createBlock('Magento\Adminhtml\Block\System\Account\Edit\Form'); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Design/Edit/Tab/GeneralTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Design/Edit/Tab/GeneralTest.php index 21e74ed8313..be96f0e31b8 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Design/Edit/Tab/GeneralTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Design/Edit/Tab/GeneralTest.php @@ -39,7 +39,7 @@ class GeneralTest extends \PHPUnit_Framework_TestCase public function testPrepareForm() { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $objectManager->get('Magento\Core\Model\View\DesignInterface') + $objectManager->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML) ->setDefaultDesignTheme(); $objectManager->get('Magento\Core\Model\Registry') diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/DeleteTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/DeleteTest.php index 30d0004cec9..0fe5ae4b226 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/DeleteTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/DeleteTest.php @@ -35,7 +35,7 @@ class DeleteTest extends \PHPUnit_Framework_TestCase public function testGetHeaderText() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Adminhtml\Block\System\Store\Delete */ $block = $layout->createBlock('Magento\Adminhtml\Block\System\Store\Delete', 'block'); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/Edit/Form/GroupTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/Edit/Form/GroupTest.php index 3e1b1807e52..341cfae72b6 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/Edit/Form/GroupTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/Edit/Form/GroupTest.php @@ -55,7 +55,7 @@ class GroupTest extends \PHPUnit_Framework_TestCase } /** @var $layout \Magento\Core\Model\Layout */ - $layout = $objectManager->get('Magento\Core\Model\Layout'); + $layout = $objectManager->get('Magento\View\LayoutInterface'); $this->_block = $layout->createBlock('Magento\Adminhtml\Block\System\Store\Edit\Form\Group'); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/Edit/Form/StoreTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/Edit/Form/StoreTest.php index b34e609ab9c..017c46e267e 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/Edit/Form/StoreTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/Edit/Form/StoreTest.php @@ -55,7 +55,7 @@ class StoreTest extends \PHPUnit_Framework_TestCase } /** @var $layout \Magento\Core\Model\Layout */ - $layout = $objectManager->get('Magento\Core\Model\Layout'); + $layout = $objectManager->get('Magento\View\LayoutInterface'); $this->_block = $layout->createBlock('Magento\Adminhtml\Block\System\Store\Edit\Form\Store'); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/Edit/Form/WebsiteTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/Edit/Form/WebsiteTest.php index 1c3276be4da..3a61acaa263 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/Edit/Form/WebsiteTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/Edit/Form/WebsiteTest.php @@ -54,7 +54,7 @@ class WebsiteTest extends \PHPUnit_Framework_TestCase } /** @var $layout \Magento\Core\Model\Layout */ - $layout = $objectManager->get('Magento\Core\Model\Layout'); + $layout = $objectManager->get('Magento\View\LayoutInterface'); $this->_block = $layout->createBlock('Magento\Adminhtml\Block\System\Store\Edit\Form\Website'); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/EditTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/EditTest.php index 5a13b118267..7a6422efe79 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/EditTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Store/EditTest.php @@ -64,7 +64,7 @@ class EditTest extends \PHPUnit_Framework_TestCase $this->_initStoreTypesInRegistry($registryData); /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Adminhtml\Block\System\Store\Edit */ $block = $layout->createBlock('Magento\Adminhtml\Block\System\Store\Edit', 'block'); $block->setArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML); @@ -115,7 +115,7 @@ class EditTest extends \PHPUnit_Framework_TestCase $this->_initStoreTypesInRegistry($registryData); /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Adminhtml\Block\System\Store\Edit */ $block = $layout->createBlock('Magento\Adminhtml\Block\System\Store\Edit', 'block'); $block->setArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Variable/EditTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Variable/EditTest.php index 44f7b7d0046..08e8402de4e 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Variable/EditTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/System/Variable/EditTest.php @@ -51,9 +51,9 @@ class EditTest extends \PHPUnit_Framework_TestCase ->save(); $objectManager->get('Magento\Core\Model\Registry')->register('current_variable', $variable); - $objectManager->get('Magento\Core\Controller\Request\Http') + $objectManager->get('Magento\App\RequestInterface') ->setParam('variable_id', $variable->getId()); - $block = $objectManager->get('Magento\Core\Model\Layout') + $block = $objectManager->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\System\Variable\Edit', 'variable'); $this->assertArrayHasKey('variable-delete_button', $block->getLayout()->getAllBlocks()); } diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Tax/Rate/ImportExportTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Tax/Rate/ImportExportTest.php index beb463d3e0a..3b3dd3f0559 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Tax/Rate/ImportExportTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Tax/Rate/ImportExportTest.php @@ -35,7 +35,7 @@ class ImportExportTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Tax\Rate\ImportExport') ->setArea('adminhtml'); } diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/TemplateTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/TemplateTest.php index 2cc243834d6..b651f0e7a48 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/TemplateTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/TemplateTest.php @@ -36,7 +36,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase { $this->assertInstanceOf( 'Magento\Backend\Block\Template', - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Template') ); } diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Catalog/Category/TreeTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Catalog/Category/TreeTest.php index 67e80147f5b..72da1904378 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Catalog/Category/TreeTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Catalog/Category/TreeTest.php @@ -47,7 +47,7 @@ class TreeTest extends \PHPUnit_Framework_TestCase parent::setUp(); $this->_treeBlock = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Layout') + ->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Urlrewrite\Catalog\Category\Tree'); } diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Catalog/Edit/FormTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Catalog/Edit/FormTest.php index e656c33e42f..40bba41da65 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Catalog/Edit/FormTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Catalog/Edit/FormTest.php @@ -42,7 +42,7 @@ class FormTest extends \PHPUnit_Framework_TestCase protected function _getFormInstance($args = array()) { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Adminhtml\Block\Urlrewrite\Catalog\Edit\Form */ $block = $layout->createBlock( 'Magento\Adminhtml\Block\Urlrewrite\Catalog\Edit\Form', 'block', array('data' => $args) diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Catalog/Product/GridTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Catalog/Product/GridTest.php index b8d2907de72..da55945ba15 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Catalog/Product/GridTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Catalog/Product/GridTest.php @@ -39,7 +39,7 @@ class GridTest extends \PHPUnit_Framework_TestCase public function testPrepareGrid() { /** @var $gridBlock \Magento\Adminhtml\Block\Urlrewrite\Catalog\Product\Grid */ - $gridBlock = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $gridBlock = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Urlrewrite\Catalog\Product\Grid'); $gridBlock->toHtml(); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Cms/Page/Edit/FormTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Cms/Page/Edit/FormTest.php index 68756908fe8..80862a4f2d3 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Cms/Page/Edit/FormTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Cms/Page/Edit/FormTest.php @@ -42,7 +42,7 @@ class FormTest extends \PHPUnit_Framework_TestCase protected function _getFormInstance($args = array()) { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Adminhtml\Block\Urlrewrite\Cms\Page\Edit\Form */ $block = $layout->createBlock( 'Magento\Adminhtml\Block\Urlrewrite\Cms\Page\Edit\Form', 'block', array('data' => $args) diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Cms/Page/GridTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Cms/Page/GridTest.php index 3af726ce3f0..2968ce70603 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Cms/Page/GridTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Cms/Page/GridTest.php @@ -39,7 +39,7 @@ class GridTest extends \PHPUnit_Framework_TestCase public function testPrepareGrid() { /** @var \Magento\Adminhtml\Block\Urlrewrite\Cms\Page\Grid $gridBlock */ - $gridBlock = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $gridBlock = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Urlrewrite\Cms\Page\Grid'); $gridBlock->toHtml(); @@ -67,7 +67,7 @@ class GridTest extends \PHPUnit_Framework_TestCase public function testPrepareGridForMultipleStores() { /** @var \Magento\Adminhtml\Block\Urlrewrite\Cms\Page\Grid $gridBlock */ - $gridBlock = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $gridBlock = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Adminhtml\Block\Urlrewrite\Cms\Page\Grid'); $gridBlock->toHtml(); $this->assertInstanceOf('Magento\Backend\Block\Widget\Grid\Column', $gridBlock->getColumn('store_id'), diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Edit/FormTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Edit/FormTest.php index 415425e6997..ba2e5bd5e82 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Edit/FormTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Urlrewrite/Edit/FormTest.php @@ -42,7 +42,7 @@ class FormTest extends \PHPUnit_Framework_TestCase protected function _getFormInstance($args = array()) { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Adminhtml\Block\Urlrewrite\Edit\Form */ $block = $layout->createBlock('Magento\Adminhtml\Block\Urlrewrite\Edit\Form', 'block', array('data' => $args)); $block->setTemplate(null); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Widget/Form/ContainerTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Widget/Form/ContainerTest.php index 66c464e8f83..b6fb60bcc8b 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Widget/Form/ContainerTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Widget/Form/ContainerTest.php @@ -36,7 +36,7 @@ class ContainerTest extends \PHPUnit_Framework_TestCase { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); // Create block with blocking _prepateLayout(), which is used by block to instantly add 'form' child /** @var $block \Magento\Adminhtml\Block\Widget\Form\Container */ $block = $this->getMock('Magento\Adminhtml\Block\Widget\Form\Container', array('_prepareLayout'), diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Widget/Grid/Massaction/ItemTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Widget/Grid/Massaction/ItemTest.php index e18846ef8ac..2bed5b20805 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Widget/Grid/Massaction/ItemTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Widget/Grid/Massaction/ItemTest.php @@ -35,7 +35,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase public function testGetAdditionalActionBlock() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Adminhtml\Block\Widget\Grid\Massaction\Item */ $block = $layout->createBlock('Magento\Adminhtml\Block\Widget\Grid\Massaction\Item', 'block'); $expected = $layout->addBlock('Magento\Core\Block\Template', 'additional_action', 'block'); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Widget/GridTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Widget/GridTest.php index 0d349f0c387..40e2e428d4b 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Widget/GridTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Widget/GridTest.php @@ -35,7 +35,7 @@ class GridTest extends \PHPUnit_Framework_TestCase public function testGetMassactionBlock() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Adminhtml\Block\Widget\Grid */ $block = $layout->createBlock('Magento\Adminhtml\Block\Widget\Grid', 'block'); $child = $layout->addBlock('Magento\Core\Block\Template', 'massaction', 'block'); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Widget/TabsTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Widget/TabsTest.php index c30972a7b41..a5b23e43de3 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Widget/TabsTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Block/Widget/TabsTest.php @@ -45,7 +45,7 @@ class TabsTest extends \PHPUnit_Framework_TestCase $objectManager->get('Magento\Core\Model\Registry')->register('current_widget_instance', $widgetInstance); /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Adminhtml\Block\Widget\Tabs */ $block = $layout->createBlock('Magento\Adminhtml\Block\Widget\Tabs', 'block'); $layout->addBlock('Magento\Widget\Block\Adminhtml\Widget\Instance\Edit\Tab\Main', 'child_tab', 'block'); diff --git a/dev/tests/integration/testsuite/Magento/Adminhtml/Controller/Catalog/Product/AttributeTest.php b/dev/tests/integration/testsuite/Magento/Adminhtml/Controller/Catalog/Product/AttributeTest.php index 246dda8df4b..6d3869318f6 100644 --- a/dev/tests/integration/testsuite/Magento/Adminhtml/Controller/Catalog/Product/AttributeTest.php +++ b/dev/tests/integration/testsuite/Magento/Adminhtml/Controller/Catalog/Product/AttributeTest.php @@ -113,7 +113,7 @@ class AttributeTest extends \Magento\Backend\Utility\Controller // emulate admin store and design \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\StoreManagerInterface') ->setCurrentStore(\Magento\Core\Model\AppInterface::ADMIN_STORE_ID); - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setDesignTheme(1); /** @var \Magento\Core\Model\Translate $translate */ $translate = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() diff --git a/dev/tests/integration/testsuite/Magento/App/FrontControllerTest.php b/dev/tests/integration/testsuite/Magento/App/FrontControllerTest.php new file mode 100644 index 00000000000..b707dcb2213 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/App/FrontControllerTest.php @@ -0,0 +1,91 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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 + * @subpackage integration_tests + * @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\App; + +/** + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ +class FrontControllerTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\ObjectManager + */ + protected $_objectManager; + + /** + * @var \Magento\App\FrontController + */ + protected $_model; + + protected function setUp() + { + $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + $this->_model = $this->_objectManager->create('Magento\App\FrontController'); + } + + public function testSetGetDefault() + { + $this->_model->setDefault('test', 'value'); + $this->assertEquals('value', $this->_model->getDefault('test')); + + $default = array('some_key' => 'some_value'); + $this->_model->setDefault($default); + $this->assertEquals($default, $this->_model->getDefault()); + } + + public function testGetRequest() + { + $this->assertNull($this->_model->getRequest()); + } + + public function testGetResponse() + { + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App')->setResponse( + \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get('Magento\App\ResponseInterface') + ); + if (!\Magento\TestFramework\Helper\Bootstrap::canTestHeaders()) { + $this->markTestSkipped('Can\'t test get response without sending headers'); + } + $this->assertInstanceOf('Magento\App\ResponseInterface', $this->_model->getResponse()); + } + + public function testDispatch() + { + if (!\Magento\TestFramework\Helper\Bootstrap::canTestHeaders()) { + $this->markTestSkipped('Cant\'t test dispatch process without sending headers'); + } + $_SERVER['HTTP_HOST'] = 'localhost'; + $this->_objectManager->get('Magento\Config\Scope')->setCurrentScope('frontend'); + $request = $this->_objectManager->create('Magento\App\Request\Http'); + /* empty action */ + $request->setRequestUri('core/index/index'); + $this->_model->dispatch($request); + $this->assertEmpty($this->_model->getResponse()->getBody()); + $this->assertEquals($request, $this->_model->getRequest()); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Authorizenet/Block/Directpost/IframeTest.php b/dev/tests/integration/testsuite/Magento/Authorizenet/Block/Directpost/IframeTest.php index d190cb24991..aaea940c9ba 100644 --- a/dev/tests/integration/testsuite/Magento/Authorizenet/Block/Directpost/IframeTest.php +++ b/dev/tests/integration/testsuite/Magento/Authorizenet/Block/Directpost/IframeTest.php @@ -36,7 +36,7 @@ class IframeTest extends \PHPUnit_Framework_TestCase { $xssString = '</script><script>alert("XSS")</script>'; /** @var $block \Magento\Authorizenet\Block\Directpost\Iframe */ - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Authorizenet\Block\Directpost\Iframe'); $block->setTemplate('directpost/iframe.phtml'); $block->setParams(array( diff --git a/dev/tests/integration/testsuite/Magento/Backend/Block/System/Config/FormStub.php b/dev/tests/integration/testsuite/Magento/Backend/Block/System/Config/FormStub.php index eceee165e99..46eed65f44e 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Block/System/Config/FormStub.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Block/System/Config/FormStub.php @@ -76,7 +76,7 @@ class FormStub extends \Magento\Backend\Block\System\Config\Form $this->_configRoot = $this->_configRootStub; } $this->_fieldRenderer = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Layout')->createBlock( + ->get('Magento\View\LayoutInterface')->createBlock( 'Magento\Backend\Block\System\Config\Form\Field' ); } diff --git a/dev/tests/integration/testsuite/Magento/Backend/Block/System/Config/FormTest.php b/dev/tests/integration/testsuite/Magento/Backend/Block/System/Config/FormTest.php index 04867722be3..82de257d0f2 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Block/System/Config/FormTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Block/System/Config/FormTest.php @@ -53,7 +53,7 @@ class FormTest extends \PHPUnit_Framework_TestCase /** @var $layout \Magento\Core\Model\Layout */ $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Core\Model\Layout', array('area' => 'adminhtml')); - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Config\Scope') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Config\ScopeInterface') ->setCurrentScope(\Magento\Core\Model\App\Area::AREA_ADMINHTML); /** @var $block \Magento\Backend\Block\System\Config\Form */ $block = $layout->createBlock('Magento\Backend\Block\System\Config\Form', 'block'); @@ -80,14 +80,14 @@ class FormTest extends \PHPUnit_Framework_TestCase public function testInitFieldsUseDefaultCheckbox($section, $group, $field, array $configData, $expectedUseDefault) { $this->markTestIncomplete('MAGETWO-9058'); - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Config\Scope') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Config\ScopeInterface') ->setCurrentScope(\Magento\Core\Model\App\Area::AREA_ADMINHTML); $form = $this->_formFactory->create(); $fieldset = $form->addFieldset($section->getId() . '_' . $group->getId(), array()); /* @TODO Eliminate stub by proper mock / config fixture usage */ /** @var $block \Magento\Backend\Block\System\Config\FormStub */ - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Backend\Block\System\Config\FormStub'); $block->setScope(\Magento\Backend\Block\System\Config\Form::SCOPE_WEBSITES); $block->setStubConfigData($configData); @@ -134,14 +134,14 @@ class FormTest extends \PHPUnit_Framework_TestCase public function testInitFieldsUseConfigPath($section, $group, $field, array $configData, $expectedUseDefault) { $this->markTestIncomplete('MAGETWO-9058'); - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Config\Scope') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Config\ScopeInterface') ->setCurrentScope(\Magento\Core\Model\App\Area::AREA_ADMINHTML); $form = $this->_formFactory->create(); $fieldset = $form->addFieldset($section->getId() . '_' . $group->getId(), array()); /* @TODO Eliminate stub by proper mock / config fixture usage */ /** @var $block \Magento\Backend\Block\System\Config\FormStub */ - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Backend\Block\System\Config\FormStub'); $block->setScope(\Magento\Backend\Block\System\Config\Form::SCOPE_DEFAULT); $block->setStubConfigData($configData); @@ -165,7 +165,7 @@ class FormTest extends \PHPUnit_Framework_TestCase \Magento\Core\Model\App::PARAM_BAN_CACHE => true, )); \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Config\Scope') + ->get('Magento\Config\ScopeInterface') ->setCurrentScope(\Magento\Core\Model\App\Area::AREA_ADMINHTML); \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App') ->loadAreaPart(\Magento\Core\Model\App\Area::AREA_ADMINHTML, \Magento\Core\Model\App\Area::PART_CONFIG); @@ -212,20 +212,20 @@ class FormTest extends \PHPUnit_Framework_TestCase public function testInitFormAddsFieldsets() { \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Controller\Response\Http')->headersSentThrowsException = false; + ->get('Magento\App\ResponseInterface')->headersSentThrowsException = false; \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( 'Magento\Core\Controller\Front\Action', array( 'request' => \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Controller\Request\Http'), + ->get('Magento\App\Request\Http'), 'response' => \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->get('Magento\Core\Model\App')->getResponse() ) ); - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Controller\Request\Http') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\RequestInterface') ->setParam('section', 'general'); /** @var $block \Magento\Backend\Block\System\Config\Form */ - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Backend\Block\System\Config\Form'); $block->initForm(); $expectedIds = array( diff --git a/dev/tests/integration/testsuite/Magento/Backend/Block/TemplateTest.php b/dev/tests/integration/testsuite/Magento/Backend/Block/TemplateTest.php index 912a04fc959..93c9370ae85 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Block/TemplateTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Block/TemplateTest.php @@ -42,7 +42,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase protected function setUp() { parent::setUp(); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Backend\Block\Template'); } diff --git a/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/ContainerTest.php b/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/ContainerTest.php index 202b4529374..bd8413c402c 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/ContainerTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/ContainerTest.php @@ -32,7 +32,7 @@ class ContainerTest extends \PHPUnit_Framework_TestCase public function testPseudoConstruct() { /** @var $block \Magento\Backend\Block\Widget\Container */ - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Backend\Block\Widget\Container', '', array('data' => array( \Magento\Backend\Block\Widget\Container::PARAM_CONTROLLER => 'one', diff --git a/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/FormTest.php b/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/FormTest.php index 3b1df3ce6b6..29982f371d0 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/FormTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/FormTest.php @@ -40,7 +40,7 @@ class FormTest extends \PHPUnit_Framework_TestCase public function testSetFieldset() { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $objectManager->get('Magento\Core\Model\View\DesignInterface') + $objectManager->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML) ->setDefaultDesignTheme(); $layout = $objectManager->create('Magento\Core\Model\Layout'); diff --git a/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/ColumnSetTest.php b/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/ColumnSetTest.php index dc1df20dd0c..e8df531d5da 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/ColumnSetTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/ColumnSetTest.php @@ -63,7 +63,7 @@ class ColumnSetTest extends \PHPUnit_Framework_TestCase $context = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Core\Block\Template\Context', array('layout' => $this->_layoutMock)); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock( 'Magento\Backend\Block\Widget\Grid\ColumnSet', '', array('context' => $context) ); diff --git a/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/ContainerTest.php b/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/ContainerTest.php index 8573fe09044..35a5034c9a6 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/ContainerTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/ContainerTest.php @@ -32,7 +32,7 @@ class ContainerTest extends \PHPUnit_Framework_TestCase public function testPseudoConstruct() { /** @var $block \Magento\Backend\Block\Widget\Grid\Container */ - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Backend\Block\Widget\Grid\Container', '', array( 'data' => array( \Magento\Backend\Block\Widget\Container::PARAM_CONTROLLER => 'widget', diff --git a/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/ExtendedTest.php b/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/ExtendedTest.php index ba4e31255c4..ae399d84871 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/ExtendedTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/ExtendedTest.php @@ -38,7 +38,7 @@ class ExtendedTest extends \PHPUnit_Framework_TestCase protected $_block; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layoutMock; @@ -47,7 +47,7 @@ class ExtendedTest extends \PHPUnit_Framework_TestCase parent::setUp(); $this->_layoutMock = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Layout'); + ->get('Magento\View\LayoutInterface'); $context = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Backend\Block\Template\Context', array('layout' => $this->_layoutMock)); $this->_block = $this->_layoutMock->createBlock( diff --git a/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/MassactionTest.php b/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/MassactionTest.php index ad090e4f0e9..f014623bc3d 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/MassactionTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/Grid/MassactionTest.php @@ -40,7 +40,7 @@ class MassactionTest extends \PHPUnit_Framework_TestCase protected $_block; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -53,7 +53,7 @@ class MassactionTest extends \PHPUnit_Framework_TestCase $this->_setFixtureTheme(); $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\Layout', array('area' => 'adminhtml')); + ->create('Magento\View\LayoutInterface', array('area' => 'adminhtml')); $this->_layout->getUpdate()->load('layout_test_grid_handle'); $this->_layout->generateXml(); $this->_layout->generateElements(); @@ -70,7 +70,7 @@ class MassactionTest extends \PHPUnit_Framework_TestCase \Magento\Core\Model\App::PARAM_RUN_CODE => 'admin', \Magento\Core\Model\App::PARAM_RUN_TYPE => 'store', \Magento\Core\Model\App::PARAM_APP_DIRS => array( - \Magento\Core\Model\Dir::THEMES => __DIR__ . '/../../_files/design' + \Magento\App\Dir::THEMES => __DIR__ . '/../../_files/design' ), )); } @@ -84,7 +84,7 @@ class MassactionTest extends \PHPUnit_Framework_TestCase public function testMassactionDefaultValues() { /** @var $blockEmpty \Magento\Backend\Block\Widget\Grid\Massaction */ - $blockEmpty = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $blockEmpty = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Backend\Block\Widget\Grid\Massaction'); $this->assertEmpty($blockEmpty->getItems()); $this->assertEquals(0, $blockEmpty->getCount()); diff --git a/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/GridTest.php b/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/GridTest.php index 159697c4e1a..2ad1ec80e84 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/GridTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/GridTest.php @@ -38,7 +38,7 @@ class GridTest extends \PHPUnit_Framework_TestCase protected $_block; /** - * @var \Magento\Core\Model\Layout|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\View\LayoutInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $_layoutMock; @@ -65,7 +65,7 @@ class GridTest extends \PHPUnit_Framework_TestCase $this->_layoutMock->expects($this->any())->method('createBlock') ->with('Magento\Backend\Block\Widget\Button') ->will($this->returnValue(\Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Layout')->createBlock('Magento\Backend\Block\Widget\Button'))); + ->get('Magento\View\LayoutInterface')->createBlock('Magento\Backend\Block\Widget\Button'))); $this->_layoutMock->expects($this->any())->method('helper') ->with('Magento\Core\Helper\Data') ->will($this->returnValue( @@ -73,7 +73,7 @@ class GridTest extends \PHPUnit_Framework_TestCase )); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Backend\Block\Widget\Grid'); $this->_block->setLayout($this->_layoutMock); $this->_block->setNameInLayout('grid'); @@ -90,7 +90,7 @@ class GridTest extends \PHPUnit_Framework_TestCase $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false), \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Core\Block\Template\Context', array( - 'dirs' => new \Magento\Core\Model\Dir(__DIR__), + 'dirs' => new \Magento\App\Dir(__DIR__), 'filesystem' => new \Magento\Filesystem(new \Magento\Filesystem\Adapter\Local), )), \Magento\TestFramework\Helper\Bootstrap::getObjectManager() diff --git a/dev/tests/integration/testsuite/Magento/Backend/Controller/AbstractActionTest.php b/dev/tests/integration/testsuite/Magento/Backend/Controller/AbstractActionTest.php index bd332d920d4..3e4f5236571 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Controller/AbstractActionTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Controller/AbstractActionTest.php @@ -40,7 +40,7 @@ class AbstractActionTest extends \Magento\Backend\Utility\Controller */ public function testPreDispatchWithEmptyUrlRedirectsToStartupPage() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Config\Scope') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Config\ScopeInterface') ->setCurrentScope(\Magento\Core\Model\App\Area::AREA_ADMINHTML); $this->dispatch('backend'); /** @var $backendUrlModel \Magento\Backend\Model\Url */ @@ -104,7 +104,7 @@ class AbstractActionTest extends \Magento\Backend\Utility\Controller $this->dispatch('backend/admin/dashboard'); - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); $actualBlocks = $layout->getAllBlocks(); $this->assertNotEmpty($actualBlocks); diff --git a/dev/tests/integration/testsuite/Magento/Backend/Controller/Router/DefaultRouterTest.php b/dev/tests/integration/testsuite/Magento/Backend/Controller/Router/DefaultRouterTest.php index 857fbb02080..255820105e6 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Controller/Router/DefaultRouterTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Controller/Router/DefaultRouterTest.php @@ -57,7 +57,7 @@ class DefaultRouterTest extends \PHPUnit_Framework_TestCase 'baseController' => 'Magento\Backend\Controller\AbstractAction', 'routeConfig' => $this->_routeConfigMock ); - $this->_frontMock = $this->getMock('Magento\Core\Controller\Varien\Front', array(), array(), '', false); + $this->_frontMock = $this->getMock('Magento\App\FrontController', array(), array(), '', false); $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Backend\Controller\Router\DefaultRouter', $options); $this->_model->setFront($this->_frontMock); @@ -65,7 +65,7 @@ class DefaultRouterTest extends \PHPUnit_Framework_TestCase public function testRouterCannotProcessRequestsWithWrongFrontName() { - $request = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $request = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); $request->expects($this->once()) ->method('getPathInfo') ->will($this->returnValue('frontend/admin/dashboard')); @@ -76,7 +76,7 @@ class DefaultRouterTest extends \PHPUnit_Framework_TestCase public function testRouterCanProcessRequestsWithProperFrontName() { - $request = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $request = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); $request->expects($this->once()) ->method('getPathInfo') ->will($this->returnValue('backend/admin/dashboard')); diff --git a/dev/tests/integration/testsuite/Magento/Backend/Controller/Router/Validator/DefaultTest.php b/dev/tests/integration/testsuite/Magento/Backend/Controller/Router/Validator/DefaultTest.php index 3f67a027ca5..2c9cb197168 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Controller/Router/Validator/DefaultTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Controller/Router/Validator/DefaultTest.php @@ -32,25 +32,6 @@ namespace Magento\Backend\Controller\Router\Validator; */ class DefaultTest extends \PHPUnit_Framework_TestCase { - /** - * @magentoConfigFixture global/areas/adminhtml/frontName 0 - * @expectedException \InvalidArgumentException - * @magentoAppIsolation enabled - */ - public function testConstructWithEmptyAreaFrontName() - { - $dataHelperMock = $this->getMock('Magento\Backend\Helper\Data', array(), array(), '', false); - $dataHelperMock->expects($this->once())->method('getAreaFrontName')->will($this->returnValue(null)); - - $options = array( - 'areaCode' => \Magento\Core\Model\App\Area::AREA_ADMINHTML, - 'baseController' => 'Magento\Backend\Controller\AbstractAction', - 'backendData' => $dataHelperMock, - ); - \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Backend\Controller\Router\DefaultRouter', $options); - } - /** * @magentoConfigFixture global/areas/adminhtml/frontName backend * @magentoAppIsolation enabled diff --git a/dev/tests/integration/testsuite/Magento/Backend/Helper/DataTest.php b/dev/tests/integration/testsuite/Magento/Backend/Helper/DataTest.php index 333ef2fbb42..2e3ec9dc9a7 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Helper/DataTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Helper/DataTest.php @@ -44,7 +44,7 @@ class DataTest extends \PHPUnit_Framework_TestCase protected function setUp() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Config\Scope') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Config\ScopeInterface') ->setCurrentScope(\Magento\Core\Model\App\Area::AREA_ADMINHTML); $this->_helper = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->get('Magento\Backend\Helper\Data'); @@ -55,7 +55,7 @@ class DataTest extends \PHPUnit_Framework_TestCase $this->_helper = null; $this->_auth = null; \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Config\Scope') + ->get('Magento\Config\ScopeInterface') ->setCurrentScope(null); } @@ -88,7 +88,7 @@ class DataTest extends \PHPUnit_Framework_TestCase */ public function testPageHelpUrl() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Controller\Request\Http') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\RequestInterface') ->setControllerModule('dummy') ->setControllerName('index') ->setActionName('test'); diff --git a/dev/tests/integration/testsuite/Magento/Backend/Model/Auth/SessionTest.php b/dev/tests/integration/testsuite/Magento/Backend/Model/Auth/SessionTest.php index c761fca0dbc..8faa5176f4e 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Model/Auth/SessionTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Model/Auth/SessionTest.php @@ -45,7 +45,7 @@ class SessionTest extends \PHPUnit_Framework_TestCase protected function setUp() { parent::setUp(); - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Config\Scope') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Config\ScopeInterface') ->setCurrentScope(\Magento\Core\Model\App\Area::AREA_ADMINHTML); $this->_auth = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Backend\Model\Auth'); @@ -57,7 +57,7 @@ class SessionTest extends \PHPUnit_Framework_TestCase protected function tearDown() { $this->_model = null; - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Config\Scope') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Config\ScopeInterface') ->setCurrentScope(null); } diff --git a/dev/tests/integration/testsuite/Magento/Backend/Model/Config/Backend/Admin/RobotsTest.php b/dev/tests/integration/testsuite/Magento/Backend/Model/Config/Backend/Admin/RobotsTest.php index 400cadf3514..a58f09ec765 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Model/Config/Backend/Admin/RobotsTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Model/Config/Backend/Admin/RobotsTest.php @@ -78,7 +78,7 @@ class RobotsTest extends \PHPUnit_Framework_TestCase public function testAfterSaveFileNotExists() { $robotsTxtPath = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Dir')->getDir() . DS . 'robots.txt'; + ->get('Magento\App\Dir')->getDir() . DS . 'robots.txt'; $this->assertFileNotExists($robotsTxtPath, 'robots.txt exists'); $this->_modifyConfig(); @@ -92,7 +92,7 @@ class RobotsTest extends \PHPUnit_Framework_TestCase */ public function testAfterSaveFileExists() { - $robotsTxtPath = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') + $robotsTxtPath = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') ->getDir() . DS . 'robots.txt'; $this->assertFileExists($robotsTxtPath, 'robots.txt exists'); @@ -108,7 +108,7 @@ class RobotsTest extends \PHPUnit_Framework_TestCase $this->_model->setValue($robotsTxt)->save(); $this->assertStringEqualsFile( \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Dir')->getDir() . DS . 'robots.txt', + ->get('Magento\App\Dir')->getDir() . DS . 'robots.txt', $robotsTxt ); } diff --git a/dev/tests/integration/testsuite/Magento/Backend/Model/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Backend/Model/ConfigTest.php index d48cfc82579..858d7cc4f60 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Model/ConfigTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Model/ConfigTest.php @@ -41,7 +41,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase */ public function testSaveWithSingleStoreModeEnabled($groups) { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Config\Scope') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Config\ScopeInterface') ->setCurrentScope(\Magento\Core\Model\App\Area::AREA_ADMINHTML); /** @var $_configDataObject \Magento\Backend\Model\Config */ $_configDataObject = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() diff --git a/dev/tests/integration/testsuite/Magento/Backend/Model/LocaleTest.php b/dev/tests/integration/testsuite/Magento/Backend/Model/LocaleTest.php index 328ee192ae4..f466d4f6da7 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Model/LocaleTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Model/LocaleTest.php @@ -82,7 +82,7 @@ class LocaleTest extends \PHPUnit_Framework_TestCase public function testSetLocaleWithRequestLocale() { $request = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Controller\Request\Http'); + ->get('Magento\App\RequestInterface'); $request->setPost(array('locale' => 'de_DE')); $this->_checkSetLocale('de_DE'); } diff --git a/dev/tests/integration/testsuite/Magento/Backend/Model/MenuTest.php b/dev/tests/integration/testsuite/Magento/Backend/Model/MenuTest.php index b7d430bd04d..23a16e9b6af 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Model/MenuTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Model/MenuTest.php @@ -46,7 +46,7 @@ class MenuTest extends \PHPUnit_Framework_TestCase ->loadArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML); $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Backend\Model\Auth'); - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Config\Scope') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Config\ScopeInterface') ->setCurrentScope(\Magento\Core\Model\App\Area::AREA_ADMINHTML); } diff --git a/dev/tests/integration/testsuite/Magento/Backend/Model/ObserverTest.php b/dev/tests/integration/testsuite/Magento/Backend/Model/ObserverTest.php index ded07bb568b..68e1a8fbaa7 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Model/ObserverTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Model/ObserverTest.php @@ -50,7 +50,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase $this->markTestSkipped('Skipped because of authentication process moved into base controller.'); $request = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Controller\Request\Http'); + ->get('Magento\App\RequestInterface'); $this->assertEmpty($request->getRouteName()); $this->assertEmpty($request->getControllerName()); $this->assertEmpty($request->getActionName()); @@ -112,7 +112,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase protected function _buildObserver() { $request = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Controller\Request\Http'); + ->get('Magento\App\RequestInterface'); $request->setPost( 'login', array( diff --git a/dev/tests/integration/testsuite/Magento/Backend/Model/UrlTest.php b/dev/tests/integration/testsuite/Magento/Backend/Model/UrlTest.php index 3cdb3b54959..28564204508 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Model/UrlTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Model/UrlTest.php @@ -101,9 +101,9 @@ class UrlTest extends \PHPUnit_Framework_TestCase */ public function testGetSecretKey($routeName, $controller, $action, $expectedHash) { - /** @var $request \Magento\Core\Controller\Request\Http */ + /** @var $request \Magento\App\RequestInterface */ $request = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Controller\Request\Http'); + ->create('Magento\App\RequestInterface'); $request->setControllerName('default_controller') ->setActionName('default_action') ->setRouteName('default_router'); @@ -148,9 +148,9 @@ class UrlTest extends \PHPUnit_Framework_TestCase { /** @var $helper \Magento\Core\Helper\Data */ $helper = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Helper\Data'); - /** @var $request \Magento\Core\Controller\Request\Http */ + /** @var $request \Magento\App\RequestInterface */ $request = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Controller\Request\Http'); + ->create('Magento\App\RequestInterface'); $request->setControllerName('controller')->setActionName('action'); $request->initForward()->setControllerName(uniqid())->setActionName(uniqid()); $this->_model->setRequest($request); diff --git a/dev/tests/integration/testsuite/Magento/Backend/Model/_files/no_robots_txt.php b/dev/tests/integration/testsuite/Magento/Backend/Model/_files/no_robots_txt.php index d54286ffb47..96046322741 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Model/_files/no_robots_txt.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Model/_files/no_robots_txt.php @@ -25,7 +25,7 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ -$robotsTxtPath = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir')->getDir() +$robotsTxtPath = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir')->getDir() . DS . 'robots.txt'; if (is_file($robotsTxtPath)) { @unlink($robotsTxtPath); diff --git a/dev/tests/integration/testsuite/Magento/Backend/Model/_files/robots_txt.php b/dev/tests/integration/testsuite/Magento/Backend/Model/_files/robots_txt.php index 9cbecd0600a..04f3cf95c55 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Model/_files/robots_txt.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Model/_files/robots_txt.php @@ -27,6 +27,6 @@ copy( __DIR__ . DS . 'robots.txt', - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir')->getDir() + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir')->getDir() . DS . 'robots.txt' ); diff --git a/dev/tests/integration/testsuite/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option/Search/GridTest.php b/dev/tests/integration/testsuite/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option/Search/GridTest.php index 8a044210d95..847738ec121 100644 --- a/dev/tests/integration/testsuite/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option/Search/GridTest.php +++ b/dev/tests/integration/testsuite/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option/Search/GridTest.php @@ -35,7 +35,7 @@ class GridTest */ public function testToHtmlHasOnClick() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML); /** @var $layout \Magento\Core\Model\Layout */ $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( diff --git a/dev/tests/integration/testsuite/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option/SearchTest.php b/dev/tests/integration/testsuite/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option/SearchTest.php index f94192bb7b0..8988537a815 100644 --- a/dev/tests/integration/testsuite/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option/SearchTest.php +++ b/dev/tests/integration/testsuite/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option/SearchTest.php @@ -35,7 +35,7 @@ class SearchTest */ public function testToHtmlHasIndex() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML); /** @var $layout \Magento\Core\Model\Layout */ diff --git a/dev/tests/integration/testsuite/Magento/Bundle/Controller/ProductTest.php b/dev/tests/integration/testsuite/Magento/Bundle/Controller/ProductTest.php index 4fdceec5ab3..d697c1dceee 100644 --- a/dev/tests/integration/testsuite/Magento/Bundle/Controller/ProductTest.php +++ b/dev/tests/integration/testsuite/Magento/Bundle/Controller/ProductTest.php @@ -40,7 +40,8 @@ class ProductTest extends \Magento\TestFramework\TestCase\AbstractController $this->dispatch('catalog/product/view/id/3'); $this->assertContains( 'catalog_product_view_type_bundle', - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout')->getUpdate() + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') + ->getUpdate() ->getHandles() ); $responseBody = $this->getResponse()->getBody(); diff --git a/dev/tests/integration/testsuite/Magento/Captcha/Block/Captcha/DefaultTest.php b/dev/tests/integration/testsuite/Magento/Captcha/Block/Captcha/DefaultTest.php index 5b9d918ad34..992efc5a942 100644 --- a/dev/tests/integration/testsuite/Magento/Captcha/Block/Captcha/DefaultTest.php +++ b/dev/tests/integration/testsuite/Magento/Captcha/Block/Captcha/DefaultTest.php @@ -35,8 +35,9 @@ class DefaultTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') - ->createBlock('Magento\Captcha\Block\Captcha\DefaultCaptcha'); + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get('Magento\View\LayoutInterface') + ->createBlock('Magento\Captcha\Block\Captcha\DefaultCaptcha'); } /** diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Layer/ViewTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Layer/ViewTest.php index 20f6e99d9ee..0b5e81cae62 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Layer/ViewTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Layer/ViewTest.php @@ -45,7 +45,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase $layer->setCurrentCategory($currentCategory); /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Catalog\Block\Layer\View */ $block = $layout->createBlock('Magento\Catalog\Block\Layer\View', 'block'); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/AbstractTest.php index 08551fc4c97..a516c1ad474 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/AbstractTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/AbstractTest.php @@ -65,9 +65,9 @@ class AbstractTest extends \PHPUnit_Framework_TestCase self::$_isStubClass = true; } - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setDefaultDesignTheme(); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock(self::STUB_CLASS); $this->_product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Catalog\Model\Product'); @@ -120,7 +120,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase { $this->_block->setLayout( \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Layout') + ->get('Magento\View\LayoutInterface') ); $this->assertContains('10', $this->_block->getPriceHtml($this->_product)); } @@ -129,7 +129,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase { $this->_block->setLayout( \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Layout') + ->get('Magento\View\LayoutInterface') ); $html = $this->_block->getReviewsSummaryHtml($this->_product, false, true); $this->assertNotEmpty($html); @@ -151,7 +151,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase public function testGetTierPriceHtml() { $this->_block->setLayout(\Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Layout')); + ->get('Magento\View\LayoutInterface')); $html = $this->_block->getTierPriceHtml(); $this->assertNotEmpty($html); $this->assertContains('2', $html); /* Buy 2 */ @@ -193,7 +193,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase public function testLayoutDependColumnCount() { $this->_block->setLayout(\Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Layout')); + ->get('Magento\View\LayoutInterface')); $this->assertEquals(3, $this->_block->getColumnCount()); /* default column count */ $this->_block->addColumnCountLayoutDepend('test', 10); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/Configurable/AssociatedSelector/Backend/Grid/ColumnSetTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/Configurable/AssociatedSelector/Backend/Grid/ColumnSetTest.php index d40c30485ad..f94f82e2b4f 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/Configurable/AssociatedSelector/Backend/Grid/ColumnSetTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/Configurable/AssociatedSelector/Backend/Grid/ColumnSetTest.php @@ -47,7 +47,7 @@ class ColumnSetTest $objectManager->get('Magento\Core\Model\Registry')->register('current_product', $product); /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Catalog\Block\Product\Configurable\AssociatedSelector\Backend\Grid\ColumnSet */ $block = $layout->createBlock( 'Magento\Catalog\Block\Product\Configurable\AssociatedSelector\Backend\Grid\ColumnSet', diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php index bec3c3dc429..31f73cb1a5d 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php @@ -41,7 +41,7 @@ class ListTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Catalog\Block\Product\ListProduct'); } @@ -126,6 +126,6 @@ class ListTest extends \PHPUnit_Framework_TestCase protected function _getLayout() { - return \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + return \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); } } diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/NewTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/NewTest.php index ed644683b50..cdf29e5a04e 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/NewTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/NewTest.php @@ -41,7 +41,7 @@ class NewTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Catalog\Block\Product\NewProduct'); \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App') ->getArea(\Magento\Core\Model\App\Area::AREA_FRONTEND)->load(); @@ -67,7 +67,7 @@ class NewTest extends \PHPUnit_Framework_TestCase $this->assertSame(2, array_shift($keys)); $themeModel = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface') + ->get('Magento\View\DesignInterface') ->getDesignTheme(); $this->assertEquals($themeModel->getId() ?: null, $info[2]); @@ -101,7 +101,7 @@ class NewTest extends \PHPUnit_Framework_TestCase $this->_block->setProductsCount(5); $this->_block->setTemplate('product/widget/new/content/new_list.phtml'); $this->_block->setLayout(\Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Layout')); + ->get('Magento\View\LayoutInterface')); $html = $this->_block->toHtml(); $this->assertNotEmpty($html); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/CrosssellTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/CrosssellTest.php index 2b297b6e2d3..5e867a346db 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/CrosssellTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/CrosssellTest.php @@ -45,10 +45,10 @@ class CrosssellTest extends \PHPUnit_Framework_TestCase $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $objectManager->get('Magento\Core\Model\Registry')->register('product', $product); /** @var $block \Magento\Catalog\Block\Product\ProductList\Crosssell */ - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Catalog\Block\Product\ProductList\Crosssell'); $block->setLayout(\Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Layout')); + ->get('Magento\View\LayoutInterface')); $block->setTemplate('Magento_Checkout::cart/crosssell.phtml'); $block->setItemCount(1); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/RelatedTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/RelatedTest.php index 36216ad5458..58fe415949b 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/RelatedTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/RelatedTest.php @@ -45,10 +45,10 @@ class RelatedTest extends \PHPUnit_Framework_TestCase $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $objectManager->get('Magento\Core\Model\Registry')->register('product', $product); /** @var $block \Magento\Catalog\Block\Product\ProductList\Related */ - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Catalog\Block\Product\ProductList\Related'); $block->setLayout(\Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Layout')); + ->get('Magento\View\LayoutInterface')); $block->setTemplate('product/list/related.phtml'); $html = $block->toHtml(); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/ToolbarTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/ToolbarTest.php index 0ee5fa2950c..be90d2fdb80 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/ToolbarTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/ToolbarTest.php @@ -32,7 +32,7 @@ class ToolbarTest extends \PHPUnit_Framework_TestCase public function testGetPagerHtml() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Catalog\Block\Product\ProductList\Toolbar */ $block = $layout->createBlock('Magento\Catalog\Block\Product\ProductList\Toolbar', 'block'); /** @var $childBlock \Magento\Core\Block\Text */ diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/View/AdditionalTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/View/AdditionalTest.php index 4d29789357d..1658e0dd36c 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/View/AdditionalTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/View/AdditionalTest.php @@ -32,7 +32,7 @@ class AdditionalTest extends \PHPUnit_Framework_TestCase public function testGetChildHtmlList() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Catalog\Block\Product\View\Additional */ $block = $layout->createBlock('Magento\Catalog\Block\Product\View\Additional', 'block'); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/View/OptionsTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/View/OptionsTest.php index 12bd789b501..1323843a4f3 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/View/OptionsTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/View/OptionsTest.php @@ -53,7 +53,7 @@ class OptionsTest extends \PHPUnit_Framework_TestCase $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $objectManager->get('Magento\Core\Model\Registry')->unregister('current_product'); $objectManager->get('Magento\Core\Model\Registry')->register('current_product', $this->_product); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Catalog\Block\Product\View\Options'); } diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/View/Type/ConfigurableTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/View/Type/ConfigurableTest.php index ae9df449453..303c724184c 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/View/Type/ConfigurableTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/View/Type/ConfigurableTest.php @@ -49,7 +49,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase $this->_product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Catalog\Model\Product'); $this->_product->load(1); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Catalog\Block\Product\View\Type\Configurable'); $this->_block->setProduct($this->_product); } diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ViewTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ViewTest.php index 1a53453ae7f..79845640ec6 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ViewTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ViewTest.php @@ -57,7 +57,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase public function testSetLayout() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); $headBlock = $layout->createBlock('Magento\Core\Block\Template', 'head'); $layout->addBlock($this->_block); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/CategoryTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/CategoryTest.php index 4df022a809c..1f464b8d45e 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/CategoryTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/CategoryTest.php @@ -99,7 +99,7 @@ class CategoryTest extends \Magento\TestFramework\TestCase\AbstractController $this->assertEquals($categoryId, $lastCategoryId, 'Last visited category.'); /* Layout updates */ - $handles = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $handles = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->getUpdate()->getHandles(); foreach ($expectedHandles as $expectedHandleName) { $this->assertContains($expectedHandleName, $handles); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/ProductTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/ProductTest.php index 3fd18e6a81e..741e40a58b1 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/ProductTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/ProductTest.php @@ -70,7 +70,7 @@ class ProductTest extends \Magento\TestFramework\TestCase\AbstractController $this->assertEquals(1, $lastViewedProductId); /* Layout updates */ - $handles = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $handles = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->getUpdate()->getHandles(); $this->assertContains('catalog_product_view_type_simple', $handles); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Helper/Product/ViewTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Helper/Product/ViewTest.php index 4f85cf09e65..4d17a88e15e 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Helper/Product/ViewTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Helper/Product/ViewTest.php @@ -26,7 +26,7 @@ */ namespace Magento\Catalog\Helper\Product; -require \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir')->getDir() +require \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir')->getDir() . '/app/code/Magento/Catalog/Controller/Product.php'; class ViewTest extends \PHPUnit_Framework_TestCase @@ -44,7 +44,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase protected function setUp() { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $objectManager->get('Magento\Core\Model\View\DesignInterface') + $objectManager->get('Magento\View\DesignInterface') ->setDefaultDesignTheme(); $this->_helper = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->get('Magento\Catalog\Helper\Product\View'); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/DesignTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/DesignTest.php index da8f6619473..f54c916a991 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/DesignTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/DesignTest.php @@ -50,7 +50,7 @@ class DesignTest extends \PHPUnit_Framework_TestCase { $this->_model->applyCustomDesign($theme); $design = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface'); + ->get('Magento\View\DesignInterface'); $this->assertEquals('package', $design->getDesignTheme()->getPackageCode()); $this->assertEquals('theme', $design->getDesignTheme()->getThemeCode()); } @@ -61,7 +61,7 @@ class DesignTest extends \PHPUnit_Framework_TestCase public function getThemeModel() { $theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\Theme'); + ->create('Magento\View\Design\ThemeInterface'); $theme->setData($this->_getThemeData()); return array(array($theme)); } diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/AttributeTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/AttributeTest.php index fbd104e8d77..b1c61b27dc3 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/AttributeTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/AttributeTest.php @@ -79,7 +79,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase $request->setParam('attribute', array()); $this->_model->apply( $request, - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text')) ; @@ -95,7 +95,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase $request->setParam('attribute', $this->_attributeOptionId); $this->_model->apply( $request, - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text') ); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/CategoryTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/CategoryTest.php index 8a4995d4a05..ab426da3e14 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/CategoryTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/CategoryTest.php @@ -69,7 +69,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $this->_model->apply( $objectManager->get('Magento\TestFramework\Request'), - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text') ); /** @var $objectManager \Magento\TestFramework\ObjectManager */ @@ -84,7 +84,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase $request->setParam('cat', 3); $this->_model->apply( $request, - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text') ); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/DecimalTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/DecimalTest.php index 144b18177aa..d55907e94ff 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/DecimalTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/DecimalTest.php @@ -71,7 +71,7 @@ class DecimalTest extends \PHPUnit_Framework_TestCase $request = $objectManager->get('Magento\TestFramework\Request'); $this->_model->apply( $request, - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text') ); @@ -88,7 +88,7 @@ class DecimalTest extends \PHPUnit_Framework_TestCase $request->setParam('decimal', 'non-decimal'); $this->_model->apply( $request, - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text') ); @@ -104,7 +104,7 @@ class DecimalTest extends \PHPUnit_Framework_TestCase $request->setParam('decimal', '1,100'); $this->_model->apply( $request, - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text') ); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/ItemTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/ItemTest.php index 16cfeaa0370..95e7c7668f5 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/ItemTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/ItemTest.php @@ -94,9 +94,9 @@ class ItemTest extends \PHPUnit_Framework_TestCase /** @var $objectManager \Magento\TestFramework\ObjectManager */ $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); /** @var $request \Magento\TestFramework\Request */ - $request = $objectManager->get('Magento\TestFramework\Request'); + $request = $objectManager->create('Magento\App\RequestInterface'); - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Controller\Request\Http') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\RequestInterface') ->setRoutingInfo(array( 'requested_route' => 'x', 'requested_controller' => 'y', @@ -106,7 +106,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase $request->setParam('cat', 4); $this->_model->getFilter()->apply( $request, - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text') ); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/AlgorithmAdvancedTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/AlgorithmAdvancedTest.php index 64872e34b4b..188807407e7 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/AlgorithmAdvancedTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/AlgorithmAdvancedTest.php @@ -67,7 +67,7 @@ class AlgorithmAdvancedTest extends \PHPUnit_Framework_TestCase if (!is_null($request)) { $filter->apply( $request, - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text') ); $interval = $filter->getInterval(); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/PriceTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/PriceTest.php index 4d4485022e7..2d8dd7464e5 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/PriceTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/PriceTest.php @@ -104,7 +104,7 @@ class PriceTest extends \PHPUnit_Framework_TestCase $request = $objectManager->get('Magento\TestFramework\Request'); $this->_model->apply( $request, - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text') ); @@ -121,7 +121,7 @@ class PriceTest extends \PHPUnit_Framework_TestCase $request->setParam('price', 'non-numeric'); $this->_model->apply( $request, - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text') ); @@ -140,7 +140,7 @@ class PriceTest extends \PHPUnit_Framework_TestCase $request->setParam('price', '10-20'); $this->_model->apply( $request, - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text') ); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Type/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Type/AbstractTest.php index c95eb571f7b..6a41d51983d 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Type/AbstractTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Type/AbstractTest.php @@ -41,7 +41,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase ->get('Magento\Catalog\Model\Product\Option'); $eavConfig = $this->getMock('Magento\Eav\Model\Config', array(), array(), '', false); $catalogProductType = $this->getMock('Magento\Catalog\Model\Product\Type', array(), array(), '', false); - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array('dispatch'), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array('dispatch'), array(), '', false); $coreData = $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false); $fileStorageDb = $this->getMock('Magento\Core\Helper\File\Storage\Database', array(), array(), '', false); $filesystem = $this->getMock('Magento\Filesystem', array(), array(), '', false); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/WidgetTest.php b/dev/tests/integration/testsuite/Magento/Catalog/WidgetTest.php index 75b5e59e086..7ba5a669c10 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/WidgetTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/WidgetTest.php @@ -31,10 +31,12 @@ class WidgetTest extends \PHPUnit_Framework_TestCase { public function testNewProductsWidget() { + $type = 'Magento\Catalog\Block\Product\Widget\NewWidget'; + /** @var $model \Magento\Widget\Model\Widget\Instance */ $model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Widget\Model\Widget\Instance'); - $config = $model->setType('Magento\Catalog\Block\Product\Widget\NewWidget')->getWidgetConfigAsArray(); + $config = $model->setType($type)->getWidgetConfigAsArray(); $templates = $config['parameters']['template']['values']; $this->assertArrayHasKey('default', $templates); $this->assertArrayHasKey('list', $templates); @@ -52,5 +54,9 @@ class WidgetTest extends \PHPUnit_Framework_TestCase $this->assertContains('left', $containers); $this->assertContains('content', $containers); $this->assertContains('right', $containers); + + // Verify that the correct id (code) is found for this widget instance type. + $code = $model->setType($type)->getWidgetReference('type', $type, 'code'); + $this->assertEquals('new_products', $code); } } diff --git a/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/Advanced/ResultTest.php b/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/Advanced/ResultTest.php index e5621728b7e..8ece02d3762 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/Advanced/ResultTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/Advanced/ResultTest.php @@ -30,7 +30,7 @@ namespace Magento\CatalogSearch\Block\Advanced; class ResultTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -41,7 +41,8 @@ class ResultTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get('Magento\View\LayoutInterface'); $this->_block = $this->_layout->createBlock('Magento\CatalogSearch\Block\Advanced\Result', 'block'); } diff --git a/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/ResultTest.php b/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/ResultTest.php index 9136a403d20..5ced3929b36 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/ResultTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/ResultTest.php @@ -32,7 +32,7 @@ class ResultTest extends \PHPUnit_Framework_TestCase public function testSetListOrders() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); $layout->addBlock('Magento\Core\Block\Text', 'head'); // The tested block is using head block /** @var $block \Magento\CatalogSearch\Block\Result */ $block = $layout->addBlock('Magento\CatalogSearch\Block\Result', 'block'); diff --git a/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/TermTest.php b/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/TermTest.php index 585b299aece..c826fde614a 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/TermTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/TermTest.php @@ -36,7 +36,7 @@ class TermTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\CatalogSearch\Block\Term'); } diff --git a/dev/tests/integration/testsuite/Magento/Checkout/Block/Cart/Item/RendererTest.php b/dev/tests/integration/testsuite/Magento/Checkout/Block/Cart/Item/RendererTest.php index d700b88c63b..051a4310261 100644 --- a/dev/tests/integration/testsuite/Magento/Checkout/Block/Cart/Item/RendererTest.php +++ b/dev/tests/integration/testsuite/Magento/Checkout/Block/Cart/Item/RendererTest.php @@ -41,7 +41,7 @@ class RendererTest extends \PHPUnit_Framework_TestCase { \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App') ->getArea(\Magento\Core\Model\App\Area::AREA_FRONTEND)->load(); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Checkout\Block\Cart\Item\Renderer'); /** @var $item \Magento\Sales\Model\Quote\Item */ $item = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() diff --git a/dev/tests/integration/testsuite/Magento/Checkout/Block/Cart/SidebarTest.php b/dev/tests/integration/testsuite/Magento/Checkout/Block/Cart/SidebarTest.php index 058c0efe918..83c2fc2d0f5 100644 --- a/dev/tests/integration/testsuite/Magento/Checkout/Block/Cart/SidebarTest.php +++ b/dev/tests/integration/testsuite/Magento/Checkout/Block/Cart/SidebarTest.php @@ -32,7 +32,7 @@ class SidebarTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Checkout\Block\Cart\Sidebar'); } diff --git a/dev/tests/integration/testsuite/Magento/Checkout/Block/CartTest.php b/dev/tests/integration/testsuite/Magento/Checkout/Block/CartTest.php index 0d79ccb370f..cb457468f0c 100644 --- a/dev/tests/integration/testsuite/Magento/Checkout/Block/CartTest.php +++ b/dev/tests/integration/testsuite/Magento/Checkout/Block/CartTest.php @@ -35,7 +35,7 @@ class CartTest extends \PHPUnit_Framework_TestCase public function testGetMethods() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); $child = $layout->createBlock('Magento\Core\Block\Text') ->setChild('child1', $layout->createBlock('Magento\Core\Block\Text', 'method1')) ->setChild('child2', $layout->createBlock('Magento\Core\Block\Text', 'method2')); @@ -49,7 +49,7 @@ class CartTest extends \PHPUnit_Framework_TestCase public function testGetMethodsEmptyChild() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); $childEmpty = $layout->createBlock('Magento\Core\Block\Text'); /** @var $block \Magento\Checkout\Block\Cart */ $block = $layout->createBlock('Magento\Checkout\Block\Cart') @@ -61,7 +61,7 @@ class CartTest extends \PHPUnit_Framework_TestCase public function testGetMethodsNoChild() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Checkout\Block\Cart */ $block = $layout->createBlock('Magento\Checkout\Block\Cart'); $methods = $block->getMethods('child'); diff --git a/dev/tests/integration/testsuite/Magento/Checkout/Block/Multishipping/OverviewTest.php b/dev/tests/integration/testsuite/Magento/Checkout/Block/Multishipping/OverviewTest.php index ba36ce3bd3f..2c4e961180f 100644 --- a/dev/tests/integration/testsuite/Magento/Checkout/Block/Multishipping/OverviewTest.php +++ b/dev/tests/integration/testsuite/Magento/Checkout/Block/Multishipping/OverviewTest.php @@ -38,7 +38,7 @@ class OverviewTest extends \PHPUnit_Framework_TestCase { \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App') ->getArea(\Magento\Core\Model\App\Area::AREA_FRONTEND)->load(); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Checkout\Block\Multishipping\Overview'); } @@ -57,6 +57,6 @@ class OverviewTest extends \PHPUnit_Framework_TestCase ->create('Magento\Sales\Model\Quote'); $item->setQuote($quote); // assure that default renderer was obtained - $this->assertSelectCount('h2.product-name a', 1, $this->_block->getRowItemHtml($item)); + $this->assertSelectCount('strong.product.name a', 1, $this->_block->getRowItemHtml($item)); } } diff --git a/dev/tests/integration/testsuite/Magento/Checkout/Block/Onepage/Payment/MethodsTest.php b/dev/tests/integration/testsuite/Magento/Checkout/Block/Onepage/Payment/MethodsTest.php index d3e7e7415f4..de0357afe63 100644 --- a/dev/tests/integration/testsuite/Magento/Checkout/Block/Onepage/Payment/MethodsTest.php +++ b/dev/tests/integration/testsuite/Magento/Checkout/Block/Onepage/Payment/MethodsTest.php @@ -40,7 +40,7 @@ class MethodsTest extends \PHPUnit_Framework_TestCase protected function setUp() { parent::setUp(); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Checkout\Block\Onepage\Payment\Methods'); } diff --git a/dev/tests/integration/testsuite/Magento/Cms/Block/BlockTest.php b/dev/tests/integration/testsuite/Magento/Cms/Block/BlockTest.php index bc4aa2d3d12..efa4555a565 100644 --- a/dev/tests/integration/testsuite/Magento/Cms/Block/BlockTest.php +++ b/dev/tests/integration/testsuite/Magento/Cms/Block/BlockTest.php @@ -41,7 +41,7 @@ class BlockTest extends \PHPUnit_Framework_TestCase ->create('Magento\Cms\Model\Block'); $cmsBlock->load('fixture_block', 'identifier'); /** @var $block \Magento\Cms\Block\Block */ - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Cms\Block\Block'); $block->setBlockId($cmsBlock->getId()); $result = $block->toHtml(); diff --git a/dev/tests/integration/testsuite/Magento/Cms/Block/Widget/BlockTest.php b/dev/tests/integration/testsuite/Magento/Cms/Block/Widget/BlockTest.php index a50322fd28c..213126d951e 100644 --- a/dev/tests/integration/testsuite/Magento/Cms/Block/Widget/BlockTest.php +++ b/dev/tests/integration/testsuite/Magento/Cms/Block/Widget/BlockTest.php @@ -41,7 +41,7 @@ class BlockTest extends \PHPUnit_Framework_TestCase ->create('Magento\Cms\Model\Block'); $cmsBlock->load('fixture_block', 'identifier'); /** @var $block \Magento\Cms\Block\Widget\Block */ - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Cms\Block\Widget\Block'); $block->setBlockId($cmsBlock->getId()); $block->toHtml(); diff --git a/dev/tests/integration/testsuite/Magento/Cms/Controller/RouterTest.php b/dev/tests/integration/testsuite/Magento/Cms/Controller/RouterTest.php index 222073b0cc6..b756d44aefc 100644 --- a/dev/tests/integration/testsuite/Magento/Cms/Controller/RouterTest.php +++ b/dev/tests/integration/testsuite/Magento/Cms/Controller/RouterTest.php @@ -40,14 +40,14 @@ class RouterTest extends \PHPUnit_Framework_TestCase $this->_model = new \Magento\Cms\Controller\Router( \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->get('Magento\Core\Controller\Varien\Action\Factory'), - new \Magento\Core\Model\Event\ManagerStub( - $this->getMockForAbstractClass('Magento\Core\Model\Event\InvokerInterface', array(), '', false), - $this->getMock('Magento\Core\Model\Event\Config', array(), array(), '', false), + new \Magento\Event\ManagerInterfaceStub( + $this->getMockForAbstractClass('Magento\Event\InvokerInterface'), + $this->getMock('Magento\Event\Config', array(), array(), '', false), $this->getMock('Magento\EventFactory', array(), array(), '', false), $this->getMock('Magento\Event\ObserverFactory', array(), array(), '', false) ), \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\UrlInterface'), + ->get('Magento\UrlInterface'), \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->get('Magento\Core\Model\Config\Primary'), \Magento\TestFramework\Helper\Bootstrap::getObjectManager() @@ -66,7 +66,7 @@ class RouterTest extends \PHPUnit_Framework_TestCase { $this->markTestIncomplete('MAGETWO-3393'); $request = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Controller\Request\Http'); + ->create('Magento\App\RequestInterface'); //Open Node $request->setPathInfo('parent_node'); $controller = $this->_model->match($request); @@ -77,9 +77,9 @@ class RouterTest extends \PHPUnit_Framework_TestCase /** * Event manager stub */ -namespace Magento\Core\Model\Event; +namespace Magento\Event; -class ManagerStub extends \Magento\Core\Model\Event\Manager +class ManagerStub extends Manager { /** * Stub dispatch event diff --git a/dev/tests/integration/testsuite/Magento/Cms/Helper/PageTest.php b/dev/tests/integration/testsuite/Magento/Cms/Helper/PageTest.php index 5d93c6c7e8f..f22ea853453 100644 --- a/dev/tests/integration/testsuite/Magento/Cms/Helper/PageTest.php +++ b/dev/tests/integration/testsuite/Magento/Cms/Helper/PageTest.php @@ -53,7 +53,7 @@ class PageTest extends \PHPUnit_Framework_TestCase $page->getId() ); $design = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface'); + ->get('Magento\View\DesignInterface'); $this->assertEquals('magento_blank', $design->getDesignTheme()->getThemePath()); $this->assertTrue($result); } diff --git a/dev/tests/integration/testsuite/Magento/Cms/Helper/Wysiwyg/ImagesTest.php b/dev/tests/integration/testsuite/Magento/Cms/Helper/Wysiwyg/ImagesTest.php index 62ad74bc76b..163485cdafc 100644 --- a/dev/tests/integration/testsuite/Magento/Cms/Helper/Wysiwyg/ImagesTest.php +++ b/dev/tests/integration/testsuite/Magento/Cms/Helper/Wysiwyg/ImagesTest.php @@ -27,11 +27,11 @@ class ImagesTest extends \PHPUnit_Framework_TestCase { public function testGetStorageRoot() { - /** @var $dir \Magento\Core\Model\Dir */ - $dir = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir'); + /** @var $dir \Magento\App\Dir */ + $dir = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir'); $helper = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Cms\Helper\Wysiwyg\Images'); - $this->assertStringStartsWith($dir->getDir(\Magento\Core\Model\Dir::MEDIA), $helper->getStorageRoot()); + $this->assertStringStartsWith($dir->getDir(\Magento\App\Dir::MEDIA), $helper->getStorageRoot()); } public function testGetCurrentUrl() diff --git a/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/ConfigTest.php index ea8309b98df..5a630002ccc 100644 --- a/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/ConfigTest.php +++ b/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/ConfigTest.php @@ -39,7 +39,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase protected function setUp() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Config\Scope') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Config\ScopeInterface') ->setCurrentScope(\Magento\Core\Model\App\Area::AREA_ADMINHTML); $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Cms\Model\Wysiwyg\Config'); diff --git a/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php b/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php index fb1fb8e3c15..2f4ed6d7b13 100644 --- a/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php +++ b/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php @@ -54,7 +54,7 @@ class StorageTest extends \PHPUnit_Framework_TestCase */ public function testGetFilesCollection() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setDesignTheme('magento_basic', 'adminhtml'); /** @var $model \Magento\Cms\Model\Wysiwyg\Images\Storage */ $model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() @@ -82,7 +82,7 @@ class StorageTest extends \PHPUnit_Framework_TestCase $viewUrl = $objectManager->get('Magento\Core\Model\View\Url'); $imageHelper = $objectManager->get('Magento\Cms\Helper\Wysiwyg\Images'); $coreFileStorageDb = $objectManager->get('Magento\Core\Helper\File\Storage\Database'); - $dir = $objectManager->get('Magento\Core\Model\Dir'); + $dir = $objectManager->get('Magento\App\Dir'); $storageCollectionFactory = $objectManager->get('Magento\Cms\Model\Wysiwyg\Images\Storage\CollectionFactory'); $storageFileFactory = $objectManager->get('Magento\Core\Model\File\Storage\FileFactory'); $storageDatabaseFactory = $objectManager->get('Magento\Core\Model\File\Storage\DatabaseFactory'); diff --git a/dev/tests/integration/testsuite/Magento/Code/GeneratorTest.php b/dev/tests/integration/testsuite/Magento/Code/GeneratorTest.php index 206c1f154fa..5b082726fde 100644 --- a/dev/tests/integration/testsuite/Magento/Code/GeneratorTest.php +++ b/dev/tests/integration/testsuite/Magento/Code/GeneratorTest.php @@ -58,9 +58,9 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase { $this->_includePath = get_include_path(); - /** @var $dirs \Magento\Core\Model\Dir */ - $dirs = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir'); - $generationDirectory = $dirs->getDir(\Magento\Core\Model\Dir::VAR_DIR) . '/generation'; + /** @var $dirs \Magento\App\Dir */ + $dirs = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir'); + $generationDirectory = $dirs->getDir(\Magento\App\Dir::VAR_DIR) . '/generation'; \Magento\Autoload\IncludePath::addIncludePath($generationDirectory); @@ -77,9 +77,9 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase protected function tearDown() { - /** @var $dirs \Magento\Core\Model\Dir */ - $dirs = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir'); - $generationDirectory = $dirs->getDir(\Magento\Core\Model\Dir::VAR_DIR) . '/generation'; + /** @var $dirs \Magento\App\Dir */ + $dirs = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir'); + $generationDirectory = $dirs->getDir(\Magento\App\Dir::VAR_DIR) . '/generation'; \Magento\Io\File::rmdirRecursive($generationDirectory); set_include_path($this->_includePath); diff --git a/dev/tests/integration/testsuite/Magento/Core/Block/AbstractBlockTest.php b/dev/tests/integration/testsuite/Magento/Core/Block/AbstractBlockTest.php index e4e561b026f..d7b67ca72cb 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Block/AbstractBlockTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Block/AbstractBlockTest.php @@ -38,7 +38,7 @@ class AbstractBlockTest extends \PHPUnit_Framework_TestCase protected $_block; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout = null; @@ -46,7 +46,7 @@ class AbstractBlockTest extends \PHPUnit_Framework_TestCase protected function setUp() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setDefaultDesignTheme(); $this->_block = $this->getMockForAbstractClass('Magento\Core\Block\AbstractBlock', array( \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Block\Context'), @@ -62,12 +62,12 @@ class AbstractBlockTest extends \PHPUnit_Framework_TestCase public function testCssWithWrongImage() { $dirPath = __DIR__ . DIRECTORY_SEPARATOR . '_files'; - /** @var $dirs \Magento\Core\Model\Dir */ - $dirs = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir'); + /** @var $dirs \Magento\App\Dir */ + $dirs = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir'); $prepareFileName = new \ReflectionMethod($dirs, '_setDir'); $prepareFileName->setAccessible(true); - $prepareFileName->invoke($dirs, \Magento\Core\Model\Dir::THEMES, $dirPath); + $prepareFileName->invoke($dirs, \Magento\App\Dir::THEMES, $dirPath); $cssUrl = $this->_block->getViewFileUrl('css/wrong.css', array( 'area' => 'frontend', @@ -79,7 +79,7 @@ class AbstractBlockTest extends \PHPUnit_Framework_TestCase public function testGetRequest() { - $this->assertInstanceOf('Magento\Core\Controller\Request\Http', $this->_block->getRequest()); + $this->assertInstanceOf('Magento\App\RequestInterface', $this->_block->getRequest()); } /** @@ -121,7 +121,7 @@ class AbstractBlockTest extends \PHPUnit_Framework_TestCase $this->assertEquals($name, $this->_block->getNameInLayout()); // Setting second time, along with the layout - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); $layout->createBlock('Magento\Core\Block\Template', $name); $block = $layout->getBlock($name); $this->assertInstanceOf('Magento\Core\Block\AbstractBlock', $block); @@ -250,7 +250,7 @@ class AbstractBlockTest extends \PHPUnit_Framework_TestCase // With layout /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); $child = $layout->createBlock('Magento\Core\Block\Text', $childName); $layout->addBlock($this->_block, $parentName); @@ -475,7 +475,7 @@ class AbstractBlockTest extends \PHPUnit_Framework_TestCase public function testSetFrameTags() { - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text'); $block->setText('text'); @@ -542,12 +542,12 @@ class AbstractBlockTest extends \PHPUnit_Framework_TestCase { // Get one from layout $this->_block->setLayout( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ); $this->assertInstanceOf('Magento\Core\Block\Messages', $this->_block->getMessagesBlock()); // Set explicitly - $messages = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $messages = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Messages'); $this->_block->setMessagesBlock($messages); $this->assertSame($messages, $this->_block->getMessagesBlock()); @@ -637,7 +637,7 @@ class AbstractBlockTest extends \PHPUnit_Framework_TestCase public function testGetCacheKeyInfo() { $name = uniqid('block.'); - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text'); $block->setNameInLayout($name); $this->assertEquals(array($name), $block->getCacheKeyInfo()); @@ -646,7 +646,7 @@ class AbstractBlockTest extends \PHPUnit_Framework_TestCase public function testGetCacheKey() { $name = uniqid('block.'); - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text'); $block->setNameInLayout($name); $key = $block->getCacheKey(); @@ -690,7 +690,7 @@ class AbstractBlockTest extends \PHPUnit_Framework_TestCase $layout = false; if ($withLayout) { $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Layout'); + ->get('Magento\View\LayoutInterface'); } for ($i = 0; $i < $qty; $i++) { $name = uniqid('block.'); @@ -729,7 +729,7 @@ class AbstractBlockTest extends \PHPUnit_Framework_TestCase } if (is_null($this->_layout)) { $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Layout'); + ->get('Magento\View\LayoutInterface'); } $block = $this->_layout->addBlock($mockClass, $name, '', $alias); return $block; diff --git a/dev/tests/integration/testsuite/Magento/Core/Block/TemplateTest.php b/dev/tests/integration/testsuite/Magento/Core/Block/TemplateTest.php index 13288a6703d..22246796fc2 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Block/TemplateTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Block/TemplateTest.php @@ -39,13 +39,13 @@ class TemplateTest extends \PHPUnit_Framework_TestCase $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $params = array('layout' => $objectManager->create('Magento\Core\Model\Layout', array())); $context = $objectManager->create('Magento\Core\Block\Template\Context', $params); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Template', '', array('context' => $context)); } public function testConstruct() { - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Template', '', array('data' => array('template' => 'value'))); $this->assertEquals('value', $block->getTemplate()); } @@ -67,21 +67,6 @@ class TemplateTest extends \PHPUnit_Framework_TestCase $this->assertEquals('another_area', $this->_block->getArea()); } - public function testGetDirectOutput() - { - $this->assertFalse($this->_block->getDirectOutput()); - - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); - $layout->setDirectOutput(true); - $this->_block->setLayout($layout); - $this->assertTrue($this->_block->getDirectOutput()); - } - - public function testGetShowTemplateHints() - { - $this->assertFalse($this->_block->getShowTemplateHints()); - } - /** * @covers \Magento\Core\Block\Template::_toHtml * @covers \Magento\Core\Block\AbstractBlock::toHtml diff --git a/dev/tests/integration/testsuite/Magento/Core/Block/Text/ListTest.php b/dev/tests/integration/testsuite/Magento/Core/Block/Text/ListTest.php index c2ad311e7e7..31f29ae2980 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Block/Text/ListTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Block/Text/ListTest.php @@ -30,7 +30,7 @@ namespace Magento\Core\Block\Text; class ListTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -41,7 +41,8 @@ class ListTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get('Magento\View\LayoutInterface'); $this->_block = $this->_layout->createBlock('Magento\Core\Block\Text\ListText'); } diff --git a/dev/tests/integration/testsuite/Magento/Core/Block/TextTest.php b/dev/tests/integration/testsuite/Magento/Core/Block/TextTest.php index c5743b9313d..c427fd8346f 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Block/TextTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Block/TextTest.php @@ -36,7 +36,7 @@ class TextTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text'); } diff --git a/dev/tests/integration/testsuite/Magento/Core/Controller/Request/HttpTest.php b/dev/tests/integration/testsuite/Magento/Core/Controller/Request/HttpTest.php deleted file mode 100644 index 697e57c7646..00000000000 --- a/dev/tests/integration/testsuite/Magento/Core/Controller/Request/HttpTest.php +++ /dev/null @@ -1,193 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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_Core - * @subpackage integration_tests - * @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\Core\Controller\Request; - -class HttpTest extends \PHPUnit_Framework_TestCase -{ - /** - * @var \Magento\Core\Controller\Request\Http - */ - protected $_model; - - protected function setUp() - { - $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Controller\Request\Http'); - } - - public function testGetOriginalPathInfo() - { - $this->assertEmpty($this->_model->getOriginalPathInfo()); - } - - /** - * @magentoConfigFixture current_store web/url/use_store 1 - * @dataProvider setGetPathInfoDataProvider - * @magentoDbIsolation enabled - * @magentoAppIsolation enabled - */ - public function testSetPathWithStoreCode($requestUri, $expectedResult) - { - $this->_model->setRequestUri($requestUri); - $this->_model->setPathInfo(); - $this->assertEquals($expectedResult, $this->_model->getPathInfo()); - } - - /** - * @dataProvider setGetPathInfoDataProvider - */ - public function testSetPathWithOut($requestUri) - { - $this->_model->setRequestUri($requestUri); - $this->_model->setPathInfo(); - $this->assertEquals($requestUri, $this->_model->getPathInfo()); - } - - public function testSetGetPathInfo() - { - $this->_model->setPathInfo(); - $this->assertEmpty($this->_model->getPathInfo()); - - $this->_model->setRequestUri('test'); - $this->_model->setPathInfo(); - $this->assertEquals('test', $this->_model->getPathInfo()); - - - $this->_model->setPathInfo('new_test'); - $this->assertEquals('new_test', $this->_model->getPathInfo()); - - } - - /** - * @see self::testSetPathWithStoreCode() - * @return array - */ - public function setGetPathInfoDataProvider() - { - return array( - array(null, null), - array('default', '/'), - array('default/new', '/new'), - array('admin/new', 'admin/new'), - ); - } - - /** - * @covers \Magento\Core\Controller\Request\Http::rewritePathInfo - * @covers \Magento\Core\Controller\Request\Http::getOriginalPathInfo - * @magentoConfigFixture current_store web/url/use_store 1 - */ - public function testRewritePathInfoStoreCodeInUrl() - { - $pathInfo = $this->_model->getPathInfo(); - $this->_model->rewritePathInfo('test/path'); - $this->assertNotEquals($pathInfo, $this->_model->getPathInfo()); - $this->assertEquals('test/path', $this->_model->getPathInfo()); - $this->assertEquals($pathInfo, $this->_model->getOriginalPathInfo()); - } - - public function testGetDirectFrontNames() - { - $this->assertEmpty( - $this->_model->getDirectFrontNames(), - "After API module removal there should not be areas with direct front name." - ); - } - - public function testGetRequestString() - { - $this->assertEmpty($this->_model->getRequestString()); - $this->_model->setRequestUri('test'); - $this->_model->setPathInfo(); - $this->assertEquals('test', $this->_model->getRequestString()); - } - - public function testGetBasePath() - { - $this->assertEquals('/', $this->_model->getBasePath()); - } - - public function testGetBaseUrl() - { - $this->assertEmpty($this->_model->getBaseUrl()); - } - - public function testSetGetRouteName() - { - $this->assertEmpty($this->_model->getRouteName()); - $this->_model->setRouteName('test'); - $this->assertEquals('test', $this->_model->getRouteName()); - } - - public function testGetHttpHost() - { - $this->assertEquals('localhost', $this->_model->getHttpHost()); - $_SERVER['HTTP_HOST'] = 'example.com:80'; - $this->assertEquals($_SERVER['HTTP_HOST'], $this->_model->getHttpHost(false)); - $this->assertEquals('example.com', $this->_model->getHttpHost()); - } - - public function testSetPost() - { - $post = $_POST; - $this->_model->setPost(array('test' => 'test')); - $post['test'] = 'test'; - $this->assertEquals($post, $this->_model->getPost()); - - $this->_model->setPost('key', 'value'); - $post['key'] = 'value'; - $this->assertEquals($post, $this->_model->getPost()); - } - - public function testInitForward() - { - $this->_model->setParam('test', 'test'); - $this->_model->initForward(); - $this->assertEquals(array('test' => 'test'), $this->_model->getBeforeForwardInfo('params')); - - $this->_model->setParam('test', 'test1'); - /* the call shouldn't override existing info*/ - $this->_model->initForward(); - $this->assertEquals(array('test' => 'test'), $this->_model->getBeforeForwardInfo('params')); - } - - public function testIsStraight() - { - $this->assertFalse($this->_model->isStraight()); - $this->assertTrue($this->_model->isStraight(true)); - $this->assertTrue($this->_model->isStraight()); - } - - public function testIsAjax() - { - $this->assertFalse($this->_model->isAjax()); - $this->_model->setParam('isAjax', 1); - $this->assertTrue($this->_model->isAjax()); - } - -} diff --git a/dev/tests/integration/testsuite/Magento/Core/Controller/Varien/ActionTest.php b/dev/tests/integration/testsuite/Magento/Core/Controller/Varien/ActionTest.php index 778053f1812..d3dae252969 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Controller/Varien/ActionTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Controller/Varien/ActionTest.php @@ -42,18 +42,18 @@ class ActionTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $this->_objectManager->get('Magento\Core\Model\View\DesignInterface') + $this->_objectManager->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_FRONTEND) ->setDefaultDesignTheme(); /** @var $objectManager \Magento\TestFramework\ObjectManager */ $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); /** @var $request \Magento\TestFramework\Request */ - $request = $objectManager->get('Magento\TestFramework\Request'); + $request = $objectManager->get('Magento\App\RequestInterface'); $arguments = array( 'request' => $request, 'response' => $this->_objectManager->get('Magento\TestFramework\Response'), ); - $this->_objectManager->get('Magento\Core\Model\View\DesignInterface') + $this->_objectManager->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_FRONTEND) ->setDefaultDesignTheme(); $context = $this->_objectManager->create('Magento\Core\Controller\Varien\Action\Context', $arguments); @@ -114,7 +114,7 @@ class ActionTest extends \PHPUnit_Framework_TestCase \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App') ->loadArea($expectedArea); - $this->_objectManager->get('Magento\Core\Model\Config\Scope')->setCurrentScope($expectedArea); + $this->_objectManager->get('Magento\Config\ScopeInterface')->setCurrentScope($expectedArea); /** @var $controller \Magento\Core\Controller\Varien\Action */ $controller = $this->_objectManager->create($controllerClass); $this->assertInstanceOf('Magento\Core\Model\Layout', $controller->getLayout()); @@ -290,7 +290,7 @@ class ActionTest extends \PHPUnit_Framework_TestCase 'Magento\Core\Controller\Front\Action', array('context' => $context) ); - $this->_objectManager->get('Magento\Core\Model\Config\Scope')->setCurrentScope('frontend'); + $this->_objectManager->get('Magento\Config\ScopeInterface')->setCurrentScope('frontend'); $this->_object->dispatch('not_exists'); $this->assertFalse($request->isDispatched()); @@ -345,7 +345,7 @@ class ActionTest extends \PHPUnit_Framework_TestCase $controller = $this->_objectManager->create($controllerClass, array('context' => $context)); $controller->preDispatch(); - $design = $this->_objectManager->get('Magento\Core\Model\View\DesignInterface'); + $design = $this->_objectManager->get('Magento\View\DesignInterface'); $this->assertEquals($expectedArea, $design->getArea()); $this->assertEquals($expectedStore, \Magento\TestFramework\Helper\Bootstrap::getObjectManager() diff --git a/dev/tests/integration/testsuite/Magento/Core/Controller/Varien/FrontTest.php b/dev/tests/integration/testsuite/Magento/Core/Controller/Varien/FrontTest.php deleted file mode 100644 index 8c9384f779b..00000000000 --- a/dev/tests/integration/testsuite/Magento/Core/Controller/Varien/FrontTest.php +++ /dev/null @@ -1,141 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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_Core - * @subpackage integration_tests - * @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\Core\Controller\Varien; - -class FrontTest extends \PHPUnit_Framework_TestCase -{ - /** - * @var \Magento\ObjectManager - */ - protected $_objectManager; - - /** - * @var \Magento\Core\Controller\Varien\Front - */ - protected $_model; - - protected function setUp() - { - $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $this->_model = $this->_objectManager->create('Magento\Core\Controller\Varien\Front'); - } - - public function testSetGetDefault() - { - $this->_model->setDefault('test', 'value'); - $this->assertEquals('value', $this->_model->getDefault('test')); - - $default = array('some_key' => 'some_value'); - $this->_model->setDefault($default); - $this->assertEquals($default, $this->_model->getDefault()); - } - - public function testGetRequest() - { - $this->assertInstanceOf('Magento\Core\Controller\Request\Http', $this->_model->getRequest()); - } - - public function testGetResponse() - { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App')->setResponse( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Controller\Response\Http') - ); - if (!\Magento\TestFramework\Helper\Bootstrap::canTestHeaders()) { - $this->markTestSkipped('Can\'t test get response without sending headers'); - } - $this->assertInstanceOf('Magento\Core\Controller\Response\Http', $this->_model->getResponse()); - } - - public function testGetRouter() - { - $this->assertInstanceOf('Magento\Core\Controller\Varien\Router\DefaultRouter', - $this->_model->getRouter('default')); - } - - public function testGetRouters() - { - $routers = $this->_model->getRouters(); - $routerIds = array_keys($routers); - foreach (array('admin', 'standard', 'default', 'cms', 'vde') as $routerId) { - $this->assertContains($routerId, $routerIds); - $this->assertInstanceOf('Magento\Core\Controller\Varien\Router\AbstractRouter', $routers[$routerId]); - } - } - - public function testDispatch() - { - if (!\Magento\TestFramework\Helper\Bootstrap::canTestHeaders()) { - $this->markTestSkipped('Cant\'t test dispatch process without sending headers'); - } - $_SERVER['HTTP_HOST'] = 'localhost'; - /* empty action */ - $this->_model->getRequest()->setRequestUri('core/index/index'); - $this->_model->dispatch(); - $this->assertEmpty($this->_model->getResponse()->getBody()); - } - - /** - * @param string $sourcePath - * @param string $resultPath - * - * @dataProvider applyRewritesDataProvider - * @magentoConfigFixture global/rewrite/test_url/from /test\/(\w*)/ - * @magentoConfigFixture global/rewrite/test_url/to new_test/$1/subdirectory - * @magentoDataFixture Magento/Core/_files/url_rewrite.php - * @magentoDbIsolation enabled - */ - public function testApplyRewrites($sourcePath, $resultPath) - { - /** @var $request \Magento\Core\Controller\Request\Http */ - $request = $this->_objectManager->create('Magento\Core\Controller\Request\Http'); - $request->setPathInfo($sourcePath); - - $this->_model->applyRewrites($request); - $this->assertEquals($resultPath, $request->getPathInfo()); - } - - /** - * Data provider for testApplyRewrites - * - * @return array - */ - public function applyRewritesDataProvider() - { - return array( - 'url rewrite' => array( - '$sourcePath' => '/test_rewrite_path', // data from fixture - '$resultPath' => 'cms/page/view/page_id/1', // data from fixture - ), - 'configuration rewrite' => array( - '$sourcePath' => '/test/url/', - '$resultPath' => '/new_test/url/subdirectory/', - ), - ); - } -} diff --git a/dev/tests/integration/testsuite/Magento/Core/Controller/Varien/Router/BaseTest.php b/dev/tests/integration/testsuite/Magento/Core/Controller/Varien/Router/BaseTest.php index 16398a7666a..88abd658234 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Controller/Varien/Router/BaseTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Controller/Varien/Router/BaseTest.php @@ -44,7 +44,7 @@ class BaseTest extends \PHPUnit_Framework_TestCase $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Core\Controller\Varien\Router\Base', $options); $this->_model->setFront(\Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Controller\Varien\Front')); + ->create('Magento\App\FrontController')); } public function testFetchDefault() diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/App/AreaTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/App/AreaTest.php index f0779f4b61e..83b11e71432 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/App/AreaTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/App/AreaTest.php @@ -53,10 +53,10 @@ class AreaTest extends \PHPUnit_Framework_TestCase public function testInitDesign() { $defaultTheme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface')->setDefaultDesignTheme()->getDesignTheme(); + ->get('Magento\View\DesignInterface')->setDefaultDesignTheme()->getDesignTheme(); $this->_model->load(\Magento\Core\Model\App\Area::PART_DESIGN); $design = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface') + ->get('Magento\View\DesignInterface') ->setDefaultDesignTheme(); $this->assertEquals($defaultTheme->getThemePath(), $design->getDesignTheme()->getThemePath()); @@ -65,10 +65,10 @@ class AreaTest extends \PHPUnit_Framework_TestCase // try second time and make sure it won't load second time $this->_model->load(\Magento\Core\Model\App\Area::PART_DESIGN); $designArea = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface') + ->get('Magento\View\DesignInterface') ->getArea(); $sameDesign = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface') + ->get('Magento\View\DesignInterface') ->setArea($designArea); $this->assertSame($design, $sameDesign); } @@ -81,10 +81,13 @@ class AreaTest extends \PHPUnit_Framework_TestCase // @codingStandardsIgnoreEnd public function testDetectDesignUserAgent() { - $_SERVER['HTTP_USER_AGENT'] = 'Mozilla Firefox'; - $this->_model->detectDesign(new \Zend_Controller_Request_Http); + $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + /** @var $request \Magento\TestFramework\Request */ + $request = $objectManager->create('Magento\TestFramework\Request'); + $request->setServer(array('HTTP_USER_AGENT' => 'Mozilla Firefox')); + $this->_model->detectDesign($request); $design = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface'); + ->get('Magento\View\DesignInterface'); $this->assertEquals('magento_blank', $design->getDesignTheme()->getThemePath()); } @@ -96,7 +99,7 @@ class AreaTest extends \PHPUnit_Framework_TestCase { $this->_model->detectDesign(); $design = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface'); + ->get('Magento\View\DesignInterface'); $this->assertEquals('magento_blank', $design->getDesignTheme()->getThemePath()); } @@ -111,12 +114,13 @@ class AreaTest extends \PHPUnit_Framework_TestCase // @codingStandardsIgnoreEnd public function testDetectDesignNonFrontend() { - $_SERVER['HTTP_USER_AGENT'] = 'Mozilla Firefox'; - $model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\App\Area', array('areaCode' => 'install')); - $model->detectDesign(new \Zend_Controller_Request_Http); - $design = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface'); + $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + $model = $objectManager->create('Magento\Core\Model\App\Area', array('areaCode' => 'install')); + /** @var $request \Magento\TestFramework\Request */ + $request = $objectManager->create('Magento\TestFramework\Request'); + $request->setServer(array('HTTP_USER_AGENT' => 'Mozilla Firefox')); + $model->detectDesign($request); + $design = $objectManager->get('Magento\View\DesignInterface'); $this->assertNotEquals('magento_blank', $design->getDesignTheme()->getThemePath()); } } diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/App/EmulationTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/App/EmulationTest.php index f09b465e588..b2058b098ce 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/App/EmulationTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/App/EmulationTest.php @@ -43,7 +43,7 @@ class EmulationTest extends \PHPUnit_Framework_TestCase $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Core\Model\App\Emulation'); $design = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface') + ->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML); $initialEnvInfo = $this->_model->startEnvironmentEmulation(1); diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/AppTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/AppTest.php index 8b9bc4b96d5..79a25264228 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/AppTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/AppTest.php @@ -133,7 +133,8 @@ class AppTest extends \PHPUnit_Framework_TestCase public function testGetSafeNotExistingStore() { $this->_mageModel->getSafeStore(100); - $this->assertEquals('noRoute', $this->_mageModel->getRequest()->getActionName()); + $request = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Request\Http'); + $this->assertEquals('noRoute', $request->getActionName()); } public function testGetStores() @@ -194,7 +195,7 @@ class AppTest extends \PHPUnit_Framework_TestCase public function testGetFrontController() { $front = $this->_mageModel->getFrontController(); - $this->assertInstanceOf('Magento\Core\Controller\Varien\Front', $front); + $this->assertInstanceOf('Magento\App\FrontController', $front); $this->assertSame($front, $this->_mageModel->getFrontController()); } @@ -230,7 +231,7 @@ class AppTest extends \PHPUnit_Framework_TestCase public function testSetGetRequest() { - $this->assertInstanceOf('Magento\Core\Controller\Request\Http', $this->_model->getRequest()); + $this->assertInstanceOf('Magento\App\RequestInterface', $this->_model->getRequest()); /** @var $objectManager \Magento\TestFramework\ObjectManager */ $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); /** @var $request \Magento\TestFramework\Request */ @@ -242,8 +243,8 @@ class AppTest extends \PHPUnit_Framework_TestCase public function testSetGetResponse() { \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Controller\Response\Http')->headersSentThrowsException = false; - $this->assertInstanceOf('Magento\Core\Controller\Response\Http', $this->_model->getResponse()); + ->get('Magento\App\ResponseInterface')->headersSentThrowsException = false; + $this->assertInstanceOf('Magento\App\ResponseInterface', $this->_model->getResponse()); $expectedHeader = array( 'name' => 'Content-Type', 'value' => 'text/html; charset=UTF-8', @@ -251,7 +252,7 @@ class AppTest extends \PHPUnit_Framework_TestCase ); $this->assertContains($expectedHeader, $this->_model->getResponse()->getHeaders()); $response = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\TestFramework\Response'); + ->create('Magento\App\ResponseInterface'); $this->_model->setResponse($response); $this->assertSame($response, $this->_model->getResponse()); $this->assertEmpty($this->_model->getResponse()->getHeaders()); diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/ConfigTest.php index 6929f53db97..9ebd892ee59 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/ConfigTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/ConfigTest.php @@ -109,38 +109,4 @@ class ConfigTest extends \PHPUnit_Framework_TestCase ->create('Magento\Core\Model\Config', $arguments); return $model; } - - /** - * @magentoAppIsolation enabled - * @expectedException \InvalidArgumentException - */ - public function testGetAreaConfigThrowsExceptionIfNonexistentAreaIsRequested() - { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App')->getConfig() - ->getAreaConfig('non_existent_area_code'); - } - - /** - * Check if areas loaded correctly from configuration - */ - public function testGetAreas() - { - $this->markTestIncomplete('MAGETWO-6406'); - $model = $this->_createModel(array('sourceData' => __DIR__ . '/../_files/etc/config.xml')); - - $allowedAreas = $model->getAreas(); - $this->assertNotEmpty($allowedAreas, 'Areas are not initialized'); - - $this->assertArrayHasKey('test_area1', $allowedAreas, 'Test area #1 is not loaded'); - - $testAreaExpected = array( - 'areaNode' => 'value', - ); - $this->assertEquals($testAreaExpected, $allowedAreas['test_area1'], 'Test area is not loaded correctly'); - - $this->assertArrayNotHasKey('test_area2', $allowedAreas, 'Test area #2 is loaded by mistake'); - $this->assertArrayNotHasKey('test_area3', $allowedAreas, 'Test area #3 is loaded by mistake'); - $this->assertArrayNotHasKey('test_area4', $allowedAreas, 'Test area #4 is loaded by mistake'); - $this->assertArrayNotHasKey('test_area5', $allowedAreas, 'Test area #5 is loaded by mistake'); - } } diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/DataService/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/DataService/ConfigTest.php index 15b8dc845b3..b263985bdf9 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/DataService/ConfigTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/DataService/ConfigTest.php @@ -35,26 +35,26 @@ class ConfigTest extends \PHPUnit_Framework_TestCase protected function setUp() { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - /** @var \Magento\Core\Model\Dir $dirs */ + /** @var \Magento\App\Dir $dirs */ $dirs = $objectManager->create( - 'Magento\Core\Model\Dir', + 'Magento\App\Dir', array( 'baseDir' => BP, 'dirs' => array( - \Magento\Core\Model\Dir::MODULES => __DIR__ . '/LayoutTest', - \Magento\Core\Model\Dir::CONFIG => __DIR__ . '/LayoutTest', + \Magento\App\Dir::MODULES => __DIR__ . '/LayoutTest', + \Magento\App\Dir::CONFIG => __DIR__ . '/LayoutTest', ) ) ); $moduleList = $objectManager->create( - 'Magento\Core\Model\ModuleList', + 'Magento\App\ModuleList', array( 'reader' => $objectManager->create( - 'Magento\Core\Model\Module\Declaration\Reader\Filesystem', + 'Magento\App\Module\Declaration\Reader\Filesystem', array( 'fileResolver' => $objectManager->create( - 'Magento\Core\Model\Module\Declaration\FileResolver', + 'Magento\App\Module\Declaration\FileResolver', array( 'applicationDirs' => $dirs ) diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/DataService/LayoutTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/DataService/LayoutTest.php index 3498e4f8501..0fa7ef0c086 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/DataService/LayoutTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/DataService/LayoutTest.php @@ -72,7 +72,7 @@ class LayoutTest extends \Magento\TestFramework\TestCase\AbstractController */ public function testServiceCalls() { - /** @var \Magento\Core\Model\Layout $layout */ + /** @var \Magento\View\LayoutInterface $layout */ $layout = $this->_getLayoutModel('layout_update.xml'); $serviceCalls = $layout->getServiceCalls(); $expectedServiceCalls = array( @@ -99,16 +99,16 @@ class LayoutTest extends \Magento\TestFramework\TestCase\AbstractController * * @param string $fixtureFile * - * @return \Magento\Core\Model\Layout + * @return \Magento\View\LayoutInterface */ protected function _getLayoutModel($fixtureFile) { /** @var $layout \Magento\Core\Model\Layout */ $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( - 'Magento\Core\Model\Layout', + 'Magento\View\LayoutInterface', array('dataServiceGraph' => $this->_dataServiceGraph) ); - $xml = simplexml_load_file(__DIR__ . "/LayoutTest/{$fixtureFile}", 'Magento\Core\Model\Layout\Element'); + $xml = simplexml_load_file(__DIR__ . "/LayoutTest/{$fixtureFile}", 'Magento\View\Layout\Element'); $layout->setXml($xml); $layout->generateElements(); return $layout; diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Design/FileResolution/Strategy/FallbackTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Design/FileResolution/Strategy/FallbackTest.php index 0ddfa1568eb..f54b9c6658f 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Design/FileResolution/Strategy/FallbackTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Design/FileResolution/Strategy/FallbackTest.php @@ -53,10 +53,10 @@ class FallbackTest extends \PHPUnit_Framework_TestCase protected function _buildModel() { // Prepare config with directories - $dirs = new \Magento\Core\Model\Dir( + $dirs = new \Magento\App\Dir( $this->_baseDir, array(), - array(\Magento\Core\Model\Dir::THEMES => $this->_viewDir) + array(\Magento\App\Dir::THEMES => $this->_viewDir) ); return \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/DesignTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/DesignTest.php index f38f76f92f5..36ca0d661f2 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/DesignTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/DesignTest.php @@ -52,7 +52,7 @@ class DesignTest extends \PHPUnit_Framework_TestCase public function testChangeDesign() { $design = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\View\DesignInterface'); + ->create('Magento\View\DesignInterface'); $storeId = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->get('Magento\Core\Model\StoreManagerInterface')->getAnyStoreView()->getId(); // fixture design_change $designChange = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Email/Template/FilterTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Email/Template/FilterTest.php index a0c45563feb..764228b32bf 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Email/Template/FilterTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Email/Template/FilterTest.php @@ -110,7 +110,7 @@ class FilterTest extends \PHPUnit_Framework_TestCase { \Magento\TestFramework\Helper\Bootstrap::getInstance()->reinitialize(array( \Magento\Core\Model\App::PARAM_APP_DIRS => array( - \Magento\Core\Model\Dir::THEMES => dirname(__DIR__) . '/_files/design' + \Magento\App\Dir::THEMES => dirname(__DIR__) . '/_files/design' ) )); @@ -132,9 +132,9 @@ class FilterTest extends \PHPUnit_Framework_TestCase $this->assertEquals($area, $layout->getArea()); $this->assertEquals( $area, - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout')->getArea() + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface')->getArea() ); - $objectManager->get('Magento\Core\Model\View\DesignInterface')->setDesignTheme('test_default'); + $objectManager->get('Magento\View\DesignInterface')->setDesignTheme('test_default'); $actualOutput = $this->_model->layoutDirective(array( '{{layout ' . $directiveParams . '}}', diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Email/TemplateTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Email/TemplateTest.php index 47c3d2ab4e4..2acf244ac57 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Email/TemplateTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Email/TemplateTest.php @@ -54,12 +54,12 @@ class TemplateTest extends \PHPUnit_Framework_TestCase $objectManager->create('Magento\Filesystem'), $objectManager->create('Magento\Core\Model\View\Url'), $objectManager->create('Magento\Core\Model\View\FileSystem'), - $objectManager->get('Magento\Core\Model\View\DesignInterface'), + $objectManager->get('Magento\View\DesignInterface'), $objectManager->create('Magento\Core\Model\Store\Config'), $objectManager->create('Magento\Core\Model\Config'), $objectManager->get('Magento\Core\Model\Email\Template\FilterFactory'), $objectManager->get('Magento\Core\Model\StoreManager'), - $objectManager->get('Magento\Core\Model\Dir'), + $objectManager->get('Magento\App\Dir'), $objectManager->get('Magento\Core\Model\Email\Template\Config'), )) ->getMock(); @@ -130,7 +130,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase protected function _setBlankThemeForFixtureStore() { $theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\Theme'); + ->create('Magento\View\Design\ThemeInterface'); $theme->load('magento_blank', 'theme_path'); \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\StoreManagerInterface') ->getStore('fixturestore')->setConfig(\Magento\Core\Model\View\Design::XML_PATH_THEME_ID, $theme->getId()); diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Fieldset/Config/ReaderTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Fieldset/Config/ReaderTest.php index 97ab1441007..d5fb8fa0347 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Fieldset/Config/ReaderTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Fieldset/Config/ReaderTest.php @@ -38,35 +38,35 @@ class ReaderTest extends \PHPUnit_Framework_TestCase public function setUp() { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - /** @var \Magento\Core\Model\Dir $dirs */ + /** @var \Magento\App\Dir $dirs */ $dirs = $objectManager->create( - 'Magento\Core\Model\Dir', array( + 'Magento\App\Dir', array( 'baseDir' => BP, 'dirs' => array( - \Magento\Core\Model\Dir::MODULES => __DIR__ . '/_files', - \Magento\Core\Model\Dir::CONFIG => __DIR__ . '/_files' + \Magento\App\Dir::MODULES => __DIR__ . '/_files', + \Magento\App\Dir::CONFIG => __DIR__ . '/_files' ) ) ); - /** @var \Magento\Core\Model\Module\Declaration\FileResolver $modulesDeclarations */ + /** @var \Magento\App\Module\Declaration\FileResolver $modulesDeclarations */ $modulesDeclarations = $objectManager->create( - 'Magento\Core\Model\Module\Declaration\FileResolver', array( + 'Magento\App\Module\Declaration\FileResolver', array( 'applicationDirs' => $dirs, ) ); - /** @var \Magento\Core\Model\Module\Declaration\Reader\Filesystem $filesystemReader */ + /** @var \Magento\App\Module\Declaration\Reader\Filesystem $filesystemReader */ $filesystemReader = $objectManager->create( - 'Magento\Core\Model\Module\Declaration\Reader\Filesystem', array( + 'Magento\App\Module\Declaration\Reader\Filesystem', array( 'fileResolver' => $modulesDeclarations, ) ); - /** @var \Magento\Core\Model\ModuleList $modulesList */ + /** @var \Magento\App\ModuleList $modulesList */ $modulesList = $objectManager->create( - 'Magento\Core\Model\ModuleList', array( + 'Magento\App\ModuleList', array( 'reader' => $filesystemReader, ) ); diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/File/StorageTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/File/StorageTest.php index 6dbb64fd282..1983ea3d314 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/File/StorageTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/File/StorageTest.php @@ -43,7 +43,7 @@ class StorageTest extends \PHPUnit_Framework_TestCase $this->assertArrayHasKey('allowed_resources', $config); $this->assertArrayHasKey('update_time', $config); $this->assertEquals( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir')->getDir('media'), + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir')->getDir('media'), $config['media_directory'] ); $this->assertInternalType('array', $config['allowed_resources']); diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/LayoutDirectivesTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/LayoutDirectivesTest.php index bd69daa7bd0..28fd7f0383c 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/LayoutDirectivesTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/LayoutDirectivesTest.php @@ -241,16 +241,16 @@ class LayoutDirectivesTest extends \PHPUnit_Framework_TestCase * Prepare a layout model with pre-loaded fixture of an update XML * * @param string $fixtureFile - * @return \Magento\Core\Model\Layout + * @return \Magento\View\LayoutInterface */ protected function _getLayoutModel($fixtureFile) { - /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); - /** @var $xml \Magento\Core\Model\Layout\Element */ + /** @var $layout \Magento\View\LayoutInterface */ + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); + /** @var $xml \Magento\View\Layout\Element */ $xml = simplexml_load_file( __DIR__ . "/_files/layout_directives_test/{$fixtureFile}", - 'Magento\Core\Model\Layout\Element' + 'Magento\View\Layout\Element' ); $layout->loadString($xml->asXml()); $layout->generateElements(); @@ -264,8 +264,8 @@ class LayoutDirectivesTest extends \PHPUnit_Framework_TestCase { $layout = $this->_getLayoutModel('ifconfig.xml'); $this->assertFalse($layout->getBlock('block1')); - $this->assertInstanceOf('Magento\Core\Block', $layout->getBlock('block2')); - $this->assertInstanceOf('Magento\Core\Block', $layout->getBlock('block3')); + $this->assertInstanceOf('Magento\View\Element\BlockInterface', $layout->getBlock('block2')); + $this->assertInstanceOf('Magento\View\Element\BlockInterface', $layout->getBlock('block3')); $this->assertFalse($layout->getBlock('block4')); } } diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/LayoutTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/LayoutTest.php index cca25c92aee..3b12498494f 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/LayoutTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/LayoutTest.php @@ -61,7 +61,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase public function constructorDataProvider() { return array( - 'default area' => array(array(), \Magento\Core\Model\View\DesignInterface::DEFAULT_AREA), + 'default area' => array(array(), \Magento\View\DesignInterface::DEFAULT_AREA), 'frontend area' => array(array('area' => 'frontend'), 'frontend'), 'backend area' => array(array('area' => 'adminhtml'), 'adminhtml'), ); @@ -90,14 +90,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase public function testGetUpdate() { - $this->assertInstanceOf('Magento\Core\Model\Layout\Merge', $this->_layout->getUpdate()); - } - - public function testGetSetDirectOutput() - { - $this->assertFalse($this->_layout->isDirectOutput()); - $this->_layout->setDirectOutput(true); - $this->assertTrue($this->_layout->isDirectOutput()); + $this->assertInstanceOf('Magento\View\Layout\ProcessorInterface', $this->_layout->getUpdate()); } public function testGenerateXml() @@ -109,7 +102,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase $merge = $this->getMock('StdClass', array('asSimplexml')); $merge->expects($this->once())->method('asSimplexml')->will($this->returnValue(simplexml_load_string( '<layout><container name="container1"></container></layout>', - 'Magento\Core\Model\Layout\Element' + 'Magento\View\Layout\Element' ))); $layout->expects($this->once())->method('getUpdate')->will($this->returnValue($merge)); $this->assertEmpty($layout->getXpath('/layout/container[@name="container1"]')); @@ -134,7 +127,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase <block class="Magento\Core\Block\Text" template="test"/> <block class="Magento\Core\Block\Text"/> </layout>', - 'Magento\Core\Model\Layout\Element' + 'Magento\View\Layout\Element' )); $this->assertEquals(array(), $this->_layout->getAllBlocks()); $this->_layout->generateElements(); @@ -492,7 +485,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase public function testUpdateContainerAttributes() { $this->_layout->setXml(simplexml_load_file(__DIR__ . '/_files/layout/container_attributes.xml', - 'Magento\Core\Model\Layout\Element')); + 'Magento\View\Layout\Element')); $this->_layout->generateElements(); $result = $this->_layout->renderElement('container1', false); $this->assertEquals('<div id="container1-2" class="class12">Test11Test12</div>', $result); diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Page/Asset/MergedTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Page/Asset/MergedTest.php index ac3e6a38ed5..ac5cb3c1944 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Page/Asset/MergedTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Page/Asset/MergedTest.php @@ -50,9 +50,9 @@ class MergedTest extends \PHPUnit_Framework_TestCase $service = $objectManager->get('Magento\Core\Model\View\Service'); self::$_themePublicDir = $service->getPublicDir(); - /** @var \Magento\Core\Model\Dir $dirs */ - $dirs = $objectManager->get('Magento\Core\Model\Dir'); - self::$_viewPublicMergedDir = $dirs->getDir(\Magento\Core\Model\Dir::PUB_VIEW_CACHE) + /** @var \Magento\App\Dir $dirs */ + $dirs = $objectManager->get('Magento\App\Dir'); + self::$_viewPublicMergedDir = $dirs->getDir(\Magento\App\Dir::PUB_VIEW_CACHE) . DIRECTORY_SEPARATOR . \Magento\Core\Model\Page\Asset\Merged::PUBLIC_MERGE_DIR; } @@ -60,10 +60,10 @@ class MergedTest extends \PHPUnit_Framework_TestCase { \Magento\TestFramework\Helper\Bootstrap::getInstance()->reinitialize(array( \Magento\Core\Model\App::PARAM_APP_DIRS => array( - \Magento\Core\Model\Dir::THEMES => realpath(__DIR__ . '/../../_files/design') + \Magento\App\Dir::THEMES => realpath(__DIR__ . '/../../_files/design') ) )); - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setDesignTheme('vendor_default'); } diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Resource/Db/Collection/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Resource/Db/Collection/AbstractTest.php index 1512b8c3983..45bf587ab51 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Resource/Db/Collection/AbstractTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Resource/Db/Collection/AbstractTest.php @@ -49,7 +49,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase $fetchStrategy = $this->getMockForAbstractClass('Magento\Data\Collection\Db\FetchStrategyInterface'); $eventManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Event\Manager'); + ->get('Magento\Event\ManagerInterface'); $entityFactory = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->get('Magento\Core\Model\EntityFactory'); diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Resource/Layout/UpdateTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Resource/Layout/UpdateTest.php index 953257a412a..b1628436752 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Resource/Layout/UpdateTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Resource/Layout/UpdateTest.php @@ -45,9 +45,9 @@ class UpdateTest extends \PHPUnit_Framework_TestCase */ public function testFetchUpdatesByHandle() { - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ $theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\Theme'); + ->create('Magento\View\Design\ThemeInterface'); $theme->load('Test Theme', 'theme_title'); $result = $this->_resourceModel->fetchUpdatesByHandle( 'test_handle', diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Resource/SetupTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Resource/SetupTest.php index ba1e57e878e..212d4cfcba0 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Resource/SetupTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Resource/SetupTest.php @@ -58,8 +58,8 @@ class SetupTest extends \PHPUnit_Framework_TestCase $this->_model->deleteTableRow('core_resource', 'code', 'adminnotification_setup'); $this->_model->getConnection()->dropTable($this->_model->getTable('adminnotification_inbox')); $this->_model->getConnection()->dropTable($this->_model->getTable('admin_system_messages')); - /** @var $updater \Magento\Core\Model\Db\Updater */ - $updater = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Db\Updater'); + /** @var $updater \Magento\App\Updater */ + $updater = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Updater'); try { $updater->updateScheme(); $updater->updateData(); diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Resource/Theme/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Resource/Theme/CollectionTest.php index df3e218aa50..7fe2d3e9a3c 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Resource/Theme/CollectionTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Resource/Theme/CollectionTest.php @@ -66,7 +66,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase { $themeCollection = self::_getThemesCollection(); $hasFound = false; - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($themeCollection as $theme) { if ($theme->getFullPath() == $fullPath) { $hasFound = true; @@ -164,7 +164,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase ->create('Magento\Core\Model\Resource\Theme\Collection'); $themeCollection->addAreaFilter('test_area3')->filterVisibleThemes(); $this->assertCount(2, $themeCollection); - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($themeCollection as $theme) { $this->assertTrue(in_array( $theme->getType(), @@ -211,9 +211,9 @@ class CollectionTest extends \PHPUnit_Framework_TestCase $themeCollection = self::_getThemesCollection(); $themeCollection->load(); foreach (self::getThemeList() as $themeData) { - /** @var $themeModel \Magento\Core\Model\Theme */ + /** @var $themeModel \Magento\View\Design\ThemeInterface */ $themeModel = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\Theme'); + ->create('Magento\View\Design\ThemeInterface'); $themeModel->setData($themeData); $themeCollection->addItem($themeModel); } @@ -228,9 +228,9 @@ class CollectionTest extends \PHPUnit_Framework_TestCase $fixture = self::getInheritedThemeList(); $idByPath = array(); foreach ($fixture as $themeData) { - /** @var $themeModel \Magento\Core\Model\Theme */ + /** @var $themeModel \Magento\View\Design\ThemeInterface */ $themeModel = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\Theme'); + ->create('Magento\View\Design\ThemeInterface'); $themeModel->setData($themeData); if ($themeData['parent_id'] && isset($idByPath[$themeData['parent_id']])) { @@ -373,7 +373,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase \Magento\Core\Model\Resource\Theme\Collection::DEFAULT_PAGE_SIZE, $collection->count() ); - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($collection as $theme) { $this->assertEquals(\Magento\Core\Model\App\Area::AREA_FRONTEND, $theme->getArea()); $this->assertEquals(\Magento\Core\Model\Theme::TYPE_PHYSICAL, $theme->getType()); @@ -389,7 +389,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase $this->assertGreaterThan(0, $collection->count()); - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($collection as $theme) { $this->assertEquals(\Magento\Core\Model\App\Area::AREA_FRONTEND, $theme->getArea()); $this->assertEquals(\Magento\Core\Model\Theme::TYPE_PHYSICAL, $theme->getType()); diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/RouterListTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/RouterListTest.php index 96792dccdea..9ec1794ff60 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/RouterListTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/RouterListTest.php @@ -32,14 +32,14 @@ class RouterListTest extends \PHPUnit_Framework_TestCase protected $_objectManager; /** - * @var \Magento\Core\Model\RouterList + * @var \Magento\App\RouterList */ protected $_model; protected function setUp() { $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $this->_model = $this->_objectManager->create('Magento\Core\Model\RouterList'); + $this->_model = $this->_objectManager->create('Magento\App\RouterList'); } public function testGetRouterByRoute() @@ -53,7 +53,7 @@ class RouterListTest extends \PHPUnit_Framework_TestCase $this->_model->getRouterByRoute('checkout') ); $this->assertInstanceOf( - 'Magento\Core\Controller\Varien\Router\DefaultRouter', + 'Magento\App\Router\DefaultRouter', $this->_model->getRouterByRoute('test') ); } @@ -69,7 +69,7 @@ class RouterListTest extends \PHPUnit_Framework_TestCase $this->_model->getRouterByFrontName('checkout') ); $this->assertInstanceOf( - 'Magento\Core\Controller\Varien\Router\DefaultRouter', + 'Magento\App\Router\DefaultRouter', $this->_model->getRouterByFrontName('test') ); } diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Session/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Session/AbstractTest.php index 587727bbdc1..8ece7e703e9 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Session/AbstractTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Session/AbstractTest.php @@ -168,7 +168,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase public function testGetSessionSavePath() { $this->assertEquals( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') ->getDir('session'), $this->_model->getSessionSavePath() ); diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/StoreTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/StoreTest.php index 9bfe8521118..67a77b2f975 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/StoreTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/StoreTest.php @@ -56,10 +56,10 @@ class StoreTest extends \PHPUnit_Framework_TestCase 'registry' => $objectManager->get('Magento\Core\Model\Registry'), 'configCacheType' => $objectManager->get('Magento\Core\Model\Cache\Type\Config'), 'url' => $objectManager->get('Magento\Core\Model\Url'), - 'appState' => $objectManager->get('Magento\Core\Model\App\State'), - 'request' => $objectManager->get('Magento\Core\Controller\Request\Http'), + 'appState' => $objectManager->get('Magento\App\State'), + 'request' => $objectManager->get('Magento\App\RequestInterface'), 'configDataResource' => $objectManager->get('Magento\Core\Model\Resource\Config\Data'), - 'dir' => $objectManager->get('Magento\Core\Model\Dir'), + 'dir' => $objectManager->get('Magento\App\Dir'), 'coreStoreConfig' => $objectManager->get('Magento\Core\Model\Store\Config'), 'coreConfig' => $objectManager->get('Magento\Core\Model\Config'), 'resource' => $objectManager->get('Magento\Core\Model\Resource\Store'), @@ -198,7 +198,7 @@ class StoreTest extends \PHPUnit_Framework_TestCase public function testGetBaseUrlInPub() { \Magento\TestFramework\Helper\Bootstrap::getInstance()->reinitialize(array( - \Magento\Core\Model\App::PARAM_APP_URIS => array(\Magento\Core\Model\Dir::PUB => '') + \Magento\Core\Model\App::PARAM_APP_URIS => array(\Magento\App\Dir::PUB => '') )); $this->_model = $this->_getStoreModel(); $this->_model->load('default'); @@ -371,7 +371,7 @@ class StoreTest extends \PHPUnit_Framework_TestCase */ public function testIsUseStoreInUrl($isInstalled, $storeInUrl, $storeId, $expectedResult) { - $appStateMock = $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false, false); + $appStateMock = $this->getMock('Magento\App\State', array(), array(), '', false, false); $appStateMock->expects($this->any()) ->method('isInstalled') ->will($this->returnValue($isInstalled)); diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/TemplateEngine/TwigTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/TemplateEngine/TwigTest.php deleted file mode 100644 index 042889e6053..00000000000 --- a/dev/tests/integration/testsuite/Magento/Core/Model/TemplateEngine/TwigTest.php +++ /dev/null @@ -1,88 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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. - * - * Integration test of twig engine and classes it calls. - * - * @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\Core\Model\TemplateEngine; - -class TwigTest extends \PHPUnit_Framework_TestCase -{ - /** @var \Magento\Core\Model\TemplateEngine\Twig */ - protected $_twigEngine; - - /** - * @var \Magento\TestFramework\ObjectManager - */ - protected $_objectManager; - - /** - * Create a Twig template engine to test. - */ - protected function setUp() - { - $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App')->loadAreaPart( - \Magento\Core\Model\App\Area::AREA_GLOBAL, - \Magento\Core\Model\App\Area::PART_CONFIG - ); - $this->_twigEngine = $this->_objectManager->create('Magento\Core\Model\TemplateEngine\Twig'); - } - - /** - * Render a twig file using the Magento Twig Template Engine. - * - * @param \Magento\Core\Block\Template $block - * @param $fileName - * @param array $dictionary - * @return string - */ - public function render(\Magento\Core\Block\Template $block, $fileName, array $dictionary = array()) - { - return $this->_twigEngine->render($block, $fileName, $dictionary); - } - - /** - * Test the render() function with a very simple .twig file. - * - * Template will include a title taken from the dictionary passed in. - */ - public function testSimpleRender() - { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App') - ->loadAreaPart(\Magento\Core\Model\App\Area::AREA_FRONTEND, \Magento\Core\Model\App\Area::PART_DESIGN); - $simpleTitle = 'This is the Title'; - $renderedOutput = '<html><head><title>' . $simpleTitle . '</title></head><body></body></html>'; - $path = __DIR__ . '/_files'; - $blockMock = $this->getMockBuilder('Magento\Core\Block\Template') - ->disableOriginalConstructor()->getMock(); - - $dictionary = array( - 'simple' => array( - 'title' => $simpleTitle - ) - ); - - $actualOutput = $this->render($blockMock, $path . '/simple.twig', $dictionary); - $this->assertSame($renderedOutput, $actualOutput, 'Twig file did not render properly'); - } -} diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Theme/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Theme/CollectionTest.php index 2697208aa04..1ce3c36f9d4 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Theme/CollectionTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Theme/CollectionTest.php @@ -100,8 +100,9 @@ class CollectionTest extends \PHPUnit_Framework_TestCase */ public function testHasThemeInCollection() { - /** @var $themeModel \Magento\Core\Model\Theme */ - $themeModel = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Core\Model\Theme'); + /** @var $themeModel \Magento\View\Design\ThemeInterface */ + $themeModel = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->create('Magento\View\Design\ThemeInterface'); $themeModel->setData(array( 'area' => 'space_area', 'theme_title' => 'Space theme', diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Theme/Domain/VirtualTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Theme/Domain/VirtualTest.php index 0df5b7283c3..033c0269fd6 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Theme/Domain/VirtualTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Theme/Domain/VirtualTest.php @@ -76,22 +76,22 @@ class VirtualTest extends \PHPUnit_Framework_TestCase { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); //1. set up fixture - /** @var $physicalTheme \Magento\Core\Model\Theme */ - $physicalTheme = $objectManager->create('Magento\Core\Model\Theme'); + /** @var $physicalTheme \Magento\View\Design\ThemeInterface */ + $physicalTheme = $objectManager->create('Magento\View\Design\ThemeInterface'); $physicalTheme->setData($this->_themes['physical']); $physicalTheme->save(); $this->_themes['virtual']['parent_id'] = $physicalTheme->getId(); - /** @var $virtualTheme \Magento\Core\Model\Theme */ - $virtualTheme = $objectManager->create('Magento\Core\Model\Theme'); + /** @var $virtualTheme \Magento\View\Design\ThemeInterface */ + $virtualTheme = $objectManager->create('Magento\View\Design\ThemeInterface'); $virtualTheme->setData($this->_themes['virtual']); $virtualTheme->save(); $this->_themes['staging']['parent_id'] = $virtualTheme->getId(); - /** @var $stagingTheme \Magento\Core\Model\Theme */ - $stagingTheme = $objectManager->create('Magento\Core\Model\Theme'); + /** @var $stagingTheme \Magento\View\Design\ThemeInterface */ + $stagingTheme = $objectManager->create('Magento\View\Design\ThemeInterface'); $stagingTheme->setData($this->_themes['staging']); $stagingTheme->save(); @@ -99,8 +99,8 @@ class VirtualTest extends \PHPUnit_Framework_TestCase $this->_virtualThemeId = $virtualTheme->getId(); //2. run test - /** @var $virtualTheme \Magento\Core\Model\Theme */ - $virtualTheme = $objectManager->create('Magento\Core\Model\Theme'); + /** @var $virtualTheme \Magento\View\Design\ThemeInterface */ + $virtualTheme = $objectManager->create('Magento\View\Design\ThemeInterface'); $virtualTheme->load($this->_virtualThemeId); $this->assertEquals( diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Theme/FileTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Theme/FileTest.php index 5e7ba08f5bc..e1b29abae7e 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Theme/FileTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Theme/FileTest.php @@ -48,8 +48,8 @@ class FileTest extends \PHPUnit_Framework_TestCase { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $this->_model = $objectManager->create('Magento\Core\Model\Theme\File'); - /** @var $themeModel \Magento\Core\Model\Theme */ - $themeModel = $objectManager->create('Magento\Core\Model\Theme'); + /** @var $themeModel \Magento\View\Design\ThemeInterface */ + $themeModel = $objectManager->create('Magento\View\Design\ThemeInterface'); $this->_theme = $themeModel->getCollection()->getFirstItem(); $this->_data = array( 'file_path' => 'main.css', diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Theme/RegistrationTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Theme/RegistrationTest.php index 5337d11c2cb..2219338ebdf 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Theme/RegistrationTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Theme/RegistrationTest.php @@ -45,7 +45,7 @@ class RegistrationTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\Theme'); + ->create('Magento\View\Design\ThemeInterface'); $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Core\Model\Theme\Registration', array('theme' => $this->_theme)); } diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Theme/ValidatorTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Theme/ValidatorTest.php index f50968d1164..87590dab8c6 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Theme/ValidatorTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Theme/ValidatorTest.php @@ -70,7 +70,7 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase protected function _getThemeModel() { return \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\Theme'); + ->create('Magento\View\Design\ThemeInterface'); } /** diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/ThemeTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/ThemeTest.php index fa312250df0..731b0bde9f4 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/ThemeTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/ThemeTest.php @@ -36,8 +36,9 @@ class ThemeTest extends \PHPUnit_Framework_TestCase */ public function testCrud() { - /** @var $themeModel \Magento\Core\Model\Theme */ - $themeModel = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Core\Model\Theme'); + /** @var $themeModel \Magento\View\Design\ThemeInterface */ + $themeModel = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->create('Magento\View\Design\ThemeInterface'); $themeModel->setData($this->_getThemeValidData()); $crud = new \Magento\TestFramework\Entity($themeModel, array('theme_version' => '2.0.0.1')); @@ -68,9 +69,9 @@ class ThemeTest extends \PHPUnit_Framework_TestCase */ public function testChildRelation() { - /** @var $theme \Magento\Core\Model\Theme */ - /** @var $currentTheme \Magento\Core\Model\Theme */ - $theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Theme'); + /** @var $theme \Magento\View\Design\ThemeInterface */ + /** @var $currentTheme \Magento\View\Design\ThemeInterface */ + $theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\Design\ThemeInterface'); $collection = $theme->getCollection()->addTypeFilter(\Magento\Core\Model\Theme::TYPE_VIRTUAL); foreach ($collection as $currentTheme) { $parentTheme = $currentTheme->getParentTheme(); diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Translate/InlineParserTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Translate/InlineParserTest.php index 09f3efb7328..6b08c71c251 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Translate/InlineParserTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Translate/InlineParserTest.php @@ -39,7 +39,7 @@ class InlineParserTest extends \PHPUnit_Framework_TestCase public static function setUpBeforeClass() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setDesignTheme('magento_demo'); } diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Translate/InlineTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Translate/InlineTest.php index 6af8d576b91..b75084f8017 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Translate/InlineTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Translate/InlineTest.php @@ -41,7 +41,7 @@ class InlineTest extends \PHPUnit_Framework_TestCase public static function setUpBeforeClass() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setDesignTheme('magento_demo'); } @@ -99,7 +99,7 @@ class InlineTest extends \PHPUnit_Framework_TestCase $expectedText = file_get_contents(__DIR__ . '/_files/_inline_page_expected.html'); $package = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface') + ->get('Magento\View\DesignInterface') ->getDesignTheme() ->getPackageCode(); $expectedText = str_replace( diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/TranslateTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/TranslateTest.php index 3251c2986c3..ef3713a3ed3 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/TranslateTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/TranslateTest.php @@ -38,7 +38,7 @@ class TranslateTest extends \PHPUnit_Framework_TestCase protected $_model; /** - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_designModel; @@ -79,10 +79,10 @@ class TranslateTest extends \PHPUnit_Framework_TestCase $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $objectManager->addSharedInstance($this->_viewFileSystem, 'Magento\Core\Model\View\FileSystem'); - /** @var $configModel \Magento\Core\Model\Config */ - $configModel = $objectManager->get('Magento\Core\Model\Config'); - $configModel->setModuleDir('Magento_Core', 'i18n', __DIR__ . '/_files/Magento/Core/i18n'); - $configModel->setModuleDir('Magento_Catalog', 'i18n', + /** @var $moduleReader \Magento\Core\Model\Config\Modules\Reader */ + $moduleReader = $objectManager->get('Magento\Core\Model\Config\Modules\Reader'); + $moduleReader->setModuleDir('Magento_Core', 'i18n', __DIR__ . '/_files/Magento/Core/i18n'); + $moduleReader->setModuleDir('Magento_Catalog', 'i18n', __DIR__ . '/_files/Magento/Catalog/i18n'); /** @var \Magento\Core\Model\View\Design _designModel */ @@ -143,7 +143,7 @@ class TranslateTest extends \PHPUnit_Framework_TestCase $this->assertEquals('en_US', $this->_model->getConfig(\Magento\Core\Model\Translate::CONFIG_KEY_LOCALE)); $this->assertEquals(1, $this->_model->getConfig(\Magento\Core\Model\Translate::CONFIG_KEY_STORE)); $design = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface'); + ->get('Magento\View\DesignInterface'); $this->assertEquals($design->getDesignTheme()->getId(), $this->_model->getConfig(\Magento\Core\Model\Translate::CONFIG_KEY_DESIGN_THEME)); $this->assertNull($this->_model->getConfig('non_existing_key')); diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Url/RewriteTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/Url/RewriteTest.php index 3776dd01832..4673ef16edb 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Url/RewriteTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/Url/RewriteTest.php @@ -116,9 +116,7 @@ class RewriteTest extends \PHPUnit_Framework_TestCase public function testRewrite() { $request = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Controller\Request\Http')->setPathInfo('fancy/url.html'); - $response = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\TestFramework\Response'); + ->create('Magento\App\RequestInterface')->setPathInfo('fancy/url.html'); $_SERVER['QUERY_STRING'] = 'foo=bar&___fooo=bar'; $this->_model->setRequestPath('fancy/url.html') @@ -127,7 +125,7 @@ class RewriteTest extends \PHPUnit_Framework_TestCase ->save(); try { - $this->assertTrue($this->_model->rewrite(null, $response)); + $this->assertTrue($this->_model->rewrite($request)); $this->assertEquals('/another/fancy/url.html?foo=bar', $request->getRequestUri()); $this->assertEquals('another/fancy/url.html', $request->getPathInfo()); $this->_model->delete(); @@ -139,26 +137,26 @@ class RewriteTest extends \PHPUnit_Framework_TestCase public function testRewriteNonExistingRecord() { - $response = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\TestFramework\Response'); - $this->assertFalse($this->_model->rewrite(null, $response)); + $request = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->create('Magento\App\RequestInterface'); + $this->assertFalse($this->_model->rewrite($request)); } public function testRewriteWrongStore() { - $response = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\TestFramework\Response'); + $request = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->create('Magento\App\RequestInterface'); $_GET['___from_store'] = uniqid('store'); - $this->assertFalse($this->_model->rewrite(null, $response)); + $this->assertFalse($this->_model->rewrite($request)); } public function testRewriteNonExistingRecordCorrectStore() { - $response = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\TestFramework\Response'); + $request = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->create('Magento\App\RequestInterface'); $_GET['___from_store'] = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->get('Magento\Core\Model\StoreManagerInterface')->getDefaultStoreView()->getCode(); - $this->assertFalse($this->_model->rewrite(null, $response)); + $this->assertFalse($this->_model->rewrite($request)); } public function testGetStoreId() diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/UrlTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/UrlTest.php index b11f7767bb5..800f96742a4 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/UrlTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/UrlTest.php @@ -92,7 +92,7 @@ class UrlTest extends \PHPUnit_Framework_TestCase public function testSetGetRequest() { - $this->assertInstanceOf('Zend_Controller_Request_Http', $this->_model->getRequest()); + $this->assertInstanceOf('\Magento\App\RequestInterface', $this->_model->getRequest()); /** @var $objectManager \Magento\TestFramework\ObjectManager */ $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); /** @var $request \Magento\TestFramework\Request */ @@ -643,10 +643,13 @@ class UrlTest extends \PHPUnit_Framework_TestCase */ public function testIsOwnOriginUrl() { - $_SERVER['HTTP_REFERER'] = 'http://localhost/'; + $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + /** @var $request \Magento\TestFramework\Request */ + $request = $objectManager->get('Magento\App\RequestInterface'); + $request->setServer(array('HTTP_REFERER' => 'http://localhost/')); $this->assertTrue($this->_model->isOwnOriginUrl()); - $_SERVER['HTTP_REFERER'] = 'http://example.com/'; + $request->setServer(array('HTTP_REFERER' => 'http://example.com/')); $this->assertFalse($this->_model->isOwnOriginUrl()); } } diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/View/DesignTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/View/DesignTest.php index cf7d32d17b8..0c5c7bd0608 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/View/DesignTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/View/DesignTest.php @@ -33,7 +33,7 @@ namespace Magento\Core\Model\View; class DesignTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_model; @@ -43,7 +43,7 @@ class DesignTest extends \PHPUnit_Framework_TestCase protected $_viewFileSystem; /** - * @var \Magento\Core\Model\View\Config + * @var \Magento\View\ConfigInterface */ protected $_viewConfig; @@ -54,18 +54,18 @@ class DesignTest extends \PHPUnit_Framework_TestCase public static function setUpBeforeClass() { - $themeDir = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') - ->getDir(\Magento\Core\Model\Dir::MEDIA) . 'theme'; + $themeDir = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') + ->getDir(\Magento\App\Dir::MEDIA) . 'theme'; $filesystem = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Filesystem'); $filesystem->delete($themeDir . '/frontend'); $filesystem->delete($themeDir . '/_merged'); $ioAdapter = new \Magento\Io\File(); $ioAdapter->cp( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') - ->getDir(\Magento\Core\Model\Dir::PUB_LIB) . '/prototype/prototype.js', - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') - ->getDir(\Magento\Core\Model\Dir::PUB_LIB) . '/prototype/prototype.min.js' + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') + ->getDir(\Magento\App\Dir::PUB_LIB) . '/prototype/prototype.js', + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') + ->getDir(\Magento\App\Dir::PUB_LIB) . '/prototype/prototype.min.js' ); } @@ -73,19 +73,19 @@ class DesignTest extends \PHPUnit_Framework_TestCase { $ioAdapter = new \Magento\Io\File(); $ioAdapter->rm( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') - ->getDir(\Magento\Core\Model\Dir::PUB_LIB) . '/prototype/prototype.min.js' + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') + ->getDir(\Magento\App\Dir::PUB_LIB) . '/prototype/prototype.min.js' ); } protected function setUp() { $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\View\DesignInterface'); + ->create('Magento\View\DesignInterface'); $this->_viewFileSystem = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Core\Model\View\FileSystem'); $this->_viewConfig = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\View\Config'); + ->create('Magento\View\ConfigInterface'); $this->_viewUrl = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Core\Model\View\Url'); } @@ -99,24 +99,24 @@ class DesignTest extends \PHPUnit_Framework_TestCase { \Magento\TestFramework\Helper\Bootstrap::getInstance()->reinitialize(array( \Magento\Core\Model\App::PARAM_APP_DIRS => array( - \Magento\Core\Model\Dir::THEMES => realpath(__DIR__ . '/../_files/design'), + \Magento\App\Dir::THEMES => realpath(__DIR__ . '/../_files/design'), ), )); \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface') + ->get('Magento\View\DesignInterface') ->setDesignTheme($themePath); $this->_viewFileSystem = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Core\Model\View\FileSystem'); $this->_viewConfig = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\View\Config'); + ->create('Magento\View\ConfigInterface'); $this->_viewUrl = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Core\Model\View\Url'); } public function testSetGetArea() { - $this->assertEquals(\Magento\Core\Model\View\DesignInterface::DEFAULT_AREA, $this->_model->getArea()); + $this->assertEquals(\Magento\View\DesignInterface::DEFAULT_AREA, $this->_model->getArea()); $this->_model->setArea('test'); $this->assertEquals('test', $this->_model->getArea()); } @@ -130,7 +130,7 @@ class DesignTest extends \PHPUnit_Framework_TestCase public function testGetDesignTheme() { - $this->assertInstanceOf('Magento\Core\Model\Theme', $this->_model->getDesignTheme()); + $this->assertInstanceOf('Magento\View\Design\ThemeInterface', $this->_model->getDesignTheme()); } /** @@ -235,9 +235,9 @@ class DesignTest extends \PHPUnit_Framework_TestCase public function testGetConfigCustomized() { $this->_emulateFixtureTheme(); - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ $theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface') + ->get('Magento\View\DesignInterface') ->getDesignTheme(); $customConfigFile = $theme->getCustomization()->getCustomViewConfigPath(); /** @var $filesystem \Magento\Filesystem */ @@ -270,7 +270,7 @@ class DesignTest extends \PHPUnit_Framework_TestCase public function testGetViewUrl($appMode, $file, $result) { $currentAppMode = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\App\State')->getMode(); + ->get('Magento\App\State')->getMode(); if ($currentAppMode != $appMode) { $this->markTestSkipped("Implemented to be run in {$appMode} mode"); } @@ -291,7 +291,7 @@ class DesignTest extends \PHPUnit_Framework_TestCase public function testGetViewUrlSigned($appMode, $file, $result) { $currentAppMode = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\App\State')->getMode(); + ->get('Magento\App\State')->getMode(); if ($currentAppMode != $appMode) { $this->markTestSkipped("Implemented to be run in {$appMode} mode"); } @@ -312,32 +312,32 @@ class DesignTest extends \PHPUnit_Framework_TestCase { return array( array( - \Magento\Core\Model\App\State::MODE_DEFAULT, + \Magento\App\State::MODE_DEFAULT, 'Magento_Page::favicon.ico', 'http://localhost/pub/static/frontend/test_default/en_US/Magento_Page/favicon.ico', ), array( - \Magento\Core\Model\App\State::MODE_DEFAULT, + \Magento\App\State::MODE_DEFAULT, 'prototype/prototype.js', 'http://localhost/pub/lib/prototype/prototype.js' ), array( - \Magento\Core\Model\App\State::MODE_DEVELOPER, + \Magento\App\State::MODE_DEVELOPER, 'Magento_Page::menu.js', 'http://localhost/pub/static/frontend/test_default/en_US/Magento_Page/menu.js' ), array( - \Magento\Core\Model\App\State::MODE_DEFAULT, + \Magento\App\State::MODE_DEFAULT, 'Magento_Page::menu.js', 'http://localhost/pub/static/frontend/test_default/en_US/Magento_Page/menu.js' ), array( - \Magento\Core\Model\App\State::MODE_DEFAULT, + \Magento\App\State::MODE_DEFAULT, 'Magento_Catalog::widgets.css', 'http://localhost/pub/static/frontend/test_default/en_US/Magento_Catalog/widgets.css' ), array( - \Magento\Core\Model\App\State::MODE_DEVELOPER, + \Magento\App\State::MODE_DEVELOPER, 'Magento_Catalog::widgets.css', 'http://localhost/pub/static/frontend/test_default/en_US/Magento_Catalog/widgets.css' ), @@ -346,8 +346,8 @@ class DesignTest extends \PHPUnit_Framework_TestCase public function testGetPublicFileUrl() { - $pubLibFile = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') - ->getDir(\Magento\Core\Model\Dir::PUB_LIB) . '/jquery/jquery.js'; + $pubLibFile = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') + ->getDir(\Magento\App\Dir::PUB_LIB) . '/jquery/jquery.js'; $actualResult = $this->_viewUrl->getPublicFileUrl($pubLibFile); $this->assertStringEndsWith('/jquery/jquery.js', $actualResult); } @@ -357,8 +357,8 @@ class DesignTest extends \PHPUnit_Framework_TestCase */ public function testGetPublicFileUrlSigned() { - $pubLibFile = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') - ->getDir(\Magento\Core\Model\Dir::PUB_LIB) . '/jquery/jquery.js'; + $pubLibFile = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') + ->getDir(\Magento\App\Dir::PUB_LIB) . '/jquery/jquery.js'; $actualResult = $this->_viewUrl->getPublicFileUrl($pubLibFile); $this->assertStringMatchesFormat('%a/jquery/jquery.js?%d', $actualResult); } diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/View/FileSystemTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/View/FileSystemTest.php index e638069b42c..4c13b98f80d 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/View/FileSystemTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/View/FileSystemTest.php @@ -42,13 +42,13 @@ class FileSystemTest extends \PHPUnit_Framework_TestCase { \Magento\TestFramework\Helper\Bootstrap::getInstance()->reinitialize(array( \Magento\Core\Model\App::PARAM_APP_DIRS => array( - \Magento\Core\Model\Dir::THEMES => dirname(__DIR__) . '/_files/design' + \Magento\App\Dir::THEMES => dirname(__DIR__) . '/_files/design' ) )); $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Core\Model\View\FileSystem'); \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface') + ->get('Magento\View\DesignInterface') ->setDesignTheme('test_default'); } diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/View/PublicationTest.php b/dev/tests/integration/testsuite/Magento/Core/Model/View/PublicationTest.php index 3aa084cf677..bc58ac9245e 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/View/PublicationTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Model/View/PublicationTest.php @@ -30,7 +30,7 @@ namespace Magento\Core\Model\View; class PublicationTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_model; @@ -58,7 +58,7 @@ class PublicationTest extends \PHPUnit_Framework_TestCase $this->_viewUrl = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Core\Model\View\Url'); $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface'); + ->get('Magento\View\DesignInterface'); } protected function tearDown() @@ -75,9 +75,9 @@ class PublicationTest extends \PHPUnit_Framework_TestCase */ public function testGetPublicDir() { - /** @var $dirs \Magento\Core\Model\Dir */ - $dirs = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir'); - $expectedPublicDir = $dirs->getDir(\Magento\Core\Model\Dir::STATIC_VIEW); + /** @var $dirs \Magento\App\Dir */ + $dirs = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir'); + $expectedPublicDir = $dirs->getDir(\Magento\App\Dir::STATIC_VIEW); $this->assertEquals($expectedPublicDir, $this->_viewService->getPublicDir()); } @@ -406,9 +406,9 @@ class PublicationTest extends \PHPUnit_Framework_TestCase */ public function testPublishResourcesAndCssWhenChangedCssDevMode() { - $mode = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App\State') + $mode = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\State') ->getMode(); - if ($mode != \Magento\Core\Model\App\State::MODE_DEVELOPER) { + if ($mode != \Magento\App\State::MODE_DEVELOPER) { $this->markTestSkipped('Valid in developer mode only'); } $this->_testPublishResourcesAndCssWhenChangedCss(true); @@ -422,9 +422,9 @@ class PublicationTest extends \PHPUnit_Framework_TestCase */ public function testNotPublishResourcesAndCssWhenChangedCssUsualMode() { - $mode = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App\State') + $mode = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\State') ->getMode(); - if ($mode == \Magento\Core\Model\App\State::MODE_DEVELOPER) { + if ($mode == \Magento\App\State::MODE_DEVELOPER) { $this->markTestSkipped('Valid in non-developer mode only'); } $this->_testPublishResourcesAndCssWhenChangedCss(false); @@ -440,12 +440,12 @@ class PublicationTest extends \PHPUnit_Framework_TestCase $appInstallDir = \Magento\TestFramework\Helper\Bootstrap::getInstance()->getAppInstallDir(); \Magento\TestFramework\Helper\Bootstrap::getInstance()->reinitialize(array( \Magento\Core\Model\App::PARAM_APP_DIRS => array( - \Magento\Core\Model\Dir::THEMES => "$appInstallDir/media_for_change", + \Magento\App\Dir::THEMES => "$appInstallDir/media_for_change", ) )); $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface'); + ->get('Magento\View\DesignInterface'); $this->_model->setDesignTheme('test_default'); $this->_viewService = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() @@ -494,9 +494,9 @@ class PublicationTest extends \PHPUnit_Framework_TestCase */ public function testPublishChangedResourcesWhenUnchangedCssDevMode() { - $mode = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App\State') + $mode = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\State') ->getMode(); - if ($mode != \Magento\Core\Model\App\State::MODE_DEVELOPER) { + if ($mode != \Magento\App\State::MODE_DEVELOPER) { $this->markTestSkipped('Valid in developer mode only'); } @@ -511,9 +511,9 @@ class PublicationTest extends \PHPUnit_Framework_TestCase */ public function testNotPublishChangedResourcesWhenUnchangedCssUsualMode() { - $mode = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App\State') + $mode = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\State') ->getMode(); - if ($mode == \Magento\Core\Model\App\State::MODE_DEVELOPER) { + if ($mode == \Magento\App\State::MODE_DEVELOPER) { $this->markTestSkipped('Valid in non-developer mode only'); } @@ -530,12 +530,12 @@ class PublicationTest extends \PHPUnit_Framework_TestCase $appInstallDir = \Magento\TestFramework\Helper\Bootstrap::getInstance()->getAppInstallDir(); \Magento\TestFramework\Helper\Bootstrap::getInstance()->reinitialize(array( \Magento\Core\Model\App::PARAM_APP_DIRS => array( - \Magento\Core\Model\Dir::THEMES => "$appInstallDir/media_for_change", + \Magento\App\Dir::THEMES => "$appInstallDir/media_for_change", ) )); $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface'); + ->get('Magento\View\DesignInterface'); $this->_model->setDesignTheme('test_default'); $this->_viewService = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() @@ -577,7 +577,7 @@ class PublicationTest extends \PHPUnit_Framework_TestCase { \Magento\TestFramework\Helper\Bootstrap::getInstance()->reinitialize(array( \Magento\Core\Model\App::PARAM_APP_DIRS => array( - \Magento\Core\Model\Dir::THEMES => dirname(__DIR__) . '/_files/design/' + \Magento\App\Dir::THEMES => dirname(__DIR__) . '/_files/design/' ) )); @@ -592,7 +592,7 @@ class PublicationTest extends \PHPUnit_Framework_TestCase // Reinit model with new directories $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface'); + ->get('Magento\View\DesignInterface'); $this->_model->setDesignTheme('test_default'); $this->_viewService = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() @@ -613,7 +613,7 @@ class PublicationTest extends \PHPUnit_Framework_TestCase { \Magento\TestFramework\Helper\Bootstrap::getInstance()->reinitialize(array( \Magento\Core\Model\App::PARAM_APP_DIRS => array( - \Magento\Core\Model\Dir::THEMES => dirname(__DIR__) . '/_files/design/' + \Magento\App\Dir::THEMES => dirname(__DIR__) . '/_files/design/' ) )); \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App')->loadAreaPart( @@ -643,7 +643,7 @@ class PublicationTest extends \PHPUnit_Framework_TestCase $this->assertFileEquals($filePath, str_replace('/', DIRECTORY_SEPARATOR, "{$publishedPath}/css/base64.css")); $this->_model->setDesignTheme(\Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\Theme')); + ->create('Magento\View\Design\ThemeInterface')); } /** @@ -670,8 +670,8 @@ class PublicationTest extends \PHPUnit_Framework_TestCase public function testGetViewFilePublicPathExistingFile() { $filePath = 'mage/mage.js'; - $expectedFile = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') - ->getDir(\Magento\Core\Model\Dir::PUB_LIB) . '/' . $filePath; + $expectedFile = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') + ->getDir(\Magento\App\Dir::PUB_LIB) . '/' . $filePath; $this->assertFileExists($expectedFile, 'Please verify existence of public library file'); $actualFile = $this->_viewUrl->getViewFilePublicPath($filePath); diff --git a/dev/tests/integration/testsuite/Magento/Core/Utility/Layout.php b/dev/tests/integration/testsuite/Magento/Core/Utility/Layout.php index 35ae9f3b06b..03471c70427 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Utility/Layout.php +++ b/dev/tests/integration/testsuite/Magento/Core/Utility/Layout.php @@ -63,7 +63,7 @@ class Layout ->will(\PHPUnit_Framework_TestCase::returnValue($files)); $cache = $this->_testCase->getMockForAbstractClass('Magento\Cache\FrontendInterface'); return $objectManager->create( - 'Magento\Core\Model\Layout\Merge', array('fileSource' => $fileSource, 'cache' => $cache) + 'Magento\View\Layout\ProcessorInterface', array('fileSource' => $fileSource, 'cache' => $cache) ); } @@ -94,13 +94,13 @@ class Layout { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); return array( - 'mergeFactory' => $objectManager->get('Magento\Core\Model\Layout\MergeFactory'), + 'processorFactory' => $objectManager->get('Magento\View\Layout\ProcessorFactory'), 'themeFactory' => $objectManager->get('Magento\Core\Model\Resource\Theme\CollectionFactory'), 'logger' => $objectManager->get('Magento\Core\Model\Logger'), - 'eventManager' => $objectManager->get('Magento\Core\Model\Event\Manager'), + 'eventManager' => $objectManager->get('Magento\Event\ManagerInterface'), 'factoryHelper' => $objectManager->get('Magento\Core\Model\Factory\Helper'), 'coreData' => $objectManager->get('Magento\Core\Helper\Data'), - 'design' => $objectManager->get('Magento\Core\Model\View\DesignInterface'), + 'design' => $objectManager->get('Magento\View\DesignInterface'), 'blockFactory' => $objectManager->create('Magento\Core\Model\BlockFactory', array()), 'structure' => $objectManager->create('Magento\Data\Structure', array()), 'argumentProcessor' => $objectManager->create('Magento\Core\Model\Layout\Argument\Processor', array()), diff --git a/dev/tests/integration/testsuite/Magento/Core/Utility/LayoutTest.php b/dev/tests/integration/testsuite/Magento/Core/Utility/LayoutTest.php index 0bc7a210b93..dd3a7f1a6cf 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Utility/LayoutTest.php +++ b/dev/tests/integration/testsuite/Magento/Core/Utility/LayoutTest.php @@ -45,10 +45,10 @@ class LayoutTest extends \PHPUnit_Framework_TestCase */ protected function _assertLayoutUpdate($expectedUpdateFile, $actualUpdate) { - $this->assertInstanceOf('Magento\Core\Model\Layout\Merge', $actualUpdate); + $this->assertInstanceOf('Magento\View\Layout\ProcessorInterface', $actualUpdate); $layoutUpdateXml = $actualUpdate->getFileLayoutUpdatesXml(); - $this->assertInstanceOf('Magento\Core\Model\Layout\Element', $layoutUpdateXml); + $this->assertInstanceOf('Magento\View\Layout\Element', $layoutUpdateXml); $this->assertXmlStringEqualsXmlFile($expectedUpdateFile, $layoutUpdateXml->asNiceXml()); } @@ -71,7 +71,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase public function testGetLayoutFromFixture($inputFiles, $expectedFile) { $layout = $this->_utility->getLayoutFromFixture($inputFiles, $this->_utility->getLayoutDependencies()); - $this->assertInstanceOf('Magento\Core\Model\Layout', $layout); + $this->assertInstanceOf('Magento\View\LayoutInterface', $layout); $this->_assertLayoutUpdate($expectedFile, $layout->getUpdate()); } diff --git a/dev/tests/integration/testsuite/Magento/Core/_files/layout_update.php b/dev/tests/integration/testsuite/Magento/Core/_files/layout_update.php index 6103e98b9d8..51391e9e347 100644 --- a/dev/tests/integration/testsuite/Magento/Core/_files/layout_update.php +++ b/dev/tests/integration/testsuite/Magento/Core/_files/layout_update.php @@ -29,8 +29,8 @@ $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $objectManager->get('Magento\Core\Model\App') ->loadAreaPart(\Magento\Core\Model\App\Area::AREA_ADMINHTML, \Magento\Core\Model\App\Area::PART_CONFIG); -/** @var $theme \Magento\Core\Model\Theme */ -$theme = $objectManager->create('Magento\Core\Model\Theme'); +/** @var $theme \Magento\View\Design\ThemeInterface */ +$theme = $objectManager->create('Magento\View\Design\ThemeInterface'); $theme->setThemePath('test/test') ->setThemeVersion('2.0.0.0') ->setArea('frontend') diff --git a/dev/tests/integration/testsuite/Magento/Customer/Block/Account/Dashboard/InfoTest.php b/dev/tests/integration/testsuite/Magento/Customer/Block/Account/Dashboard/InfoTest.php index b031a7e5929..684bef2b9bd 100644 --- a/dev/tests/integration/testsuite/Magento/Customer/Block/Account/Dashboard/InfoTest.php +++ b/dev/tests/integration/testsuite/Magento/Customer/Block/Account/Dashboard/InfoTest.php @@ -36,7 +36,7 @@ class InfoTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Customer\Block\Account\Dashboard\Info'); } diff --git a/dev/tests/integration/testsuite/Magento/Customer/Block/Widget/GenderTest.php b/dev/tests/integration/testsuite/Magento/Customer/Block/Widget/GenderTest.php index 6f7536efe6e..4603d0acc5c 100644 --- a/dev/tests/integration/testsuite/Magento/Customer/Block/Widget/GenderTest.php +++ b/dev/tests/integration/testsuite/Magento/Customer/Block/Widget/GenderTest.php @@ -36,7 +36,7 @@ class GenderTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Customer\Block\Widget\Gender'); } diff --git a/dev/tests/integration/testsuite/Magento/DesignEditor/Model/Config/QuickStylesTest.php b/dev/tests/integration/testsuite/Magento/DesignEditor/Model/Config/QuickStylesTest.php index 340e8e39e81..1bf4d156f9b 100644 --- a/dev/tests/integration/testsuite/Magento/DesignEditor/Model/Config/QuickStylesTest.php +++ b/dev/tests/integration/testsuite/Magento/DesignEditor/Model/Config/QuickStylesTest.php @@ -35,7 +35,7 @@ class QuickStylesTest extends \PHPUnit_Framework_TestCase protected $_model; /** - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_design; @@ -50,8 +50,8 @@ class QuickStylesTest extends \PHPUnit_Framework_TestCase protected function setUp() { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $this->_design = $objectManager->get('Magento\Core\Model\View\DesignInterface'); - $this->_design->setDesignTheme('vendor_test', \Magento\Core\Model\View\DesignInterface::DEFAULT_AREA); + $this->_design = $objectManager->get('Magento\View\DesignInterface'); + $this->_design->setDesignTheme('vendor_test', \Magento\View\DesignInterface::DEFAULT_AREA); $this->_viewFileSystem = $objectManager->get('Magento\Core\Model\View\FileSystem'); $quickStylesPath = $this->_viewFileSystem->getFilename('Magento_DesignEditor::controls/quick_styles.xml'); $this->assertFileExists($quickStylesPath); diff --git a/dev/tests/integration/testsuite/Magento/DesignEditor/Model/Editor/Tools/Controls/ConfigurationTest.php b/dev/tests/integration/testsuite/Magento/DesignEditor/Model/Editor/Tools/Controls/ConfigurationTest.php index eebd82205d5..2a4ed51970f 100644 --- a/dev/tests/integration/testsuite/Magento/DesignEditor/Model/Editor/Tools/Controls/ConfigurationTest.php +++ b/dev/tests/integration/testsuite/Magento/DesignEditor/Model/Editor/Tools/Controls/ConfigurationTest.php @@ -35,7 +35,7 @@ class ConfigurationTest extends \PHPUnit_Framework_TestCase protected $_configFactory; /** - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_design; @@ -45,9 +45,9 @@ class ConfigurationTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_design = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( - 'Magento\Core\Model\View\DesignInterface' + 'Magento\View\DesignInterface' ); - $this->_design->setDesignTheme('vendor_test_child', \Magento\Core\Model\View\DesignInterface::DEFAULT_AREA); + $this->_design->setDesignTheme('vendor_test_child', \Magento\View\DesignInterface::DEFAULT_AREA); $this->_configFactory = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( 'Magento\DesignEditor\Model\Editor\Tools\Controls\Factory' ); @@ -63,7 +63,7 @@ class ConfigurationTest extends \PHPUnit_Framework_TestCase public function testLoadConfigurations($type, $controlName, $controlData) { $designTheme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface') + ->get('Magento\View\DesignInterface') ->getDesignTheme(); $configuration = $this->_configFactory->create($type, $designTheme); $this->assertEquals($controlData, $configuration->getControlData($controlName)); @@ -136,7 +136,7 @@ class ConfigurationTest extends \PHPUnit_Framework_TestCase { $type = \Magento\DesignEditor\Model\Editor\Tools\Controls\Factory::TYPE_QUICK_STYLES; $theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface') + ->get('Magento\View\DesignInterface') ->getDesignTheme(); $configuration = $this->_configFactory->create($type, $theme); $configuration->saveData($saveData); diff --git a/dev/tests/integration/testsuite/Magento/DesignEditor/Model/ObserverTest.php b/dev/tests/integration/testsuite/Magento/DesignEditor/Model/ObserverTest.php index d4fb05fe3b9..9702190a028 100644 --- a/dev/tests/integration/testsuite/Magento/DesignEditor/Model/ObserverTest.php +++ b/dev/tests/integration/testsuite/Magento/DesignEditor/Model/ObserverTest.php @@ -39,7 +39,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase */ public function testCleanJs($area, $designMode, $expectedAssets) { - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $headBlock \Magento\Page\Block\Html\Head */ $headBlock = $layout->createBlock('Magento\Page\Block\Html\Head', 'head'); $headBlock->setData('vde_design_mode', $designMode); @@ -75,12 +75,12 @@ class ObserverTest extends \PHPUnit_Framework_TestCase } - /** @var \Magento\Core\Model\Config\Scope $configScope */ - $configScope = $objectManager->get('Magento\Core\Model\Config\Scope'); + /** @var \Magento\Config\Scope $configScope */ + $configScope = $objectManager->get('Magento\Config\ScopeInterface'); $configScope->setCurrentScope($area); - /** @var $eventManager \Magento\Core\Model\Event\Manager */ - $eventManager = $objectManager->get('Magento\Core\Model\Event\Manager'); + /** @var $eventManager \Magento\Event\ManagerInterface */ + $eventManager = $objectManager->get('Magento\Event\ManagerInterface'); $eventManager->dispatch('controller_action_layout_generate_blocks_after', array('layout' => $layout)); $actualAssets = array_keys($pageAssets->getAll()); diff --git a/dev/tests/integration/testsuite/Magento/DesignEditor/Model/Theme/ChangeTest.php b/dev/tests/integration/testsuite/Magento/DesignEditor/Model/Theme/ChangeTest.php index 34d88616193..34390230f57 100644 --- a/dev/tests/integration/testsuite/Magento/DesignEditor/Model/Theme/ChangeTest.php +++ b/dev/tests/integration/testsuite/Magento/DesignEditor/Model/Theme/ChangeTest.php @@ -52,9 +52,10 @@ class ChangeTest extends \PHPUnit_Framework_TestCase */ protected function _getChangeValidData() { - /** @var $theme \Magento\Core\Model\Theme */ - /** @var $themeModel \Magento\Core\Model\Theme */ - $theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Core\Model\Theme'); + /** @var $theme \Magento\View\Design\ThemeInterface */ + /** @var $themeModel \Magento\View\Design\ThemeInterface */ + $theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->create('Magento\View\Design\ThemeInterface'); $themeModel = $theme->getCollection()->getFirstItem(); return array( diff --git a/dev/tests/integration/testsuite/Magento/DesignEditor/Model/Translate/InlineVdeTest.php b/dev/tests/integration/testsuite/Magento/DesignEditor/Model/Translate/InlineVdeTest.php index 3267cb2506f..87132cac920 100644 --- a/dev/tests/integration/testsuite/Magento/DesignEditor/Model/Translate/InlineVdeTest.php +++ b/dev/tests/integration/testsuite/Magento/DesignEditor/Model/Translate/InlineVdeTest.php @@ -35,7 +35,7 @@ class InlineVdeTest extends \PHPUnit_Framework_TestCase protected $_model; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; @@ -46,7 +46,7 @@ class InlineVdeTest extends \PHPUnit_Framework_TestCase public static function setUpBeforeClass() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setDesignTheme('magento_demo'); } @@ -55,7 +55,7 @@ class InlineVdeTest extends \PHPUnit_Framework_TestCase $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $this->_model = $objectManager->get('Magento\DesignEditor\Model\Translate\InlineVde'); - $this->_request = $objectManager->get('Magento\Core\Controller\Request\Http'); + $this->_request = $objectManager->get('Magento\App\RequestInterface'); $this->_request->setParam('translation_mode', 'text'); $this->_helperData = $objectManager->get('Magento\DesignEditor\Helper\Data'); @@ -65,7 +65,7 @@ class InlineVdeTest extends \PHPUnit_Framework_TestCase public function testObjectCreation() { $this->assertInstanceOf('Magento\DesignEditor\Model\Translate\InlineVde', $this->_model); - $this->assertInstanceOf('Magento\Core\Controller\Request\Http', $this->_request); + $this->assertInstanceOf('Magento\App\RequestInterface', $this->_request); $this->assertInstanceOf('Magento\DesignEditor\Helper\Data', $this->_helperData); } diff --git a/dev/tests/integration/testsuite/Magento/DesignEditor/Model/_files/design/themes.php b/dev/tests/integration/testsuite/Magento/DesignEditor/Model/_files/design/themes.php index 669599b5e5a..0a068650796 100644 --- a/dev/tests/integration/testsuite/Magento/DesignEditor/Model/_files/design/themes.php +++ b/dev/tests/integration/testsuite/Magento/DesignEditor/Model/_files/design/themes.php @@ -27,7 +27,7 @@ \Magento\TestFramework\Helper\Bootstrap::getInstance()->reinitialize(array( \Magento\Core\Model\App::PARAM_APP_DIRS => array( - \Magento\Core\Model\Dir::THEMES => dirname(__DIR__) . '/design' + \Magento\App\Dir::THEMES => dirname(__DIR__) . '/design' ) )); diff --git a/dev/tests/integration/testsuite/Magento/DesignEditor/_files/design_editor_active.php b/dev/tests/integration/testsuite/Magento/DesignEditor/_files/design_editor_active.php index bdc8bdc46bb..714aa8d020a 100644 --- a/dev/tests/integration/testsuite/Magento/DesignEditor/_files/design_editor_active.php +++ b/dev/tests/integration/testsuite/Magento/DesignEditor/_files/design_editor_active.php @@ -24,7 +24,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) */ -\Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Config\Scope') +\Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Config\ScopeInterface') ->setCurrentScope(\Magento\Core\Model\App\Area::AREA_ADMINHTML); $session = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\DesignEditor\Model\Session'); @@ -35,9 +35,9 @@ $auth->setAuthStorage($session); $auth->login(\Magento\TestFramework\Bootstrap::ADMIN_NAME, \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD); $session->activateDesignEditor(); -/** @var $theme \Magento\Core\Model\Theme */ +/** @var $theme \Magento\View\Design\ThemeInterface */ $theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\Theme'); + ->create('Magento\View\Design\ThemeInterface'); $theme->setData(array( 'theme_code' => 'blank', 'area' => 'frontend', diff --git a/dev/tests/integration/testsuite/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/LinksTest.php b/dev/tests/integration/testsuite/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/LinksTest.php index 148d95e80f4..a6c95a813c4 100644 --- a/dev/tests/integration/testsuite/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/LinksTest.php +++ b/dev/tests/integration/testsuite/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/LinksTest.php @@ -32,7 +32,7 @@ class LinksTest { public function testGetUploadButtonsHtml() { - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Downloadable\Block\Adminhtml\Catalog\Product\Edit\Tab\Downloadable\Links'); self::performUploadButtonTest($block); } @@ -49,7 +49,7 @@ class LinksTest ->create('Magento\Core\Model\Layout'); $layout->addBlock($block, 'links'); $expected = uniqid(); - $text = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $text = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text', '', array('data' => array('text' => $expected))); $block->unsetChild('upload_button'); $layout->addBlock($text, 'upload_button', 'links'); @@ -65,7 +65,7 @@ class LinksTest $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $objectManager->get('Magento\Core\Model\Registry') ->register('product', new \Magento\Object(array('type_id' => 'simple'))); - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Downloadable\Block\Adminhtml\Catalog\Product\Edit\Tab\Downloadable\Links'); $this->assertEmpty($block->getLinkData()); } @@ -90,7 +90,7 @@ class LinksTest 'id' => '1', 'links_title' => $linksTitle ))); - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Downloadable\Block\Adminhtml\Catalog\Product\Edit\Tab\Downloadable\Links'); $this->assertEquals($expectedResult, $block->getLinksTitle()); } diff --git a/dev/tests/integration/testsuite/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/SamplesTest.php b/dev/tests/integration/testsuite/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/SamplesTest.php index 707f51b27c0..d89c344509c 100644 --- a/dev/tests/integration/testsuite/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/SamplesTest.php +++ b/dev/tests/integration/testsuite/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/SamplesTest.php @@ -32,7 +32,7 @@ class SamplesTest { public function testGetUploadButtonsHtml() { - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Downloadable\Block\Adminhtml\Catalog\Product\Edit\Tab\Downloadable\Samples'); \Magento\Downloadable\Block\Adminhtml\Catalog\Product\Edit\Tab\Downloadable\LinksTest ::performUploadButtonTest($block); @@ -47,7 +47,7 @@ class SamplesTest $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $objectManager->get('Magento\Core\Model\Registry') ->register('current_product', new \Magento\Object(array('type_id' => 'simple'))); - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Downloadable\Block\Adminhtml\Catalog\Product\Edit\Tab\Downloadable\Samples'); $this->assertEmpty($block->getSampleData()); } @@ -72,7 +72,7 @@ class SamplesTest 'id' => '1', 'samples_title' => $samplesTitle ))); - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Downloadable\Block\Adminhtml\Catalog\Product\Edit\Tab\Downloadable\Samples'); $this->assertEquals($expectedResult, $block->getSamplesTitle()); } diff --git a/dev/tests/integration/testsuite/Magento/Downloadable/Controller/ProductTest.php b/dev/tests/integration/testsuite/Magento/Downloadable/Controller/ProductTest.php index d5262e0ea98..5df8495492e 100644 --- a/dev/tests/integration/testsuite/Magento/Downloadable/Controller/ProductTest.php +++ b/dev/tests/integration/testsuite/Magento/Downloadable/Controller/ProductTest.php @@ -40,7 +40,7 @@ class ProductTest extends \Magento\TestFramework\TestCase\AbstractController $this->dispatch('catalog/product/view/id/1'); $this->assertContains( 'catalog_product_view_type_downloadable', - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->getUpdate()->getHandles() ); $responseBody = $this->getResponse()->getBody(); diff --git a/dev/tests/integration/testsuite/Magento/Eav/Block/Adminhtml/Attribute/Edit/Main/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Eav/Block/Adminhtml/Attribute/Edit/Main/AbstractTest.php index 9889f3e50fb..f119bfe1110 100644 --- a/dev/tests/integration/testsuite/Magento/Eav/Block/Adminhtml/Attribute/Edit/Main/AbstractTest.php +++ b/dev/tests/integration/testsuite/Magento/Eav/Block/Adminhtml/Attribute/Edit/Main/AbstractTest.php @@ -41,7 +41,7 @@ class AbstractTest /** @var $objectManager \Magento\TestFramework\ObjectManager */ $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $objectManager->get('Magento\Core\Model\View\DesignInterface') + $objectManager->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML) ->setDefaultDesignTheme(); $entityType = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Eav\Model\Config') diff --git a/dev/tests/integration/testsuite/Magento/Filesystem/Adapter/LocalTest.php b/dev/tests/integration/testsuite/Magento/Filesystem/Adapter/LocalTest.php index 53639d4d62b..3b164197e42 100644 --- a/dev/tests/integration/testsuite/Magento/Filesystem/Adapter/LocalTest.php +++ b/dev/tests/integration/testsuite/Magento/Filesystem/Adapter/LocalTest.php @@ -47,8 +47,8 @@ class LocalTest extends \PHPUnit_Framework_TestCase protected static function _getTmpDir() { - return \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') - ->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DIRECTORY_SEPARATOR . 'Magento\Filesystem\Adapter\LocalTest'; + return \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') + ->getDir(\Magento\App\Dir::VAR_DIR) . DIRECTORY_SEPARATOR . 'Magento\Filesystem\Adapter\LocalTest'; } /** diff --git a/dev/tests/integration/testsuite/Magento/GiftMessage/Block/Message/InlineTest.php b/dev/tests/integration/testsuite/Magento/GiftMessage/Block/Message/InlineTest.php index cfed9e44ac8..1d6530c3fc8 100644 --- a/dev/tests/integration/testsuite/Magento/GiftMessage/Block/Message/InlineTest.php +++ b/dev/tests/integration/testsuite/Magento/GiftMessage/Block/Message/InlineTest.php @@ -36,7 +36,7 @@ class InlineTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\GiftMessage\Block\Message\Inline'); } diff --git a/dev/tests/integration/testsuite/Magento/GoogleShopping/Block/Adminhtml/Items/ProductTest.php b/dev/tests/integration/testsuite/Magento/GoogleShopping/Block/Adminhtml/Items/ProductTest.php index a8ed213ed6c..241a77401f6 100644 --- a/dev/tests/integration/testsuite/Magento/GoogleShopping/Block/Adminhtml/Items/ProductTest.php +++ b/dev/tests/integration/testsuite/Magento/GoogleShopping/Block/Adminhtml/Items/ProductTest.php @@ -36,14 +36,14 @@ class ProductTest extends \PHPUnit_Framework_TestCase { $this->markTestIncomplete('Magento_GoogleShopping is not implemented yet'); - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\GoogleShopping\Block\Adminhtml\Items\Product'); - $filter = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $filter = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text'); - $search = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $search = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Core\Block\Text'); - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); $layout->addBlock($block, 'product'); $layout->addBlock($filter, 'reset_filter_button', 'product'); $layout->addBlock($search, 'search_button', 'product'); diff --git a/dev/tests/integration/testsuite/Magento/Image/Adapter/InterfaceTest.php b/dev/tests/integration/testsuite/Magento/Image/Adapter/InterfaceTest.php index e4673bedb94..aab82d30da2 100644 --- a/dev/tests/integration/testsuite/Magento/Image/Adapter/InterfaceTest.php +++ b/dev/tests/integration/testsuite/Magento/Image/Adapter/InterfaceTest.php @@ -597,7 +597,7 @@ class InterfaceTest extends \PHPUnit_Framework_TestCase $adapter = $this->_getAdapter($adapterType); $adapter->createPngFromString( 'T', - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir')->getDir() + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir')->getDir() . '/lib/LinLibertineFont/LinLibertine_Re-4.4.1.ttf' ); $adapter->refreshImageDimensions(); diff --git a/dev/tests/integration/testsuite/Magento/ImportExport/Block/Adminhtml/Export/Edit/FormTest.php b/dev/tests/integration/testsuite/Magento/ImportExport/Block/Adminhtml/Export/Edit/FormTest.php index c631ffc58de..24a25cea3a1 100644 --- a/dev/tests/integration/testsuite/Magento/ImportExport/Block/Adminhtml/Export/Edit/FormTest.php +++ b/dev/tests/integration/testsuite/Magento/ImportExport/Block/Adminhtml/Export/Edit/FormTest.php @@ -62,7 +62,7 @@ class FormTest extends \PHPUnit_Framework_TestCase protected function setUp() { parent::setUp(); - $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\ImportExport\Block\Adminhtml\Export\Edit\Form'); } diff --git a/dev/tests/integration/testsuite/Magento/ImportExport/Block/Adminhtml/Export/FilterTest.php b/dev/tests/integration/testsuite/Magento/ImportExport/Block/Adminhtml/Export/FilterTest.php index ce0a46563fa..7cfd5bf603a 100644 --- a/dev/tests/integration/testsuite/Magento/ImportExport/Block/Adminhtml/Export/FilterTest.php +++ b/dev/tests/integration/testsuite/Magento/ImportExport/Block/Adminhtml/Export/FilterTest.php @@ -38,7 +38,7 @@ class FilterTest */ public function testGetDateFromToHtmlWithValue() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_ADMINHTML) ->setDefaultDesignTheme(); $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() diff --git a/dev/tests/integration/testsuite/Magento/ImportExport/Block/Adminhtml/Import/Edit/FormTest.php b/dev/tests/integration/testsuite/Magento/ImportExport/Block/Adminhtml/Import/Edit/FormTest.php index b00b3e46e68..1acc3780ecd 100644 --- a/dev/tests/integration/testsuite/Magento/ImportExport/Block/Adminhtml/Import/Edit/FormTest.php +++ b/dev/tests/integration/testsuite/Magento/ImportExport/Block/Adminhtml/Import/Edit/FormTest.php @@ -63,7 +63,7 @@ class FormTest extends \PHPUnit_Framework_TestCase */ public function testPrepareForm() { - $formBlock = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $formBlock = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\ImportExport\Block\Adminhtml\Import\Edit\Form'); $prepareForm = new \ReflectionMethod( 'Magento\ImportExport\Block\Adminhtml\Import\Edit\Form', diff --git a/dev/tests/integration/testsuite/Magento/ImportExport/Model/Import/Entity/ProductTest.php b/dev/tests/integration/testsuite/Magento/ImportExport/Model/Import/Entity/ProductTest.php index 66ebe2cb13c..6dab6350f52 100644 --- a/dev/tests/integration/testsuite/Magento/ImportExport/Model/Import/Entity/ProductTest.php +++ b/dev/tests/integration/testsuite/Magento/ImportExport/Model/Import/Entity/ProductTest.php @@ -500,7 +500,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase */ public static function mediaImportImageFixture() { - $dir = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') + $dir = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') ->getDir('media') . '/import'; mkdir($dir); copy(__DIR__ . '/../../../../../Magento/Catalog/_files/magento_image.jpg', "{$dir}/magento_image.jpg"); @@ -511,7 +511,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase */ public static function mediaImportImageFixtureRollback() { - $media = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') + $media = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') ->getDir('media'); \Magento\Io\File::rmdirRecursive("{$media}/import"); \Magento\Io\File::rmdirRecursive("{$media}/catalog"); diff --git a/dev/tests/integration/testsuite/Magento/Index/Model/Process/FileTest.php b/dev/tests/integration/testsuite/Magento/Index/Model/Process/FileTest.php index 29285323abb..9b6000059c4 100644 --- a/dev/tests/integration/testsuite/Magento/Index/Model/Process/FileTest.php +++ b/dev/tests/integration/testsuite/Magento/Index/Model/Process/FileTest.php @@ -61,9 +61,9 @@ class FileTest extends \PHPUnit_Framework_TestCase { $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $this->_model = $this->_objectManager->create('Magento\Index\Model\Process\File'); - /** @var $dir \Magento\Core\Model\Dir */ - $dir = $this->_objectManager->get('Magento\Core\Model\Dir'); - $this->_fileDirectory = $dir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DIRECTORY_SEPARATOR . 'locks'; + /** @var $dir \Magento\App\Dir */ + $dir = $this->_objectManager->get('Magento\App\Dir'); + $this->_fileDirectory = $dir->getDir(\Magento\App\Dir::VAR_DIR) . DIRECTORY_SEPARATOR . 'locks'; $fullFileName = $this->_fileDirectory . DIRECTORY_SEPARATOR . self::FILE_NAME; $this->_testFileHandler = fopen($fullFileName, 'w'); } diff --git a/dev/tests/integration/testsuite/Magento/Install/Controller/WizardTest.php b/dev/tests/integration/testsuite/Magento/Install/Controller/WizardTest.php index 36207215797..b700881041b 100644 --- a/dev/tests/integration/testsuite/Magento/Install/Controller/WizardTest.php +++ b/dev/tests/integration/testsuite/Magento/Install/Controller/WizardTest.php @@ -58,12 +58,12 @@ class WizardTest extends \Magento\TestFramework\TestCase\AbstractController { \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->configure(array( 'preferences' => array( - 'Magento\Core\Controller\Request\Http' => 'Magento\TestFramework\Request', - 'Magento\Core\Controller\Response\Http' => 'Magento\TestFramework\Response' + 'Magento\App\RequestInterface' => 'Magento\TestFramework\Request', + 'Magento\App\Response\Http' => 'Magento\TestFramework\Response' ) )); - /** @var $appState \Magento\Core\Model\App\State */ - $appState = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App\State'); + /** @var $appState \Magento\App\State */ + $appState = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\State'); $appState->setInstallDate(false); $this->dispatch('install/wizard'); $this->assertEquals(200, $this->getResponse()->getHttpResponseCode()); @@ -78,12 +78,12 @@ class WizardTest extends \Magento\TestFramework\TestCase\AbstractController public function testPreDispatchImpossibleToRenderPage($action) { $params = self::$_params; - $params[\Magento\Core\Model\App::PARAM_APP_DIRS][\Magento\Core\Model\Dir::STATIC_VIEW] = self::$_tmpDir; + $params[\Magento\Core\Model\App::PARAM_APP_DIRS][\Magento\App\Dir::STATIC_VIEW] = self::$_tmpDir; \Magento\TestFramework\Helper\Bootstrap::getInstance()->reinitialize($params); \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->configure(array( 'preferences' => array( - 'Magento\Core\Controller\Request\Http' => 'Magento\TestFramework\Request', - 'Magento\Core\Controller\Response\Http' => 'Magento\TestFramework\Response' + 'Magento\App\RequestInterface' => 'Magento\TestFramework\Request', + 'Magento\App\Response\Http' => 'Magento\TestFramework\Response' ) )); $this->dispatch("install/wizard/{$action}"); diff --git a/dev/tests/integration/testsuite/Magento/Install/IndexTest.php b/dev/tests/integration/testsuite/Magento/Install/IndexTest.php index e85945a81fe..f5f3eb492c7 100644 --- a/dev/tests/integration/testsuite/Magento/Install/IndexTest.php +++ b/dev/tests/integration/testsuite/Magento/Install/IndexTest.php @@ -37,8 +37,8 @@ class IndexTest extends \Magento\TestFramework\TestCase\AbstractController * because in integration testing environment the application is considered "installed" */ $this->assertFileExists( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') - ->getDir(\Magento\Core\Model\Dir::TMP) + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') + ->getDir(\Magento\App\Dir::TMP) ); } } diff --git a/dev/tests/integration/testsuite/Magento/Install/Model/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Install/Model/ConfigTest.php index ba5c041a5b8..c39ea4fc6e4 100644 --- a/dev/tests/integration/testsuite/Magento/Install/Model/ConfigTest.php +++ b/dev/tests/integration/testsuite/Magento/Install/Model/ConfigTest.php @@ -53,35 +53,35 @@ class ConfigTest extends \PHPUnit_Framework_TestCase } $cacheState->persist(); - /** @var \Magento\Core\Model\Dir $dirs */ + /** @var \Magento\App\Dir $dirs */ $dirs = $this->_objectManager->create( - 'Magento\Core\Model\Dir', array( + 'Magento\App\Dir', array( 'baseDir' => BP, 'dirs' => array( - \Magento\Core\Model\Dir::MODULES => __DIR__ . '/_files', - \Magento\Core\Model\Dir::CONFIG => __DIR__ . '/_files' + \Magento\App\Dir::MODULES => __DIR__ . '/_files', + \Magento\App\Dir::CONFIG => __DIR__ . '/_files' ) ) ); - /** @var \Magento\Core\Model\Module\Declaration\FileResolver $modulesDeclarations */ + /** @var \Magento\App\Module\Declaration\FileResolver $modulesDeclarations */ $modulesDeclarations = $this->_objectManager->create( - 'Magento\Core\Model\Module\Declaration\FileResolver', array( + 'Magento\App\Module\Declaration\FileResolver', array( 'applicationDirs' => $dirs, ) ); - /** @var \Magento\Core\Model\Module\Declaration\Reader\Filesystem $filesystemReader */ + /** @var \Magento\App\Module\Declaration\Reader\Filesystem $filesystemReader */ $filesystemReader = $this->_objectManager->create( - 'Magento\Core\Model\Module\Declaration\Reader\Filesystem', array( + 'Magento\App\Module\Declaration\Reader\Filesystem', array( 'fileResolver' => $modulesDeclarations, ) ); - /** @var \Magento\Core\Model\ModuleList $modulesList */ + /** @var \Magento\App\ModuleList $modulesList */ $modulesList = $this->_objectManager->create( - 'Magento\Core\Model\ModuleList', array( + 'Magento\App\ModuleList', array( 'reader' => $filesystemReader, ) ); diff --git a/dev/tests/integration/testsuite/Magento/Install/Model/Installer/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Install/Model/Installer/ConfigTest.php index 49541ba9d73..be363136958 100644 --- a/dev/tests/integration/testsuite/Magento/Install/Model/Installer/ConfigTest.php +++ b/dev/tests/integration/testsuite/Magento/Install/Model/Installer/ConfigTest.php @@ -32,8 +32,8 @@ class ConfigTest extends \PHPUnit_Framework_TestCase public static function setUpBeforeClass() { - self::$_tmpDir = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') - ->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DIRECTORY_SEPARATOR . "ConfigTest"; + self::$_tmpDir = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') + ->getDir(\Magento\App\Dir::VAR_DIR) . DIRECTORY_SEPARATOR . "ConfigTest"; mkdir(self::$_tmpDir); } @@ -48,7 +48,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase $expectedFile = self::$_tmpDir . '/local.xml'; $request = $this->getMock( - 'Magento\Core\Controller\Request\Http', + 'Magento\App\Request\Http', array('getDistroBaseUrl'), array(), '', @@ -57,10 +57,10 @@ class ConfigTest extends \PHPUnit_Framework_TestCase $request->expects($this->once())->method('getDistroBaseUrl')->will($this->returnValue('http://example.com/')); $expectedContents = "test; <![CDATA[d-d-d-d-d]]>; <![CDATA[http://example.com/]]>; {{unknown}}"; - $dirs = new \Magento\Core\Model\Dir( + $dirs = new \Magento\App\Dir( self::$_tmpDir, array(), - array(\Magento\Core\Model\Dir::CONFIG => self::$_tmpDir) + array(\Magento\App\Dir::CONFIG => self::$_tmpDir) ); $this->assertFileNotExists($expectedFile); diff --git a/dev/tests/integration/testsuite/Magento/Install/Model/InstallerTest.php b/dev/tests/integration/testsuite/Magento/Install/Model/InstallerTest.php index 5eaa00a677e..74fabf9d118 100644 --- a/dev/tests/integration/testsuite/Magento/Install/Model/InstallerTest.php +++ b/dev/tests/integration/testsuite/Magento/Install/Model/InstallerTest.php @@ -41,8 +41,8 @@ class InstallerTest extends \PHPUnit_Framework_TestCase public static function setUpBeforeClass() { - self::$_tmpDir = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') - ->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DIRECTORY_SEPARATOR . 'InstallerTest'; + self::$_tmpDir = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') + ->getDir(\Magento\App\Dir::VAR_DIR) . DIRECTORY_SEPARATOR . 'InstallerTest'; self::$_tmpConfigFile = self::$_tmpDir . DIRECTORY_SEPARATOR . 'local.xml'; mkdir(self::$_tmpDir); } @@ -64,9 +64,9 @@ class InstallerTest extends \PHPUnit_Framework_TestCase $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); if ($emulateConfig) { $installerConfig = new \Magento\Install\Model\Installer\Config( - $objectManager->get('Magento\Install\Model\InstallerProxy'), - $objectManager->get('Magento\Core\Controller\Request\Http'), - new \Magento\Core\Model\Dir(__DIR__, array(), array(\Magento\Core\Model\Dir::CONFIG => self::$_tmpDir)), + $objectManager->get('Magento\Install\Model\Installer'), + $objectManager->get('Magento\App\RequestInterface'), + new \Magento\App\Dir(__DIR__, array(), array(\Magento\App\Dir::CONFIG => self::$_tmpDir)), new \Magento\Filesystem(new \Magento\Filesystem\Adapter\Local()), $objectManager->get('Magento\Core\Model\StoreManager') ); diff --git a/dev/tests/integration/testsuite/Magento/Newsletter/Model/QueueTest.php b/dev/tests/integration/testsuite/Magento/Newsletter/Model/QueueTest.php index c0b48bc27e5..6ad448fdd32 100644 --- a/dev/tests/integration/testsuite/Magento/Newsletter/Model/QueueTest.php +++ b/dev/tests/integration/testsuite/Magento/Newsletter/Model/QueueTest.php @@ -41,7 +41,7 @@ class QueueTest extends \PHPUnit_Framework_TestCase $themes = array('frontend' => 'magento_blank'); /** @var $design \Magento\Core\Model\View\Design */ - $design = $objectManager->create('Magento\Core\Model\View\DesignInterface', array('themes' => $themes)); + $design = $objectManager->create('Magento\View\DesignInterface', array('themes' => $themes)); $objectManager->addSharedInstance($design, 'Magento\Core\Model\View\Design'); /** @var $appEmulation \Magento\Core\Model\App\Emulation */ $appEmulation = $objectManager->create('Magento\Core\Model\App\Emulation', array('viewDesign' => $design)); @@ -83,7 +83,7 @@ class QueueTest extends \PHPUnit_Framework_TestCase $objectManager->get('Magento\Core\Model\ConfigInterface'), $objectManager->get('Magento\Core\Model\Email\Template\FilterFactory'), $objectManager->get('Magento\Core\Model\StoreManagerInterface'), - $objectManager->get('Magento\Core\Model\Dir'), + $objectManager->get('Magento\App\Dir'), $objectManager->get('Magento\Core\Model\Email\Template\Config'), ) ); @@ -130,7 +130,7 @@ class QueueTest extends \PHPUnit_Framework_TestCase $objectManager->get('Magento\Core\Model\ConfigInterface'), $objectManager->get('Magento\Core\Model\Email\Template\FilterFactory'), $objectManager->get('Magento\Core\Model\StoreManagerInterface'), - $objectManager->get('Magento\Core\Model\Dir'), + $objectManager->get('Magento\App\Dir'), $objectManager->get('Magento\Core\Model\Email\Template\Config'), ) ); diff --git a/dev/tests/integration/testsuite/Magento/ObjectManager/Config/Reader/DomTest.php b/dev/tests/integration/testsuite/Magento/ObjectManager/Config/Reader/DomTest.php index add2a16ffd8..ee3ff8a2bee 100644 --- a/dev/tests/integration/testsuite/Magento/ObjectManager/Config/Reader/DomTest.php +++ b/dev/tests/integration/testsuite/Magento/ObjectManager/Config/Reader/DomTest.php @@ -74,7 +74,7 @@ class DomTest extends \PHPUnit_Framework_TestCase $this->_fileResolverMock->expects($this->once())->method('get')->will($this->returnValue($this->_fileList)); $this->_mapper = new \Magento\ObjectManager\Config\Mapper\Dom(); $this->_validationState = - new \Magento\Core\Model\Config\ValidationState(\Magento\Core\Model\App\State::MODE_DEFAULT); + new \Magento\Core\Model\Config\ValidationState(\Magento\App\State::MODE_DEFAULT); $this->_schemaLocator = new \Magento\ObjectManager\Config\SchemaLocator(); $this->_mergedConfig = new \DOMDocument(); diff --git a/dev/tests/integration/testsuite/Magento/ObjectManager/_files/config_merged.xml b/dev/tests/integration/testsuite/Magento/ObjectManager/_files/config_merged.xml index f7262d041b9..0377b424481 100644 --- a/dev/tests/integration/testsuite/Magento/ObjectManager/_files/config_merged.xml +++ b/dev/tests/integration/testsuite/Magento/ObjectManager/_files/config_merged.xml @@ -24,8 +24,8 @@ */ --> <config> - <preference for="Magento\Core\Model\Db\UpdaterInterface" type="Magento\Core\Model\Db\UpdaterOne" /> - <preference for="Magento\Core\Model\Db\UpdaterInterfaceTwo" type="Magento\Core\Model\Db\UpdaterTwo"/> + <preference for="Magento\App\UpdaterInterface" type="Magento\App\UpdaterOne" /> + <preference for="Magento\App\UpdaterInterfaceTwo" type="Magento\App\UpdaterTwo"/> <type name="Magento\Core\Model\Config\Loader\Local" shared="false"> <param name="customFile"> <value type="argument">Magento\Core\Model\App::PARAM_CUSTOM_LOCAL_CONFIG</value> diff --git a/dev/tests/integration/testsuite/Magento/ObjectManager/_files/config_one.xml b/dev/tests/integration/testsuite/Magento/ObjectManager/_files/config_one.xml index 399ba92553e..708a9c97c82 100644 --- a/dev/tests/integration/testsuite/Magento/ObjectManager/_files/config_one.xml +++ b/dev/tests/integration/testsuite/Magento/ObjectManager/_files/config_one.xml @@ -24,7 +24,7 @@ */ --> <config> - <preference for="Magento\Core\Model\Db\UpdaterInterface" type="Magento\Core\Model\Db\Updater" /> + <preference for="Magento\App\UpdaterInterface" type="Magento\App\Updater" /> <type name="Magento\Core\Model\Config\Loader\Local"> <param name="customFile"> <value type="argument">Magento\Core\Model\App::PARAM_CUSTOM_LOCAL_FILE</value> diff --git a/dev/tests/integration/testsuite/Magento/ObjectManager/_files/config_two.xml b/dev/tests/integration/testsuite/Magento/ObjectManager/_files/config_two.xml index 593b9ab4c50..8e794956d1c 100644 --- a/dev/tests/integration/testsuite/Magento/ObjectManager/_files/config_two.xml +++ b/dev/tests/integration/testsuite/Magento/ObjectManager/_files/config_two.xml @@ -24,8 +24,8 @@ */ --> <config> - <preference for="Magento\Core\Model\Db\UpdaterInterfaceTwo" type="Magento\Core\Model\Db\UpdaterTwo" /> - <preference for="Magento\Core\Model\Db\UpdaterInterface" type="Magento\Core\Model\Db\UpdaterOne" /> + <preference for="Magento\App\UpdaterInterfaceTwo" type="Magento\App\UpdaterTwo" /> + <preference for="Magento\App\UpdaterInterface" type="Magento\App\UpdaterOne" /> <type name="Magento\Core\Model\Config\Loader\Local" shared="false"> <param name="customFile"> <value type="argument">Magento\Core\Model\App::PARAM_CUSTOM_LOCAL_CONFIG</value> diff --git a/dev/tests/integration/testsuite/Magento/Page/Block/Html/BreadcrumbsTest.php b/dev/tests/integration/testsuite/Magento/Page/Block/Html/BreadcrumbsTest.php index 87ba9fc87cd..d23b1135797 100644 --- a/dev/tests/integration/testsuite/Magento/Page/Block/Html/BreadcrumbsTest.php +++ b/dev/tests/integration/testsuite/Magento/Page/Block/Html/BreadcrumbsTest.php @@ -36,7 +36,7 @@ class BreadcrumbsTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Page\Block\Html\Breadcrumbs'); } diff --git a/dev/tests/integration/testsuite/Magento/Page/Block/Html/FooterTest.php b/dev/tests/integration/testsuite/Magento/Page/Block/Html/FooterTest.php index 254d5eaa833..d382f849c85 100644 --- a/dev/tests/integration/testsuite/Magento/Page/Block/Html/FooterTest.php +++ b/dev/tests/integration/testsuite/Magento/Page/Block/Html/FooterTest.php @@ -37,13 +37,13 @@ class FooterTest extends \PHPUnit_Framework_TestCase protected function setUp() { $design = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface'); + ->get('Magento\View\DesignInterface'); $this->_theme = $design->setDefaultDesignTheme()->getDesignTheme(); } public function testGetCacheKeyInfo() { - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Page\Block\Html\Footer'); $storeId = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->get('Magento\Core\Model\StoreManagerInterface')->getStore()->getId(); diff --git a/dev/tests/integration/testsuite/Magento/Page/Block/Html/HeadTest.php b/dev/tests/integration/testsuite/Magento/Page/Block/Html/HeadTest.php index 3dfc61df393..18f69ad3c0b 100644 --- a/dev/tests/integration/testsuite/Magento/Page/Block/Html/HeadTest.php +++ b/dev/tests/integration/testsuite/Magento/Page/Block/Html/HeadTest.php @@ -36,9 +36,9 @@ class HeadTest extends \PHPUnit_Framework_TestCase protected function setUp() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setDesignTheme('magento_demo', 'frontend'); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Page\Block\Html\Head'); } diff --git a/dev/tests/integration/testsuite/Magento/Payment/Block/InfoTest.php b/dev/tests/integration/testsuite/Magento/Payment/Block/InfoTest.php index 2b2c08d2592..8a12488037b 100644 --- a/dev/tests/integration/testsuite/Magento/Payment/Block/InfoTest.php +++ b/dev/tests/integration/testsuite/Magento/Payment/Block/InfoTest.php @@ -36,7 +36,7 @@ class InfoTest extends \PHPUnit_Framework_TestCase public function testGetChildPdfAsArray() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); $block = $layout->createBlock('Magento\Payment\Block\Info', 'block'); /** @var $paymentInfoBank \Magento\Payment\Model\Info */ diff --git a/dev/tests/integration/testsuite/Magento/Paypal/Block/Express/ReviewTest.php b/dev/tests/integration/testsuite/Magento/Paypal/Block/Express/ReviewTest.php index 6f7ea766bf2..581b23766fc 100644 --- a/dev/tests/integration/testsuite/Magento/Paypal/Block/Express/ReviewTest.php +++ b/dev/tests/integration/testsuite/Magento/Paypal/Block/Express/ReviewTest.php @@ -34,7 +34,7 @@ class ReviewTest extends \PHPUnit_Framework_TestCase { public function testRenderAddress() { - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Paypal\Block\Express\Review'); $addressData = include(__DIR__ . '/../../../Sales/_files/address_data.php'); $address = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() diff --git a/dev/tests/integration/testsuite/Magento/Paypal/Model/VoidTest.php b/dev/tests/integration/testsuite/Magento/Paypal/Model/VoidTest.php index ffa05306b0a..bea4f722f16 100644 --- a/dev/tests/integration/testsuite/Magento/Paypal/Model/VoidTest.php +++ b/dev/tests/integration/testsuite/Magento/Paypal/Model/VoidTest.php @@ -36,8 +36,8 @@ class VoidTest extends \PHPUnit_Framework_TestCase public function testPayflowProVoid() { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $eventManager = $objectManager->get('Magento\Core\Model\Event\Manager'); - $moduleList = $objectManager->get('Magento\Core\Model\ModuleListInterface'); + $eventManager = $objectManager->get('Magento\Event\ManagerInterface'); + $moduleList = $objectManager->get('Magento\App\ModuleListInterface'); $paymentData = $objectManager->get('Magento\Payment\Helper\Data'); $coreStoreConfig = $objectManager->get('Magento\Core\Model\Store\Config'); $logger = $objectManager->get('Magento\Core\Model\Logger'); diff --git a/dev/tests/integration/testsuite/Magento/ProductAlert/Block/Email/StockTest.php b/dev/tests/integration/testsuite/Magento/ProductAlert/Block/Email/StockTest.php index 9f390473d35..c437f98bb76 100644 --- a/dev/tests/integration/testsuite/Magento/ProductAlert/Block/Email/StockTest.php +++ b/dev/tests/integration/testsuite/Magento/ProductAlert/Block/Email/StockTest.php @@ -36,7 +36,7 @@ class StockTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\ProductAlert\Block\Email\Stock'); } diff --git a/dev/tests/integration/testsuite/Magento/Profiler/Driver/Standard/Output/FirebugTest.php b/dev/tests/integration/testsuite/Magento/Profiler/Driver/Standard/Output/FirebugTest.php index d02ddfa225b..e010066c978 100644 --- a/dev/tests/integration/testsuite/Magento/Profiler/Driver/Standard/Output/FirebugTest.php +++ b/dev/tests/integration/testsuite/Magento/Profiler/Driver/Standard/Output/FirebugTest.php @@ -38,19 +38,19 @@ class FirebugTest extends \PHPUnit_Framework_TestCase protected $_response; /** - * @var \Zend_Controller_Request_Http|PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\RequestInterface|PHPUnit_Framework_MockObject_MockObject */ protected $_request; protected function setUp() { - $this->_response = $this->getMock('Zend_Controller_Response_Http', array('canSendHeaders', 'sendHeaders')); + $this->_response = $this->getMock('\Magento\App\Response\Http', array('canSendHeaders', 'sendHeaders')); $this->_response ->expects($this->any()) ->method('canSendHeaders') ->will($this->returnValue(true)); - $this->_request = $this->getMock('Zend_Controller_Request_Http', array('getHeader')); + $this->_request = $this->getMock('\Magento\App\Request\Http', array('getHeader')); $this->_request ->expects($this->any()) ->method('getHeader') diff --git a/dev/tests/integration/testsuite/Magento/Rss/Block/Order/StatusTest.php b/dev/tests/integration/testsuite/Magento/Rss/Block/Order/StatusTest.php index c30615624c0..944dbb6057c 100644 --- a/dev/tests/integration/testsuite/Magento/Rss/Block/Order/StatusTest.php +++ b/dev/tests/integration/testsuite/Magento/Rss/Block/Order/StatusTest.php @@ -31,7 +31,7 @@ class StatusTest extends \PHPUnit_Framework_TestCase { public function testToHtml() { - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Rss\Block\Order\Status'); $this->assertEmpty($block->toHtml()); diff --git a/dev/tests/integration/testsuite/Magento/Rss/Controller/CatalogTest.php b/dev/tests/integration/testsuite/Magento/Rss/Controller/CatalogTest.php index 15613b94925..4440c58d107 100644 --- a/dev/tests/integration/testsuite/Magento/Rss/Controller/CatalogTest.php +++ b/dev/tests/integration/testsuite/Magento/Rss/Controller/CatalogTest.php @@ -160,7 +160,7 @@ class CatalogTest extends \Magento\TestFramework\TestCase\AbstractController */ protected function _loginAdmin() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setArea('adminhtml') ->setDefaultDesignTheme(); $this->getRequest()->setServer(array( diff --git a/dev/tests/integration/testsuite/Magento/Sales/Block/Order/CommentsTest.php b/dev/tests/integration/testsuite/Magento/Sales/Block/Order/CommentsTest.php index b2d999b55da..0f3d33bffcb 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Block/Order/CommentsTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Block/Order/CommentsTest.php @@ -36,7 +36,7 @@ class CommentsTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Sales\Block\Order\Comments'); } diff --git a/dev/tests/integration/testsuite/Magento/Sales/Block/Order/Creditmemo/ItemsTest.php b/dev/tests/integration/testsuite/Magento/Sales/Block/Order/Creditmemo/ItemsTest.php index 9c0fc30b06a..dd082c4b87e 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Block/Order/Creditmemo/ItemsTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Block/Order/Creditmemo/ItemsTest.php @@ -30,7 +30,7 @@ namespace Magento\Sales\Block\Order\Creditmemo; class ItemsTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -46,7 +46,8 @@ class ItemsTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get('Magento\View\LayoutInterface'); $this->_block = $this->_layout->createBlock('Magento\Sales\Block\Order\Creditmemo\Items', 'block'); $this->_creditmemo = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Sales\Model\Order\Creditmemo'); diff --git a/dev/tests/integration/testsuite/Magento/Sales/Block/Order/Invoice/ItemsTest.php b/dev/tests/integration/testsuite/Magento/Sales/Block/Order/Invoice/ItemsTest.php index a83a705bc4e..54ddf9ea9c5 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Block/Order/Invoice/ItemsTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Block/Order/Invoice/ItemsTest.php @@ -30,7 +30,7 @@ namespace Magento\Sales\Block\Order\Invoice; class ItemsTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -46,7 +46,8 @@ class ItemsTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get('Magento\View\LayoutInterface'); $this->_block = $this->_layout->createBlock('Magento\Sales\Block\Order\Invoice\Items', 'block'); $this->_invoice = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Sales\Model\Order\Invoice'); diff --git a/dev/tests/integration/testsuite/Magento/Sales/Block/Order/PrintOrder/CreditmemoTest.php b/dev/tests/integration/testsuite/Magento/Sales/Block/Order/PrintOrder/CreditmemoTest.php index 72538a5ee2d..4111f8ba407 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Block/Order/PrintOrder/CreditmemoTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Block/Order/PrintOrder/CreditmemoTest.php @@ -44,7 +44,7 @@ class CreditmemoTest extends \PHPUnit_Framework_TestCase $payment->setMethod('checkmo'); $order->setPayment($payment); - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); $block = $layout->createBlock('Magento\Sales\Block\Order\PrintOrder\Creditmemo', 'block'); $childBlock = $layout->addBlock('Magento\Core\Block\Text', 'creditmemo_totals', 'block'); diff --git a/dev/tests/integration/testsuite/Magento/Sales/Block/Order/PrintOrder/InvoiceTest.php b/dev/tests/integration/testsuite/Magento/Sales/Block/Order/PrintOrder/InvoiceTest.php index e5d0909364f..1f437b4029f 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Block/Order/PrintOrder/InvoiceTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Block/Order/PrintOrder/InvoiceTest.php @@ -44,7 +44,7 @@ class InvoiceTest extends \PHPUnit_Framework_TestCase $payment->setMethod('checkmo'); $order->setPayment($payment); - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); $block = $layout->createBlock('Magento\Sales\Block\Order\PrintOrder\Invoice', 'block'); $childBlock = $layout->addBlock('Magento\Core\Block\Text', 'invoice_totals', 'block'); diff --git a/dev/tests/integration/testsuite/Magento/Sales/Block/Order/Shipment/ItemsTest.php b/dev/tests/integration/testsuite/Magento/Sales/Block/Order/Shipment/ItemsTest.php index c46c13199db..7bc682f4bee 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Block/Order/Shipment/ItemsTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Block/Order/Shipment/ItemsTest.php @@ -31,7 +31,7 @@ class ItemsTest extends \PHPUnit_Framework_TestCase { public function testGetCommentsHtml() { - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); $block = $layout->createBlock('Magento\Sales\Block\Order\Shipment\Items', 'block'); $childBlock = $layout->addBlock('Magento\Core\Block\Text', 'shipment_comments', 'block'); $shipment = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() diff --git a/dev/tests/integration/testsuite/Magento/Sales/Block/Order/TotalsTest.php b/dev/tests/integration/testsuite/Magento/Sales/Block/Order/TotalsTest.php index 06a785ed454..ccce946491a 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Block/Order/TotalsTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Block/Order/TotalsTest.php @@ -32,7 +32,7 @@ class TotalsTest extends \PHPUnit_Framework_TestCase public function testToHtmlChildrenInitialized() { /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); $block = $layout->createBlock('Magento\Sales\Block\Order\Totals', 'block'); $block->setOrder(\Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Sales\Model\Order')) diff --git a/dev/tests/integration/testsuite/Magento/Sales/Block/Recurring/Profile/ViewTest.php b/dev/tests/integration/testsuite/Magento/Sales/Block/Recurring/Profile/ViewTest.php index 23ba0ead0fa..332b7a3f68b 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Block/Recurring/Profile/ViewTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Block/Recurring/Profile/ViewTest.php @@ -35,7 +35,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase protected $_block; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -52,7 +52,8 @@ class ViewTest extends \PHPUnit_Framework_TestCase $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $objectManager->get('Magento\Core\Model\Registry')->register('current_recurring_profile', $this->_profile); - $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get('Magento\View\LayoutInterface'); $this->_block = $this->_layout->createBlock('Magento\Sales\Block\Recurring\Profile\View', 'block'); } diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/LayoutTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/LayoutTest.php index 63f77a3b378..665e29622fd 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/LayoutTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/LayoutTest.php @@ -48,9 +48,9 @@ class LayoutTest extends \PHPUnit_Framework_TestCase $invoker = new \Magento\TestFramework\Utility\AggregateInvoker($this); $invoker( /** - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme */ - function (\Magento\Core\Model\Theme $theme) { + function (\Magento\View\Design\ThemeInterface $theme) { $xml = $this->_composeXml($theme); /** @@ -67,7 +67,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase } } - /** @var \Magento\Core\Model\Layout\Element $node */ + /** @var \Magento\View\Layout\Element $node */ $errors = array(); foreach ($handles as $node) { $this->_collectHierarchyErrors($node, $xml, $errors); @@ -86,14 +86,14 @@ class LayoutTest extends \PHPUnit_Framework_TestCase /** * Composes full layout xml for designated parameters * - * @param \Magento\Core\Model\Theme $theme - * @return \Magento\Core\Model\Layout\Element + * @param \Magento\View\Design\ThemeInterface $theme + * @return \Magento\View\Layout\Element */ - protected function _composeXml(\Magento\Core\Model\Theme $theme) + protected function _composeXml(\Magento\View\Design\ThemeInterface $theme) { - /** @var \Magento\Core\Model\Layout\Merge $layoutUpdate */ + /** @var \Magento\View\Layout\ProcessorInterface $layoutUpdate */ $layoutUpdate = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\Layout\Merge', array('theme' => $theme)); + ->create('Magento\View\Layout\ProcessorInterface', array('theme' => $theme)); return $layoutUpdate->getFileLayoutUpdatesXml(); } @@ -101,7 +101,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase * Validate node's declared position in hierarchy and add errors to the specified array if found * * @param \SimpleXMLElement $node - * @param \Magento\Core\Model\Layout\Element $xml + * @param \Magento\View\Layout\Element $xml * @param array &$errors */ protected function _collectHierarchyErrors($node, $xml, &$errors) @@ -141,8 +141,8 @@ class LayoutTest extends \PHPUnit_Framework_TestCase { $result = array(); $themeCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\Theme')->getCollection(); - /** @var $theme \Magento\Core\Model\Theme */ + ->create('Magento\View\Design\ThemeInterface')->getCollection(); + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($themeCollection as $theme) { $result[] = array($theme); } @@ -154,9 +154,9 @@ class LayoutTest extends \PHPUnit_Framework_TestCase $invoker = new \Magento\TestFramework\Utility\AggregateInvoker($this); $invoker( /** - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme */ - function (\Magento\Core\Model\Theme $theme) { + function (\Magento\View\Design\ThemeInterface $theme) { $xml = $this->_composeXml($theme); $xpath = '/layouts/*[' @@ -164,7 +164,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase . ' or @type="' . \Magento\Core\Model\Layout\Merge::TYPE_FRAGMENT . '"]'; $handles = $xml->xpath($xpath) ?: array(); - /** @var \Magento\Core\Model\Layout\Element $node */ + /** @var \Magento\View\Layout\Element $node */ $errors = array(); foreach ($handles as $node) { if (!$node->xpath('@label')) { @@ -220,7 +220,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase $themeCollection->addDefaultPattern('*'); /** @var $themeLayouts \Magento\Core\Model\Layout\File[] */ $themeLayouts = array(); - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($themeCollection as $theme) { $themeLayouts = array_merge($themeLayouts, $themeUpdates->getFiles($theme)); $themeLayouts = array_merge($themeLayouts, $themeUpdatesOverride->getFiles($theme)); @@ -240,7 +240,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase * Check, that for an overriding file ($themeFile) in a theme ($theme), there is a corresponding base file * * @param \Magento\Core\Model\Layout\File $themeFile - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme */ function ($themeFile, $theme) { $baseFiles = self::_getCachedFiles( @@ -266,7 +266,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase * there is a corresponding file in that ancestor theme * * @param \Magento\Core\Model\Layout\File $themeFile - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme */ function ($themeFile, $theme) { // Find an ancestor theme, where a file is to be overridden @@ -304,10 +304,10 @@ class LayoutTest extends \PHPUnit_Framework_TestCase * * @param string $cacheKey * @param string $sourceClass - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return \Magento\Core\Model\Layout\File[] */ - protected static function _getCachedFiles($cacheKey, $sourceClass, \Magento\Core\Model\Theme $theme) + protected static function _getCachedFiles($cacheKey, $sourceClass, \Magento\View\Design\ThemeInterface $theme) { if (!isset(self::$_cachedFiles[$cacheKey])) { /* @var $fileList \Magento\Core\Model\Layout\File[] */ @@ -358,7 +358,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase $themeCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\Core\Model\Theme\Collection'); $themeCollection->addDefaultPattern('*'); - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($themeCollection as $theme) { foreach ($filesRetriever->getFiles($theme) as $file) { $result[] = array($file, $theme); diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php index b768e71a317..704f30c6731 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php @@ -45,7 +45,7 @@ class AclConfigFilesTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_schemeFile = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') + $this->_schemeFile = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') ->getDir('lib') . str_replace('/', DIRECTORY_SEPARATOR, '/Magento/Acl/etc/acl.xsd'); } @@ -71,7 +71,7 @@ class AclConfigFilesTest extends \PHPUnit_Framework_TestCase public function aclConfigFileDataProvider() { $fileList = glob( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') ->getDir('app') . '/*/*/*/etc/adminhtml/acl.xml' ); $dataProviderResult = array(); diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/BlockInstantiationTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/BlockInstantiationTest.php index 97b53df03c8..47542270411 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/BlockInstantiationTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/BlockInstantiationTest.php @@ -48,7 +48,7 @@ class BlockInstantiationTest extends \Magento\TestFramework\TestCase\AbstractInt $this->assertNotEmpty($module); $this->assertTrue(class_exists($class), "Block class: {$class}"); \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Config\Scope') + ->get('Magento\Config\ScopeInterface') ->setCurrentScope($area); /** @var \Magento\Core\Model\App $app */ diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php index 567c87d2f33..93120b72be9 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php @@ -46,12 +46,12 @@ class DiConfigFilesTest extends \PHPUnit_Framework_TestCase protected function _prepareFiles() { //init primary configs - /** @var $dir \Magento\Core\Model\Dir */ - $dir = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir'); + /** @var $dir \Magento\App\Dir */ + $dir = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir'); - $configPath = $dir->getDir(\Magento\Core\Model\Dir::APP) . DS . 'etc' . DS . '*' . DS; + $configPath = $dir->getDir(\Magento\App\Dir::APP) . DS . 'etc' . DS . '*' . DS; self::$_primaryFiles = glob($configPath . DS. 'di.xml'); - array_unshift(self::$_primaryFiles, $dir->getDir(\Magento\Core\Model\Dir::APP) . DS . 'etc' . DS . 'di.xml'); + array_unshift(self::$_primaryFiles, $dir->getDir(\Magento\App\Dir::APP) . DS . 'etc' . DS . 'di.xml'); //init module global configs /** @var $modulesReader \Magento\Core\Model\Config\Modules\Reader */ diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/EventConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/EventConfigFilesTest.php index 9c228af2c76..59ae279702d 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/EventConfigFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/EventConfigFilesTest.php @@ -33,7 +33,7 @@ class EventConfigFilesTest extends \PHPUnit_Framework_TestCase protected function setUp() { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $this->_schemaFile = $objectManager->get('Magento\Core\Model\Event\Config\SchemaLocator')->getSchema(); + $this->_schemaFile = $objectManager->get('Magento\Event\Config\SchemaLocator')->getSchema(); } /** diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/LayoutFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/LayoutFilesTest.php index 1e717a3b18f..42cd9dcbfb8 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/LayoutFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/LayoutFilesTest.php @@ -53,7 +53,7 @@ class LayoutFilesTest extends \PHPUnit_Framework_TestCase { $layout = simplexml_load_file( $layout, - 'Magento\Core\Model\Layout\Element' + 'Magento\View\Layout\Element' ); foreach ($layout->xpath('//*[@xsi:type]') as $argument) { $type = (string)$argument->attributes('xsi', true)->type; diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ServiceCallsConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ServiceCallsConfigFilesTest.php index 1731130687e..d15a5ea8e6f 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ServiceCallsConfigFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ServiceCallsConfigFilesTest.php @@ -62,7 +62,7 @@ class ServiceCallsConfigFilesTest extends \PHPUnit_Framework_TestCase public function getServiceCallsConfigFiles() { return glob( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir')->getDir('app') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir')->getDir('app') . '/*/*/*/etc/service_calls.xml' ); } diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/SystemConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/SystemConfigFilesTest.php index 43c204bc450..9b357baf9cc 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/SystemConfigFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/SystemConfigFilesTest.php @@ -38,9 +38,9 @@ class SystemConfigFilesTest extends \PHPUnit_Framework_TestCase $cacheState = $objectManager->get('Magento\Core\Model\Cache\StateInterface'); $cacheState->setEnabled(\Magento\Core\Model\Cache\Type\Config::TYPE_IDENTIFIER, false); - /** @var $dirs \Magento\Core\Model\Dir */ - $dirs = $objectManager->get('Magento\Core\Model\Dir'); - $modulesDir = $dirs->getDir(\Magento\Core\Model\Dir::MODULES); + /** @var $dirs \Magento\App\Dir */ + $dirs = $objectManager->get('Magento\App\Dir'); + $modulesDir = $dirs->getDir(\Magento\App\Dir::MODULES); $fileList = glob($modulesDir . '/*/*/etc/adminhtml/system.xml'); diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/TemplateFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/TemplateFilesTest.php index deee3cbb341..dbdd2f44aa5 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/TemplateFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/TemplateFilesTest.php @@ -43,13 +43,13 @@ class TemplateFilesTest extends \Magento\TestFramework\TestCase\AbstractIntegrit * @param string $area */ function ($module, $template, $class, $area) { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setDefaultDesignTheme(); // intentionally to make sure the module files will be requested $params = array( 'area' => $area, 'themeModel' => \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\Theme'), + ->create('Magento\View\Design\ThemeInterface'), 'module' => $module ); $file = \Magento\TestFramework\Helper\Bootstrap::getObjectmanager() @@ -98,7 +98,7 @@ class TemplateFilesTest extends \Magento\TestFramework\TestCase\AbstractIntegrit \Magento\Core\Model\App\Area::PART_CONFIG ); \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\Config\Scope') + ->get('Magento\Config\ScopeInterface') ->setCurrentScope($area); $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create($blockClass); diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewConfigFilesTest.php index 8a903d8b661..845e1bc274c 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewConfigFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewConfigFilesTest.php @@ -37,7 +37,7 @@ class ViewConfigFilesTest extends \PHPUnit_Framework_TestCase { $domConfig = new \Magento\Config\Dom(file_get_contents($file)); $result = $domConfig->validate( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir')->getDir('lib') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir')->getDir('lib') . '/Magento/Config/etc/view.xsd', $errors ); diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewFilesTest.php index 12bcd790fb8..fed053e38e4 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewFilesTest.php @@ -39,7 +39,7 @@ class ViewFilesTest extends \Magento\TestFramework\TestCase\AbstractIntegrity */ function ($application, $file) { \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface') + ->get('Magento\View\DesignInterface') ->setArea($application) ->setDefaultDesignTheme(); $result = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() @@ -142,7 +142,7 @@ class ViewFilesTest extends \Magento\TestFramework\TestCase\AbstractIntegrity */ function ($application, $file) { \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface') + ->get('Magento\View\DesignInterface') ->setArea($application) ->setDefaultDesignTheme(); $filesystem = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/TemplateFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/TemplateFilesTest.php index 828c5a99fc6..52ea7983a68 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/TemplateFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/TemplateFilesTest.php @@ -72,9 +72,9 @@ class TemplateFilesTest extends \Magento\TestFramework\TestCase\AbstractIntegrit $themes = $this->_getDesignThemes(); foreach ($themes as $theme) { - /** @var \Magento\Core\Model\Layout\Merge $layoutUpdate */ + /** @var \Magento\View\Layout\ProcessorInterface $layoutUpdate */ $layoutUpdate = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\Layout\Merge', array('theme' => $theme)); + ->create('Magento\View\Layout\ProcessorInterface', array('theme' => $theme)); $layoutTemplates = $this->_getLayoutTemplates($layoutUpdate->getFileLayoutUpdatesXml()); foreach ($layoutTemplates as $templateData) { $templates[] = array_merge(array($theme->getArea(), $theme->getId()), $templateData); diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/ViewFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/ViewFilesTest.php index 34bc16aa894..c5557a9e859 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/ViewFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/ViewFilesTest.php @@ -134,14 +134,14 @@ class ViewFilesTest extends \Magento\TestFramework\TestCase\AbstractIntegrity // Find files, declared in views $files = array(); - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($themes as $theme) { $this->_collectGetViewUrlInvokes($theme, $files); } // Populate data provider in correspondence of themes to view files $result = array(); - /** @var $theme \Magento\Core\Model\Theme */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($themes as $theme) { if (!isset($files[$theme->getId()])) { continue; @@ -156,7 +156,7 @@ class ViewFilesTest extends \Magento\TestFramework\TestCase\AbstractIntegrity /** * Collect getViewUrl() from theme templates * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @param array &$files */ protected function _collectGetViewUrlInvokes($theme, &$files) @@ -177,9 +177,9 @@ class ViewFilesTest extends \Magento\TestFramework\TestCase\AbstractIntegrity } // Collect "addCss" and "addJs" from theme layout - /** @var \Magento\Core\Model\Layout\Merge $layoutUpdate */ + /** @var \Magento\View\Layout\ProcessorInterface $layoutUpdate */ $layoutUpdate = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\Layout\Merge', array('theme' => $theme)); + ->create('Magento\View\Layout\ProcessorInterface', array('theme' => $theme)); $fileLayoutUpdates = $layoutUpdate->getFileLayoutUpdatesXml(); $elements = $fileLayoutUpdates->xpath( '//block[@class="Magento\Page\Block\Html\Head\Css" or @class="Magento\Page\Block\Html\Head\Script"]' @@ -251,7 +251,7 @@ class ViewFilesTest extends \Magento\TestFramework\TestCase\AbstractIntegrity { $this->markTestIncomplete('Should be fixed when static when we have static folder jslib implemented'); $this->assertFileExists( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir')->getDir('jslib') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir')->getDir('jslib') . DIRECTORY_SEPARATOR . $file ); } diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php index a589589b418..9b0a355b60d 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php @@ -42,7 +42,7 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase } $this->_validateConfigFile( $file, - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir')->getDir('lib') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir')->getDir('lib') . '/Magento/Config/etc/view.xsd' ); } @@ -54,7 +54,7 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase { $result = array(); $files = glob( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir')->getDir('design') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir')->getDir('design') . '/*/*/view.xml' ); foreach ($files as $file) { @@ -79,7 +79,7 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase { $result = array(); $files = glob( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir')->getDir('design') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir')->getDir('design') . '/*/*', GLOB_ONLYDIR ); foreach ($files as $themeDir) { @@ -96,7 +96,7 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase { $this->_validateConfigFile( $file, - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir')->getDir('lib') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir')->getDir('lib') . '/Magento/Config/etc/theme.xsd' ); } @@ -122,7 +122,7 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase { $result = array(); $files = glob( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir')->getDir('design') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir')->getDir('design') . '/*/*/theme.xml' ); foreach ($files as $file) { diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/ViewFileReferenceTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/ViewFileReferenceTest.php index f5acb3093e9..3a9fbc811f9 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/ViewFileReferenceTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/ViewFileReferenceTest.php @@ -86,10 +86,10 @@ class ViewFileReferenceTest extends \PHPUnit_Framework_TestCase /** * Return array of locales, supported by the theme * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return array */ - static protected function _getThemeLocales(\Magento\Core\Model\Theme $theme) + static protected function _getThemeLocales(\Magento\View\Design\ThemeInterface $theme) { $result = array(); $patternDir = self::_getLocalePatternDir($theme); @@ -106,11 +106,11 @@ class ViewFileReferenceTest extends \PHPUnit_Framework_TestCase /** * Return pattern for theme locale directories, where <locale_placeholder> is placed to mark a locale's location. * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @return string * @throws \Exception */ - static protected function _getLocalePatternDir(\Magento\Core\Model\Theme $theme) + static protected function _getLocalePatternDir(\Magento\View\Design\ThemeInterface $theme) { $localePlaceholder = '<locale_placeholder>'; $params = array( @@ -166,11 +166,11 @@ class ViewFileReferenceTest extends \PHPUnit_Framework_TestCase /** * Resolves file to find its fallback'ed paths * - * @param \Magento\Core\Model\Theme $theme + * @param \Magento\View\Design\ThemeInterface $theme * @param string $file * @return array */ - protected function _getFileResolutions(\Magento\Core\Model\Theme $theme, $file) + protected function _getFileResolutions(\Magento\View\Design\ThemeInterface $theme, $file) { $found = array(); $fileResolved = self::$_fallback->getFile($theme->getArea(), $theme, $file); diff --git a/dev/tests/integration/testsuite/Magento/Test/Tools/Layout/Reference/ProcessorTest.php b/dev/tests/integration/testsuite/Magento/Test/Tools/Layout/Reference/ProcessorTest.php index 2c671345225..09d54a26f53 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Tools/Layout/Reference/ProcessorTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Tools/Layout/Reference/ProcessorTest.php @@ -61,8 +61,8 @@ class ProcessorTest extends \PHPUnit_Framework_TestCase } $this->_testDir = realpath(__DIR__ . DS . '_files') . DS; - $dir = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir'); - $this->_varDir = $dir->getDir(\Magento\Core\Model\Dir::VAR_DIR) . DS . 'references' . DS; + $dir = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir'); + $this->_varDir = $dir->getDir(\Magento\App\Dir::VAR_DIR) . DS . 'references' . DS; mkdir($this->_varDir, 0777, true); $this->_formatter = new Formatter(); diff --git a/dev/tests/integration/testsuite/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Tab/GeneralTest.php b/dev/tests/integration/testsuite/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Tab/GeneralTest.php index aff0f0b98e4..f399290a707 100644 --- a/dev/tests/integration/testsuite/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Tab/GeneralTest.php +++ b/dev/tests/integration/testsuite/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Tab/GeneralTest.php @@ -32,10 +32,10 @@ namespace Magento\Theme\Block\Adminhtml\System\Design\Theme\Edit\Tab; */ class GeneralTest extends \PHPUnit_Framework_TestCase { - /** @var \Magento\Core\Model\Layout */ + /** @var \Magento\View\LayoutInterface */ protected $_layout; - /** @var \Magento\Core\Model\Theme */ + /** @var \Magento\View\Design\ThemeInterface */ protected $_theme; /** @var \Magento\Theme\Block\Adminhtml\System\Design\Theme\Edit\Tab_General */ @@ -44,9 +44,10 @@ class GeneralTest extends \PHPUnit_Framework_TestCase protected function setUp() { parent::setUp(); - $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get('Magento\View\LayoutInterface'); $this->_theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Model\Theme'); + ->create('Magento\View\Design\ThemeInterface'); $this->_theme->setType(\Magento\Core\Model\Theme::TYPE_VIRTUAL); $this->_block = $this->_layout ->createBlock('Magento\Theme\Block\Adminhtml\System\Design\Theme\Edit\Tab\General'); diff --git a/dev/tests/integration/testsuite/Magento/Theme/Controller/Adminhtml/System/Design/ThemeControllerTest.php b/dev/tests/integration/testsuite/Magento/Theme/Controller/Adminhtml/System/Design/ThemeControllerTest.php index aadda3aa669..222f85a44b3 100644 --- a/dev/tests/integration/testsuite/Magento/Theme/Controller/Adminhtml/System/Design/ThemeControllerTest.php +++ b/dev/tests/integration/testsuite/Magento/Theme/Controller/Adminhtml/System/Design/ThemeControllerTest.php @@ -35,7 +35,7 @@ class ThemeControllerTest extends \Magento\Backend\Utility\Controller /** @var \Magento\Filesystem */ protected $_filesystem; - /** @var \Magento\Core\Model\Dir */ + /** @var \Magento\App\Dir */ protected $_dirs; protected function setUp() @@ -43,7 +43,7 @@ class ThemeControllerTest extends \Magento\Backend\Utility\Controller parent::setUp(); $this->_filesystem = $this->_objectManager->get('Magento\Filesystem'); - $this->_dirs = $this->_objectManager->get('Magento\Core\Model\Dir'); + $this->_dirs = $this->_objectManager->get('Magento\App\Dir'); } /** @@ -61,7 +61,7 @@ class ThemeControllerTest extends \Magento\Backend\Utility\Controller ) ); - $theme = $this->_objectManager->create('Magento\Core\Model\Theme')->getCollection()->getFirstItem(); + $theme = $this->_objectManager->create('Magento\View\Design\ThemeInterface')->getCollection()->getFirstItem(); $this->getRequest()->setPost('id', $theme->getId()); $this->dispatch('backend/admin/system_design_theme/uploadjs'); @@ -82,7 +82,7 @@ class ThemeControllerTest extends \Magento\Backend\Utility\Controller * Uploader can copy(upload) and then remove this temporary file. */ $fileName = implode(DIRECTORY_SEPARATOR, array(__DIR__, '_files', 'simple-js-file.js')); - $varDir = $this->_dirs->getDir(\Magento\Core\Model\Dir::VAR_DIR); + $varDir = $this->_dirs->getDir(\Magento\App\Dir::VAR_DIR); $destinationFilePath = $varDir . DIRECTORY_SEPARATOR . 'simple-js-file.js'; $this->_filesystem->copy($fileName, $destinationFilePath); diff --git a/dev/tests/integration/testsuite/Magento/Theme/Model/Wysiwyg/StorageTest.php b/dev/tests/integration/testsuite/Magento/Theme/Model/Wysiwyg/StorageTest.php index c39c05a91d4..bf50a24d53d 100644 --- a/dev/tests/integration/testsuite/Magento/Theme/Model/Wysiwyg/StorageTest.php +++ b/dev/tests/integration/testsuite/Magento/Theme/Model/Wysiwyg/StorageTest.php @@ -32,7 +32,7 @@ namespace Magento\Theme\Model\Wysiwyg; class StorageTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Controller\Request\Http|PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\RequestInterface|PHPUnit_Framework_MockObject_MockObject */ protected $_request; @@ -62,11 +62,11 @@ class StorageTest extends \PHPUnit_Framework_TestCase $this->_filesystem = $this->_objectManager->get('Magento\Filesystem'); $this->_filesystem->setIsAllowCreateDirectories(true); - /** @var $theme \Magento\Core\Model\Theme */ - $theme = $this->_objectManager->create('Magento\Core\Model\Theme')->getCollection()->getFirstItem(); + /** @var $theme \Magento\View\Design\ThemeInterface */ + $theme = $this->_objectManager->create('Magento\View\Design\ThemeInterface')->getCollection()->getFirstItem(); - /** @var $request \Magento\Core\Controller\Request\Http */ - $request = $this->_objectManager->get('Magento\Core\Controller\Request\Http'); + /** @var $request \Magento\App\Request\Http */ + $request = $this->_objectManager->get('Magento\App\Request\Http'); $request->setParam(\Magento\Theme\Helper\Storage::PARAM_THEME_ID, $theme->getId()); $request->setParam(\Magento\Theme\Helper\Storage::PARAM_CONTENT_TYPE, \Magento\Theme\Model\Wysiwyg\Storage::TYPE_IMAGE); diff --git a/dev/tests/integration/testsuite/Magento/Usa/Block/Adminhtml/Dhl/UnitofmeasureTest.php b/dev/tests/integration/testsuite/Magento/Usa/Block/Adminhtml/Dhl/UnitofmeasureTest.php index 6f2cc96fd25..7e478a7a509 100644 --- a/dev/tests/integration/testsuite/Magento/Usa/Block/Adminhtml/Dhl/UnitofmeasureTest.php +++ b/dev/tests/integration/testsuite/Magento/Usa/Block/Adminhtml/Dhl/UnitofmeasureTest.php @@ -40,7 +40,7 @@ class UnitofmeasureTest extends \PHPUnit_Framework_TestCase ) )); /** @var $layout \Magento\Core\Model\Layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); /** @var $block \Magento\Usa\Block\Adminhtml\Dhl\Unitofmeasure */ $block = $layout->createBlock('Magento\Usa\Block\Adminhtml\Dhl\Unitofmeasure'); $this->assertNotEmpty($block->toHtml()); diff --git a/dev/tests/integration/testsuite/Magento/User/Block/Role/Grid/UserTest.php b/dev/tests/integration/testsuite/Magento/User/Block/Role/Grid/UserTest.php index e8a6d488f62..f314e26b055 100644 --- a/dev/tests/integration/testsuite/Magento/User/Block/Role/Grid/UserTest.php +++ b/dev/tests/integration/testsuite/Magento/User/Block/Role/Grid/UserTest.php @@ -39,7 +39,7 @@ class UserTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); $this->_block = $layout->createBlock('Magento\User\Block\Role\Grid\User'); } diff --git a/dev/tests/integration/testsuite/Magento/User/Block/Role/Tab/EditTest.php b/dev/tests/integration/testsuite/Magento/User/Block/Role/Tab/EditTest.php index 1af52bf8497..c543fd97a30 100644 --- a/dev/tests/integration/testsuite/Magento/User/Block/Role/Tab/EditTest.php +++ b/dev/tests/integration/testsuite/Magento/User/Block/Role/Tab/EditTest.php @@ -42,7 +42,7 @@ class EditTest extends \PHPUnit_Framework_TestCase $roleAdmin = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create('Magento\User\Model\Role'); $roleAdmin->load(\Magento\TestFramework\Bootstrap::ADMIN_ROLE_NAME, 'role_name'); - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Controller\Request\Http') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\RequestInterface') ->setParam('rid', $roleAdmin->getId()); $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/Layout/ElementTest.php b/dev/tests/integration/testsuite/Magento/View/Layout/ElementTest.php similarity index 88% rename from dev/tests/integration/testsuite/Magento/Core/Model/Layout/ElementTest.php rename to dev/tests/integration/testsuite/Magento/View/Layout/ElementTest.php index a2cac9c1288..8f2561f7af5 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Model/Layout/ElementTest.php +++ b/dev/tests/integration/testsuite/Magento/View/Layout/ElementTest.php @@ -25,12 +25,12 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ -namespace Magento\Core\Model\Layout; +namespace Magento\View\Layout; class ElementTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Layout\Element + * @var \Magento\View\Layout\Element */ protected $_model; @@ -40,7 +40,7 @@ class ElementTest extends \PHPUnit_Framework_TestCase * @TODO: Need to use ObjectManager instead 'new'. * On this moment we have next bug MAGETWO-4274 which blocker for this key. */ - $this->_model = new \Magento\Core\Model\Layout\Element(__DIR__ . '/../_files/_layout_update.xml', 0, true); + $this->_model = new \Magento\View\Layout\Element(__DIR__ . '/_files/_layout_update.xml', 0, true); list($blockNode) = $this->_model->xpath('//block[@name="head"]'); list($actionNode) = $this->_model->xpath('//action[@method="setTitle"]'); @@ -48,7 +48,7 @@ class ElementTest extends \PHPUnit_Framework_TestCase $this->assertEmpty($blockNode->attributes()->parent); $this->assertEmpty($actionNode->attributes()->block); - $this->_model->prepare(array()); + $this->_model->prepare(); $this->assertEquals('root', (string)$blockNode->attributes()->parent); $this->assertEquals('Magento\Adminhtml\Block\Page\Head', (string)$blockNode->attributes()->class); diff --git a/dev/tests/integration/testsuite/Magento/Core/Model/_files/_layout_update.xml b/dev/tests/integration/testsuite/Magento/View/Layout/_files/_layout_update.xml similarity index 100% rename from dev/tests/integration/testsuite/Magento/Core/Model/_files/_layout_update.xml rename to dev/tests/integration/testsuite/Magento/View/Layout/_files/_layout_update.xml diff --git a/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/AbstractFormTest.php b/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/AbstractFormTest.php index 79f103458b4..1c22013f27b 100644 --- a/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/AbstractFormTest.php +++ b/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/AbstractFormTest.php @@ -54,7 +54,7 @@ abstract class AbstractFormTest extends \PHPUnit_Framework_TestCase protected $_urlBuilder; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -70,7 +70,7 @@ abstract class AbstractFormTest extends \PHPUnit_Framework_TestCase $this->_urlBuilder = $this->getMockBuilder('Magento\Backend\Model\Url') ->disableOriginalConstructor() ->getMock(); - $this->_layout = $this->_objectManager->get('Magento\Core\Model\Layout'); + $this->_layout = $this->_objectManager->get('Magento\View\LayoutInterface'); $this->_blockFactory = $this->_objectManager->get('Magento\Core\Model\BlockFactory'); $this->_block = $this->_blockFactory->createBlock($this->_formClass, array( 'context' => \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( diff --git a/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/MainTest.php b/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/MainTest.php index 38aa37f4705..c92ff00f884 100644 --- a/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/MainTest.php +++ b/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/MainTest.php @@ -37,7 +37,7 @@ class MainTest extends \PHPUnit_Framework_TestCase protected $_objectManager; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -56,7 +56,7 @@ class MainTest extends \PHPUnit_Framework_TestCase parent::setUp(); $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $this->_layout = $this->_objectManager->get('Magento\Core\Model\Layout'); + $this->_layout = $this->_objectManager->get('Magento\View\LayoutInterface'); $this->_blockFactory = $this->_objectManager->get('Magento\Core\Model\BlockFactory'); $this->_block = $this->_blockFactory->createBlock('Magento\Webapi\Block\Adminhtml\Role\Edit\Tab\Main'); $this->_layout->addBlock($this->_block); @@ -64,7 +64,7 @@ class MainTest extends \PHPUnit_Framework_TestCase protected function tearDown() { - $this->_objectManager->removeSharedInstance('Magento\Core\Model\Layout'); + $this->_objectManager->removeSharedInstance('Magento\View\LayoutInterface'); $this->_objectManager->removeSharedInstance('Magento\Core\Model\BlockFactory'); unset($this->_objectManager, $this->_layout, $this->_blockFactory, $this->_block); } diff --git a/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/ResourceTest.php b/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/ResourceTest.php index 31abd02b34f..99a304659b2 100644 --- a/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/ResourceTest.php +++ b/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/ResourceTest.php @@ -37,7 +37,7 @@ class ResourceTest extends \PHPUnit_Framework_TestCase protected $_objectManager; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -73,7 +73,7 @@ class ResourceTest extends \PHPUnit_Framework_TestCase ->getMock(); $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $this->_layout = $this->_objectManager->get('Magento\Core\Model\Layout'); + $this->_layout = $this->_objectManager->get('Magento\View\LayoutInterface'); $this->_blockFactory = $this->_objectManager->get('Magento\Core\Model\BlockFactory'); $this->_block = $this->_blockFactory->createBlock('Magento\Webapi\Block\Adminhtml\Role\Edit\Tab\Resource', array( @@ -86,7 +86,7 @@ class ResourceTest extends \PHPUnit_Framework_TestCase protected function tearDown() { - $this->_objectManager->removeSharedInstance('Magento\Core\Model\Layout'); + $this->_objectManager->removeSharedInstance('Magento\View\LayoutInterface'); unset($this->_objectManager, $this->_layout, $this->_resourceProvider, $this->_blockFactory, $this->_block); } diff --git a/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/User/Edit/Tab/MainTest.php b/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/User/Edit/Tab/MainTest.php index 1290368e4bc..a3d0dc61068 100644 --- a/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/User/Edit/Tab/MainTest.php +++ b/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/User/Edit/Tab/MainTest.php @@ -37,7 +37,7 @@ class MainTest extends \PHPUnit_Framework_TestCase protected $_objectManager; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -56,7 +56,7 @@ class MainTest extends \PHPUnit_Framework_TestCase parent::setUp(); $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $this->_layout = $this->_objectManager->get('Magento\Core\Model\Layout'); + $this->_layout = $this->_objectManager->get('Magento\View\LayoutInterface'); $this->_blockFactory = $this->_objectManager->get('Magento\Core\Model\BlockFactory'); $this->_block = $this->_blockFactory->createBlock('Magento\Webapi\Block\Adminhtml\User\Edit\Tab\Main'); $this->_layout->addBlock($this->_block); @@ -64,7 +64,7 @@ class MainTest extends \PHPUnit_Framework_TestCase protected function tearDown() { - $this->_objectManager->removeSharedInstance('Magento\Core\Model\Layout'); + $this->_objectManager->removeSharedInstance('Magento\View\LayoutInterface'); unset($this->_objectManager, $this->_urlBuilder, $this->_layout, $this->_blockFactory, $this->_block); } diff --git a/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/User/Edit/TabsTest.php b/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/User/Edit/TabsTest.php index f3c6df136ee..e88f01267e4 100644 --- a/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/User/Edit/TabsTest.php +++ b/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/User/Edit/TabsTest.php @@ -37,7 +37,7 @@ class TabsTest extends \PHPUnit_Framework_TestCase protected $_objectManager; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -51,14 +51,14 @@ class TabsTest extends \PHPUnit_Framework_TestCase parent::setUp(); $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $this->_layout = $this->_objectManager->get('Magento\Core\Model\Layout'); + $this->_layout = $this->_objectManager->get('Magento\View\LayoutInterface'); $this->_block = $this->_layout->createBlock('Magento\Webapi\Block\Adminhtml\User\Edit\Tabs', 'webapi.user.edit.tabs'); } protected function tearDown() { - $this->_objectManager->removeSharedInstance('Magento\Core\Model\Layout'); + $this->_objectManager->removeSharedInstance('Magento\View\LayoutInterface'); unset($this->_objectManager, $this->_layout, $this->_block); } diff --git a/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/User/EditTest.php b/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/User/EditTest.php index 72cbd40d368..277e1383fe2 100644 --- a/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/User/EditTest.php +++ b/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/User/EditTest.php @@ -37,7 +37,7 @@ class EditTest extends \PHPUnit_Framework_TestCase protected $_objectManager; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -54,7 +54,8 @@ class EditTest extends \PHPUnit_Framework_TestCase parent::setUp(); $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get('Magento\View\LayoutInterface'); $this->_block = $this->_layout->createBlock('Magento\Webapi\Block\Adminhtml\User\Edit'); } diff --git a/dev/tests/integration/testsuite/Magento/Webapi/Model/Soap/ServerTest.php b/dev/tests/integration/testsuite/Magento/Webapi/Model/Soap/ServerTest.php index 698b73f6ee3..b143cab5e97 100644 --- a/dev/tests/integration/testsuite/Magento/Webapi/Model/Soap/ServerTest.php +++ b/dev/tests/integration/testsuite/Magento/Webapi/Model/Soap/ServerTest.php @@ -27,8 +27,15 @@ namespace Magento\Webapi\Model\Soap; class ServerTest extends \PHPUnit_Framework_TestCase { - /** @var \Magento\Core\Model\Config */ - protected $_configMock; + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_configScopeMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_areaListMock; /** @var \Magento\Webapi\Controller\Soap\Request */ protected $_requestMock; @@ -51,8 +58,9 @@ class ServerTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor()->getMock(); $this->_storeMock = $this->getMockBuilder('Magento\Core\Model\Store') ->disableOriginalConstructor()->getMock(); - $this->_configMock = $this->getMockBuilder('Magento\Core\Model\Config') - ->disableOriginalConstructor()->getMock(); + + $this->_areaListMock = $this->getMock('Magento\App\AreaList', array(), array(), '', false); + $this->_configScopeMock = $this->getMock('Magento\Config\ScopeInterface'); $this->_storeManagerMock->expects($this->any()) ->method('getStore')->will($this->returnValue($this->_storeMock)); $this->_requestMock = $this->getMockBuilder('Magento\Webapi\Controller\Soap\Request') @@ -75,7 +83,8 @@ class ServerTest extends \PHPUnit_Framework_TestCase $this->_storeMock->expects($this->once())->method('getConfig')->will($this->returnValue(true)); /** Create SOAP server object. */ $server = new \Magento\Webapi\Model\Soap\Server( - $this->_configMock, + $this->_areaListMock, + $this->_configScopeMock, $this->_requestMock, $this->_domDocumentFactory, $this->_storeManagerMock, @@ -95,7 +104,8 @@ class ServerTest extends \PHPUnit_Framework_TestCase $this->_storeMock->expects($this->once())->method('getConfig')->will($this->returnValue(false)); /** Create SOAP server object. */ $server = new \Magento\Webapi\Model\Soap\Server( - $this->_configMock, + $this->_areaListMock, + $this->_configScopeMock, $this->_requestMock, $this->_domDocumentFactory, $this->_storeManagerMock, diff --git a/dev/tests/integration/testsuite/Magento/Webhook/Block/Adminhtml/Subscription/EditTest.php b/dev/tests/integration/testsuite/Magento/Webhook/Block/Adminhtml/Subscription/EditTest.php index 9ad59a44bff..048abee3d30 100644 --- a/dev/tests/integration/testsuite/Magento/Webhook/Block/Adminhtml/Subscription/EditTest.php +++ b/dev/tests/integration/testsuite/Magento/Webhook/Block/Adminhtml/Subscription/EditTest.php @@ -49,8 +49,8 @@ class EditTest extends \PHPUnit_Framework_TestCase public function testAddSubscriptionTitle() { - /** @var \Magento\Core\Model\Layout $layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Core\Model\Layout'); + /** @var \Magento\View\LayoutInterface $layout */ + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\View\LayoutInterface'); $subscription = array( 'subscription_id' => null, @@ -68,8 +68,8 @@ class EditTest extends \PHPUnit_Framework_TestCase public function testEditSubscriptionTitle() { - /** @var \Magento\Core\Model\Layout $layout */ - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Core\Model\Layout'); + /** @var \Magento\View\LayoutInterface $layout */ + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\View\LayoutInterface'); $subscription = array( 'subscription_id' => 1, diff --git a/dev/tests/integration/testsuite/Magento/Webhook/Model/Resource/Subscription/Grid/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Webhook/Model/Resource/Subscription/Grid/CollectionTest.php index d22f5ee9a49..6fc8337ff13 100644 --- a/dev/tests/integration/testsuite/Magento/Webhook/Model/Resource/Subscription/Grid/CollectionTest.php +++ b/dev/tests/integration/testsuite/Magento/Webhook/Model/Resource/Subscription/Grid/CollectionTest.php @@ -109,21 +109,21 @@ class CollectionTest extends \PHPUnit_Framework_TestCase { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $dirs = $objectManager->create( - 'Magento\Core\Model\Dir', + 'Magento\App\Dir', array( 'baseDir' => BP, 'dirs' => array( - \Magento\Core\Model\Dir::MODULES => __DIR__ . '/_files', - \Magento\Core\Model\Dir::CONFIG => __DIR__ . '/_files', + \Magento\App\Dir::MODULES => __DIR__ . '/_files', + \Magento\App\Dir::CONFIG => __DIR__ . '/_files', ), ) ); - $moduleList = $objectManager->create('Magento\Core\Model\ModuleList', array( - 'reader' => $objectManager->create('Magento\Core\Model\Module\Declaration\Reader\Filesystem', + $moduleList = $objectManager->create('Magento\App\ModuleList', array( + 'reader' => $objectManager->create('Magento\App\Module\Declaration\Reader\Filesystem', array( 'fileResolver' => $objectManager->create( - 'Magento\Core\Model\Module\Declaration\FileResolver', + 'Magento\App\Module\Declaration\FileResolver', array( 'applicationDirs' => $dirs ) diff --git a/dev/tests/integration/testsuite/Magento/Webhook/Model/Subscription/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Webhook/Model/Subscription/ConfigTest.php index d6f17fc0410..efc370ce964 100644 --- a/dev/tests/integration/testsuite/Magento/Webhook/Model/Subscription/ConfigTest.php +++ b/dev/tests/integration/testsuite/Magento/Webhook/Model/Subscription/ConfigTest.php @@ -57,25 +57,25 @@ class ConfigTest extends \PHPUnit_Framework_TestCase { $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $dirs = $this->_objectManager->create( - 'Magento\Core\Model\Dir', + 'Magento\App\Dir', array( 'baseDir' => BP, 'dirs' => array( - \Magento\Core\Model\Dir::MODULES => __DIR__ . '/_files', - \Magento\Core\Model\Dir::CONFIG => __DIR__ . '/_files' + \Magento\App\Dir::MODULES => __DIR__ . '/_files', + \Magento\App\Dir::CONFIG => __DIR__ . '/_files' ), ) ); $fileResolver = $this->_objectManager->create( - 'Magento\Core\Model\Module\Declaration\FileResolver', array('applicationDirs' => $dirs) + 'Magento\App\Module\Declaration\FileResolver', array('applicationDirs' => $dirs) ); - $filesystemReader = $this->_objectManager->create('Magento\Core\Model\Module\Declaration\Reader\Filesystem', + $filesystemReader = $this->_objectManager->create('Magento\App\Module\Declaration\Reader\Filesystem', array('fileResolver' => $fileResolver) ); $moduleList = $this->_objectManager->create( - 'Magento\Core\Model\ModuleList', - array('reader' => $filesystemReader, 'cache' => $this->getMock("Magento\Config\CacheInterface")) + 'Magento\App\ModuleList', + array('reader' => $filesystemReader, 'cache' => $this->getMock('Magento\Config\CacheInterface')) ); /** diff --git a/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/ContainerTest.php b/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/ContainerTest.php index c31123d0f63..efb2ed5c929 100644 --- a/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/ContainerTest.php +++ b/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/ContainerTest.php @@ -41,7 +41,7 @@ class ContainerTest extends \PHPUnit_Framework_TestCase { parent::setUp(); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Widget\Block\Adminhtml\Widget\Instance\Edit\Chooser\Container'); } diff --git a/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/LayoutTest.php b/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/LayoutTest.php index 745608a4ae7..c697145cb2e 100644 --- a/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/LayoutTest.php +++ b/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/LayoutTest.php @@ -46,7 +46,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase $layoutUtility = new \Magento\Core\Utility\Layout($this); $args = array( 'context' => $objectManager->get('Magento\Core\Block\Template\Context'), - 'layoutMergeFactory' => $this->getMock('Magento\Core\Model\Layout\MergeFactory', + 'layoutProcessorFactory' => $this->getMock('Magento\View\Layout\ProcessorFactory', array(), array(), '', false), 'themesFactory' => $objectManager->get('Magento\Core\Model\Resource\Theme\CollectionFactory'), 'data' => array( @@ -58,11 +58,11 @@ class LayoutTest extends \PHPUnit_Framework_TestCase ); $this->_block = $this->getMock( 'Magento\Widget\Block\Adminhtml\Widget\Instance\Edit\Chooser\Layout', - array('_getLayoutMerge'), $args + array('_getLayoutProcessor'), $args ); $this->_block ->expects($this->any()) - ->method('_getLayoutMerge') + ->method('_getLayoutProcessor') ->will($this->returnCallback( function () use ($layoutUtility) { return $layoutUtility->getLayoutUpdateFromFixture(glob(__DIR__ . '/_files/layout/*.xml')); diff --git a/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Main/LayoutTest.php b/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Main/LayoutTest.php index 265659c1082..44f9d4479f5 100644 --- a/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Main/LayoutTest.php +++ b/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Main/LayoutTest.php @@ -34,7 +34,7 @@ namespace Magento\Widget\Block\Adminhtml\Widget\Instance\Edit\Tab\Main; class LayoutTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Widget\Block\Adminhtml\Widget\Instance\Edit\Tab\Main_Layout + * @var \Magento\Widget\Block\Adminhtml\Widget\Instance\Edit\Tab\Main\Layout */ protected $_block; @@ -42,7 +42,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase { parent::setUp(); - $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $this->_block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock( 'Magento\Widget\Block\Adminhtml\Widget\Instance\Edit\Tab\Main\Layout', '', @@ -52,7 +52,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase )) ); $this->_block->setLayout( - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ); } @@ -61,7 +61,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase */ public function testGetLayoutsChooser() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_FRONTEND) ->setDefaultDesignTheme(); diff --git a/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/MainTest.php b/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/MainTest.php index 3acefdd9b07..7508d4464fe 100644 --- a/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/MainTest.php +++ b/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/MainTest.php @@ -37,7 +37,7 @@ class MainTest extends \PHPUnit_Framework_TestCase /** @var $objectManager \Magento\TestFramework\ObjectManager */ $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $objectManager->get('Magento\Core\Model\Registry')->register('current_widget_instance', new \Magento\Object()); - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Widget\Block\Adminhtml\Widget\Instance\Edit\Tab\Main'); $block->setTemplate(null); $block->toHtml(); @@ -45,4 +45,15 @@ class MainTest extends \PHPUnit_Framework_TestCase $this->assertInstanceOf('Magento\Data\Form\Element\Select', $element); $this->assertTrue($element->getDisabled()); } + + public function testTypeElement() + { + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + ->createBlock('Magento\Widget\Block\Adminhtml\Widget\Instance\Edit\Tab\Main'); + $block->setTemplate(null); + $block->toHtml(); + $element = $block->getForm()->getElement('instance_code'); + $this->assertInstanceOf('Magento\Data\Form\Element\Select', $element); + $this->assertTrue($element->getDisabled()); + } } diff --git a/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/EditTest.php b/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/EditTest.php index d97e9070b77..76dbb591780 100644 --- a/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/EditTest.php +++ b/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/EditTest.php @@ -39,8 +39,9 @@ class EditTest extends \PHPUnit_Framework_TestCase public function testConstruct() { $type = 'Magento\Catalog\Block\Product\Widget\NewWidget'; + $code = 'catalog_product_newwidget'; $theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface') + ->get('Magento\View\DesignInterface') ->setDefaultDesignTheme() ->getDesignTheme(); @@ -49,15 +50,16 @@ class EditTest extends \PHPUnit_Framework_TestCase ->create('Magento\Widget\Model\Widget\Instance'); $widgetInstance ->setType($type) + ->setCode($code) ->setThemeId($theme->getId()) ->save(); /** @var $objectManager \Magento\TestFramework\ObjectManager */ $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $objectManager->get('Magento\Core\Model\Registry')->register('current_widget_instance', $widgetInstance); - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Controller\Request\Http') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\RequestInterface') ->setParam('instance_id', $widgetInstance->getId()); - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Widget\Block\Adminhtml\Widget\Instance\Edit', 'widget'); $this->assertArrayHasKey('widget-delete_button', $block->getLayout()->getAllBlocks()); } diff --git a/dev/tests/integration/testsuite/Magento/Widget/Controller/Adminhtml/Widget/InstanceTest.php b/dev/tests/integration/testsuite/Magento/Widget/Controller/Adminhtml/Widget/InstanceTest.php index b5dc02ee864..b0d76255a95 100644 --- a/dev/tests/integration/testsuite/Magento/Widget/Controller/Adminhtml/Widget/InstanceTest.php +++ b/dev/tests/integration/testsuite/Magento/Widget/Controller/Adminhtml/Widget/InstanceTest.php @@ -37,17 +37,22 @@ class InstanceTest extends \Magento\Backend\Utility\Controller parent::setUp(); $theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface') + ->get('Magento\View\DesignInterface') ->setDefaultDesignTheme() ->getDesignTheme(); - $this->getRequest()->setParam('type', 'Magento\Cms\Block\Widget\Page\Link'); + $type = 'Magento\Cms\Block\Widget\Page\Link'; + /** @var $model \Magento\Widget\Model\Widget\Instance */ + $model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->create('Magento\Widget\Model\Widget\Instance'); + $code = $model->setType($type)->getWidgetReference('type', $type, 'code'); + $this->getRequest()->setParam('code', $code); $this->getRequest()->setParam('theme_id', $theme->getId()); } public function testEditAction() { $this->dispatch('backend/admin/widget_instance/edit'); - $this->assertContains('<option value="Magento\Cms\Block\Widget\Page\Link" selected="selected">', + $this->assertContains('<option value="cms_page_link" selected="selected">', $this->getResponse()->getBody() ); } diff --git a/dev/tests/integration/testsuite/Magento/Widget/Model/Config/DataTest.php b/dev/tests/integration/testsuite/Magento/Widget/Model/Config/DataTest.php index ce76a4f56cd..6fbf0933475 100644 --- a/dev/tests/integration/testsuite/Magento/Widget/Model/Config/DataTest.php +++ b/dev/tests/integration/testsuite/Magento/Widget/Model/Config/DataTest.php @@ -40,36 +40,36 @@ class DataTest extends \PHPUnit_Framework_TestCase public function setUp() { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - /** @var \Magento\Core\Model\Dir $dirs */ + /** @var \Magento\App\Dir $dirs */ $dirs = $objectManager->create( - 'Magento\Core\Model\Dir', array( + 'Magento\App\Dir', array( 'baseDir' => BP, 'dirs' => array( - \Magento\Core\Model\Dir::MODULES => __DIR__ . '/_files/code', - \Magento\Core\Model\Dir::CONFIG => __DIR__ . '/_files/code', - \Magento\Core\Model\Dir::THEMES => __DIR__ . '/_files/design', + \Magento\App\Dir::MODULES => __DIR__ . '/_files/code', + \Magento\App\Dir::CONFIG => __DIR__ . '/_files/code', + \Magento\App\Dir::THEMES => __DIR__ . '/_files/design', ) ) ); - /** @var \Magento\Core\Model\Module\Declaration\FileResolver $modulesDeclarations */ + /** @var \Magento\App\Module\Declaration\FileResolver $modulesDeclarations */ $modulesDeclarations = $objectManager->create( - 'Magento\Core\Model\Module\Declaration\FileResolver', array( + 'Magento\App\Module\Declaration\FileResolver', array( 'applicationDirs' => $dirs, ) ); - /** @var \Magento\Core\Model\Module\Declaration\Reader\Filesystem $filesystemReader */ + /** @var \Magento\App\Module\Declaration\Reader\Filesystem $filesystemReader */ $filesystemReader = $objectManager->create( - 'Magento\Core\Model\Module\Declaration\Reader\Filesystem', array( + 'Magento\App\Module\Declaration\Reader\Filesystem', array( 'fileResolver' => $modulesDeclarations, ) ); - /** @var \Magento\Core\Model\ModuleList $modulesList */ + /** @var \Magento\App\ModuleList $modulesList */ $modulesList = $objectManager->create( - 'Magento\Core\Model\ModuleList', array( + 'Magento\App\ModuleList', array( 'reader' => $filesystemReader, ) ); diff --git a/dev/tests/integration/testsuite/Magento/Widget/Model/Config/FileResolverTest.php b/dev/tests/integration/testsuite/Magento/Widget/Model/Config/FileResolverTest.php index d7a1e457e13..b98cc6e8589 100644 --- a/dev/tests/integration/testsuite/Magento/Widget/Model/Config/FileResolverTest.php +++ b/dev/tests/integration/testsuite/Magento/Widget/Model/Config/FileResolverTest.php @@ -32,16 +32,16 @@ class FileResolverTest extends \PHPUnit_Framework_TestCase */ private $_object; - /** @var \Magento\Core\Model\Dir/PHPUnit_Framework_MockObject_MockObject */ + /** @var \Magento\App\Dir/PHPUnit_Framework_MockObject_MockObject */ private $_applicationDirsMock; public function setUp() { - $this->_applicationDirsMock = $this->getMockBuilder('Magento\Core\Model\Dir') + $this->_applicationDirsMock = $this->getMockBuilder('Magento\App\Dir') ->disableOriginalConstructor() ->getMock(); - $moduleListMock = $this->getMockBuilder('Magento\Core\Model\ModuleListInterface') + $moduleListMock = $this->getMockBuilder('Magento\App\ModuleListInterface') ->disableOriginalConstructor() ->getMock(); $moduleListMock->expects($this->any()) diff --git a/dev/tests/integration/testsuite/Magento/Widget/Model/Config/ReaderTest.php b/dev/tests/integration/testsuite/Magento/Widget/Model/Config/ReaderTest.php index 00124f90fa8..9300eaacf6c 100644 --- a/dev/tests/integration/testsuite/Magento/Widget/Model/Config/ReaderTest.php +++ b/dev/tests/integration/testsuite/Magento/Widget/Model/Config/ReaderTest.php @@ -35,35 +35,35 @@ class ReaderTest extends \PHPUnit_Framework_TestCase public function setUp() { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - /** @var \Magento\Core\Model\Dir $dirs */ + /** @var \Magento\App\Dir $dirs */ $dirs = $objectManager->create( - 'Magento\Core\Model\Dir', array( + 'Magento\App\Dir', array( 'baseDir' => BP, 'dirs' => array( - \Magento\Core\Model\Dir::MODULES => __DIR__ . '/_files/code', - \Magento\Core\Model\Dir::CONFIG => __DIR__ . '/_files/code' + \Magento\App\Dir::MODULES => __DIR__ . '/_files/code', + \Magento\App\Dir::CONFIG => __DIR__ . '/_files/code' ) ) ); - /** @var \Magento\Core\Model\Module\Declaration\FileResolver $modulesDeclarations */ + /** @var \Magento\App\Module\Declaration\FileResolver $modulesDeclarations */ $modulesDeclarations = $objectManager->create( - 'Magento\Core\Model\Module\Declaration\FileResolver', array( + 'Magento\App\Module\Declaration\FileResolver', array( 'applicationDirs' => $dirs, ) ); - /** @var \Magento\Core\Model\Module\Declaration\Reader\Filesystem $filesystemReader */ + /** @var \Magento\App\Module\Declaration\Reader\Filesystem $filesystemReader */ $filesystemReader = $objectManager->create( - 'Magento\Core\Model\Module\Declaration\Reader\Filesystem', array( + 'Magento\App\Module\Declaration\Reader\Filesystem', array( 'fileResolver' => $modulesDeclarations, ) ); - /** @var \Magento\Core\Model\ModuleList $modulesList */ + /** @var \Magento\App\ModuleList $modulesList */ $modulesList = $objectManager->create( - 'Magento\Core\Model\ModuleList', array( + 'Magento\App\ModuleList', array( 'reader' => $filesystemReader, ) ); diff --git a/dev/tests/integration/testsuite/Magento/Widget/Model/Widget/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Widget/Model/Widget/ConfigTest.php index 4f7633b3c99..b8b6742e265 100644 --- a/dev/tests/integration/testsuite/Magento/Widget/Model/Widget/ConfigTest.php +++ b/dev/tests/integration/testsuite/Magento/Widget/Model/Widget/ConfigTest.php @@ -46,7 +46,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase */ public function testGetPluginSettings() { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setDesignTheme('magento_basic', 'adminhtml'); $config = new \Magento\Object(); diff --git a/dev/tests/integration/testsuite/Magento/Widget/Model/Widget/InstanceTest.php b/dev/tests/integration/testsuite/Magento/Widget/Model/Widget/InstanceTest.php index 1aa2321a7c8..722a91f5ce1 100644 --- a/dev/tests/integration/testsuite/Magento/Widget/Model/Widget/InstanceTest.php +++ b/dev/tests/integration/testsuite/Magento/Widget/Model/Widget/InstanceTest.php @@ -49,7 +49,7 @@ class InstanceTest extends \PHPUnit_Framework_TestCase public function testSetThemeId() { $theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('Magento\Core\Model\View\DesignInterface') + ->get('Magento\View\DesignInterface') ->setDefaultDesignTheme() ->getDesignTheme(); $this->_model->setThemeId($theme->getId()); diff --git a/dev/tests/integration/testsuite/Magento/Widget/Model/WidgetTest.php b/dev/tests/integration/testsuite/Magento/Widget/Model/WidgetTest.php index d02ffe6aa56..27a0209bf70 100644 --- a/dev/tests/integration/testsuite/Magento/Widget/Model/WidgetTest.php +++ b/dev/tests/integration/testsuite/Magento/Widget/Model/WidgetTest.php @@ -62,10 +62,10 @@ class WidgetTest extends \PHPUnit_Framework_TestCase */ public function testGetPlaceholderImageUrl($type, $expectedFile) { - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setDesignTheme('magento_basic', 'adminhtml'); - $expectedPubFile = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Dir') - ->getDir(\Magento\Core\Model\Dir::STATIC_VIEW) . "/adminhtml/magento_basic/en_US/{$expectedFile}"; + $expectedPubFile = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\App\Dir') + ->getDir(\Magento\App\Dir::STATIC_VIEW) . "/adminhtml/magento_basic/en_US/{$expectedFile}"; if (file_exists($expectedPubFile)) { unlink($expectedPubFile); } @@ -102,13 +102,13 @@ class WidgetTest extends \PHPUnit_Framework_TestCase public function testGetPlaceholderImageUrlAtTheme() { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - /** @var \Magento\Core\Model\Dir $dir */ - $dir = $objectManager->get('Magento\Core\Model\Dir'); + /** @var \Magento\App\Dir $dir */ + $dir = $objectManager->get('Magento\App\Dir'); $property = new \ReflectionProperty($dir, '_dirs'); $property->setAccessible(true); $dirs = $property->getValue($dir); - $dirs[\Magento\Core\Model\Dir::THEMES] = dirname(__DIR__) . '/_files/design'; + $dirs[\Magento\App\Dir::THEMES] = dirname(__DIR__) . '/_files/design'; $property->setValue($dir, $dirs); $actualFile = $this->testGetPlaceholderImageUrl( diff --git a/dev/tests/integration/testsuite/Magento/Wishlist/Block/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Wishlist/Block/AbstractTest.php index 773c7b12a8b..478e5d85288 100644 --- a/dev/tests/integration/testsuite/Magento/Wishlist/Block/AbstractTest.php +++ b/dev/tests/integration/testsuite/Magento/Wishlist/Block/AbstractTest.php @@ -59,7 +59,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase { \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\App') ->getArea(\Magento\Core\Model\App\Area::AREA_FRONTEND)->load(); - \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\View\DesignInterface') + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\DesignInterface') ->setArea(\Magento\Core\Model\App\Area::AREA_FRONTEND) ->setDefaultDesignTheme(); $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() diff --git a/dev/tests/integration/testsuite/Magento/Wishlist/Block/Customer/Wishlist/Item/ColumnTest.php b/dev/tests/integration/testsuite/Magento/Wishlist/Block/Customer/Wishlist/Item/ColumnTest.php index d7cb36ddf74..dde2bc457c2 100644 --- a/dev/tests/integration/testsuite/Magento/Wishlist/Block/Customer/Wishlist/Item/ColumnTest.php +++ b/dev/tests/integration/testsuite/Magento/Wishlist/Block/Customer/Wishlist/Item/ColumnTest.php @@ -30,7 +30,7 @@ namespace Magento\Wishlist\Block\Customer\Wishlist\Item; class ColumnTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout = null; @@ -41,7 +41,8 @@ class ColumnTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $this->_layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get('Magento\View\LayoutInterface'); $this->_block = $this->_layout->addBlock('Magento\Wishlist\Block\Customer\Wishlist\Item\Column', 'test'); $this->_layout->addBlock('Magento\Core\Block\Text', 'child', 'test'); } diff --git a/dev/tests/integration/testsuite/Magento/Wishlist/Block/Customer/Wishlist/Item/OptionsTest.php b/dev/tests/integration/testsuite/Magento/Wishlist/Block/Customer/Wishlist/Item/OptionsTest.php index 0eee49131be..d8c292a2c86 100644 --- a/dev/tests/integration/testsuite/Magento/Wishlist/Block/Customer/Wishlist/Item/OptionsTest.php +++ b/dev/tests/integration/testsuite/Magento/Wishlist/Block/Customer/Wishlist/Item/OptionsTest.php @@ -34,7 +34,7 @@ class OptionsTest extends \PHPUnit_Framework_TestCase { public function testGetTemplate() { - $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout') + $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface') ->createBlock('Magento\Wishlist\Block\Customer\Wishlist\Item\Options'); $this->assertEmpty($block->getTemplate()); $product = new \Magento\Object(array('type_id' => 'test')); diff --git a/dev/tests/integration/testsuite/Magento/Wishlist/Block/Customer/Wishlist/ItemsTest.php b/dev/tests/integration/testsuite/Magento/Wishlist/Block/Customer/Wishlist/ItemsTest.php index 8b0e091bbe4..61eea886189 100644 --- a/dev/tests/integration/testsuite/Magento/Wishlist/Block/Customer/Wishlist/ItemsTest.php +++ b/dev/tests/integration/testsuite/Magento/Wishlist/Block/Customer/Wishlist/ItemsTest.php @@ -31,7 +31,7 @@ class ItemsTest extends \PHPUnit_Framework_TestCase { public function testGetColumns() { - $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Model\Layout'); + $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\View\LayoutInterface'); $block = $layout->addBlock('Magento\Wishlist\Block\Customer\Wishlist\Items', 'test'); $child = $this->getMock('Magento\Core\Block\Text', array('isEnabled'), array(\Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Core\Block\Context'))); diff --git a/dev/tests/js/testsuite/mage/suggest/tree-suggest-test.js b/dev/tests/js/testsuite/mage/suggest/tree-suggest-test.js index 3f7427fbd5c..9dd7b27eed6 100644 --- a/dev/tests/js/testsuite/mage/suggest/tree-suggest-test.js +++ b/dev/tests/js/testsuite/mage/suggest/tree-suggest-test.js @@ -64,33 +64,6 @@ TreeSuggestTest.prototype.testInit = function() { assertEquals(treeSuggestInstance.widgetEventPrefix, 'suggest'); }; -TreeSuggestTest.prototype.testBind = function() { - return; // test is broken, see https://jira.corp.x.com/browse/MAGETWO-9269 - var event = jQuery.Event('keydown'), - proxyEventsExecuted = false, - treeSuggestInstance = this.treeSuggestCreate(); - - treeSuggestInstance.dropdown.show(); - - event.keyCode = jQuery.ui.keyCode.LEFT; - this.stub(treeSuggestInstance, '_proxyEvents').done(function() { - proxyEventsExecuted = true - }); - - treeSuggestInstance.element.trigger(event); - assertTrue(proxyEventsExecuted); - - event.keyCode = $.ui.keyCode.RIGHT; - proxyEventsExecuted = false; - this.stub(treeSuggestInstance, '_proxyEvents').done(function() { - proxyEventsExecuted = true - }); - - treeSuggestInstance.dropdown.show(); - treeSuggestInstance.element.trigger(event); - assertTrue(proxyEventsExecuted); -}; - TreeSuggestTest.prototype.testClose = function() { var treeSuggestInstance = this.treeSuggestCreate(), elementFocused = false; diff --git a/dev/tests/performance/framework/Magento/TestFramework/Application.php b/dev/tests/performance/framework/Magento/TestFramework/Application.php index d09b3c9aa51..4a4cfdbfb37 100644 --- a/dev/tests/performance/framework/Magento/TestFramework/Application.php +++ b/dev/tests/performance/framework/Magento/TestFramework/Application.php @@ -180,7 +180,7 @@ class Application */ protected function _updateFilesystemPermissions() { - \Magento\Io\File::chmodRecursive($this->_objectManager->get('Magento\Core\Model\Dir')->getDir('var'), 0777); + \Magento\Io\File::chmodRecursive($this->_objectManager->get('Magento\App\Dir')->getDir('var'), 0777); } /** diff --git a/dev/tests/static/framework/Magento/TestFramework/Utility/Classes.php b/dev/tests/static/framework/Magento/TestFramework/Utility/Classes.php index d150d20c2ee..74b0f8e0fe3 100644 --- a/dev/tests/static/framework/Magento/TestFramework/Utility/Classes.php +++ b/dev/tests/static/framework/Magento/TestFramework/Utility/Classes.php @@ -222,9 +222,14 @@ class Classes $configDom->load($fileName); $xPath = new \DOMXPath($configDom); $vTypes = $xPath->query('/config/virtualType'); - for ($i = 0; $i < $vTypes->length; $i++) { - $name = $vTypes->item($i)->attributes->getNamedItem('name')->textContent; - self::$_virtualClasses[$name] = $name; + /** @var \DOMNode $virtualType */ + foreach ($vTypes as $virtualType) { + $name = $virtualType->attributes->getNamedItem('name')->textContent; + if (!$virtualType->attributes->getNamedItem('type')) { + continue; + } + $type = $virtualType->attributes->getNamedItem('type')->textContent; + self::$_virtualClasses[$name] = $type; } } @@ -232,6 +237,8 @@ class Classes } /** + * Check if instance is virtual type + * * @param $className string * @return bool */ @@ -244,7 +251,25 @@ class Classes } /** - * Check class is autogenerated + * Get real type name for virtual type + * + * @param string $className + * @return string + */ + public static function resolveVirtualType($className) + { + if (false == self::isVirtual($className)) { + return $className; + } + + $resolvedName = self::$_virtualClasses[$className]; + return self::resolveVirtualType($resolvedName); + } + + + + /** + * Check class is auto-generated * * @param string $className * @return bool diff --git a/dev/tests/static/framework/Magento/TestFramework/Utility/Files.php b/dev/tests/static/framework/Magento/TestFramework/Utility/Files.php index d7348a51128..3158e3c69d3 100644 --- a/dev/tests/static/framework/Magento/TestFramework/Utility/Files.php +++ b/dev/tests/static/framework/Magento/TestFramework/Utility/Files.php @@ -113,13 +113,13 @@ class Files { $key = __METHOD__ . "/{$this->_path}/{$appCode}/{$otherCode}/{$templates}"; if (!isset(self::$_cache[$key])) { - $namespace = $module = $area = $package = $theme = '*'; + $namespace = $module = $area = $theme = '*'; $files = array(); if ($appCode) { $files = array_merge( glob($this->_path . '/app/*.php', GLOB_NOSORT), - self::_getFiles(array("{$this->_path}/app/code/{$namespace}/{$module}"), '*.php') + self::getFiles(array("{$this->_path}/app/code/{$namespace}/{$module}"), '*.php') ); } if ($otherCode) { @@ -127,16 +127,16 @@ class Files $files, glob($this->_path . '/*.php', GLOB_NOSORT), glob($this->_path . '/pub/*.php', GLOB_NOSORT), - self::_getFiles(array("{$this->_path}/downloader"), '*.php'), - self::_getFiles(array("{$this->_path}/lib/{Mage,Magento,Varien}"), '*.php') + self::getFiles(array("{$this->_path}/downloader"), '*.php'), + self::getFiles(array("{$this->_path}/lib/{Mage,Magento,Varien}"), '*.php') ); } if ($templates) { $files = array_merge( $files, - self::_getFiles(array("{$this->_path}/app/code/{$namespace}/{$module}"), '*.phtml'), - self::_getFiles( - array("{$this->_path}/app/design/{$area}/{$package}/{$theme}/{$namespace}_{$module}"), + self::getFiles(array("{$this->_path}/app/code/{$namespace}/{$module}"), '*.phtml'), + self::getFiles( + array("{$this->_path}/app/design/{$area}/{$theme}/{$namespace}_{$module}"), '*.phtml' ) ); @@ -173,37 +173,37 @@ class Files if ($appCode) { $files = array_merge( $files, - self::_getFiles(array("{$this->_path}/app/code/Magento"), '*.php') + self::getFiles(array("{$this->_path}/app/code/Magento"), '*.php') ); } if ($devTests) { $files = array_merge( $files, - self::_getFiles(array("{$this->_path}/dev/tests"), '*.php') + self::getFiles(array("{$this->_path}/dev/tests"), '*.php') ); } if ($devTools) { $files = array_merge( $files, - self::_getFiles(array("{$this->_path}/dev/tools/Magento"), '*.php') + self::getFiles(array("{$this->_path}/dev/tools/Magento"), '*.php') ); } if ($downloaderApp) { $files = array_merge( $files, - self::_getFiles(array("{$this->_path}/downloader/app/Magento"), '*.php') + self::getFiles(array("{$this->_path}/downloader/app/Magento"), '*.php') ); } if ($downloaderLib) { $files = array_merge( $files, - self::_getFiles(array("{$this->_path}/downloader/lib/Magento"), '*.php') + self::getFiles(array("{$this->_path}/downloader/lib/Magento"), '*.php') ); } if ($lib) { $files = array_merge( $files, - self::_getFiles(array("{$this->_path}/lib/Magento"), '*.php') + self::getFiles(array("{$this->_path}/lib/Magento"), '*.php') ); } self::$_cache[$key] = $files; @@ -346,7 +346,7 @@ class Files if (!isset(self::$_cache[__METHOD__][$cacheKey])) { $files = array(); if ($params['include_code']) { - $files = self::_getFiles( + $files = self::getFiles( array( "{$this->_path}/app/code/{$params['namespace']}/{$params['module']}" . "/view/{$params['area']}/layout" @@ -364,7 +364,7 @@ class Files ); $files = array_merge( $files, - self::_getFiles( + self::getFiles( $dirPatterns, '*.xml' ) @@ -390,11 +390,11 @@ class Files if (isset(self::$_cache[$key])) { return self::$_cache[$key]; } - $namespace = $module = $area = $package = $theme = $skin = '*'; - $files = self::_getFiles( + $namespace = $module = $area = $theme = $skin = '*'; + $files = self::getFiles( array( "{$this->_path}/app/code/{$namespace}/{$module}/view/{$area}", - "{$this->_path}/app/design/{$area}/{$package}/{$theme}/skin/{$skin}", + "{$this->_path}/app/design/{$area}/{$theme}/skin/{$skin}", "{$this->_path}/pub/lib/{mage,varien}" ), '*.js' @@ -415,13 +415,13 @@ class Files if (isset(self::$_cache[$key])) { return self::$_cache[$key]; } - $namespace = $module = $package = $theme = '*'; + $namespace = $module = $theme = '*'; $paths = array( "{$this->_path}/app/code/{$namespace}/{$module}/view/{$area}", - "{$this->_path}/app/design/{$area}/{$package}/{$theme}", + "{$this->_path}/app/design/{$area}/{$theme}", "{$this->_path}/pub/lib/varien", ); - $files = self::_getFiles( + $files = self::getFiles( $paths, '*.js' ); @@ -430,29 +430,19 @@ class Files $adminhtmlPaths = array( "{$this->_path}/pub/lib/mage/{adminhtml,backend}", ); - $files = array_merge($files, self::_getFiles($adminhtmlPaths, '*.js')); + $files = array_merge($files, self::getFiles($adminhtmlPaths, '*.js')); } else { $frontendPaths = array("{$this->_path}/pub/lib/mage"); /* current structure of /pub/lib/mage directory contains frontend javascript in the root, backend javascript in subdirectories. That's why script shouldn't go recursive throught subdirectories to get js files for frontend */ - $files = array_merge($files, self::_getFiles($frontendPaths, '*.js', false)); + $files = array_merge($files, self::getFiles($frontendPaths, '*.js', false)); } self::$_cache[$key] = $files; return $files; } - /** - * Returns list of Twig files in Magento app directory. - * - * @return array - */ - public function getTwigFiles() - { - return self::_getFiles(array($this->_path . '/app'), '*.twig'); - } - /** * Returns list of Phtml files in Magento app directory. * @@ -474,7 +464,7 @@ class Files if (isset(self::$_cache[$key])) { return self::$_cache[$key]; } - $files = self::_getFiles(array($this->_path . '/app/code/*/*/view/email'), '*.html'); + $files = self::getFiles(array($this->_path . '/app/code/*/*/view/email'), '*.html'); $result = self::composeDataSets($files); self::$_cache[$key] = $result; return $result; @@ -493,7 +483,7 @@ class Files return self::$_cache[$key]; } - $subFiles = self::_getFiles( + $subFiles = self::getFiles( array( $this->_path . '/app', $this->_path . '/dev', @@ -526,7 +516,7 @@ class Files * @param string $fileNamePattern * @return array */ - protected static function _getFiles(array $dirPatterns, $fileNamePattern, $recursive = true) + public static function getFiles(array $dirPatterns, $fileNamePattern, $recursive = true) { $result = array(); foreach ($dirPatterns as $oneDirPattern) { @@ -535,7 +525,7 @@ class Files $filesInDir = array_diff($entriesInDir, $subDirs); if ($recursive) { - $filesInSubDir = self::_getFiles($subDirs, $fileNamePattern); + $filesInSubDir = self::getFiles($subDirs, $fileNamePattern); $result = array_merge($result, $filesInDir, $filesInSubDir); } } @@ -548,7 +538,7 @@ class Files */ public function getDiConfigs() { - $primaryConfigs = glob($this->_path . '/app/etc/di/*.xml'); + $primaryConfigs = glob($this->_path . '/app/etc/{di.xml,*/di.xml}', GLOB_BRACE); $moduleConfigs = glob($this->_path . '/app/code/*/*/etc/{di,*/di}.xml', GLOB_BRACE); $configs = array_merge($primaryConfigs, $moduleConfigs); return $configs; @@ -661,7 +651,7 @@ class Files { $key = __METHOD__ . "/{$module}"; if (!isset(self::$_cache[$key])) { - $files = self::_getFiles(array("{$this->_path}/app/code/Magento/{$module}"), '*.php'); + $files = self::getFiles(array("{$this->_path}/app/code/Magento/{$module}"), '*.php'); self::$_cache[$key] = $files; } diff --git a/dev/tests/static/phpunit.xml.dist b/dev/tests/static/phpunit.xml.dist index aee6d138cf1..80094e84bd9 100644 --- a/dev/tests/static/phpunit.xml.dist +++ b/dev/tests/static/phpunit.xml.dist @@ -38,9 +38,6 @@ <testsuite name="Code Integrity Tests"> <directory>testsuite/Magento/Test/Integrity</directory> </testsuite> - <testsuite name="Twig Syntax Checker"> - <directory>testsuite/Magento/Test/Twig/TwigExtensionTest.php</directory> - </testsuite> </testsuites> <php> <ini name="date.timezone" value="America/Los_Angeles"/> diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/ClassesTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/ClassesTest.php index 512ea7ece34..364734d929f 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/ClassesTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/ClassesTest.php @@ -39,6 +39,10 @@ class ClassesTest extends \PHPUnit_Framework_TestCase protected static $_keywordsBlacklist = array("String", "Array", "Boolean", "Element"); + protected static $_namespaceBlacklist = null; + + protected static $_referenceBlackList = null; + public function testPhpFiles() { $invoker = new \Magento\TestFramework\Utility\AggregateInvoker($this); @@ -210,10 +214,13 @@ class ClassesTest extends \PHPUnit_Framework_TestCase * @param array $file */ function ($file) { - $relativePath = str_replace(\Magento\TestFramework\Utility\Files::init()->getPathToSource(), "", $file); + $relativePath = str_replace(\Magento\TestFramework\Utility\Files::init()->getPathToSource() . "/", + "", + $file + ); // exceptions made for the files from the blacklist - $blacklist = require __DIR__ . '/NamespaceBlacklist.php'; - if (in_array($relativePath, $blacklist)) { + self::_setNamespaceBlackList(); + if (in_array($relativePath, self::$_namespaceBlacklist)) { return; } @@ -237,7 +244,31 @@ class ClassesTest extends \PHPUnit_Framework_TestCase ); } + protected function _setNamespaceBlackList() + { + if (!isset(self::$_namespaceBlacklist)) { + $blackList = array(); + foreach (glob(__DIR__ . '/_files/blacklist/namespace.txt') as $list) { + $fileList = file($list, FILE_IGNORE_NEW_LINES); + foreach ($fileList as $currentFile) { + $absolutePath = + \Magento\TestFramework\Utility\Files::init()->getPathToSource() . + DIRECTORY_SEPARATOR . + $currentFile; + if (is_dir($absolutePath)) { + $recursiveFiles = + \Magento\TestFramework\Utility\Files::getFiles(array($absolutePath), '*.php', true); + $blackList = array_merge($blackList, $recursiveFiles); + } else { + array_push($blackList, $currentFile); + } + } + } + self::$_namespaceBlacklist = $blackList; + } + } + /** * Assert PHP classes have valid formal namespaces according to file locations * @@ -358,22 +389,30 @@ class ClassesTest extends \PHPUnit_Framework_TestCase } /** - * This function is to remove legacy code usages according to ReferenceBlacklist.php + * This function is to remove legacy code usages according to _files/blacklist/reference.txt * @param $classes * @return array */ protected function referenceBlacklistFilter($classes) { // exceptions made for the files from the blacklist - $blacklist = require __DIR__ . '/ReferenceBlacklist.php'; + self::_setReferenceBlacklist(); foreach ($classes as $class) { - if (in_array($class, $blacklist)) { + if (in_array($class, self::$_referenceBlackList)) { unset($classes[array_search($class, $classes)]); } } return $classes; } + protected function _setReferenceBlacklist() + { + if (!isset(self::$_referenceBlackList)) { + $blackList = file(__DIR__ . DIRECTORY_SEPARATOR . '_files/blacklist/reference.txt', FILE_IGNORE_NEW_LINES); + self::$_referenceBlackList = $blackList; + } + } + /** * This function is to remove special cases (if any) from the list of found bad classes * @param array $badClasses diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Di/ConfigurationTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Di/ConfigurationTest.php new file mode 100644 index 00000000000..9be734c294c --- /dev/null +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Di/ConfigurationTest.php @@ -0,0 +1,104 @@ +<?php +/** + * DI configuration test. Checks configuration of types and virtual types parameters + * + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Test\Integrity\Di; + +class ConfigurationTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\ObjectManager\Config\Mapper\Dom() + */ + protected $_mapper; + + protected function setUp() + { + $basePath = \Magento\TestFramework\Utility\Files::init()->getPathToSource(); + \Magento\Autoload\IncludePath::addIncludePath(array( + $basePath . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'code', + $basePath . DIRECTORY_SEPARATOR . 'lib', + )); + $this->_mapper = new \Magento\ObjectManager\Config\Mapper\Dom(); + + } + + /** + * @dataProvider configFilesDataProvider + */ + public function testConfigurationOfInstanceParameters($file) + { + $dom = new \DOMDocument(); + $dom->load($file); + $data = $this->_mapper->convert($dom); + + foreach ($data as $instanceName => $parameters) { + if (!isset($parameters['parameters']) || empty($parameters['parameters'])) { + continue; + } + + if (\Magento\TestFramework\Utility\Classes::isVirtual($instanceName)) { + $instanceName = \Magento\TestFramework\Utility\Classes::resolveVirtualType($instanceName); + } + $parameters = $parameters['parameters']; + + if (!class_exists($instanceName)) { + $this->fail('Non existed class: ' . $instanceName); + } + + $reflectionClass = new \ReflectionClass($instanceName); + + $constructor = $reflectionClass->getConstructor(); + if (!$constructor) { + $this->fail('Class ' . $instanceName . ' does not have __constructor'); + } + + $classParameters = $constructor->getParameters(); + foreach ($classParameters as $classParameter) { + $parameterName = $classParameter->getName(); + if (array_key_exists($parameterName, $parameters)) { + unset($parameters[$parameterName]); + } + } + $this->assertEmpty($parameters, + 'Configuration of ' . $instanceName + . ' contains data for non-existed parameters: ' . implode(', ', array_keys($parameters)) + . ' in file: ' . $file + ); + } + } + + /** + * @return array + */ + public function configFilesDataProvider() + { + $output = array(); + $files = \Magento\TestFramework\Utility\Files::init()->getDiConfigs(); + foreach ($files as $file) { + $output[$file] = array($file); + } + return $output; + } +} diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/NamespaceBlacklist.php b/dev/tests/static/testsuite/Magento/Test/Integrity/NamespaceBlacklist.php deleted file mode 100644 index 2b0e29cbf76..00000000000 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/NamespaceBlacklist.php +++ /dev/null @@ -1,80 +0,0 @@ -<?php -/** - * Files excluded from the ClassesTest->testClassNamespace() for PSR-X standards - * - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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 tests - * @package static - * @subpackage Integrity - * @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) - */ -$i18nFixtureDir = '/dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Code/Dictionary/_files/'; -$i18nLibDir = '/dev/tools/Magento/Tools/I18n/Zend/'; -$phpExemplar = '/dev/tests/static/testsuite/Magento/Test/Php/Exemplar/'; - -return array( - '/dev/tests/unit/testsuite/Magento/Test/Tools/Di/_files/app/code/Magento/SomeModule/Model/Test.php', - '/dev/tests/unit/testsuite/Magento/Test/Tools/Di/_files/app/code/Magento/SomeModule/Helper/Test.php', - $i18nLibDir . 'Exception.php', - $i18nLibDir . 'Console/Getopt/Exception.php', - $i18nLibDir . 'Console/Getopt.php', - $i18nFixtureDir . 'source/app/code/Magento/FirstModule/Model/Model.php', - $i18nFixtureDir . 'source/app/code/Magento/SecondModule/Model/Model.php', - $i18nFixtureDir . 'source/unused/Model.php', - $i18nFixtureDir . 'source/app/code/Magento/FirstModule/Helper/Helper.php', - $phpExemplar . 'CodeMessTest/phpmd/input/coupling.php', - $phpExemplar . 'CodeMessTest/phpmd/input/cyclomatic_complexity.php', - $phpExemplar . 'CodeMessTest/phpmd/input/descendant_count.php', - $phpExemplar . 'CodeMessTest/phpmd/input/field_count.php', - $phpExemplar . 'CodeMessTest/phpmd/input/inheritance_depth.php', - $phpExemplar . 'CodeMessTest/phpmd/input/method_count.php', - $phpExemplar . 'CodeMessTest/phpmd/input/method_length.php', - $phpExemplar . 'CodeMessTest/phpmd/input/naming.php', - $phpExemplar . 'CodeMessTest/phpmd/input/parameter_list.php', - $phpExemplar . 'CodeMessTest/phpmd/input/prohibited_statement.php', - $phpExemplar . 'CodeMessTest/phpmd/input/prohibited_statement_goto.php', - $phpExemplar . 'CodeMessTest/phpmd/input/public_count.php', - $phpExemplar . 'CodeMessTest/phpmd/input/unused.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/coding_style/classes/brace_same_line.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/coding_style/classes/brace_several_lines_below.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/coding_style/classes/brace_with_code.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/coding_style/classes/brace_with_spaces.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/coding_style/classes/normal_class.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/coding_style/functions/method_without_scope.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/coding_style/inline_doc/normal.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/coding_style/inline_doc/format/wrong_align.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/general/indentation_nonexact_phpdoc.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/naming/constant/minuscule_letter.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/naming/constant/normal_constant.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/naming/method/capital_start.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/naming/method/normal_camelcase.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/naming/method/normal_plain.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/naming/method/normal_underscore_start.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/naming/method/underscore_middle.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/naming/method/underscore_start_public.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/naming/property/capital_start.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/naming/property/normal_camelcase.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/naming/property/normal_plain.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/naming/property/normal_underscore.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/naming/property/underscore_absent.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/naming/property/underscore_middle.php', - $phpExemplar . 'CodeStyleTest/phpcs/input/naming/property/underscore_start_public.php', -); diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/ReferenceBlacklist.php b/dev/tests/static/testsuite/Magento/Test/Integrity/ReferenceBlacklist.php deleted file mode 100644 index 69ede68cd49..00000000000 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/ReferenceBlacklist.php +++ /dev/null @@ -1,65 +0,0 @@ -<?php -/** - * Legacy class usages excluded from the ClassesTest->testClassReferences for PSR-X standards - * - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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 tests - * @package static - * @subpackage Integrity - * @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) - */ - -return array( - 'PEAR_PackageFile', - 'Simple_Xml', - 'PersistentCustomerSegmentation', - 'SolrClient', - 'SolrQuery', - 'RegionUpdater', // JavaScript usage - 'Fixture_Module', // JavaScript usage - 'TheCompoundNamespace_TheCompoundModule', - 'Some_Module', - 'Not_Existed_Class', - 'CustomSelect', - - // found in /dev/tests/unit/testsuite/Magento/Test/Tools/Di/_files/app/code/Magento/SomeModule/Model/Test.php - '\Magento\SomeModule\Model\Element\Proxy', - - 'Map_Module', - 'Module_One', - 'Module_Two', - 'Module_Name', - 'Test', - 'Local_Module', - - // found in /dev/tests/unit/testsuite/Magento/Webapi/Controller/Soap/HandlerTest.php - '\Magento\Webapi\Controller\Soap\Security', - - 'Mage', - 'Pear_Package_Parser_v2', - 'PEAR_Config', - 'PEAR_DependencyDB', - 'PEAR_Frontend', - 'PEAR_Command', - 'Zend', - 'PEAR_PackageFileManager2', - 'PEAR', -); diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/namespace.txt b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/namespace.txt new file mode 100644 index 00000000000..8991e35d1b3 --- /dev/null +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/namespace.txt @@ -0,0 +1,46 @@ +dev/tests/unit/testsuite/Magento/Test/Tools/Di/_files/app/code/Magento/SomeModule/Model/Test.php +dev/tests/unit/testsuite/Magento/Test/Tools/Di/_files/app/code/Magento/SomeModule/Helper/Test.php +dev/tools/Magento/Tools/I18n/Zend/Exception.php +dev/tools/Magento/Tools/I18n/Zend/Console/Getopt/Exception.php +dev/tools/Magento/Tools/I18n/Zend/Console/Getopt.php +dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Code/Dictionary/_files/source/app/code/Magento/FirstModule/Model/Model.php +dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Code/Dictionary/_files/source/app/code/Magento/SecondModule/Model/Model.php +dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Code/Dictionary/_files/source/unused/Model.php +dev/tests/integration/testsuite/Magento/Test/Tools/I18n/Code/Dictionary/_files/source/app/code/Magento/FirstModule/Helper/Helper.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeMessTest/phpmd/input/coupling.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeMessTest/phpmd/input/cyclomatic_complexity.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeMessTest/phpmd/input/descendant_count.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeMessTest/phpmd/input/field_count.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeMessTest/phpmd/input/inheritance_depth.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeMessTest/phpmd/input/method_count.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeMessTest/phpmd/input/method_length.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeMessTest/phpmd/input/naming.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeMessTest/phpmd/input/parameter_list.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeMessTest/phpmd/input/prohibited_statement.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeMessTest/phpmd/input/prohibited_statement_goto.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeMessTest/phpmd/input/public_count.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeMessTest/phpmd/input/unused.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/coding_style/classes/brace_same_line.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/coding_style/classes/brace_several_lines_below.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/coding_style/classes/brace_with_code.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/coding_style/classes/brace_with_spaces.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/coding_style/classes/normal_class.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/coding_style/functions/method_without_scope.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/coding_style/inline_doc/normal.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/coding_style/inline_doc/format/wrong_align.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/general/indentation_nonexact_phpdoc.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/naming/constant/minuscule_letter.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/naming/constant/normal_constant.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/naming/method/capital_start.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/naming/method/normal_camelcase.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/naming/method/normal_plain.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/naming/method/normal_underscore_start.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/naming/method/underscore_middle.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/naming/method/underscore_start_public.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/naming/property/capital_start.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/naming/property/normal_camelcase.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/naming/property/normal_plain.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/naming/property/normal_underscore.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/naming/property/underscore_absent.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/naming/property/underscore_middle.php +dev/tests/static/testsuite/Magento/Test/Php/Exemplar/CodeStyleTest/phpcs/input/naming/property/underscore_start_public.php \ No newline at end of file diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/reference.txt b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/reference.txt new file mode 100644 index 00000000000..2a23e999b3c --- /dev/null +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/reference.txt @@ -0,0 +1,28 @@ +PEAR_PackageFile +Simple_Xml +PersistentCustomerSegmentation +SolrClient +SolrQuery +RegionUpdater +Fixture_Module +TheCompoundNamespace_TheCompoundModule +Some_Module +Not_Existed_Class +CustomSelect +\Magento\SomeModule\Model\Element\Proxy +Map_Module +Module_One +Module_Two +Module_Name +Test +Local_Module +\Magento\Webapi\Controller\Soap\Security +Mage +Pear_Package_Parser_v2 +PEAR_Config +PEAR_DependencyDB +PEAR_Frontend +PEAR_Command +Zend +PEAR_PackageFileManager2 +PEAR \ No newline at end of file diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php b/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php index 7c9e9a61c0f..e3021b8f889 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php @@ -312,7 +312,7 @@ class ObsoleteCodeTest extends \PHPUnit_Framework_TestCase '/getOptions\(\)\s*->get(Base|App|Code|Design|Etc|Lib|Locale|Js|Media' .'|Var|Tmp|Cache|Log|Session|Upload|Export)?Dir\(/S', $content, - 'The class \Magento\Core\Model\Config\Options is obsolete. Replacement suggestion: \Magento\Core\Model\Dir' + 'The class \Magento\Core\Model\Config\Options is obsolete. Replacement suggestion: \Magento\App\Dir' ); } diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php index 6a0f361aaf6..43d2b754e16 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php @@ -217,7 +217,10 @@ return array( 'Magento\Backend\Model\Config\Backend\Admin\Usecustom' ), array('Mage_Adminhtml_Model_System_Config_Backend_Admin_Usecustompath', - 'Magento\Backend\Model\Config\Backend\Admin\Usecustompath' + 'Magento\Backend\Model\Config\Backend\Admin\Custompath' + ), + array('Magento\Backend\Model\Config\Backend\Admin\Usecustompath', + 'Magento\Backend\Model\Config\Backend\Admin\Custompath' ), array('Mage_Adminhtml_Model_System_Config_Backend_Admin_Usesecretkey', 'Magento\Backend\Model\Config\Backend\Admin\Usesecretkey' @@ -585,7 +588,7 @@ return array( array('Mage_Core_Controller_Magento_Router_Admin', 'Magento\Backend\Controller\Router\DefaultRouter'), array('Mage_Core_Model_Convert'), array('Mage_Core_Model_Config_Fieldset', 'Magento\Core\Model\Fieldset\Config'), - array('Mage_Core_Model_Config_Options', 'Magento\Core\Model\Dir'), + array('Mage_Core_Model_Config_Options', 'Magento\App\Dir'), array('Mage_Core_Model_Config_Module'), array('Mage_Core_Model_Config_System'), array('Mage_Core_Model_Design_Source_Apply'), @@ -988,6 +991,7 @@ return array( array('Magento\Core\Model\Resource\Helper\Mysql4', 'Magento\Core\Model\Resource\Helper'), array('Magento\Catalog\Model\Resource\Helper\Mysql4', 'Magento\Catalog\Model\Resource\Helper'), array('Magento\Eav\Model\Resource\Helper\Mysql4', 'Magento\Eav\Model\Resource\Helper'), + array('Magento\Eav\Model\Entity\Attribute\Backend\Array', 'Magento\Eav\Model\Entity\Attribute\Backend\ArrayBackend'), array('Magento\Sales\Model\Resource\Helper\HelperInterface', 'Magento\Sales\Model\Resource\HelperInterface'), array('Magento\Reports\Model\Resource\Helper\HelperInterface', 'Magento\Reports\Model\Resource\HelperInterface'), array('Magento\Poll\Block\ActivePoll'), @@ -1003,9 +1007,40 @@ return array( array('Magento\Poll\Model\Resource\Poll\Vote'), array('Mage:'), array('Magento\Backup', 'Magento\Backup\Factory'), + array('Magento\Core\Controller\Front\Router', 'Magento\Core\Controller\Request\HttpProxy'), + array('Magento\Core\Controller\Response\Http', 'Magento\Core\Controller\Varien\Action\Forward'), + array('Magento\Core\Controller\Varien\Action\Redirect', 'Magento\Core\Controller\Varien\DispatchableInterface'), + array('Magento\Core\Controller\Varien\Front'), + array('Magento\Core\Controller\FrontInterface', 'Magento\Core\Model\App\Handler'), + array('Magento\Core\Model\App\Proxy', 'Magento\Core\Model\Event\Config\SchemaLocator'), + array('Magento\Core\Controller\Varien\Router\AbstractRouter', 'Magento\Core\Controller\Varien\AbstractAction'), + array('Magento\Core\Controller\Varien\Exception', 'Magento\HTTP\HandlerFactory'), + array('Magento\Core\Controller\Request\Http', 'Magento\Core\Controller\Varien\Router\AbstractRouter'), + array('Magento\Core\Controller\Varien\Router\DefaultRouter', 'Magento\Core\Model\NoRouteHandlerList'), + array('Magento\Core\Controller\Varien\Action\Factory', 'Magento\Core\Model\Dir'), + array('Magento\Core\Model\ModuleList', 'Magento\Core\Model\ModuleListInterface'), + array('Magento\Core\Model\RouterList', 'Magento\Core\Model\App\State'), + array('Magento\Core\Model\Event\Config\Converter', 'Magento\Core\Model\Event\Config\Data'), + array('Magento\Core\Model\Event\Config\Reader', 'Magento\Core\Model\Event\Invoker\InvokerDefault'), + array('Magento\Core\Model\Event\Config', 'Magento\Core\Model\Event\ConfigInterface'), + array('Magento\Core\Model\Event\InvokerInterface', 'Magento\Core\Model\Event\Manager'), + array('Magento\HTTP\Handler\Composite', 'Magento\HTTP\HandlerInterface'), + array('Magento\Backend\Model\Request\PathInfoProcessor', 'Magento\Backend\Model\Router\NoRouteHandler'), + array('Magento\Core\Model\Request\PathInfoProcessor', 'Magento\Core\Model\Request\RewriteService'), + array('Magento\Core\Model\Router\NoRouteHandler', 'Magento\Core\Model\Resource\SetupFactory'), + array('Magento\Core\Model\Dir\Verification', 'Magento\Core\Model\Module\Declaration\Converter\Dom'), + array('Magento\Core\Model\Module\Declaration\Reader\Filesystem', 'Magento\Core\Model\Module\Dir'), + array('Magento\Core\Model\Module\Declaration\FileResolver', 'Magento\Core\Model\Module\Declaration\SchemaLocator'), + array('Magento\Core\Model\Module\Dir\ReverseResolver', 'Magento\Core\Model\Module\ResourceResolver'), + array('Magento\Core\Model\Module\ResourceResolverInterface', 'Magento\Core\Model\Resource\SetupInterface'), + array('Magento\Core\Model\Db\UpdaterInterface', 'Magento\Core\Model\Router\NoRouteHandlerInterface'), + array('Magento\Core\Model\Router\NoRouteHandlerInterface', 'Magento\Core\Model\UrlInterface'), array('Magento\Sales\Model\Resource\Order\Attribute\Backend\Parent'), array('Magento\Sales\Model\Resource\Order\Creditmemo\Attribute\Backend\Parent'), array('Magento\Sales\Model\Resource\Order\Invoice\Attribute\Backend\Parent'), array('Magento\Sales\Model\Resource\Order\Shipment\Attribute\Backend\Parent'), array('Magento\Sales\Model\Resource\Quote\Address\Attribute\Backend\Parent'), + array('Magento\Core\Model\ThemeInterface', 'Magento\View\Design\ThemeInterface'), + array('Magento\Core\Model\View\DesignInterface', 'Magento\View\DesignInterface'), + array('Magento\Core\Model\Layout\Element', 'Magento\View\Layout\Element'), ); diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_config_nodes.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_config_nodes.php index 43453169858..68b8a2c4de0 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_config_nodes.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_config_nodes.php @@ -46,7 +46,7 @@ return array( '/config/*[self::global|self::adminhtml|self::frontend]/events' => 'This configuration moved to events.xml file', '/config/*[self::global|self::adminhtml|self::frontend]/routers' => 'Routes configuration moved to routes.xml file,' - . 'routers list can be set through Di configuration of \Magento\Core\Model\RouterList model', + . 'routers list can be set through Di configuration of \Magento\App\RouterList model', '/config/global/importexport' => 'This configuration moved to import.xml and export.xml files', '/config/global/catalog/product/type' => 'This configuration moved to product_types.xml file', '/config/global/catalog/product/options' => 'This configuration moved to product_options.xml file', @@ -56,7 +56,7 @@ return array( '/config/global/salesrule' => 'This configuration moved to Di configuration of \Magento\SalesRule\Helper\Coupon', '/config/global/session' => 'This configuration moved to Di configuration of \Magento\Core\Model\Session\Validator', '/config/global/ignore_user_agents' => 'This configuration moved to Di configuration of \Magento\Log\Model\Visitor', - '/config/global/request' => 'This configuration moved to Di configuration of \Magento\Core\Controller\Request\Http', + '/config/global/request' => 'This configuration moved to Di configuration of \Magento\App\RequestInterface', '/config/global/secure_url' => 'This configuration moved to Di configuration of \Magento\Core\Model\Url\SecurityInfo', '/config/global/dev' => diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php index dcc7cdb7df3..0cfb4ae052f 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php @@ -141,6 +141,10 @@ return array( array('XML_PATH_CHECK_EXTENSIONS', 'Magento\Install\Model\Config'), array('XML_PATH_CONNECTION_TYPE', 'Magento\Core\Model\Config\Resource'), array('XML_PATH_COUNTRY_DEFAULT', 'Magento\Paypal\Model\System\Config\Backend\MerchantCountry'), + array('XML_PATH_DEBUG_TEMPLATE_HINTS', 'Magento\Core\Block\Template', + 'Magento\Core\Model\TemplateEngine\Plugin::XML_PATH_DEBUG_TEMPLATE_HINTS'), + array('XML_PATH_DEBUG_TEMPLATE_HINTS_BLOCKS', 'Magento\Core\Block\Template', + 'Magento\Core\Model\TemplateEngine\Plugin::XML_PATH_DEBUG_TEMPLATE_HINTS_BLOCKS'), array('XML_PATH_DEFAULT_COUNTRY', 'Magento\Core\Model\Locale'), array('XML_PATH_DEFAULT_LOCALE', 'Magento\Core\Model\Locale', 'Magento_Core_Model_LocaleInterface::XML_PATH_DEFAULT_LOCALE' @@ -204,7 +208,7 @@ return array( 'Magento_Core_Model_Session_Validator::XML_PATH_USE_USER_AGENT' ), - array('XML_NODE_DIRECT_FRONT_NAMES', 'Magento\Core\Controller\Request\Http'), + array('XML_NODE_DIRECT_FRONT_NAMES', 'Magento\App\Request\Http'), array('XML_NODE_USET_AGENT_SKIP', 'Magento\Core\Model\Session\AbstractSession'), array('XML_PAGE_TYPE_RENDER_INHERITED', 'Magento\Core\Controller\Varien\Action'), @@ -234,12 +238,17 @@ return array( array('XML_PATH_DISABLED_CACHE_TYPES', 'Magento\DesignEditor\Helper\Data'), array('XML_PATH_ENCRYPTION_MODEL', 'Magento\Core\Helper\Data'), array('CONFIG_KEY_PATH_TO_MAP_FILE', 'Magento\Core\Model\Resource\Setup\Migration'), - array('XML_PATH_IGNORE_DEV_MODE', 'Magento\Core\Model\Db\UpdaterInterface'), - array('XML_PATH_SKIP_PROCESS_MODULES_UPDATES', 'Magento\Core\Model\Db\UpdaterInterface'), + array('XML_PATH_IGNORE_DEV_MODE', 'Magento\App\UpdaterInterface'), + array('XML_PATH_SKIP_PROCESS_MODULES_UPDATES', 'Magento\App\UpdaterInterface'), array('XML_NODE_SESSION_SAVE', 'Magento\Core\Model\Session\AbstractSession', 'Magento_Core_Model_Session_AbstractSession::PARAM_SESSION_SAVE_METHOD' ), array('XML_NODE_SESSION_SAVE_PATH', 'Magento\Core\Model\Session\AbstractSession', 'Magento_Core_Model_Session_AbstractSession::PARAM_SESSION_SAVE_PATH' ), + array('XML_PATH_USE_CUSTOM_ADMIN_PATH', 'Magento\Backend\Helper\Data'), + array('XML_PATH_CUSTOM_ADMIN_PATH', 'Magento\Backend\Helper\Data'), + array('XML_PATH_BACKEND_AREA_FRONTNAME', 'Magento\Backend\Helper\Data'), + array('PARAM_BACKEND_FRONT_NAME', 'Magento\Backend\Helper\Data'), + ); diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php index 02c2c19efdd..0cee99fdcec 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php @@ -47,7 +47,7 @@ return array( array('_beforeMove', 'Magento\Catalog\Model\Resource\Category\Tree'), array('_bytesToMbytes', 'Magento\Catalog\Model\Product\Option\Type\File'), array('_calculatePrice', 'Magento\Sales\Model\Quote\Item\AbstractItem'), - array('_canBeStoreCodeInUrl', 'Magento\Core\Controller\Request\Http'), + array('_canBeStoreCodeInUrl', 'Magento\App\Request\Http'), array('_canShowField', 'Magento\Backend\Block\System\Config\Form'), array('_canUseCacheForInit', 'Magento\Core\Model\Config'), array('_canUseLocalModules'), @@ -198,7 +198,7 @@ return array( array('addLinkRel', 'Magento\Page\Block\Html\Head'), array('addLogInLink', 'Magento\Customer\Block\Account\Link'), array('addModule', 'Magento\Core\Controller\Varien\Router\Base'), - array('addRouter', 'Magento\Core\Controller\Varien\Front'), + array('addRouter', 'Magento\App\FrontController'), array('addOptionRenderer', 'Magento\Catalog\Block\Product\View\Options'), array('addPageHandles', 'Magento\Core\Model\Layout\Update', 'Magento\Core\Model\Layout\Merge'), array('addPagerLimit', 'Magento\Catalog\Block\Product\ProductList\Toolbar'), @@ -266,7 +266,7 @@ return array( ), array('cleanVarFolder', '', 'Magento_Io_File::rmdirRecursive()'), array('cleanVarSubFolders', '', - 'glob() on \Magento\Core\Model\Dir::getBaseDir(\Magento\Core\Model\App\Dir::VAR_DIR)'), + 'glob() on \Magento\App\Dir::getBaseDir(\Magento\Core\Model\App\Dir::VAR_DIR)'), array('cloneIndexTable', 'Magento\Index\Model\Resource\AbstractResource'), array('collectRoutes', 'Magento\Backend\Controller\Router\DefaultRouter'), array('collectRoutes', 'Magento\Core\Controller\Varien\Router\Base'), @@ -352,9 +352,12 @@ return array( array('getDebug', 'Magento\Paypal\Model\Api\AbstractApi'), array('getDefaultBasePath', 'Magento\Core\Model\Store'), array('getDeleteUrl', 'Magento\Adminhtml\Block\Catalog\Product\Edit'), + array('getDirectOutput', 'Magento\Core\Block\Template'), array('getDirectOutput', 'Magento\Core\Model\Layout'), + array('getDirectOutput', 'Magento\View\LayoutInterface'), array('getDistroServerVars', 'Magento\Core\Model\Config', 'getDistroBaseUrl'), array('getElementClass', 'Magento\Core\Model\Layout\Update'), + array('getEngineFactory', 'Magento\Core\Block\Template\Context', 'getEnginePool'), array('getEntityIdsToIncrementIds', 'Magento\Rss\Model\Resource\Order'), array('getEntityTypeIdsToTypes', 'Magento\Rss\Model\Resource\Order'), array('getEventConfig', 'Magento\Core\Model\Config'), @@ -427,7 +430,7 @@ return array( array('getOrderId', 'Magento\Checkout\Block\Onepage\Success'), array('getOrderId', 'Magento\Shipping\Block\Tracking\Popup'), array('getOriginalHeigh', '', 'getOriginalHeight'), - array('getOriginalRequest', 'Magento\Core\Controller\Request\Http'), + array('getOriginalRequest', 'Magento\App\Request\Http'), array('getPackage', 'Magento\Widget\Model\Widget\Instance'), array('getPackageTheme', 'Magento\Widget\Model\Widget\Instance', 'getThemeId'), array('getPageHandleLabel', 'Magento\Core\Model\Layout\Update', 'Magento\Core\Model\Layout\Merge'), @@ -484,10 +487,10 @@ return array( array('getResTreeJson', 'Magento\Adminhtml\Block\Api\Tab\Rolesedit', 'getTree'), array( 'getRouterByRoute', - 'Magento\Core\Controller\Varien\Front', + 'Magento\App\FrontController', 'Magento_Core_Model_RouterList::getRouterByFrontName' ), - array('getRouterByFrontName', 'Magento\Core\Controller\Varien\Front', + array('getRouterByFrontName', 'Magento\App\FrontController', 'Magento_Core_Model_RouterList::getRouterByFrontName' ), array('getRouters', 'Magento\Core\Model\Config'), @@ -499,6 +502,7 @@ return array( array('getSecure', 'Magento\Core\Model\Url', 'isSecure'), array('getSelectionFinalPrice', 'Magento\Bundle\Model\Product\Price'), array('getShipId', 'Magento\Shipping\Block\Tracking\Popup'), + array('getShowTemplateHints', 'Magento\Core\Block\Template'), array('getSortedChildBlocks', '', 'getChildNames() + $this->getLayout()->getBlock($name)'), array('getSortedChildren', '', 'getChildNames'), array('getSortedElements', 'Magento\Data\Form\Element\Fieldset', 'getElements'), @@ -507,7 +511,7 @@ return array( array('getStore', 'Magento\Captcha\Helper\Data'), array('getStore', 'Magento\Adminhtml\Block\Promo\Widget\Chooser\Sku'), array('getStoreButtonsHtml', 'Magento\Backend\Block\System\Config\Tabs'), - array('getStoreCodeFromPath', 'Magento\Core\Controller\Request\Http'), + array('getStoreCodeFromPath', 'Magento\App\Request\Http'), array('getStoreCurrency', 'Magento\Sales\Model\Order'), array('getStoreSelectOptions', 'Magento\Backend\Block\System\Config\Tabs'), array('getStores', 'Magento\Eav\Block\Adminhtml\Attribute\Edit\Options\AbstractOptions'), @@ -568,7 +572,7 @@ return array( array('imageAction', 'Magento\Catalog\Controller\Product'), array('implodeStreetAddress', 'Magento\Customer\Model\Address\AbstractAddress'), array('importFromTextArray'), - array('init', 'Magento\Core\Controller\Varien\Front'), + array('init', 'Magento\App\FrontController'), array('init', 'Magento\Core\Model\App'), array('init', 'Magento\Core\Model\Config'), array('init', 'Magento\Webapi\Controller\Front'), @@ -583,6 +587,8 @@ return array( array('isAllowedGuestCheckout', 'Magento\Sales\Model\Quote'), array('isAutomaticCleaningAvailable', 'Magento\Cache\Backend\Eaccelerator'), array('isCheckoutAvailable', 'Magento\Checkout\Model\Type\Multishipping'), + array('isDirectOutput', 'Magento\Core\Model\Layout'), + array('isDirectOutput', 'Magento\View\LayoutInterface'), array('isFulAmountCovered'), array('isInstalled', 'Magento\Core\Model\App'), array('isLeyeredNavigationAllowed'), @@ -687,6 +693,7 @@ return array( array('setBlockAlias'), array('setConfig', 'Magento\Captcha\Helper\Data'), array('setCustomerId', 'Magento\Customer\Model\Resource\Address'), + array('setDirectOutput', 'Magento\Core\Model\Layout'), array('setInstance', 'Magento\TestFramework\Bootstrap', 'Magento_TestFramework_Helper_Bootstrap::setInstance'), array('setIsAjaxRequest', 'Magento\Core\Model\Translate\Inline'), array('setNeedUsePriceExcludeTax', '', 'Magento_Tax_Model_Config::setPriceIncludesTax()'), @@ -835,7 +842,6 @@ return array( array('_helper', 'Magento\Catalog\Model\Product\Type\AbstractType'), array('getHelper', 'Magento\Catalog\Model\Resource\Product\Type\Configurable\Attribute\Collection'), array('getHelper', 'Magento\Cms\Model\Wysiwyg\Images\Storage'), - array('getHelper', 'Magento\Core\Model\AppProxy'), array('getHelper', 'Magento\Core\Model\App'), array('getCatalogHelper', 'Magento\Adminhtml\Block\Catalog\Category\Tabs'), array('getStabilityOptions', 'Magento\Connect\Model\Extension'), @@ -856,12 +862,21 @@ return array( array('_getProductType', 'Magento\Adminhtml\Block\Catalog\Product\Edit\Tab\Super\Config\Matrix'), array('_getProductType', 'Magento\Adminhtml\Block\Catalog\Product\Edit\Tab\Super\Config'), array('_getSession', 'Magento\Adminhtml\Model\Sales\Order'), - array('setIsSerializable', 'Magento\Core\Model\App\State'), - array('getIsSerializable', 'Magento\Core\Model\App\State'), + array('setIsSerializable', 'Magento\App\State'), + array('getIsSerializable', 'Magento\App\State'), array('_getInventoryItemResource', 'Magento\Reports\Model\Resource\Product\Lowstock\Collection'), array('getMigrationInstance', 'Magento\Customer\Model\Resource\Setup', '$this->_migrationFactory->create()'), array('turnOnReadCommittedMode', 'Magento\Backup\Model\Resource\Db'), array('turnOnSerializableMode', 'Magento\Backup\Model\Resource\Db', 'prepareTransactionIsolationLevel'), array('_getResourceModel', '\Magento\Webapi\Model\Source\Acl\Role', '$this->_resource'), array('_getSession', '\Magento\Adminhtml\Model\Giftmessage\Save', '$this->_session'), + array('_initRequest', '\Magento\Core\Model\App'), + array('run', '\Magento\Core\Model\App'), + array('_initFrontController', '\Magento\Core\Model\App'), + array('_getFrontControllerByCurrentArea', '\Magento\Core\Model\App'), + array('run', '\Magento\Core\Model\AppInterface'), + array('setModuleDir', 'Magento\Core\Model\Config\Modules\Reader'), + array('setModuleDir', 'Magento\Core\Model\Config'), + array('getAreaConfig', 'Magento\Core\Model\Config'), + array('getViewConfig', '\Magento\Core\Model\View\Config', 'get'), ); diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_properties.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_properties.php index e2a46c7a088..3696180a5ff 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_properties.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_properties.php @@ -51,6 +51,7 @@ return array( array('_customEtcDir', 'Magento\Core\Model\Config'), array('_defaultTemplates', 'Magento\Core\Model\Email\Template'), array('_designProductSettingsApplied'), + array('_directOutput', 'Magento\Core\Model\Layout'), array('_dirs', 'Magento\Core\Model\Resource'), array('_distroServerVars'), array('_entityIdsToIncrementIds'), @@ -69,8 +70,8 @@ return array( array('_modulesReader', 'Magento\Core\Model\ObjectManager\ConfigLoader'), array('_moduleReader', 'Magento\Backend\Model\Menu\Config'), array('_option', 'Magento\Captcha\Helper\Data', '_dirs'), - array('_options', 'Magento\Core\Model\Config', 'Magento\Core\Model\Dir'), - array('_optionsMapping', null, '\Magento\Core\Model\Dir::getBaseDir($nodeKey)'), + array('_options', 'Magento\Core\Model\Config', 'Magento\App\Dir'), + array('_optionsMapping', null, '\Magento\App\Dir::getBaseDir($nodeKey)'), array('_order', 'Magento\Checkout\Block\Onepage\Success'), array('_order_id'), array('_parent', 'Magento\Core\Block\AbstractBlock'), @@ -86,12 +87,16 @@ return array( array('_skipFieldsByModel'), array('_ship_id'), array('_shipTable', 'Magento\Shipping\Model\Resource\Carrier\Tablerate\Collection'), + array('_showTemplateHints', 'Magento\Core\Block\Template', + 'Magento\Core\Model\TemplateEngine\Plugin\DebugHints'), + array('_showTemplateHintsBlocks', 'Magento\Core\Block\Template', + 'Magento\Core\Model\TemplateEngine\Plugin\DebugHints'), array('_sortedChildren'), array('_sortInstructions'), array('_storeFilter', 'Magento\Catalog\Model\Product\Type\AbstractType'), array('_substServerVars'), array('_track_id'), - array('_varSubFolders', null, 'Magento\Core\Model\Dir'), + array('_varSubFolders', null, 'Magento\App\Dir'), array('_viewDir', 'Magento\Core\Block\Template', '_dirs'), array('decoratedIsFirst', null, 'getDecoratedIsFirst'), array('decoratedIsEven', null, 'getDecoratedIsEven'), @@ -101,4 +106,13 @@ return array( array('_useAnalyticFunction'), array('_defaultIndexer', 'Magento\CatalogInventory\Model\Resource\Indexer\Stock'), array('_engine', 'Magento\CatalogSearch\Model\Resource\Fulltext'), + array('_moduleNamespaces', 'Magento\Core\Model\Config'), + array('_allowedAreas', 'Magento\Core\Model\Config'), + array('_app', 'Magento\Core\Block\AbstractBlock'), + array('_app', 'Magento\Core\Block\Template'), + array('_config', 'Magento\Backend\Helper\Data'), + array('_defaultAreaFrontName', 'Magento\Backend\Helper\Data'), + array('_areaFrontName', 'Magento\Backend\Helper\Data'), + array('_backendFrontName', 'Magento\Backend\Helper\Data'), + array('_app', 'Magento\Backend\Block\Widget\Grid\Column\Renderer\Currency'), ); diff --git a/dev/tests/static/testsuite/Magento/Test/Php/_files/blacklist/common.txt b/dev/tests/static/testsuite/Magento/Test/Php/_files/blacklist/common.txt index fa947c421f3..0c86795a6b3 100644 --- a/dev/tests/static/testsuite/Magento/Test/Php/_files/blacklist/common.txt +++ b/dev/tests/static/testsuite/Magento/Test/Php/_files/blacklist/common.txt @@ -105,9 +105,6 @@ lib/Magento/HTTP/Adapter/Curl.php lib/Magento/HTTP/Client.php lib/Magento/HTTP/Client/Curl.php lib/Magento/HTTP/Client/Socket.php -lib/Magento/HTTP/Handler/Composite.php -lib/Magento/HTTP/HandlerFactory.php -lib/Magento/HTTP/HandlerInterface.php lib/Magento/HTTP/IClient.php lib/Magento/Image lib/Magento/Io diff --git a/dev/tests/static/testsuite/Magento/Test/Php/_files/phpcpd/blacklist/common.txt b/dev/tests/static/testsuite/Magento/Test/Php/_files/phpcpd/blacklist/common.txt index aeb96a0f570..f128360d4c0 100644 --- a/dev/tests/static/testsuite/Magento/Test/Php/_files/phpcpd/blacklist/common.txt +++ b/dev/tests/static/testsuite/Magento/Test/Php/_files/phpcpd/blacklist/common.txt @@ -82,7 +82,6 @@ lib/Magento/HTTP/Client lib/Magento/Acl lib/PEAR lib/phpseclib -lib/Twig lib/Magento/Convert Magento/Cron/Model Magento/SalesRule/Model/Resource/Report/Rule diff --git a/dev/tests/static/testsuite/Magento/Test/Php/_files/whitelist/common.txt b/dev/tests/static/testsuite/Magento/Test/Php/_files/whitelist/common.txt index b3699045d21..6cbba2ed7d3 100644 --- a/dev/tests/static/testsuite/Magento/Test/Php/_files/whitelist/common.txt +++ b/dev/tests/static/testsuite/Magento/Test/Php/_files/whitelist/common.txt @@ -41,11 +41,6 @@ app/code/Magento/Checkout/Block/Cart/Link.php app/code/Magento/Checkout/Block/Link.php app/code/Magento/Cms/Controller/Router.php app/code/Magento/Cms/Model/Template/FilterProvider.php -app/code/Magento/Core/Controller/Varien/AbstractAction.php -app/code/Magento/Core/Controller/Varien/Action/Factory.php -app/code/Magento/Core/Controller/Varien/Action/Forward.php -app/code/Magento/Core/Controller/Varien/DispatchableInterface.php -app/code/Magento/Core/Controller/Varien/Router/AbstractRouter.php app/code/Magento/Core/data app/code/Magento/Core/Helper/Css.php app/code/Magento/Core/Model/Config @@ -55,8 +50,6 @@ app/code/Magento/Core/Model/Design.php app/code/Magento/Core/Model/Design/FileResolution app/code/Magento/Core/Model/Design/Fallback app/code/Magento/Core/Model/Design/Source/Design.php -app/code/Magento/Core/Model/Dir -app/code/Magento/Core/Model/Dir.php app/code/Magento/Core/Model/Email/Template/Config app/code/Magento/Core/Model/Email/Template/Config.php app/code/Magento/Core/Model/EntryPoint @@ -66,8 +59,6 @@ app/code/Magento/Core/Model/Layout/Update.php app/code/Magento/Core/Model/Layout/Argument app/code/Magento/Core/Model/Locale/Validator.php app/code/Magento/Core/Model/LocaleInterface.php -app/code/Magento/Core/Model/Module/Dir -app/code/Magento/Core/Model/Module/Dir.php app/code/Magento/Core/Model/ObjectManager app/code/Magento/Core/Model/Page app/code/Magento/Core/Model/Page.php @@ -79,7 +70,6 @@ app/code/Magento/Core/Model/AbstractShell.php app/code/Magento/Core/Model/TemplateEngine app/code/Magento/Core/Model/Theme app/code/Magento/Core/Model/Theme.php -app/code/Magento/Core/Model/ThemeInterface.php app/code/Magento/Core/Model/Url/SecurityInfo.php app/code/Magento/Core/Model/Url/SecurityInfoInterface.php app/code/Magento/Core/Helper/AbstractHelper.php @@ -164,3 +154,4 @@ lib/Magento/Cache/Core.php lib/Magento/Convert lib/Magento/Date.php lib/Magento/Object.php +lib/Magento/App diff --git a/dev/tests/static/testsuite/Magento/Test/Twig/TwigExtensionTest.php b/dev/tests/static/testsuite/Magento/Test/Twig/TwigExtensionTest.php deleted file mode 100644 index 2bc51a7cf87..00000000000 --- a/dev/tests/static/testsuite/Magento/Test/Twig/TwigExtensionTest.php +++ /dev/null @@ -1,57 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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. - * - * Run a twig syntax checker - * - * @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\Test\Twig; - -class TwigExtensionTest extends \PHPUnit_Framework_TestCase -{ - public function testTwigTemplatesValid() - { - $invoker = new \Magento\TestFramework\Utility\AggregateInvoker($this); - $invoker( - function ($file, $runTest = true) { - if (!$runTest) { - return; - } - exec('php ' . __DIR__ . "/_files/twig-lint.phar lint $file", $output, $returnVar); - $this->assertEquals( - 0, $returnVar, - "File $file could not be validated by twig-lint. The output is : \n" . implode("\n", $output) - ); - }, - $this->listAllTwigFiles() - ); - } - - public function listAllTwigFiles() - { - $testData = \Magento\TestFramework\Utility\Files::composeDataSets( - \Magento\TestFramework\Utility\Files::init()->getTwigFiles()); - if (empty($testData)) { - $testData[] = array('Dummy data for when no twig files exist.', false); - } - return $testData; - } -} diff --git a/dev/tests/unit/framework/Magento/Test/Block/Adminhtml.php b/dev/tests/unit/framework/Magento/Test/Block/Adminhtml.php index fcb6d2b0692..b5d3e3e4ccf 100644 --- a/dev/tests/unit/framework/Magento/Test/Block/Adminhtml.php +++ b/dev/tests/unit/framework/Magento/Test/Block/Adminhtml.php @@ -93,16 +93,16 @@ class Adminhtml extends \PHPUnit_Framework_TestCase protected function setUp() { // These mocks are accessed via context - $this->_designMock = $this->_makeMock('Magento\Core\Model\View\DesignInterface'); + $this->_designMock = $this->_makeMock('Magento\View\DesignInterface'); $this->_sessionMock = $this->_makeMock('Magento\Core\Model\Session'); $this->_translatorMock = $this->_makeMock('Magento\Core\Model\Translate'); $this->_layoutMock = $this->_makeMock('Magento\Core\Model\Layout'); - $this->_requestMock = $this->_makeMock('Magento\Core\Controller\Request\Http'); + $this->_requestMock = $this->_makeMock('Magento\App\RequestInterface'); $this->_messagesMock = $this->_makeMock('Magento\Core\Block\Messages'); - $this->_urlMock = $this->_makeMock('Magento\Core\Model\UrlInterface'); - $this->_eventManagerMock = $this->_makeMock('Magento\Core\Model\Event\Manager'); - $this->_controllerMock = $this->_makeMock('Magento\Core\Controller\Varien\Front'); - $this->_dirMock = $this->_makeMock('Magento\Core\Model\Dir'); + $this->_urlMock = $this->_makeMock('Magento\UrlInterface'); + $this->_eventManagerMock = $this->_makeMock('Magento\Event\ManagerInterface'); + $this->_controllerMock = $this->_makeMock('Magento\App\FrontController'); + $this->_dirMock = $this->_makeMock('Magento\App\Dir'); $this->_loggerMock = $this->_makeMock('Magento\Core\Model\Logger'); $this->_filesystemMock = $this->_makeMock('Magento\Filesystem'); $this->_cacheMock = $this->_makeMock('Magento\Core\Model\CacheInterface'); @@ -110,9 +110,9 @@ class Adminhtml extends \PHPUnit_Framework_TestCase $this->_storeManagerMock = $this->_makeMock('Magento\Core\Model\StoreManager'); $this->_helperFactoryMock = $this->_makeMock('Magento\Core\Model\Factory\Helper'); $viewUrlMock = $this->_makeMock('Magento\Core\Model\View\Url'); - $viewConfigMock = $this->_makeMock('Magento\Core\Model\View\Config'); + $viewConfigMock = $this->_makeMock('Magento\View\ConfigInterface'); $viewFileSystemMock = $this->_makeMock('Magento\Core\Model\View\FileSystem'); - $templateFactoryMock = $this->_makeMock('Magento\Core\Model\TemplateEngine\Factory'); + $templatePoolMock = $this->_makeMock('Magento\Core\Model\TemplateEngine\Pool'); $authorizationMock = $this->_makeMock('Magento\AuthorizationInterface'); $cacheStateMock = $this->_makeMock('Magento\Core\Model\Cache\StateInterface'); $appMock = $this->_makeMock('Magento\Core\Model\App'); @@ -144,7 +144,7 @@ class Adminhtml extends \PHPUnit_Framework_TestCase $this->_loggerMock, $this->_filesystemMock, $viewFileSystemMock, - $templateFactoryMock, + $templatePoolMock, $authorizationMock, $appMock, $backendSessionMock, diff --git a/dev/tests/unit/framework/tests/unit/testsuite/Magento/TestFramework/Helper/ObjectManagerTest.php b/dev/tests/unit/framework/tests/unit/testsuite/Magento/TestFramework/Helper/ObjectManagerTest.php index d20cfa73882..f1a4503a09d 100644 --- a/dev/tests/unit/framework/tests/unit/testsuite/Magento/TestFramework/Helper/ObjectManagerTest.php +++ b/dev/tests/unit/framework/tests/unit/testsuite/Magento/TestFramework/Helper/ObjectManagerTest.php @@ -35,15 +35,15 @@ class ObjectManagerTest extends \PHPUnit_Framework_TestCase * @var array */ protected $_blockDependencies = array( - 'request' => 'Magento\Core\Controller\Request\Http', - 'layout' => 'Magento\Core\Model\Layout', - 'eventManager' => 'Magento\Core\Model\Event\Manager', + 'request' => 'Magento\App\RequestInterface', + 'layout' => 'Magento\View\LayoutInterface', + 'eventManager' => 'Magento\Event\ManagerInterface', 'translator' => 'Magento\Core\Model\Translate', 'cache' => 'Magento\Core\Model\CacheInterface', - 'design' => 'Magento\Core\Model\View\DesignInterface', + 'design' => 'Magento\View\DesignInterface', 'session' => 'Magento\Core\Model\Session', 'storeConfig' => 'Magento\Core\Model\Store\Config', - 'frontController' => 'Magento\Core\Controller\Varien\Front' + 'frontController' => 'Magento\App\FrontController' ); /** @@ -52,7 +52,7 @@ class ObjectManagerTest extends \PHPUnit_Framework_TestCase * @var array */ protected $_modelDependencies = array( - 'eventDispatcher' => 'Magento\Core\Model\Event\Manager', + 'eventDispatcher' => 'Magento\Event\ManagerInterface', 'cacheManager' => 'Magento\Core\Model\CacheInterface', 'resource' => 'Magento\Core\Model\Resource\AbstractResource', 'resourceCollection' => 'Magento\Data\Collection\Db' @@ -73,7 +73,7 @@ class ObjectManagerTest extends \PHPUnit_Framework_TestCase $area = 'frontend'; /** @var $layoutMock \Magento\Core\Model\Layout */ - $layoutMock = $this->getMock('Magento\Core\Model\Layout', array('getArea'), array(), '', false); + $layoutMock = $this->getMockBuilder('Magento\View\LayoutInterface')->getMockForAbstractClass(); $layoutMock->expects($this->once()) ->method('getArea') ->will($this->returnValue($area)); diff --git a/dev/tests/unit/testsuite/Magento/AdminNotification/Model/System/Message/BaseurlTest.php b/dev/tests/unit/testsuite/Magento/AdminNotification/Model/System/Message/BaseurlTest.php index 9dc6fb99479..98b1c5c3c00 100644 --- a/dev/tests/unit/testsuite/Magento/AdminNotification/Model/System/Message/BaseurlTest.php +++ b/dev/tests/unit/testsuite/Magento/AdminNotification/Model/System/Message/BaseurlTest.php @@ -64,7 +64,7 @@ class BaseurlTest extends \PHPUnit_Framework_TestCase { $helper = new \Magento\TestFramework\Helper\ObjectManager($this); $this->_configMock = $this->getMock('Magento\Core\Model\Config', array(), array(), '', false); - $this->_urlBuilderMock = $this->getMock('Magento\Core\Model\UrlInterface'); + $this->_urlBuilderMock = $this->getMock('Magento\UrlInterface'); $this->_storeManagerMock = $this->getMock('Magento\Core\Model\StoreManagerInterface'); $configFactoryMock = $this->getMock('Magento\Core\Model\Config\ValueFactory', array('create'), diff --git a/dev/tests/unit/testsuite/Magento/AdminNotification/Model/System/Message/CacheOutdatedTest.php b/dev/tests/unit/testsuite/Magento/AdminNotification/Model/System/Message/CacheOutdatedTest.php index aed0cc53796..7c5408da6d7 100644 --- a/dev/tests/unit/testsuite/Magento/AdminNotification/Model/System/Message/CacheOutdatedTest.php +++ b/dev/tests/unit/testsuite/Magento/AdminNotification/Model/System/Message/CacheOutdatedTest.php @@ -52,7 +52,7 @@ class CacheOutdatedTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_authorizationMock = $this->getMock('Magento\AuthorizationInterface'); - $this->_urlInterfaceMock = $this->getMock('Magento\Core\Model\UrlInterface'); + $this->_urlInterfaceMock = $this->getMock('Magento\UrlInterface'); $this->_cacheTypeListMock = $this->getMock('Magento\Core\Model\Cache\TypeListInterface'); $objectManagerHelper = new \Magento\TestFramework\Helper\ObjectManager($this); diff --git a/dev/tests/unit/testsuite/Magento/Adminhtml/Controller/CacheTest.php b/dev/tests/unit/testsuite/Magento/Adminhtml/Controller/CacheTest.php index 24086c3899a..1c90bbe975e 100644 --- a/dev/tests/unit/testsuite/Magento/Adminhtml/Controller/CacheTest.php +++ b/dev/tests/unit/testsuite/Magento/Adminhtml/Controller/CacheTest.php @@ -31,12 +31,12 @@ class CacheTest extends \PHPUnit_Framework_TestCase // Wire object with mocks $context = $this->getMock('Magento\Backend\Controller\Context', array(), array(), '', false); - $request = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $request = $this->getMock('Magento\App\RequestInterface', array(), array(), '', false); $context->expects($this->any()) ->method('getRequest') ->will($this->returnValue($request)); - $response = $this->getMock('Magento\Core\Controller\Response\Http', array(), array(), '', false); + $response = $this->getMock('Magento\App\Response\Http', array(), array(), '', false); $context->expects($this->any()) ->method('getResponse') ->will($this->returnValue($response)); @@ -46,12 +46,12 @@ class CacheTest extends \PHPUnit_Framework_TestCase ->method('getObjectManager') ->will($this->returnValue($objectManager)); - $frontController = $this->getMock('Magento\Core\Controller\Varien\Front', array(), array(), '', false); + $frontController = $this->getMock('Magento\App\FrontController', array(), array(), '', false); $context->expects($this->any()) ->method('getFrontController') ->will($this->returnValue($frontController)); - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $eventManager->expects($this->once()) ->method('dispatch') ->with('clean_media_cache_after'); @@ -97,10 +97,16 @@ class CacheTest extends \PHPUnit_Framework_TestCase ->method('getUrl') ->with('*/*') ->will($this->returnValue('redirect_url')); + $response->expects($this->once()) ->method('setRedirect') ->with('redirect_url'); + $response->expects($this->once()) + ->method('getHeader') + ->with('X-Frame-Options') + ->will($this->returnValue(false)); + // Run $controller->cleanMediaAction(); } diff --git a/dev/tests/unit/testsuite/Magento/Adminhtml/Controller/CustomerTest.php b/dev/tests/unit/testsuite/Magento/Adminhtml/Controller/CustomerTest.php index 77df031b09f..e8cf25106fe 100644 --- a/dev/tests/unit/testsuite/Magento/Adminhtml/Controller/CustomerTest.php +++ b/dev/tests/unit/testsuite/Magento/Adminhtml/Controller/CustomerTest.php @@ -35,14 +35,14 @@ class CustomerTest extends \PHPUnit_Framework_TestCase /** * Request mock instance * - * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Core\Controller\Request\Http + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\App\RequestInterface */ protected $_request; /** * Response mock instance * - * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Core\Controller\Response\Http + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\App\ResponseInterface */ protected $_response; @@ -79,15 +79,15 @@ class CustomerTest extends \PHPUnit_Framework_TestCase */ protected function setUp() { - $this->_request = $this->getMockBuilder('Magento\Core\Controller\Request\Http') + $this->_request = $this->getMockBuilder('Magento\App\Request\Http') ->disableOriginalConstructor() - ->setMethods(array('getParam')) ->getMock(); - $this->_response = $this->getMockBuilder('Magento\Core\Controller\Response\Http') + $this->_response = $this->getMockBuilder('Magento\App\Response\Http') ->disableOriginalConstructor() ->setMethods(array('setRedirect', 'getHeader')) ->getMock(); + $this->_response->expects($this->any()) ->method('getHeader') ->with($this->equalTo('X-Frame-Options')) @@ -97,7 +97,7 @@ class CustomerTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->setMethods(array('get', 'create')) ->getMock(); - $frontControllerMock = $this->getMockBuilder('Magento\Core\Controller\Varien\Front') + $frontControllerMock = $this->getMockBuilder('Magento\App\FrontController') ->disableOriginalConstructor() ->getMock(); diff --git a/dev/tests/unit/testsuite/Magento/Adminhtml/Controller/Sales/Order/CreditmemoTest.php b/dev/tests/unit/testsuite/Magento/Adminhtml/Controller/Sales/Order/CreditmemoTest.php index 9504739bc2e..31471bf54a8 100644 --- a/dev/tests/unit/testsuite/Magento/Adminhtml/Controller/Sales/Order/CreditmemoTest.php +++ b/dev/tests/unit/testsuite/Magento/Adminhtml/Controller/Sales/Order/CreditmemoTest.php @@ -31,12 +31,12 @@ class CreditmemoTest extends \PHPUnit_Framework_TestCase protected $_controller; /** - * @var \Magento\Core\Controller\Response\Http|PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\ResponseInterface|PHPUnit_Framework_MockObject_MockObject */ protected $_responseMock; /** - * @var \Magento\Core\Controller\Request\Http|PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\RequestInterface|PHPUnit_Framework_MockObject_MockObject */ protected $_requestMock; @@ -56,11 +56,9 @@ class CreditmemoTest extends \PHPUnit_Framework_TestCase protected function setUp() { $helper = new \Magento\TestFramework\Helper\ObjectManager($this); - $this->_responseMock = $this->getMock('Magento\Core\Controller\Response\Http', - array('setRedirect'), array(), '', false - ); + $this->_responseMock = $this->getMock('Magento\App\Response\Http', array(), array(), '', false); $this->_responseMock->headersSentThrowsException = false; - $this->_requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $this->_requestMock = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); $this->_sessionMock = $this->getMock('Magento\Backend\Model\Session', array('addError', 'setFormData'), array(), '', false); $this->_objectManager = $this->getMock('Magento\ObjectManager', array(), array(), '', false); diff --git a/dev/tests/unit/testsuite/Magento/Adminhtml/Controller/System/AccountTest.php b/dev/tests/unit/testsuite/Magento/Adminhtml/Controller/System/AccountTest.php index f55b104c8ac..db832d341ef 100644 --- a/dev/tests/unit/testsuite/Magento/Adminhtml/Controller/System/AccountTest.php +++ b/dev/tests/unit/testsuite/Magento/Adminhtml/Controller/System/AccountTest.php @@ -32,10 +32,10 @@ class AccountTest extends \PHPUnit_Framework_TestCase /** @var \Magento\Adminhtml\Controller\System\Account */ protected $_controller; - /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Core\Controller\Request\Http */ + /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\App\RequestInterface */ protected $_requestMock; - /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Core\Controller\Response\Http */ + /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\App\ResponseInterface */ protected $_responseMock; /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\ObjectManager\ObjectManager */ @@ -64,11 +64,11 @@ class AccountTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_requestMock = $this->getMockBuilder('Magento\Core\Controller\Request\Http') + $this->_requestMock = $this->getMockBuilder('Magento\App\Request\Http') ->disableOriginalConstructor() ->setMethods(array('getOriginalPathInfo')) ->getMock(); - $this->_responseMock = $this->getMockBuilder('Magento\Core\Controller\Response\Http') + $this->_responseMock = $this->getMockBuilder('Magento\App\Response\Http') ->disableOriginalConstructor() ->setMethods(array()) ->getMock(); @@ -76,7 +76,7 @@ class AccountTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->setMethods(array('get', 'create')) ->getMock(); - $frontControllerMock = $this->getMockBuilder('Magento\Core\Controller\Varien\Front') + $frontControllerMock = $this->getMockBuilder('Magento\App\FrontController') ->disableOriginalConstructor() ->getMock(); diff --git a/dev/tests/unit/testsuite/Magento/Adminhtml/DashboardTest.php b/dev/tests/unit/testsuite/Magento/Adminhtml/DashboardTest.php index 6b33b26d8a0..69288d11317 100644 --- a/dev/tests/unit/testsuite/Magento/Adminhtml/DashboardTest.php +++ b/dev/tests/unit/testsuite/Magento/Adminhtml/DashboardTest.php @@ -26,35 +26,38 @@ namespace Magento\Adminhtml; class DashboardTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Controller\Request\Http|PHPUnit_Framework_MockObject_MockObject + * @var PHPUnit_Framework_MockObject_MockObject */ protected $_request; + /** + * @var PHPUnit_Framework_MockObject_MockObject + */ + protected $_response; + protected function setUp() { - $objectManagerHelper = new \Magento\TestFramework\Helper\ObjectManager($this); - $helperMock = $this->getMockBuilder('Magento\Backend\Helper\DataProxy') - ->disableOriginalConstructor() - ->getMock(); - /** @var $request \Magento\Core\Controller\Request\Http|PHPUnit_Framework_MockObject_MockObject */ - $this->_request = $objectManagerHelper->getObject('Magento\Core\Controller\Request\Http', - array('helper' => $helperMock)); + $this->_request = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); + $this->_response = $this->getMock('Magento\App\Response\Http', array(), array(), '', false); } protected function tearDown() { $this->_request = null; + $this->_response = null; } public function testTunnelAction() { $fixture = uniqid(); - $this->_request->setParam('ga', urlencode(base64_encode(json_encode(array(1))))); - $this->_request->setParam('h', $fixture); - - $tunnelResponse = new \Zend_Http_Response(200, array('Content-Type' => 'test_header'), 'success_msg'); - $httpClient = $this->getMock('Magento\HTTP\ZendClient', array('request')); - $httpClient->expects($this->once())->method('request')->will($this->returnValue($tunnelResponse)); + $this->_request->expects($this->at(0)) + ->method('getParam')->with('ga') + ->will($this->returnValue(urlencode(base64_encode(json_encode(array(1)))))); + $this->_request->expects($this->at(1))->method('getParam')->with('h')->will($this->returnValue($fixture)); + $tunnelResponse = $this->getMock('Magento\App\Response\Http', array(), array(), '', false); + $httpClient = $this->getMock('Magento\HTTP\ZendClient', + array('setUri', 'setParameterGet', 'setConfig', 'request', 'getHeaders') + ); /** @var $helper \Magento\Adminhtml\Helper\Dashboard\Data|PHPUnit_Framework_MockObject_MockObject */ $helper = $this->getMock('Magento\Adminhtml\Helper\Dashboard\Data', array('getChartDataHash'), array(), '', false, false @@ -70,15 +73,34 @@ class DashboardTest extends \PHPUnit_Framework_TestCase ->method('create') ->with('Magento\HTTP\ZendClient') ->will($this->returnValue($httpClient)); - - $controller = $this->_factory($this->_request, null, $objectManager); + $httpClient->expects($this->once())->method('setUri')->will($this->returnValue($httpClient)); + $httpClient->expects($this->once())->method('setParameterGet')->will(($this->returnValue($httpClient))); + $httpClient->expects($this->once())->method('setConfig')->will(($this->returnValue($httpClient))); + $httpClient->expects($this->once())->method('request')->with('GET')->will($this->returnValue($tunnelResponse)); + $tunnelResponse->expects( + $this->any())->method('getHeaders')->will($this->returnValue(array('Content-type' => 'test_header')) + ); + $this->_response->expects($this->any())->method('setHeader')->will($this->returnValue($this->_response)); + $tunnelResponse->expects($this->any())->method('getBody')->will($this->returnValue('success_msg')); + $this->_response->expects( + $this->once())->method('setBody')->with('success_msg')->will($this->returnValue($this->_response)); + $this->_response->expects($this->any())->method('getBody')->will($this->returnValue('success_msg')); + $controller = $this->_factory($this->_request, $this->_response, $objectManager); $controller->tunnelAction(); $this->assertEquals('success_msg', $controller->getResponse()->getBody()); } public function testTunnelAction400() { - $controller = $this->_factory($this->_request); + $this->_response->expects($this->once())->method('setBody') + ->with('Service unavailable: invalid request') + ->will($this->returnValue($this->_response)); + $this->_response->expects($this->any())->method('setHeader')->will($this->returnValue($this->_response)); + $this->_response->expects( + $this->once())->method('setHttpResponseCode')->with(400)->will($this->returnValue($this->_response) + ); + $this->_response->expects($this->once())->method('getHttpResponseCode')->will($this->returnValue(400)); + $controller = $this->_factory($this->_request, $this->_response); $controller->tunnelAction(); $this->assertEquals(400, $controller->getResponse()->getHttpResponseCode()); } @@ -86,9 +108,10 @@ class DashboardTest extends \PHPUnit_Framework_TestCase public function testTunnelAction503() { $fixture = uniqid(); - $this->_request->setParam('ga', urlencode(base64_encode(json_encode(array(1))))); - $this->_request->setParam('h', $fixture); - + $this->_request->expects($this->at(0)) + ->method('getParam')->with('ga') + ->will($this->returnValue(urlencode(base64_encode(json_encode(array(1)))))); + $this->_request->expects($this->at(1))->method('getParam')->with('h')->will($this->returnValue($fixture)); /** @var $helper \Magento\Adminhtml\Helper\Dashboard\Data|PHPUnit_Framework_MockObject_MockObject */ $helper = $this->getMock('Magento\Adminhtml\Helper\Dashboard\Data', array('getChartDataHash'), array(), '', false, false @@ -112,7 +135,17 @@ class DashboardTest extends \PHPUnit_Framework_TestCase ->with('Magento\Core\Model\Logger') ->will($this->returnValue($loggerMock)); - $controller = $this->_factory($this->_request, null, $objectManager); + $this->_response->expects($this->once()) + ->method('setBody') + ->with('Service unavailable: see error log for details') + ->will($this->returnValue($this->_response)); + $this->_response->expects($this->any())->method('setHeader')->will($this->returnValue($this->_response)); + $this->_response->expects($this->once()) + ->method('setHttpResponseCode') + ->with(503) + ->will($this->returnValue($this->_response)); + $this->_response->expects($this->once())->method('getHttpResponseCode')->will($this->returnValue(503)); + $controller = $this->_factory($this->_request, $this->_response, $objectManager); $controller->tunnelAction(); $this->assertEquals(503, $controller->getResponse()->getHttpResponseCode()); } @@ -120,17 +153,16 @@ class DashboardTest extends \PHPUnit_Framework_TestCase /** * Create the tested object * - * @param \Magento\Core\Controller\Request\Http $request - * @param \Magento\Core\Controller\Response\Http|null $response + * @param Magento\App\Request\Http $request + * @param \Magento\App\Response\Http|null $response * @param \Magento\ObjectManager|null $objectManager * @return \Magento\Adminhtml\Controller\Dashboard|PHPUnit_Framework_MockObject_MockObject */ protected function _factory($request, $response = null, $objectManager = null) { if (!$response) { - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); - /** @var $response \Magento\Core\Controller\Response\Http|PHPUnit_Framework_MockObject_MockObject */ - $response = $this->getMockForAbstractClass('Magento\Core\Controller\Response\Http', array($eventManager)); + /** @var $response \Magento\App\ResponseInterface|PHPUnit_Framework_MockObject_MockObject */ + $response = $this->getMock('Magento\App\Response\Http', array(), array(), '', false); $response->headersSentThrowsException = false; } if (!$objectManager) { @@ -138,7 +170,7 @@ class DashboardTest extends \PHPUnit_Framework_TestCase } $rewriteFactory = $this->getMock('Magento\Core\Model\Url\RewriteFactory', array('create'), array(), '', false); $helper = new \Magento\TestFramework\Helper\ObjectManager($this); - $varienFront = $helper->getObject('Magento\Core\Controller\Varien\Front', + $varienFront = $helper->getObject('Magento\App\FrontController', array('rewriteFactory' => $rewriteFactory) ); diff --git a/dev/tests/unit/testsuite/Magento/App/Action/ForwardTest.php b/dev/tests/unit/testsuite/Magento/App/Action/ForwardTest.php new file mode 100644 index 00000000000..22819d8ad4d --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/App/Action/ForwardTest.php @@ -0,0 +1,55 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\App\Action; + +class ForwardTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\App\Action\Forward + */ + protected $_model; + + /** + * @var \Magento\App\RequestInterface + */ + protected $_request; + + /** + * @var \Magento\App\ResponseInterface + */ + protected $_response; + + protected function setUp() + { + $this->_request = $this->getMock('Magento\App\Request\Http', array(), array(), '', false ); + $this->_response = $this->getMock('\Magento\App\Response\Http'); + $this->_model = new \Magento\App\Action\Forward($this->_request, $this->_response); + } + + public function testDispatch() + { + $this->_request->expects($this->once())->method('setDispatched')->with(false); + $this->_model->dispatch('actions'); + } +} \ No newline at end of file diff --git a/dev/tests/unit/testsuite/Magento/App/AreaListTest.php b/dev/tests/unit/testsuite/Magento/App/AreaListTest.php new file mode 100644 index 00000000000..80f72cb28b4 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/App/AreaListTest.php @@ -0,0 +1,95 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\App; + +class AreaListTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\App\AreaList + */ + protected $_model; + + /** + * @var \Magento\App\Area\FrontNameResolverFactory + */ + protected $_resolverFactory; + + protected function setUp() + { + $this->_resolverFactory = $this + ->getMock('\Magento\App\Area\FrontNameResolverFactory', array(), array(), '', false); + } + + public function testGetCodeByFrontNameWhenAreaDoesNotContainFrontName() + { + $expected = 'expectedFrontName'; + $this->_model = new \Magento\App\AreaList($this->_resolverFactory, + array('testArea' => array('frontNameResolver' => 'testValue')), $expected); + + $resolverMock = $this->getMock('\Magento\App\Area\FrontNameResolverInterface'); + $this->_resolverFactory->expects($this->any())->method('create') + ->with('testValue')->will($this->returnValue($resolverMock)); + + $actual = $this->_model->getCodeByFrontName('testFrontName'); + $this->assertEquals($expected, $actual); + } + + public function testGetCodeByFrontNameReturnsAreaCode() + { + $expected = 'testArea'; + $this->_model = new \Magento\App\AreaList($this->_resolverFactory, + array('testArea'=>array('frontName' => 'testFrontName')), $expected); + + $actual = $this->_model->getCodeByFrontName('testFrontName'); + $this->assertEquals($expected, $actual); + } + + public function testGetFrontNameWhenAreaCodeAndFrontNameAreSet() + { + $expected = 'testFrontName'; + $this->_model = new \Magento\App\AreaList($this->_resolverFactory, + array('testAreaCode' => array('frontName' => 'testFrontName')), $expected); + + $actual = $this->_model->getFrontName('testAreaCode'); + $this->assertEquals($expected, $actual); + } + + public function testGetFrontNameWhenAreaCodeAndFrontNameArentSet() + { + $this->_model = new \Magento\App\AreaList($this->_resolverFactory, array(), ''); + + $actual = $this->_model->getFrontName('testAreaCode'); + $this->assertNull($actual); + } + + public function testGetCodes() + { + $this->_model = new \Magento\App\AreaList($this->_resolverFactory, + array('area1' => 'value1', 'area2' => 'value2'), ''); + + $expected = array(0 => 'area1', 1 => 'area2'); + $actual = $this->_model->getCodes(); + $this->assertEquals($expected, $actual); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Dir/VerificationTest.php b/dev/tests/unit/testsuite/Magento/App/Dir/VerificationTest.php similarity index 89% rename from dev/tests/unit/testsuite/Magento/Core/Model/Dir/VerificationTest.php rename to dev/tests/unit/testsuite/Magento/App/Dir/VerificationTest.php index 1e5bbc05f1e..3c6bc232a4e 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Dir/VerificationTest.php +++ b/dev/tests/unit/testsuite/Magento/App/Dir/VerificationTest.php @@ -22,7 +22,7 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ -namespace Magento\Core\Model\Dir; +namespace Magento\App\Dir; class VerificationTest extends \PHPUnit_Framework_TestCase { @@ -64,12 +64,12 @@ class VerificationTest extends \PHPUnit_Framework_TestCase * @param bool $isExist * @param array $actualCreatedDirs * @param array $actualVerifiedDirs - * @return \Magento\Core\Model\Dir\Verification + * @return \Magento\App\Dir\Verification */ protected function _createModelForVerification($mode, $isExist, &$actualCreatedDirs, &$actualVerifiedDirs) { - $dirs = new \Magento\Core\Model\Dir('base_dir'); - $appState = new \Magento\Core\Model\App\State(time(), $mode); + $dirs = new \Magento\App\Dir('base_dir'); + $appState = new \Magento\App\State(time(), $mode); $filesystem = $this->getMock('Magento\Filesystem', array(), array(), '', false); $filesystem->expects($this->any()) @@ -93,7 +93,7 @@ class VerificationTest extends \PHPUnit_Framework_TestCase ->method('isWritable') ->will($this->returnCallback($callbackVerify)); - return new \Magento\Core\Model\Dir\Verification( + return new \Magento\App\Dir\Verification( $filesystem, $dirs, $appState @@ -107,7 +107,7 @@ class VerificationTest extends \PHPUnit_Framework_TestCase { return array( 'developer mode' => array( - \Magento\Core\Model\App\State::MODE_DEVELOPER, + \Magento\App\State::MODE_DEVELOPER, array( 'base_dir/pub/media', 'base_dir/pub/static', @@ -119,7 +119,7 @@ class VerificationTest extends \PHPUnit_Framework_TestCase ), ), 'default mode' => array( - \Magento\Core\Model\App\State::MODE_DEFAULT, + \Magento\App\State::MODE_DEFAULT, array( 'base_dir/pub/media', 'base_dir/pub/static', @@ -131,7 +131,7 @@ class VerificationTest extends \PHPUnit_Framework_TestCase ), ), 'production mode' => array( - \Magento\Core\Model\App\State::MODE_PRODUCTION, + \Magento\App\State::MODE_PRODUCTION, array( 'base_dir/pub/media', 'base_dir/var', @@ -150,8 +150,8 @@ class VerificationTest extends \PHPUnit_Framework_TestCase $this->setExpectedException('Magento\BootstrapException', 'Cannot create or verify write access: base_dir/var/log, base_dir/var/session'); - $dirs = new \Magento\Core\Model\Dir('base_dir'); - $appState = new \Magento\Core\Model\App\State(time()); + $dirs = new \Magento\App\Dir('base_dir'); + $appState = new \Magento\App\State(time()); $callback = function ($dir) { if (($dir == 'base_dir/var/log') || ($dir == 'base_dir/var/session')) { @@ -164,7 +164,7 @@ class VerificationTest extends \PHPUnit_Framework_TestCase ->will($this->returnCallback($callback)); // Do - $model = new \Magento\Core\Model\Dir\Verification( + $model = new \Magento\App\Dir\Verification( $filesystem, $dirs, $appState @@ -178,8 +178,8 @@ class VerificationTest extends \PHPUnit_Framework_TestCase $this->setExpectedException('Magento\BootstrapException', 'Cannot create or verify write access: base_dir/var/log, base_dir/var/session'); - $dirs = new \Magento\Core\Model\Dir('base_dir'); - $appState = new \Magento\Core\Model\App\State(time()); + $dirs = new \Magento\App\Dir('base_dir'); + $appState = new \Magento\App\State(time()); $filesystem = $this->getMock('Magento\Filesystem', array(), array(), '', false); $filesystem->expects($this->any()) @@ -200,7 +200,7 @@ class VerificationTest extends \PHPUnit_Framework_TestCase ->will($this->returnValueMap($dirWritableMap)); // Do - $model = new \Magento\Core\Model\Dir\Verification( + $model = new \Magento\App\Dir\Verification( $filesystem, $dirs, $appState diff --git a/dev/tests/unit/testsuite/Magento/App/FrontControllerTest.php b/dev/tests/unit/testsuite/Magento/App/FrontControllerTest.php new file mode 100644 index 00000000000..38335400c91 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/App/FrontControllerTest.php @@ -0,0 +1,105 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\App; + +class FrontControllerTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\App\FrontController + */ + protected $_model; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_eventManager; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_response; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_request; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_routerList; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_router; + + protected function setUp() + { + $this->_eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); + $this->_response = $this->getMock('Magento\App\ResponseInterface', array(), array(), '', false); + $this->_routerList = $this->getMock('Magento\App\RouterList', array('getRouters'), array(), '', false); + $this->_request = $this->getMock('Magento\App\RequestInterface', array('isDispatched', 'getModuleName', + 'setModuleName', 'getActionName', 'setActionName', 'getParam')); + $this->_router = $this->getMock('Magento\App\Router\AbstractRouter', + array('setFront', 'match'), array(), '', false); + $this->_model = new \Magento\App\FrontController($this->_eventManager, $this->_response, $this->_routerList); + } + + /** + * @expectedException \LogicException + */ + public function testDispatchThrowException() + { + $this->_routerList->expects($this->any())->method('getRouters')->will($this->returnValue($this->_router)); + $this->_model->dispatch($this->_request); + $this->_eventManager->expects($this->never())->method('dispatch'); + } + + public function testWhenRequestDispatched() + { + $this->_request->expects($this->once())->method('isDispatched')->will($this->returnValue(true)); + $this->_routerList->expects($this->never())->method('getRouters'); + $this->_eventManager->expects($this->atLeastOnce())->method('dispatch'); + $this->_model->dispatch($this->_request); + } + + /** + * @expectedException \LogicException + */ + public function testWhenDispatchedActionInterface() + { + $this->_router = $this->getMock('Magento\App\Router\AbstractRouter', + array('setFront', 'match'), array(), '', false); + $this->_routerList->expects($this->atLeastOnce())->method('getRouters') + ->will($this->returnValue(array($this->_router))); + $controllerInstance = $this->getMock('\Magento\App\ActionInterface'); + $this->_router->expects($this->atLeastOnce())->method('match')->will($this->returnValue($controllerInstance)); + $this->_request->expects($this->atLeastOnce())->method('getActionName')->will($this->returnValue('testString')); + $controllerInstance->expects($this->atLeastOnce())->method('dispatch')->with('testString'); + + $this->_model->dispatch($this->_request); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/Converter/DomTest.php b/dev/tests/unit/testsuite/Magento/App/Module/Declaration/Converter/DomTest.php similarity index 93% rename from dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/Converter/DomTest.php rename to dev/tests/unit/testsuite/Magento/App/Module/Declaration/Converter/DomTest.php index fc118ab1cca..77b35b2d723 100755 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/Converter/DomTest.php +++ b/dev/tests/unit/testsuite/Magento/App/Module/Declaration/Converter/DomTest.php @@ -21,18 +21,18 @@ * @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\Core\Model\Module\Declaration\Converter; +namespace Magento\App\Module\Declaration\Converter; class DomTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Module\Declaration\Converter\Dom + * @var \Magento\App\Module\Declaration\Converter\Dom */ protected $_converter; protected function setUp() { - $this->_converter = new \Magento\Core\Model\Module\Declaration\Converter\Dom(); + $this->_converter = new \Magento\App\Module\Declaration\Converter\Dom(); } public function testConvertWithValidDom() diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/Converter/_files/converted_valid_module.php b/dev/tests/unit/testsuite/Magento/App/Module/Declaration/Converter/_files/converted_valid_module.php similarity index 100% rename from dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/Converter/_files/converted_valid_module.php rename to dev/tests/unit/testsuite/Magento/App/Module/Declaration/Converter/_files/converted_valid_module.php diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/Converter/_files/valid_module.xml b/dev/tests/unit/testsuite/Magento/App/Module/Declaration/Converter/_files/valid_module.xml similarity index 100% rename from dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/Converter/_files/valid_module.xml rename to dev/tests/unit/testsuite/Magento/App/Module/Declaration/Converter/_files/valid_module.xml diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/FileResolver/_files/app/code/Module/Four/etc/module.xml b/dev/tests/unit/testsuite/Magento/App/Module/Declaration/FileResolver/_files/app/code/Module/Four/etc/module.xml similarity index 100% rename from dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/FileResolver/_files/app/code/Module/Four/etc/module.xml rename to dev/tests/unit/testsuite/Magento/App/Module/Declaration/FileResolver/_files/app/code/Module/Four/etc/module.xml diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/FileResolver/_files/app/code/Module/One/etc/module.xml b/dev/tests/unit/testsuite/Magento/App/Module/Declaration/FileResolver/_files/app/code/Module/One/etc/module.xml similarity index 100% rename from dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/FileResolver/_files/app/code/Module/One/etc/module.xml rename to dev/tests/unit/testsuite/Magento/App/Module/Declaration/FileResolver/_files/app/code/Module/One/etc/module.xml diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/FileResolver/_files/app/code/Module/Three/etc/module.xml b/dev/tests/unit/testsuite/Magento/App/Module/Declaration/FileResolver/_files/app/code/Module/Three/etc/module.xml similarity index 100% rename from dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/FileResolver/_files/app/code/Module/Three/etc/module.xml rename to dev/tests/unit/testsuite/Magento/App/Module/Declaration/FileResolver/_files/app/code/Module/Three/etc/module.xml diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/FileResolver/_files/app/code/Module/Two/etc/module.xml b/dev/tests/unit/testsuite/Magento/App/Module/Declaration/FileResolver/_files/app/code/Module/Two/etc/module.xml similarity index 100% rename from dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/FileResolver/_files/app/code/Module/Two/etc/module.xml rename to dev/tests/unit/testsuite/Magento/App/Module/Declaration/FileResolver/_files/app/code/Module/Two/etc/module.xml diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/FileResolver/_files/app/etc/custom/module.xml b/dev/tests/unit/testsuite/Magento/App/Module/Declaration/FileResolver/_files/app/etc/custom/module.xml similarity index 100% rename from dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/FileResolver/_files/app/etc/custom/module.xml rename to dev/tests/unit/testsuite/Magento/App/Module/Declaration/FileResolver/_files/app/etc/custom/module.xml diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/FileResolverTest.php b/dev/tests/unit/testsuite/Magento/App/Module/Declaration/FileResolverTest.php similarity index 84% rename from dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/FileResolverTest.php rename to dev/tests/unit/testsuite/Magento/App/Module/Declaration/FileResolverTest.php index fcdc9a5e3b2..8e258ee12da 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/FileResolverTest.php +++ b/dev/tests/unit/testsuite/Magento/App/Module/Declaration/FileResolverTest.php @@ -21,12 +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\Core\Model\Module\Declaration; +namespace Magento\App\Module\Declaration; class FileResolverTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Module\Declaration\FileResolver + * @var \Magento\App\Module\Declaration\FileResolver */ protected $_model; @@ -34,20 +34,20 @@ class FileResolverTest extends \PHPUnit_Framework_TestCase { $baseDir = __DIR__ . str_replace('/', DIRECTORY_SEPARATOR, '/FileResolver/_files'); - $applicationDirs = $this->getMock('Magento\Core\Model\Dir', array(), array('getDir'), '', false); + $applicationDirs = $this->getMock('Magento\App\Dir', array(), array('getDir'), '', false); $applicationDirs->expects($this->any()) ->method('getDir') ->will($this->returnValueMap(array( array( - \Magento\Core\Model\Dir::CONFIG, + \Magento\App\Dir::CONFIG, $baseDir . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR .'etc', ), array( - \Magento\Core\Model\Dir::MODULES, + \Magento\App\Dir::MODULES, $baseDir . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR .'code', ), ))); - $this->_model = new \Magento\Core\Model\Module\Declaration\FileResolver($applicationDirs); + $this->_model = new \Magento\App\Module\Declaration\FileResolver($applicationDirs); } public function testGet() diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/Reader/FilesystemTest.php b/dev/tests/unit/testsuite/Magento/App/Module/Declaration/Reader/FilesystemTest.php similarity index 83% rename from dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/Reader/FilesystemTest.php rename to dev/tests/unit/testsuite/Magento/App/Module/Declaration/Reader/FilesystemTest.php index b354903ec3b..a0e57985a5a 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Module/Declaration/Reader/FilesystemTest.php +++ b/dev/tests/unit/testsuite/Magento/App/Module/Declaration/Reader/FilesystemTest.php @@ -21,37 +21,37 @@ * @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\Core\Model\Module\Declaration\Reader; +namespace Magento\App\Module\Declaration\Reader; class FilesystemTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Module\Declaration\Reader\Filesystem + * @var \Magento\App\Module\Declaration\Reader\Filesystem */ protected $_model; protected function setUp() { $baseDir = __DIR__ . str_replace('/', DIRECTORY_SEPARATOR, '/../FileResolver/_files'); - $applicationDirs = $this->getMock('Magento\Core\Model\Dir', array(), array('getDir'), '', false); + $applicationDirs = $this->getMock('Magento\App\Dir', array(), array('getDir'), '', false); $applicationDirs->expects($this->any())->method('getDir') ->will($this->returnValueMap(array( array( - \Magento\Core\Model\Dir::CONFIG, + \Magento\App\Dir::CONFIG, $baseDir . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR .'etc', ), array( - \Magento\Core\Model\Dir::MODULES, + \Magento\App\Dir::MODULES, $baseDir . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR .'code', ), ))); - $fileResolver = new \Magento\Core\Model\Module\Declaration\FileResolver($applicationDirs); - $converter = new \Magento\Core\Model\Module\Declaration\Converter\Dom(); + $fileResolver = new \Magento\App\Module\Declaration\FileResolver($applicationDirs); + $converter = new \Magento\App\Module\Declaration\Converter\Dom(); $schemaLocatorMock = $this->getMock( - 'Magento\Core\Model\Module\Declaration\SchemaLocator', array(), array(), '', false + 'Magento\App\Module\Declaration\SchemaLocator', array(), array(), '', false ); $validationStateMock = $this->getMock('Magento\Config\ValidationStateInterface'); - $this->_model = new \Magento\Core\Model\Module\Declaration\Reader\Filesystem( + $this->_model = new \Magento\App\Module\Declaration\Reader\Filesystem( $fileResolver, $converter, $schemaLocatorMock, $validationStateMock ); } diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Module/Dir/ReverseResolverTest.php b/dev/tests/unit/testsuite/Magento/App/Module/Dir/ReverseResolverTest.php similarity index 85% rename from dev/tests/unit/testsuite/Magento/Core/Model/Module/Dir/ReverseResolverTest.php rename to dev/tests/unit/testsuite/Magento/App/Module/Dir/ReverseResolverTest.php index 06c9ef2c706..f4e550ee4fd 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Module/Dir/ReverseResolverTest.php +++ b/dev/tests/unit/testsuite/Magento/App/Module/Dir/ReverseResolverTest.php @@ -21,30 +21,30 @@ * @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\Core\Model\Module\Dir; +namespace Magento\App\Module\Dir; class ReverseResolverTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Module\Dir\ReverseResolver + * @var \Magento\App\Module\Dir\ReverseResolver */ protected $_model; /** - * @var \Magento\Core\Model\ModuleListInterface|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\ModuleListInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $_moduleList; /** - * @var \Magento\Core\Model\Module\Dir|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\Module\Dir|\PHPUnit_Framework_MockObject_MockObject */ protected $_moduleDirs; protected function setUp() { - $this->_moduleList = $this->getMock('Magento\Core\Model\ModuleListInterface'); - $this->_moduleDirs = $this->getMock('Magento\Core\Model\Module\Dir', array(), array(), '', false, false); - $this->_model = new \Magento\Core\Model\Module\Dir\ReverseResolver($this->_moduleList, $this->_moduleDirs); + $this->_moduleList = $this->getMock('Magento\App\ModuleListInterface'); + $this->_moduleDirs = $this->getMock('Magento\App\Module\Dir', array(), array(), '', false, false); + $this->_model = new \Magento\App\Module\Dir\ReverseResolver($this->_moduleList, $this->_moduleDirs); } /** diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Module/DirTest.php b/dev/tests/unit/testsuite/Magento/App/Module/DirTest.php similarity index 83% rename from dev/tests/unit/testsuite/Magento/Core/Model/Module/DirTest.php rename to dev/tests/unit/testsuite/Magento/App/Module/DirTest.php index 9bd3fc6b3b8..b2fc7368dc9 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Module/DirTest.php +++ b/dev/tests/unit/testsuite/Magento/App/Module/DirTest.php @@ -21,30 +21,30 @@ * @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\Core\Model\Module; +namespace Magento\App\Module; class DirTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Module\Dir + * @var \Magento\App\Module\Dir */ protected $_model; /** - * @var \Magento\Core\Model\Dir|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\Dir|\PHPUnit_Framework_MockObject_MockObject */ protected $_applicationDirs; protected function setUp() { - $this->_applicationDirs = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false, false); + $this->_applicationDirs = $this->getMock('Magento\App\Dir', array(), array(), '', false, false); $this->_applicationDirs ->expects($this->once()) ->method('getDir') - ->with(\Magento\Core\Model\Dir::MODULES) + ->with(\Magento\App\Dir::MODULES) ->will($this->returnValue('app' . DIRECTORY_SEPARATOR . 'code')) ; - $this->_model = new \Magento\Core\Model\Module\Dir($this->_applicationDirs); + $this->_model = new \Magento\App\Module\Dir($this->_applicationDirs); } public function testGetDirModuleRoot() diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Module/ResourceResolver/_files/Module/data/module_first_setup/.gitignore b/dev/tests/unit/testsuite/Magento/App/Module/ResourceResolver/_files/Module/data/module_first_setup/.gitignore similarity index 100% rename from dev/tests/unit/testsuite/Magento/Core/Model/Module/ResourceResolver/_files/Module/data/module_first_setup/.gitignore rename to dev/tests/unit/testsuite/Magento/App/Module/ResourceResolver/_files/Module/data/module_first_setup/.gitignore diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Module/ResourceResolver/_files/Module/data/module_second_setup/.gitignore b/dev/tests/unit/testsuite/Magento/App/Module/ResourceResolver/_files/Module/data/module_second_setup/.gitignore similarity index 100% rename from dev/tests/unit/testsuite/Magento/Core/Model/Module/ResourceResolver/_files/Module/data/module_second_setup/.gitignore rename to dev/tests/unit/testsuite/Magento/App/Module/ResourceResolver/_files/Module/data/module_second_setup/.gitignore diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Module/ResourceResolver/_files/Module/sql/module_first_setup/.gitignore b/dev/tests/unit/testsuite/Magento/App/Module/ResourceResolver/_files/Module/sql/module_first_setup/.gitignore similarity index 100% rename from dev/tests/unit/testsuite/Magento/Core/Model/Module/ResourceResolver/_files/Module/sql/module_first_setup/.gitignore rename to dev/tests/unit/testsuite/Magento/App/Module/ResourceResolver/_files/Module/sql/module_first_setup/.gitignore diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Module/ResourceResolverTest.php b/dev/tests/unit/testsuite/Magento/App/Module/ResourceResolverTest.php similarity index 91% rename from dev/tests/unit/testsuite/Magento/Core/Model/Module/ResourceResolverTest.php rename to dev/tests/unit/testsuite/Magento/App/Module/ResourceResolverTest.php index fa6dbe2ffc2..92b3566ea18 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Module/ResourceResolverTest.php +++ b/dev/tests/unit/testsuite/Magento/App/Module/ResourceResolverTest.php @@ -21,12 +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\Core\Model\Module; +namespace Magento\App\Module; class ResourceResolverTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Module\ResourceResolver + * @var \Magento\App\Module\ResourceResolver */ protected $_model; @@ -39,7 +39,7 @@ class ResourceResolverTest extends \PHPUnit_Framework_TestCase { $this->_moduleReaderMock = $this->getMock('Magento\Core\Model\Config\Modules\Reader', array(), array(), '', false); - $this->_model = new \Magento\Core\Model\Module\ResourceResolver($this->_moduleReaderMock); + $this->_model = new \Magento\App\Module\ResourceResolver($this->_moduleReaderMock); } public function testGetResourceList() diff --git a/dev/tests/unit/testsuite/Magento/App/Request/HttpTest.php b/dev/tests/unit/testsuite/Magento/App/Request/HttpTest.php new file mode 100644 index 00000000000..43be63bc46b --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/App/Request/HttpTest.php @@ -0,0 +1,255 @@ +<?php +/** + * + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\App\Request; + +class HttpTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\App\Request\Http + */ + protected $_model; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_routerListMock; + + protected function setUp() + { + $this->_routerListMock = $this->getMock('\Magento\App\RouterList', array(), array(), '', false); + } + + public function testGetOriginalPathInfoWithTestUri() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock, 'http://test.com/value'); + $this->assertEquals('/value', $this->_model->getOriginalPathInfo()); + } + + public function testGetOriginalPathInfoWithEmptyUri() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock, null); + $this->assertEmpty($this->_model->getOriginalPathInfo()); + } + + public function testSetPathInfoWithNullValue() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock, null); + $actual = $this->_model->setPathInfo(); + $this->assertEquals($this->_model, $actual); + } + + public function testSetPathInfoWithValue() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock, null); + $expected = 'testPathInfo'; + $this->_model->setPathInfo($expected); + $this->assertEquals($expected, $this->_model->getPathInfo()); + } + + public function testSetPathInfoWithQueryPart() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock, 'http://test.com/node?queryValue'); + $this->_model->setPathInfo(); + $this->assertEquals('/node', $this->_model->getPathInfo()); + } + + public function testRewritePathInfoWithNewValue() + { + $expected = '/other/path'; + $this->_model = new \Magento\App\Request\Http($this->_routerListMock, 'http://test.com/one/two'); + $this->_model->rewritePathInfo($expected); + $this->assertEquals($expected, $this->_model->getPathInfo()); + } + + public function testRewritePathInfoWithSameValue() + { + $expected = '/one/two'; + $this->_model = new \Magento\App\Request\Http($this->_routerListMock, 'http://test.com' . $expected); + $this->_model->rewritePathInfo($expected); + $this->assertEquals($expected, $this->_model->getPathInfo()); + } + + public function testGetBasePathWithPath() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $this->_model->setBasePath('http:\/test.com\one/two'); + $this->assertEquals('http://test.com/one/two', $this->_model->getBasePath()); + } + + public function testGetBasePathWithoutPath() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $this->_model->setBasePath(); + $this->assertEquals('/', $this->_model->getBasePath()); + } + + public function testGetBaseUrlWithUrl() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $this->_model->setBaseUrl('http:\/test.com\one/two'); + $this->assertEquals('http://test.com/one/two', $this->_model->getBaseUrl()); + } + + public function testGetBaseUrlWithEmptyUrl() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $this->_model->setBaseUrl(); + $this->assertEmpty($this->_model->getBaseUrl()); + } + + public function testSetRouteNameWithRouter() + { + $router = $this->getMock('\Magento\App\Router\AbstractRouter', array(), array(), '', false); + $this->_routerListMock->expects($this->any())->method('getRouterByRoute')->will($this->returnValue($router)); + $router->expects($this->once())->method('getFrontNameByRoute')->will($this->returnValue('string')); + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $this->_model->setRouteName('RouterName'); + $this->assertEquals('RouterName', $this->_model->getRouteName()); + } + + public function testSetRouteNameWithNullRouterValue() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $router = $this->getMock('\Magento\App\Router\AbstractRouter', array(), array(), '', false); + $this->_routerListMock->expects($this->once())->method('getRouterByRoute')->will($this->returnValue(null)); + $router->expects($this->never())->method('getFrontNameByRoute'); + $this->_model->setRouteName('RouterName'); + } + + public function testGetFrontName() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock, 'http://test.com/one/two'); + $this->assertEquals('one', $this->_model->getFrontName()); + } + + public function testGetAliasWhenAliasExists() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $this->_model->setAlias('AliasName', 'AliasTarget'); + $this->assertEquals('AliasTarget', $this->_model->getAlias('AliasName') ); + } + + public function testGetAliasWhenAliasesIsNull() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $this->assertNull($this->_model->getAlias('someValue')); + } + + public function testGetAliasesWhenAliasSet() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $this->_model->setAlias('AliasName', 'AliasTarget'); + $this->assertEquals(array('AliasName' => 'AliasTarget'), $this->_model->getAliases()); + } + + public function testGetAliasesWhenAliasAreEmpty() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $this->assertEmpty($this->_model->getAliases()); + } + + public function testGetRequestedRouteNameWhenRequestedRouteIsSet() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $this->_model->setRoutingInfo(array('requested_route' => 'ExpectedValue')); + $this->assertEquals('ExpectedValue', $this->_model->getRequestedRouteName()); + } + + public function testGetRequestedRouteNameWithNullValueRouteName() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $this->_model->setRouteName('RouteName'); + $this->assertEquals('RouteName', $this->_model->getRequestedRouteName()); + } + + public function testGetRequestedRouteNameWithRewritePathInfo() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $routerAbstract = $this->getMock('\Magento\App\Router\AbstractRouter', array(), array(), '', false); + $expected = 'TestValue'; + $this->_model->setPathInfo($expected); + $this->_model->rewritePathInfo($expected . '/other'); + $this->_routerListMock->expects($this->any())->method('getRouterByFrontName')->with($expected) + ->will($this->returnValue($routerAbstract)); + $routerAbstract->expects($this->any())->method('getRouteByFrontName')->with($expected) + ->will($this->returnValue($expected)); + + $this->assertEquals($expected, $this->_model->getRequestedRouteName()); + } + + public function testGetRequestedRouteNameWithoutRewritePathInfo() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $expected = 'RouteName'; + $this->_model->setRouteName($expected); + $this->assertEquals($expected, $this->_model->getRequestedRouteName()); + } + + public function testGetRequestedControllerNameWithRequestedController() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $expected = array('requested_controller' => 'ControllerName'); + $this->_model->setRoutingInfo($expected); + $test = $this->_model->getRequestedControllerName(); + $this->assertEquals($expected['requested_controller'], $test); + } + + public function testGetRequestedControllerNameWithRewritePathInfo() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $path = 'one/two/'; + $this->_model->setPathInfo($path); + $this->_model->rewritePathInfo($path. '/last'); + $this->assertEquals('two', $this->_model->getRequestedControllerName()); + } + + public function testGetRequestedActionNameWithRoutingInfo() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $this->_model->setRoutingInfo(array('requested_action' => 'ExpectedValue')); + $this->assertEquals('ExpectedValue', $this->_model->getRequestedActionName()); + } + + public function testGetRequestedActionNameWithRewritePathInfo() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $path = 'one/two/three'; + $this->_model->setPathInfo($path); + $this->_model->rewritePathInfo($path. '/last'); + $this->assertEquals('three', $this->_model->getRequestedActionName()); + } + + public function testIsStraightWithTrueValue() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $this->assertTrue($this->_model->isStraight(true)); + } + + public function testIsStraightWithDefaultValue() + { + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); + $this->assertFalse($this->_model->isStraight()); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Core/Controller/Varien/Router/AbstractTest.php b/dev/tests/unit/testsuite/Magento/App/Response/HttpTest.php similarity index 57% rename from dev/tests/integration/testsuite/Magento/Core/Controller/Varien/Router/AbstractTest.php rename to dev/tests/unit/testsuite/Magento/App/Response/HttpTest.php index 73b5ec7444a..47972a10dd1 100644 --- a/dev/tests/integration/testsuite/Magento/Core/Controller/Varien/Router/AbstractTest.php +++ b/dev/tests/unit/testsuite/Magento/App/Response/HttpTest.php @@ -18,35 +18,39 @@ * 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_Core - * @subpackage integration_tests * @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\App\Response; -namespace Magento\Core\Controller\Varien\Router; - -class AbstractTest extends \PHPUnit_Framework_TestCase +class HttpTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Controller\Varien\Router\AbstractRouter + * @var \Magento\App\Response\Http */ protected $_model; protected function setUp() { - $this->_model = $this->getMockForAbstractClass('Magento\Core\Controller\Varien\Router\AbstractRouter', - array(), '', false - ); + $this->_model = new \Magento\App\Response\Http(); + $this->_model->headersSentThrowsException = false; + $this->_model->setHeader('name', 'value'); + } + + protected function tearDown() + { + unset($this->_model); + } + + public function testGetHeaderWhenHeaderNameIsEqualsName() + { + $expected = array('name' => 'Name', 'value' => 'value', 'replace' => false); + $actual = $this->_model->getHeader('Name'); + $this->assertEquals($expected, $actual); } - public function testGetSetFront() + public function testGetHeaderWhenHeaderNameIsNotEqualsName() { - $expected = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Core\Controller\Varien\Front'); - $this->assertNull($this->_model->getFront()); - $this->_model->setFront($expected); - $this->assertSame($expected, $this->_model->getFront()); + $this->assertFalse($this->_model->getHeader('Test')); } } diff --git a/dev/tests/unit/testsuite/Magento/App/ResponseFactoryTest.php b/dev/tests/unit/testsuite/Magento/App/ResponseFactoryTest.php new file mode 100644 index 00000000000..4edb3929b3b --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/App/ResponseFactoryTest.php @@ -0,0 +1,60 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\App; + +class ResponseFactoryTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\App\ResponseFactory + */ + protected $_model; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\App\ResponseInterface + */ + protected $_expectedObject; + + protected function setUp() + { + $this->_objectManagerMock = $this->getMock('Magento\ObjectManager'); + $this->_model = new \Magento\App\ResponseFactory($this->_objectManagerMock); + } + + public function testCreate() + { + $this->_expectedObject = $this->getMockBuilder('\Magento\App\ResponseInterface')->getMock(); + $arguments = array(array('property' => 'value')); + $this->_objectManagerMock->expects($this->once()) + ->method('create') + ->with('Magento\App\ResponseInterface', $arguments)->will($this->returnValue($this->_expectedObject)); + + $this->assertEquals($this->_expectedObject, $this->_model->create($arguments)); + + } +} \ No newline at end of file diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Db/UpdaterTest.php b/dev/tests/unit/testsuite/Magento/App/UpdaterTest.php similarity index 77% rename from dev/tests/unit/testsuite/Magento/Core/Model/Db/UpdaterTest.php rename to dev/tests/unit/testsuite/Magento/App/UpdaterTest.php index e15a7b6fedc..9e7217083fe 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Db/UpdaterTest.php +++ b/dev/tests/unit/testsuite/Magento/App/UpdaterTest.php @@ -21,46 +21,46 @@ * @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\Core\Model\Db; +namespace Magento\App; class UpdaterTest extends \PHPUnit_Framework_TestCase { /** - * @var PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_factoryMock; /** - * @var PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_appStateMock; /** - * @var PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_resourceResolver; /** - * @var PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_moduleListMock; /** - * @var PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_resourceSetupMock; /** - * @var \Magento\Core\Model\Db\Updater + * @var \Magento\App\Updater */ protected $_model; protected function setUp() { - $this->_factoryMock = $this->getMock('Magento\Core\Model\Resource\SetupFactory', array(), array(), '', false); - $this->_appStateMock = $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false); - $this->_resourceResolver = $this->getMock('Magento\Core\Model\Module\ResourceResolverInterface'); - $this->_moduleListMock = $this->getMock('Magento\Core\Model\ModuleListInterface'); + $this->_factoryMock = $this->getMock('Magento\App\Updater\SetupFactory', array(), array(), '', false); + $this->_appStateMock = $this->getMock('Magento\App\State', array(), array(), '', false); + $this->_moduleListMock = $this->getMock('Magento\App\ModuleListInterface'); + $this->_resourceResolver = $this->getMock('Magento\App\Module\ResourceResolverInterface'); $this->_resourceSetupMock = $this->getMock('Magento\Catalog\Model\Resource\Setup', array(), array(), '', false); $moduleList = array('Test_Module' => array()); @@ -74,21 +74,16 @@ class UpdaterTest extends \PHPUnit_Framework_TestCase ->with('Test_Module') ->will($this->returnValue($resourceList)); - $createData = array( - 'resourceName' => 'catalog_setup', - 'moduleName' => 'Test_Module', - ); $this->_factoryMock->expects($this->any()) ->method('create') - ->with('Magento\Catalog\Model\Resource\Setup', $createData) + ->with('catalog_setup', 'Test_Module') ->will($this->returnValue($this->_resourceSetupMock)); - $this->_model = new \Magento\Core\Model\Db\Updater( + $this->_model = new \Magento\App\Updater( $this->_factoryMock, $this->_appStateMock, $this->_moduleListMock, $this->_resourceResolver, - array('catalog_setup' => 'Magento\Catalog\Model\Resource\Setup'), true ); } diff --git a/dev/tests/unit/testsuite/Magento/Backend/App/Area/FrontNameResolverTest.php b/dev/tests/unit/testsuite/Magento/Backend/App/Area/FrontNameResolverTest.php new file mode 100644 index 00000000000..f3047d1b966 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Backend/App/Area/FrontNameResolverTest.php @@ -0,0 +1,65 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Backend\App\Area; + +class FrontNameResolverTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Backend\App\Area\FrontNameResolver + */ + protected $_model; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_configMock; + + /** + * @var string + */ + protected $_defaultFrontName = 'defaultFrontName'; + + protected function setUp() + { + $this->_configMock + = $this->getMock('\Magento\Core\Model\ConfigInterface', array('getValue', 'getNode', 'setNode', 'reinit')); + $this->_model = new \Magento\Backend\App\Area\FrontNameResolver($this->_configMock, $this->_defaultFrontName); + } + + public function testIfCustomPathUsed() + { + $this->_configMock->expects($this->at(0)) + ->method('getValue')->with('admin/url/use_custom_path', 'default')->will($this->returnValue(true)); + $this->_configMock->expects($this->at(1)) + ->method('getValue')->with('admin/url/custom_path', 'default')->will($this->returnValue('expectedValue')); + $this->assertEquals('expectedValue', $this->_model->getFrontName()); + } + + public function testIfCustomPathNotUsed() + { + $this->_configMock->expects($this->once())-> + method('getValue')->with('admin/url/use_custom_path', 'default')->will($this->returnValue(false)); + $this->assertEquals($this->_defaultFrontName, $this->_model->getFrontName()); + } +} \ No newline at end of file diff --git a/dev/tests/unit/testsuite/Magento/Backend/App/Area/Request/PathInfoProcessorTest.php b/dev/tests/unit/testsuite/Magento/Backend/App/Area/Request/PathInfoProcessorTest.php new file mode 100644 index 00000000000..91dc75bca9c --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Backend/App/Area/Request/PathInfoProcessorTest.php @@ -0,0 +1,83 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Backend\App\Area\Request; + +class PathInfoProcessorTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Backend\App\Request\PathInfoProcessor + */ + protected $_model; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_backendHelperMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_subjectMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_requestMock; + + /** + * @var string + */ + protected $_pathInfo = '/storeCode/node_one/'; + + protected function setUp() + { + $this->_requestMock = $this->getMock('\Magento\App\RequestInterface'); + $this->_subjectMock = + $this->getMock('\Magento\Core\App\Request\PathInfoProcessor', array(), array(), '', false); + $this->_backendHelperMock = + $this->getMock('\Magento\Backend\Helper\Data', array(), array(), '', false); + $this->_model = new \Magento\Backend\App\Request\PathInfoProcessor( + $this->_subjectMock, + $this->_backendHelperMock + ); + } + + public function testProcessIfStoreCodeEqualToAreaFrontName() + { + $this->_backendHelperMock-> + expects($this->once())->method('getAreaFrontName')->will($this->returnValue('storeCode')); + $this->assertEquals($this->_pathInfo, $this->_model->process($this->_requestMock, $this->_pathInfo)); + } + + public function testProcessIfStoreCodeNotEqualToAreaFrontName() + { + $this->_backendHelperMock + ->expects($this->once())->method('getAreaFrontName')->will($this->returnValue('store')); + $this->_subjectMock + ->expects($this->once())->method('process')->with($this->_requestMock, $this->_pathInfo) + ->will($this->returnValue('Expected')); + $this->assertEquals('Expected', $this->_model->process($this->_requestMock, $this->_pathInfo)); + } + +} \ No newline at end of file diff --git a/dev/tests/unit/testsuite/Magento/Backend/Block/Store/SwitcherTest.php b/dev/tests/unit/testsuite/Magento/Backend/Block/Store/SwitcherTest.php index 0088c6d5c73..d9a02d174f5 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Block/Store/SwitcherTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Block/Store/SwitcherTest.php @@ -37,37 +37,50 @@ class SwitcherTest extends \PHPUnit_Framework_TestCase /** * @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_applicationModel; + protected $_applicationMock; /** * @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_websiteFactory; + protected $_websiteFactoryMock; /** * @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_storeGroupFactory; + protected $_storeGroupMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_coreHelperMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_contextMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_storeFactoryMock; protected function setUp() { - $this->_applicationModel = $this->getMock('Magento\Core\Model\App', array(), array(), '', false); - $this->_websiteFactory = $this->getMock('Magento\Core\Model\Website\Factory', array(), array(), '', false); - $this->_storeGroupFactory = $this->getMock( - 'Magento\Core\Model\Store\Group\Factory', - array(), - array(), - '', - false + $this->_coreHelperMock = $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false); + $this->_contextMock = $this->getMock('Magento\Backend\Block\Template\Context', array(), array(), '', false); + $this->_applicationMock = $this->getMock('Magento\Core\Model\App', array(), array(), '', false); + $this->_websiteFactoryMock = $this->getMock('Magento\Core\Model\Website\Factory', array(), array(), '', false); + $this->_storeGroupMock = $this->getMock('Magento\Core\Model\Store\Group\Factory', array(), array(), '', false); + $this->_storeFactoryMock = $this->getMock('Magento\Core\Model\StoreFactory', array(), array(), '', false); + + $this->_object = new \Magento\Backend\Block\Store\Switcher( + $this->_coreHelperMock, + $this->_contextMock, + $this->_applicationMock, + $this->_websiteFactoryMock, + $this->_storeGroupMock, + $this->_storeFactoryMock ); - - $helper = new \Magento\TestFramework\Helper\ObjectManager($this); - $this->_object = $helper->getObject('Magento\Backend\Block\Store\Switcher', array( - 'urlBuilder' => $this->getMock('Magento\Backend\Model\Url', array(), array(), '', false), - 'application' => $this->_applicationModel, - 'websiteFactory' => $this->_websiteFactory, - 'storeGroupFactory' => $this->_storeGroupFactory - )); } /** @@ -77,12 +90,7 @@ class SwitcherTest extends \PHPUnit_Framework_TestCase { $websiteModel = $this->getMock('Magento\Core\Model\Website', array(), array(), '', false, false); $collection = $this->getMock( - 'Magento\Core\Model\Resource\Website\Collection', - array(), - array(), - '', - false, - false + 'Magento\Core\Model\Resource\Website\Collection', array(), array(), '', false, false ); $websiteModel->expects($this->once())->method('getResourceCollection')->will($this->returnValue($collection)); @@ -90,7 +98,7 @@ class SwitcherTest extends \PHPUnit_Framework_TestCase $collection->expects($this->once())->method('load')->will($this->returnValue($expected)); $collection->expects($this->never())->method('addIdFilter'); - $this->_websiteFactory->expects($this->once()) + $this->_websiteFactoryMock->expects($this->once()) ->method('create') ->will($this->returnValue($websiteModel)); @@ -124,7 +132,7 @@ class SwitcherTest extends \PHPUnit_Framework_TestCase $collection->expects($this->once())->method('load')->will($this->returnValue($expected)); $collection->expects($this->once())->method('addIdFilter')->with($ids); - $this->_websiteFactory->expects($this->once()) + $this->_websiteFactoryMock->expects($this->once()) ->method('create') ->will($this->returnValue($websiteModel)); @@ -140,7 +148,7 @@ class SwitcherTest extends \PHPUnit_Framework_TestCase $this->_object->setWebsiteIds(null); $expected = array('test', 'data', 'some'); - $this->_applicationModel->expects($this->once())->method('getWebsites')->will($this->returnValue($expected)); + $this->_applicationMock->expects($this->once())->method('getWebsites')->will($this->returnValue($expected)); $this->assertEquals($expected, $this->_object->getWebsites()); } @@ -166,7 +174,7 @@ class SwitcherTest extends \PHPUnit_Framework_TestCase 3 => 'site 3', 5 => 'site 5', ); - $this->_applicationModel->expects($this->once())->method('getWebsites')->will($this->returnValue($webSites)); + $this->_applicationMock->expects($this->once())->method('getWebsites')->will($this->returnValue($webSites)); $this->assertEquals($expected, $this->_object->getWebsites()); } @@ -188,7 +196,7 @@ class SwitcherTest extends \PHPUnit_Framework_TestCase $this->_object->setWebsiteIds($ids); $expected = array(); - $this->_applicationModel->expects($this->once())->method('getWebsites')->will($this->returnValue($webSites)); + $this->_applicationMock->expects($this->once())->method('getWebsites')->will($this->returnValue($webSites)); $this->assertEquals($expected, $this->_object->getWebsites()); } diff --git a/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/EditTest.php b/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/EditTest.php index aa2c8b000cb..53fd47b375a 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/EditTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/EditTest.php @@ -65,7 +65,7 @@ class EditTest extends \PHPUnit_Framework_TestCase array(), array(), '', false, false ); - $this->_requestMock = $this->getMock('Magento\Core\Controller\Request\Http', + $this->_requestMock = $this->getMock('Magento\App\RequestInterface', array(), array(), '', false, false ); $this->_requestMock->expects($this->any()) diff --git a/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/Form/Field/ExportTest.php b/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/Form/Field/ExportTest.php index 9f624cfdfbf..e36220e4fe0 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/Form/Field/ExportTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/Form/Field/ExportTest.php @@ -65,7 +65,7 @@ class ExportTest extends \PHPUnit_Framework_TestCase $blockMock = $this->getMock('Magento\Backend\Block\Widget\Button', array(), array(), '', false, false); - $requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false, false); + $requestMock = $this->getMock('Magento\App\RequestInterface', array(), array(), '', false, false); $requestMock->expects($this->once())->method('getParam')->with('website')->will($this->returnValue(1)); $helperMock = $this->getMock('Magento\Backend\Helper\Data', array(), array(), '', false, false); diff --git a/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/Form/FieldsetTest.php b/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/Form/FieldsetTest.php index a809b4d9172..07d631498b5 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/Form/FieldsetTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/Form/FieldsetTest.php @@ -71,7 +71,7 @@ class FieldsetTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false, + $this->_requestMock = $this->getMock('Magento\App\RequestInterface', array(), array(), '', false, false); $this->_urlModelMock = $this->getMock('Magento\Backend\Model\Url', array(), array(), '', false, false); $this->_layoutMock = $this->getMock('Magento\Core\Model\Layout', array(), array(), '', false, false); diff --git a/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/FormTest.php b/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/FormTest.php index 75e970104fe..6dd3c291b8a 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/FormTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/FormTest.php @@ -80,7 +80,7 @@ class FormTest extends \PHPUnit_Framework_TestCase array(), array(), '', false, false ); - $requestMock = $this->getMock('Magento\Core\Controller\Request\Http', + $requestMock = $this->getMock('Magento\App\RequestInterface', array(), array(), '', false, false ); $requestParams = array( diff --git a/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/TabsTest.php b/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/TabsTest.php index f05e9bfd997..c60079900a0 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/TabsTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Block/System/Config/TabsTest.php @@ -56,7 +56,7 @@ class TabsTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $this->_requestMock = $this->getMock('Magento\App\RequestInterface', array(), array(), '', false); $this->_requestMock->expects($this->any())->method('getParam')->with('section') ->will($this->returnValue('currentSectionId')); $this->_structureMock = $this->getMock('Magento\Backend\Model\Config\Structure', array(), array(), '', false); diff --git a/dev/tests/unit/testsuite/Magento/Backend/Block/Widget/Grid/Column/Renderer/CurrencyTest.php b/dev/tests/unit/testsuite/Magento/Backend/Block/Widget/Grid/Column/Renderer/CurrencyTest.php index e2e083cfccc..bbc79400119 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Block/Widget/Grid/Column/Renderer/CurrencyTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Block/Widget/Grid/Column/Renderer/CurrencyTest.php @@ -54,6 +54,21 @@ class CurrencyTest extends \PHPUnit_Framework_TestCase */ protected $_columnMock; + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_storeManagerMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_contextMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_requestMock; + /** * @var \Magento\Object */ @@ -61,29 +76,39 @@ class CurrencyTest extends \PHPUnit_Framework_TestCase protected function setUp() { + $this->_contextMock = $this->getMock('Magento\Backend\Block\Context', array(), array(), '', false); $this->_appMock = $this->getMock('Magento\Core\Model\App', array(), array(), '', false); + $this->_storeManagerMock = $this->getMock('\Magento\Core\Model\StoreManagerInterface'); $this->_localeMock = $this->getMock('Magento\Core\Model\LocaleInterface'); + $this->_requestMock = $this->getMock('Magento\App\RequestInterface'); + $this->_curLocatorMock = $this->getMock( 'Magento\Directory\Model\Currency\DefaultLocator', array(), array(), '', false ); $this->_columnMock = $this->getMock( 'Magento\Backend\Block\Widget\Grid\Column', array('getIndex'), array(), '', false ); - $this->_columnMock->expects($this->any())->method('getIndex')->will($this->returnValue('columnIndex')); + $this->_columnMock->expects($this->any()) + ->method('getIndex') + ->will($this->returnValue('columnIndex')); + + $this->_contextMock->expects($this->any()) + ->method('getApp') + ->will($this->returnValue($this->_appMock)); + + $this->_contextMock->expects($this->any()) + ->method('getRequest') + ->will($this->returnValue($this->_requestMock)); + $this->_row = new \Magento\Object(array('columnIndex' => '10')); - $objectManagerHelper = new \Magento\TestFramework\Helper\ObjectManager($this); - $this->_blockCurrency = $objectManagerHelper->getObject( - 'Magento\Backend\Block\Widget\Grid\Column\Renderer\Currency', - array( - 'locale' => $this->_localeMock, - 'app' => $this->_appMock, - 'currencyLocator' => $this->_curLocatorMock, - 'urlBuilder' => $this->getMock( - 'Magento\Backend\Model\Url', array(), array(), '', false - ) - ) + $this->_blockCurrency = new \Magento\Backend\Block\Widget\Grid\Column\Renderer\Currency( + $this->_contextMock, + $this->_storeManagerMock, + $this->_localeMock, + $this->_curLocatorMock ); + $this->_blockCurrency->setColumn($this->_columnMock); } @@ -94,9 +119,15 @@ class CurrencyTest extends \PHPUnit_Framework_TestCase unset($this->_curLocatorMock); unset($this->_columnMock); unset($this->_row); + unset($this->_storeManagerMock); + unset($this->_requestMock); + unset($this->_contextMock); unset($this->_blockCurrency); } + /** + * @covers \Magento\Backend\Block\Widget\Grid\Column\Renderer\Currency::render + */ public function testRenderWithDefaultCurrency() { $currencyMock = $this->getMock('Magento\Directory\Model\Currency', array(), array(), '', false); @@ -106,11 +137,14 @@ class CurrencyTest extends \PHPUnit_Framework_TestCase $storeMock = $this->getMock('Magento\Core\Model\Store', array(), array(), '', false); $storeMock->expects($this->once())->method('getBaseCurrency')->will($this->returnValue($currencyMock)); - $this->_appMock->expects($this->once())->method('getStore')->will($this->returnValue($storeMock)); + $this->_storeManagerMock->expects($this->once()) + ->method('getStore') + ->will($this->returnValue($storeMock)); - $this->_curLocatorMock->expects($this->any())->method('getDefaultCurrency')->will($this->returnValue( - 'defaultCurrency' - )); + $this->_curLocatorMock->expects($this->any()) + ->method('getDefaultCurrency') + ->with($this->_requestMock) + ->will($this->returnValue('defaultCurrency')); $currLocaleMock = $this->getMock('Zend_Currency', array(), array(), '', false); $currLocaleMock->expects($this->once())->method('toCurrency')->with(15.0000)->will($this->returnValue('15USD')); diff --git a/dev/tests/unit/testsuite/Magento/Backend/Block/Widget/Grid/MassactionTest.php b/dev/tests/unit/testsuite/Magento/Backend/Block/Widget/Grid/MassactionTest.php index 2d9c55bff77..a48df45bf62 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Block/Widget/Grid/MassactionTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Block/Widget/Grid/MassactionTest.php @@ -96,9 +96,7 @@ class MassactionTest extends \PHPUnit_Framework_TestCase ->with('test_grid') ->will($this->returnValue($this->_gridMock)); - $this->_requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array('getParam'), array(), '', - false - ); + $this->_requestMock = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); $this->_urlModelMock = $this->getMock('Magento\Backend\Model\Url', array(), array(), '', false); diff --git a/dev/tests/unit/testsuite/Magento/Backend/Block/Widget/Grid/SerializerTest.php b/dev/tests/unit/testsuite/Magento/Backend/Block/Widget/Grid/SerializerTest.php index 54082e983c4..63708a65fce 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Block/Widget/Grid/SerializerTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Block/Widget/Grid/SerializerTest.php @@ -29,13 +29,13 @@ namespace Magento\Backend\Block\Widget\Grid; class SerializerTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layoutMock; protected function setUp() { - $this->_layoutMock = $this->getMock('Magento\Core\Model\Layout', array(), array(), '', false); + $this->_layoutMock = $this->getMockBuilder('Magento\View\LayoutInterface')->getMockForAbstractClass(); } public function testPrepareLayout() diff --git a/dev/tests/unit/testsuite/Magento/Backend/Block/Widget/GridTest.php b/dev/tests/unit/testsuite/Magento/Backend/Block/Widget/GridTest.php index e2d9debd55c..8b35e0d36c5 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Block/Widget/GridTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Block/Widget/GridTest.php @@ -51,33 +51,38 @@ class GridTest extends \PHPUnit_Framework_TestCase public function testAddGetClearRss($isUseStoreInUrl, $setStoreCount) { $helperMock = $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false); + $urlMock = $this->getMock('Magento\Core\Model\Url', array(), array(), '', false); - $urlMock->expects($this->at($setStoreCount))->method('setStore'); - $urlMock->expects($this->any())->method('getUrl')->will($this->returnValue('some_url')); + $urlMock->expects($this->at($setStoreCount)) + ->method('setStore'); + $urlMock->expects($this->any()) + ->method('getUrl') + ->will($this->returnValue('some_url')); $storeMock = $this->getMock('Magento\Core\Model\Store', array(), array(), '', false); $storeMock->expects($this->any()) ->method('isUseStoreInUrl') ->will($this->returnValue($isUseStoreInUrl)); - $storeManager = $this->getMock( - 'Magento\Core\Model\StoreManager', array('getDefaultStoreView', 'getStore'), array(), '', false - ); - $storeManager->expects($this->any()) + + $storeManagerMock = $this->getMock('Magento\Core\Model\StoreManager', array(), array(), '', false); + + $appMock = $this->getMock('Magento\Core\Model\App', array(), array(), '', false); + $appMock->expects($this->any()) ->method('getStore') ->will($this->returnValue($storeMock)); - $storeManager->expects($this->any()) + $appMock->expects($this->any()) ->method('getDefaultStoreView') ->will($this->returnValue($storeMock)); - /** @var $block \Magento\Backend\Block\Widget\Grid */ - $block = $this->_objectManager->getObject( - 'Magento\Backend\Block\Widget\Grid', - array( - 'storeManager' => $storeManager, - 'urlModel' => $urlMock, - 'coreData' => $helperMock, - ) - ); + $contextMock = $this->getMock('\Magento\Backend\Block\Template\Context', array(), array(), '', false); + $contextMock->expects($this->any()) + ->method('getStoreManager') + ->will($this->returnValue($storeManagerMock)); + $contextMock->expects($this->any()) + ->method('getApp') + ->will($this->returnValue($appMock)); + + $block = new \Magento\Backend\Block\Widget\Grid($helperMock, $contextMock, $storeManagerMock, $urlMock); $this->assertFalse($block->getRssLists()); @@ -100,6 +105,6 @@ class GridTest extends \PHPUnit_Framework_TestCase return array( array(true, 1), array(false, 0), - ); + ); } } diff --git a/dev/tests/unit/testsuite/Magento/Backend/Controller/Adminhtml/System/Config/SaveTest.php b/dev/tests/unit/testsuite/Magento/Backend/Controller/Adminhtml/System/Config/SaveTest.php index d80ffefc2bb..c53d734e842 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Controller/Adminhtml/System/Config/SaveTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Controller/Adminhtml/System/Config/SaveTest.php @@ -69,11 +69,15 @@ class SaveTest extends \PHPUnit_Framework_TestCase */ protected $_cacheMock; + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_responseMock; + protected function setUp() { - $this->_requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false, - false); - $responseMock = $this->getMock('Magento\Core\Controller\Response\Http', array(), array(), '', false, false); + $this->_requestMock = $this->getMock('Magento\App\Request\Http', array(), array(), '', false, false); + $this->_responseMock = $this->getMock('Magento\App\Response\Http', array(), array(), '', false, false); $configStructureMock = $this->getMock('Magento\Backend\Model\Config\Structure', array(), array(), '', false, false @@ -81,7 +85,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase $this->_configFactoryMock = $this->getMock('Magento\Backend\Model\Config\Factory', array(), array(), '', false, false ); - $this->_eventManagerMock = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false, + $this->_eventManagerMock = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false, false); $helperMock = $this->getMock('Magento\Backend\Helper\Data', array(), array(), '', false, false); @@ -104,12 +108,12 @@ class SaveTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue($this->_sectionMock)); $helperMock->expects($this->any())->method('getUrl')->will($this->returnArgument(0)); - $responseMock->expects($this->once())->method('setRedirect')->with('*/system_config/edit'); + $this->_responseMock->expects($this->once())->method('setRedirect')->with('*/system_config/edit'); $helper = new \Magento\TestFramework\Helper\ObjectManager($this); $arguments = array( 'request' => $this->_requestMock, - 'response' => $responseMock, + 'response' => $this->_responseMock, 'session' => $this->_sessionMock, 'helper' => $helperMock, 'eventManager' => $this->_eventManagerMock, diff --git a/dev/tests/unit/testsuite/Magento/Backend/Helper/DataTest.php b/dev/tests/unit/testsuite/Magento/Backend/Helper/DataTest.php index 4090b7091b8..ea1b48b51ef 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Helper/DataTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Helper/DataTest.php @@ -44,83 +44,36 @@ class DataTest extends \PHPUnit_Framework_TestCase */ protected $_primaryConfigMock; + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_frontResolverMock; + protected function setUp() { $this->_configMock = $this->getMock('Magento\Core\Model\Config', array(), array(), '', false, false); $this->_primaryConfigMock = $this->getMock('Magento\Core\Model\Config\Primary', array(), array(), '', false, false); - - $this->_helper = new \Magento\Backend\Helper\Data( - $this->getMock('Magento\Core\Helper\Context', array(), array(), '', false, false), - $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false, false), - $this->_configMock, - $this->_primaryConfigMock, - $this->getMock('Magento\Core\Model\RouterList', array(), array(), '', false), - $this->getMock('Magento\Core\Model\App', array(), array(), '', false), - $this->getMock('Magento\Backend\Model\Url', array(), array(), '', false), - $this->getMock('Magento\Backend\Model\Auth', array(), array(), '', false), - 'backend', - 'custom_backend' - ); - } - - public function testGetAreaFrontNameReturnsDefaultValueWhenCustomNotSet() - { + $this->_frontResolverMock + = $this->getMock('\Magento\Backend\App\Area\FrontNameResolver', array(), array(), '', false); $this->_helper = new \Magento\Backend\Helper\Data( $this->getMock('Magento\Core\Helper\Context', array(), array(), '', false, false), $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false, false), - $this->_configMock, $this->_primaryConfigMock, - $this->getMock('Magento\Core\Model\RouterList', array(), array(), '', false), + $this->getMock('Magento\App\RouterList', array(), array(), '', false), $this->getMock('Magento\Core\Model\App', array(), array(), '', false), - $this->getMock('Magento\Backend\Model\Url', array(), array(), '', false), - $this->getMock('Magento\Backend\Model\Auth', array(), array(), '', false), - 'backend', - '' + $this->getMock('\Magento\Backend\Model\Url', array(), array(), '', false), + $this->getMock('\Magento\Backend\Model\Auth', array(), array(), '', false), + $this->_frontResolverMock ); - - $this->_configMock->expects($this->once())->method('getValue') - ->with(\Magento\Backend\Helper\Data::XML_PATH_USE_CUSTOM_ADMIN_PATH, 'default') - ->will($this->returnValue(false)); - - $this->assertEquals('backend', $this->_helper->getAreaFrontName()); } public function testGetAreaFrontNameLocalConfigCustomFrontName() { - $this->_configMock->expects($this->once())->method('getValue') - ->with(\Magento\Backend\Helper\Data::XML_PATH_USE_CUSTOM_ADMIN_PATH, 'default') - ->will($this->returnValue(false)); + $this->_frontResolverMock->expects($this->once()) + ->method('getFrontName') + ->will($this->returnValue('custom_backend')); $this->assertEquals('custom_backend', $this->_helper->getAreaFrontName()); } - - public function testGetAreaFrontNameAdminConfigCustomFrontName() - { - $this->_configMock->expects($this->at(0))->method('getValue') - ->with(\Magento\Backend\Helper\Data::XML_PATH_USE_CUSTOM_ADMIN_PATH, 'default') - ->will($this->returnValue(true)); - - $this->_configMock->expects($this->at(1))->method('getValue') - ->with(\Magento\Backend\Helper\Data::XML_PATH_CUSTOM_ADMIN_PATH, 'default') - ->will($this->returnValue('control')); - - $this->assertEquals('control', $this->_helper->getAreaFrontName()); - } - - public function testClearAreaFrontName() - { - $this->_configMock->expects($this->exactly(2))->method('getValue'); - - $this->_helper->getAreaFrontName(); - $this->_helper->clearAreaFrontName(); - $this->_helper->getAreaFrontName(); - } - - public function testGetAreaFrontNameReturnsValueFromCache() - { - $this->_configMock->expects($this->once())->method('getValue'); - $this->_helper->getAreaFrontName(); - $this->_helper->getAreaFrontName(); - } } diff --git a/dev/tests/unit/testsuite/Magento/Backend/Model/AuthTest.php b/dev/tests/unit/testsuite/Magento/Backend/Model/AuthTest.php new file mode 100644 index 00000000000..8869c2b38db --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Backend/Model/AuthTest.php @@ -0,0 +1,86 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Backend\Model; +class AuthTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var Magento\Backend\Model\Auth + */ + protected $_model; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_eventManagerMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_credentialStorage; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_modelFactoryMock; + + protected function setUp() + { + $this->_eventManagerMock = $this->getMock('\Magento\Event\ManagerInterface'); + $this->_credentialStorage = $this->getMock('\Magento\Backend\Model\Auth\Credential\StorageInterface'); + $this->_modelFactoryMock = $this->getMock('\Magento\Core\Model\Factory', array(), array(), '', false); + $this->_model = new \Magento\Backend\Model\Auth( + $this->_eventManagerMock, + $this->getMock('\Magento\Backend\Helper\Data', array(), array(), '', false), + $this->_authStorageMock = $this->getMock('\Magento\Backend\Model\Auth\StorageInterface'), + $this->_credentialStorage, + $this->_coreConfigMock = $this->getMock('\Magento\Core\Model\Config', array(), array(), '', false), + $this->_modelFactoryMock + ); + } + + /** + * @expectedException \Magento\Backend\Model\Auth\Exception + * @expectedExceptionMessage Please correct the user name or password. + */ + public function testLoginFailed() + { + $this->_modelFactoryMock + ->expects($this->once()) + ->method('create') + ->with('Magento\Backend\Model\Auth\Credential\StorageInterface') + ->will($this->returnValue($this->_credentialStorage)); + $exceptionMock = new \Magento\Core\Exception; + $this->_credentialStorage + ->expects($this->once()) + ->method('login') + ->with('username', 'password') + ->will($this->throwException($exceptionMock)); + $this->_credentialStorage->expects($this->never())->method('getId'); + $this->_eventManagerMock + ->expects($this->once()) + ->method('dispatch') + ->with('backend_auth_user_login_failed'); + $this->_model->login('username', 'password'); + } +} \ No newline at end of file diff --git a/dev/tests/unit/testsuite/Magento/Backend/Model/Config/Backend/BaseurlTest.php b/dev/tests/unit/testsuite/Magento/Backend/Model/Config/Backend/BaseurlTest.php index af644f9388b..f8a5fa53762 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Model/Config/Backend/BaseurlTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Model/Config/Backend/BaseurlTest.php @@ -27,8 +27,8 @@ class BaseurlTest extends \PHPUnit_Framework_TestCase { public function testSaveMergedJsCssMustBeCleaned() { - $eventDispatcher = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); - $appState = $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false); + $eventDispatcher = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); + $appState = $this->getMock('Magento\App\State', array(), array(), '', false); $storeManager = $this->getMock('Magento\Core\Model\StoreManager', array(), array(), '', false); $cacheManager = $this->getMock('Magento\Core\Model\CacheInterface'); $logger = $this->getMock('Magento\Core\Model\Logger', array(), array(), '', false); diff --git a/dev/tests/unit/testsuite/Magento/Backend/Model/Config/Backend/EncryptedTest.php b/dev/tests/unit/testsuite/Magento/Backend/Model/Config/Backend/EncryptedTest.php index 52424a4e5b5..986df699b34 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Model/Config/Backend/EncryptedTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Model/Config/Backend/EncryptedTest.php @@ -41,7 +41,7 @@ class EncryptedTest extends \PHPUnit_Framework_TestCase { $helper = new \Magento\TestFramework\Helper\ObjectManager($this); - $eventDispatcherMock = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventDispatcherMock = $this->getMock('Magento\Event\Manager', array(), array(), '', false); $contextMock = $this->getMock('Magento\Core\Model\Context', array(), array(), '', false); $contextMock->expects($this->any()) ->method('getEventDispatcher') diff --git a/dev/tests/unit/testsuite/Magento/Backend/Model/Config/Backend/SecureTest.php b/dev/tests/unit/testsuite/Magento/Backend/Model/Config/Backend/SecureTest.php index 749fb3aaf98..72c21528ce3 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Model/Config/Backend/SecureTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Model/Config/Backend/SecureTest.php @@ -27,8 +27,8 @@ class SecureTest extends \PHPUnit_Framework_TestCase { public function testSaveMergedJsCssMustBeCleaned() { - $eventDispatcher = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); - $appState = $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false); + $eventDispatcher = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); + $appState = $this->getMock('Magento\App\State', array(), array(), '', false); $storeManager = $this->getMock('Magento\Core\Model\StoreManager', array(), array(), '', false); $cacheManager = $this->getMock('Magento\Core\Model\CacheInterface'); $logger = $this->getMock('Magento\Core\Model\Logger', array(), array(), '', false); diff --git a/dev/tests/unit/testsuite/Magento/Backend/Model/Config/ScopeDefinerTest.php b/dev/tests/unit/testsuite/Magento/Backend/Model/Config/ScopeDefinerTest.php index eb54262a976..77679aaabae 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Model/Config/ScopeDefinerTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Model/Config/ScopeDefinerTest.php @@ -41,7 +41,7 @@ class ScopeDefinerTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $this->_requestMock = $this->getMock('Magento\App\RequestInterface', array(), array(), '', false); $this->_model = new \Magento\Backend\Model\Config\ScopeDefiner($this->_requestMock); } diff --git a/dev/tests/unit/testsuite/Magento/Backend/Model/Config/Structure/Element/FieldTest.php b/dev/tests/unit/testsuite/Magento/Backend/Model/Config/Structure/Element/FieldTest.php index 26356a12c32..02680041877 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Model/Config/Structure/Element/FieldTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Model/Config/Structure/Element/FieldTest.php @@ -169,7 +169,7 @@ class FieldTest extends \PHPUnit_Framework_TestCase public function testGetTooltipCreatesTooltipBlock() { $this->_model->setData(array('tooltip_block' => 'Magento\Core\Block\Tooltip'), 'scope'); - $tooltipBlock = $this->getMock('Magento\Core\Block'); + $tooltipBlock = $this->getMock('Magento\View\Element\BlockInterface'); $tooltipBlock->expects($this->once())->method('toHtml')->will($this->returnValue('tooltip block')); $this->_blockFactoryMock->expects($this->once()) ->method('createBlock') diff --git a/dev/tests/unit/testsuite/Magento/Backend/Model/ConfigTest.php b/dev/tests/unit/testsuite/Magento/Backend/Model/ConfigTest.php index b7523054cd0..13fb1c51e46 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Model/ConfigTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Model/ConfigTest.php @@ -76,7 +76,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_eventManagerMock = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $this->_eventManagerMock = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $this->_structureReaderMock = $this->getMock( 'Magento\Backend\Model\Config\Structure\Reader', array(), array(), '', false ); diff --git a/dev/tests/unit/testsuite/Magento/Backend/Model/Menu/ConfigTest.php b/dev/tests/unit/testsuite/Magento/Backend/Model/Menu/ConfigTest.php index 0c24149edb7..9e965e1495a 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Model/Menu/ConfigTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Model/Menu/ConfigTest.php @@ -89,7 +89,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase $this->_configReaderMock = $this->getMock('Magento\Backend\Model\Menu\Config\Reader', array(), array(), '', false); - $this->_eventManagerMock = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', + $this->_eventManagerMock = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false, false); $this->_logger = $this->getMock( diff --git a/dev/tests/unit/testsuite/Magento/Backend/Model/Menu/ItemTest.php b/dev/tests/unit/testsuite/Magento/Backend/Model/Menu/ItemTest.php index 4cf046dacc9..902dd9c5682 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Model/Menu/ItemTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Model/Menu/ItemTest.php @@ -93,7 +93,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase $this->_validatorMock = $this->getMock('Magento\Backend\Model\Menu\Item\Validator'); $this->_validatorMock->expects($this->any()) ->method('validate'); - $this->_moduleListMock = $this->getMock('Magento\Core\Model\ModuleListInterface'); + $this->_moduleListMock = $this->getMock('Magento\App\ModuleListInterface'); $helper = new \Magento\TestFramework\Helper\ObjectManager($this); $this->_model = $helper->getObject('Magento\Backend\Model\Menu\Item', array( diff --git a/dev/tests/unit/testsuite/Magento/Backend/Model/Router/NoRouteHandlerTest.php b/dev/tests/unit/testsuite/Magento/Backend/Model/Router/NoRouteHandlerTest.php index 5aeba870617..f13e8035a48 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Model/Router/NoRouteHandlerTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Model/Router/NoRouteHandlerTest.php @@ -26,28 +26,31 @@ namespace Magento\Backend\Model\Router; class NoRouteHandlerTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Backend\Helper\Data + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_helperMock; /** - * @var \Magento\Core\Controller\Request\Http + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_requestMock; /** - * @var \Magento\Backend\Model\Router\NoRouteHandler + * @var \Magento\Backend\App\Router\NoRouteHandler */ protected $_model; protected function setUp() { - $this->_requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $this->_requestMock = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); $this->_helperMock = $this->getMock('Magento\Backend\Helper\Data', array(), array(), '', false); $this->_helperMock->expects($this->any())->method('getAreaFrontName')->will($this->returnValue('backend')); - $this->_model = new \Magento\Backend\Model\Router\NoRouteHandler($this->_helperMock); + $this->_model = new \Magento\Backend\App\Router\NoRouteHandler($this->_helperMock); } + /** + * @covers Magento\Backend\App\Router\NoRouteHandler::process + */ public function testProcessWithBackendAreaFrontName() { $this->_requestMock @@ -76,6 +79,9 @@ class NoRouteHandlerTest extends \PHPUnit_Framework_TestCase $this->assertEquals(true, $this->_model->process($this->_requestMock)); } + /** + * @covers Magento\Backend\App\Router\NoRouteHandler::process + */ public function testProcessWithoutAreaFrontName() { $this->_requestMock diff --git a/dev/tests/unit/testsuite/Magento/Backend/Model/UrlTest.php b/dev/tests/unit/testsuite/Magento/Backend/Model/UrlTest.php index b5cba448441..d7d8004226b 100644 --- a/dev/tests/unit/testsuite/Magento/Backend/Model/UrlTest.php +++ b/dev/tests/unit/testsuite/Magento/Backend/Model/UrlTest.php @@ -37,41 +37,41 @@ class UrlTest extends \PHPUnit_Framework_TestCase */ protected $_model; + protected $_areaFrontName = 'backendArea'; + /** * Mock menu model * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_menuMock; - protected $_areaFrontName = 'backendArea'; - /** - * @var \Magento\Core\Model\SessionProxy|\PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_coreSessionMock; /** - * @var \Magento\Core\Controller\Request\Http + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_storeConfigMock; /** - * @var \Magento\Backend\Model\Menu\Config + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_menuConfigMock; /** - * @var \Magento\Core\Controller\Request\Http + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_backendHelperMock; /** - * @var \Magento\Core\Helper\Data|\PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_coreDataMock; /** - * @var \Magento\Core\Controller\Request\Http|\PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_requestMock; @@ -129,7 +129,7 @@ class UrlTest extends \PHPUnit_Framework_TestCase 'authSession' => $this->_authSessionMock )); - $this->_requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $this->_requestMock = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); $this->_model->setRequest($this->_requestMock); } @@ -294,17 +294,12 @@ class UrlTest extends \PHPUnit_Framework_TestCase $keyFromParams = $this->_model->getSecretKey($routeName, $controllerName, $actionName); - $requestMock = $this->getMock('Magento\Core\Controller\Request\Http', - array('getRouteName', 'getControllerName', 'getActionName', 'getBeforeForwardInfo'), - array(), - '', - false - ); - $requestMock->expects($this->exactly(3))->method('getBeforeForwardInfo')->will($this->returnValue(null)); - $requestMock->expects($this->once())->method('getRouteName')->will($this->returnValue($routeName)); - $requestMock->expects($this->once())->method('getControllerName')->will($this->returnValue($controllerName)); - $requestMock->expects($this->once())->method('getActionName')->will($this->returnValue($actionName)); - $this->_model->setRequest($requestMock); + $this->_requestMock->expects($this->exactly(3))->method('getBeforeForwardInfo')->will($this->returnValue(null)); + $this->_requestMock->expects($this->once())->method('getRouteName')->will($this->returnValue($routeName)); + $this->_requestMock + ->expects($this->once())->method('getControllerName')->will($this->returnValue($controllerName)); + $this->_requestMock->expects($this->once())->method('getActionName')->will($this->returnValue($actionName)); + $this->_model->setRequest($this->_requestMock); $keyFromRequest = $this->_model->getSecretKey(); $this->assertEquals($keyFromParams, $keyFromRequest); @@ -321,44 +316,37 @@ class UrlTest extends \PHPUnit_Framework_TestCase $keyFromParams = $this->_model->getSecretKey($routeName, $controllerName, $actionName); - $requestMock = $this->getMock('Magento\Core\Controller\Request\Http', - array('getBeforeForwardInfo'), - array(), - '', - false - ); - - $requestMock->expects($this->at(0)) + $this->_requestMock->expects($this->at(0)) ->method('getBeforeForwardInfo') ->with('route_name') ->will($this->returnValue('adminhtml')); - $requestMock->expects($this->at(1)) + $this->_requestMock->expects($this->at(1)) ->method('getBeforeForwardInfo') ->with('route_name') ->will($this->returnValue('adminhtml')); - $requestMock->expects($this->at(2)) + $this->_requestMock->expects($this->at(2)) ->method('getBeforeForwardInfo') ->with('controller_name') ->will($this->returnValue('catalog')); - $requestMock->expects($this->at(3)) + $this->_requestMock->expects($this->at(3)) ->method('getBeforeForwardInfo') ->with('controller_name') ->will($this->returnValue('catalog')); - $requestMock->expects($this->at(4)) + $this->_requestMock->expects($this->at(4)) ->method('getBeforeForwardInfo') ->with('action_name') ->will($this->returnValue('index')); - $requestMock->expects($this->at(5)) + $this->_requestMock->expects($this->at(5)) ->method('getBeforeForwardInfo') ->with('action_name') ->will($this->returnValue('index')); - $this->_model->setRequest($requestMock); + $this->_model->setRequest($this->_requestMock); $keyFromRequest = $this->_model->getSecretKey(); $this->assertEquals($keyFromParams, $keyFromRequest); } diff --git a/dev/tests/unit/testsuite/Magento/Backup/MediaTest.php b/dev/tests/unit/testsuite/Magento/Backup/MediaTest.php index 311c7cfb4aa..6930943cfc1 100644 --- a/dev/tests/unit/testsuite/Magento/Backup/MediaTest.php +++ b/dev/tests/unit/testsuite/Magento/Backup/MediaTest.php @@ -30,7 +30,7 @@ namespace Magento\Backup; class MediaTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirMock; @@ -41,7 +41,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_dirMock = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $this->_dirMock = $this->getMock('Magento\App\Dir', array(), array(), '', false); $this->_backupFactoryMock = $this->getMock('Magento\Backup\Factory', array(), array(), '', false); } /** diff --git a/dev/tests/unit/testsuite/Magento/Backup/NomediaTest.php b/dev/tests/unit/testsuite/Magento/Backup/NomediaTest.php index a4cdfd888d9..68eec9fd048 100644 --- a/dev/tests/unit/testsuite/Magento/Backup/NomediaTest.php +++ b/dev/tests/unit/testsuite/Magento/Backup/NomediaTest.php @@ -31,7 +31,7 @@ class NomediaTest extends \PHPUnit_Framework_TestCase { public function testCreate() { - $dir = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $dir = $this->getMock('Magento\App\Dir', array(), array(), '', false); $backupFactory = $this->getMock('Magento\Backup\Factory', array(), array(), '', false); $snapshot = $this->getMock('Magento\Backup\Snapshot', array('create'), array($dir, $backupFactory)); $snapshot->expects($this->any()) diff --git a/dev/tests/unit/testsuite/Magento/Backup/SnapshotTest.php b/dev/tests/unit/testsuite/Magento/Backup/SnapshotTest.php index b7a2074e93f..91c711777eb 100644 --- a/dev/tests/unit/testsuite/Magento/Backup/SnapshotTest.php +++ b/dev/tests/unit/testsuite/Magento/Backup/SnapshotTest.php @@ -31,7 +31,7 @@ class SnapshotTest extends \PHPUnit_Framework_TestCase { public function testGetDbBackupFilename() { - $dir = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $dir = $this->getMock('Magento\App\Dir', array(), array(), '', false); $backupFactory = $this->getMock('Magento\Backup\Factory', array(), array(), '', false); $manager = $this->getMock('Magento\Backup\Snapshot', array('getBackupFilename'), array($dir, $backupFactory)); diff --git a/dev/tests/unit/testsuite/Magento/Captcha/Helper/DataTest.php b/dev/tests/unit/testsuite/Magento/Captcha/Helper/DataTest.php index 99916718b64..9f33456ef03 100644 --- a/dev/tests/unit/testsuite/Magento/Captcha/Helper/DataTest.php +++ b/dev/tests/unit/testsuite/Magento/Captcha/Helper/DataTest.php @@ -36,7 +36,7 @@ class DataTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_dirMock = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false, false); + $this->_dirMock = $this->getMock('Magento\App\Dir', array(), array(), '', false, false); } protected function _getHelper($store, $config, $factory) @@ -121,7 +121,7 @@ class DataTest extends \PHPUnit_Framework_TestCase { $this->_dirMock->expects($this->once()) ->method('getDir') - ->with(\Magento\Core\Model\Dir::LIB) + ->with(\Magento\App\Dir::LIB) ->will($this->returnValue(TESTS_TEMP_DIR . '/lib')); $factoryMock = $this->getMock('Magento\Captcha\Model\CaptchaFactory', array(), array(), '', false); @@ -144,7 +144,7 @@ class DataTest extends \PHPUnit_Framework_TestCase $factoryMock = $this->getMock('Magento\Captcha\Model\CaptchaFactory', array(), array(), '', false); $this->_dirMock->expects($this->once()) ->method('getDir') - ->with(\Magento\Core\Model\Dir::MEDIA) + ->with(\Magento\App\Dir::MEDIA) ->will($this->returnValue(TESTS_TEMP_DIR . '/media')); $object = $this->_getHelper($this->_getStoreStub(), $this->_getConfigStub(), $factoryMock); diff --git a/dev/tests/unit/testsuite/Magento/Captcha/Model/ObserverTest.php b/dev/tests/unit/testsuite/Magento/Captcha/Model/ObserverTest.php index 48e646886e9..1b27b4f8f68 100644 --- a/dev/tests/unit/testsuite/Magento/Captcha/Model/ObserverTest.php +++ b/dev/tests/unit/testsuite/Magento/Captcha/Model/ObserverTest.php @@ -113,7 +113,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase $captchaValue = 'some-value'; $controller = $this->getMock('Magento\Core\Controller\Varien\Action', array(), array(), '', false); - $request = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $request = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); $request->expects($this->any()) ->method('getPost') ->with(\Magento\Captcha\Helper\Data::INPUT_NAME_FIELD_VALUE, null) @@ -151,8 +151,8 @@ class ObserverTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue($redirectUrl)); $controller = $this->getMock('Magento\Core\Controller\Varien\Action', array(), array(), '', false); - $request = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); - $response = $this->getMock('Magento\Core\Controller\Response\Http', array(), array(), '', false); + $request = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); + $response = $this->getMock('Magento\App\Response\Http', array(), array(), '', false); $request->expects($this->any())->method('getPost')->with(\Magento\Captcha\Helper\Data::INPUT_NAME_FIELD_VALUE, null) ->will($this->returnValue(array( diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Model/ObserverTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Model/ObserverTest.php index f1ecdbacc4a..0e9f2e1bdbd 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Model/ObserverTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Model/ObserverTest.php @@ -77,7 +77,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase 'flatResourceFactory' => $catFlatFactoryMock, 'productResourceFactory' => $productFactoryMock, )); - $this->_requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $this->_requestMock = $this->getMock('Magento\App\RequestInterface', array(), array(), '', false); } public function testTransitionProductTypeSimple() diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Attribute/Backend/MediaTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Attribute/Backend/MediaTest.php index d1d54394cd8..2774cee7ce0 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Attribute/Backend/MediaTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Attribute/Backend/MediaTest.php @@ -42,7 +42,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_objectHelper = new \Magento\TestFramework\Helper\ObjectManager($this); - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $fileStorageDb = $this->getMock('Magento\Core\Helper\File\Storage\Database', array(), array(), '', false); $coreData = $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false); @@ -53,7 +53,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue('table')); $mediaConfig = $this->getMock('Magento\Catalog\Model\Product\Media\Config', array(), array(), '', false); - $dirs = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $dirs = $this->getMock('Magento\App\Dir', array(), array(), '', false); $filesystem = $this->getMockBuilder('Magento\Filesystem')->disableOriginalConstructor()->getMock(); $this->_model = $this->_objectHelper->getObject('Magento\Catalog\Model\Product\Attribute\Backend\Media', array( 'eventManager' => $eventManager, diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Type/ConfigurableTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Type/ConfigurableTest.php index c3e2fcb965e..a7022f10cd9 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Type/ConfigurableTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Type/ConfigurableTest.php @@ -47,7 +47,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_objectHelper = new \Magento\TestFramework\Helper\ObjectManager($this); - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $coreDataMock = $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false); $fileStorageDbMock = $this->getMock('Magento\Core\Helper\File\Storage\Database', array(), array(), '', false); $filesystem = $this->getMockBuilder('Magento\Filesystem')->disableOriginalConstructor()->getMock(); diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Type/GroupedTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Type/GroupedTest.php index e297728176b..4e93dbdc2f4 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Type/GroupedTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Type/GroupedTest.php @@ -37,7 +37,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase protected function setUp() { $objectHelper = new \Magento\TestFramework\Helper\ObjectManager($this); - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $coreDataMock = $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false); $fileStorageDbMock = $this->getMock('Magento\Core\Helper\File\Storage\Database', array(), array(), '', false); $filesystem = $this->getMockBuilder('Magento\Filesystem')->disableOriginalConstructor()->getMock(); diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Type/SimpleTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Type/SimpleTest.php index 4516c756af9..a90a1eda776 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Type/SimpleTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Type/SimpleTest.php @@ -37,7 +37,7 @@ class SimpleTest extends \PHPUnit_Framework_TestCase protected function setUp() { $objectHelper = new \Magento\TestFramework\Helper\ObjectManager($this); - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $coreDataMock = $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false); $fileStorageDbMock = $this->getMock('Magento\Core\Helper\File\Storage\Database', array(), array(), '', false); $filesystem = $this->getMockBuilder('Magento\Filesystem')->disableOriginalConstructor()->getMock(); diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Type/VirtualTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Type/VirtualTest.php index a31d703275b..6166330f6d8 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Type/VirtualTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Model/Product/Type/VirtualTest.php @@ -37,7 +37,7 @@ class VirtualTest extends \PHPUnit_Framework_TestCase protected function setUp() { $objectHelper = new \Magento\TestFramework\Helper\ObjectManager($this); - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $coreDataMock = $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false); $coreRegistryMock = $this->getMock('Magento\Core\Model\Registry', array(), array(), '', false); $fileStorageDbMock = $this->getMock('Magento\Core\Helper\File\Storage\Database', array(), array(), '', false); diff --git a/dev/tests/unit/testsuite/Magento/Catalog/Model/Resource/Category/TreeTest.php b/dev/tests/unit/testsuite/Magento/Catalog/Model/Resource/Category/TreeTest.php index aae9fa02db0..b7b02ff0d13 100644 --- a/dev/tests/unit/testsuite/Magento/Catalog/Model/Resource/Category/TreeTest.php +++ b/dev/tests/unit/testsuite/Magento/Catalog/Model/Resource/Category/TreeTest.php @@ -65,7 +65,7 @@ class TreeTest extends \PHPUnit_Framework_TestCase ->with('catalog_category_entity') ->will($this->returnArgument(0)) ; - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $this->_attributeConfig = $this->getMock('Magento\Catalog\Model\Attribute\Config', array(), array(), '', false); $this->_collectionFactory = $this->getMock( 'Magento\Catalog\Model\Resource\Category\Collection\Factory', array(), array(), '', false diff --git a/dev/tests/unit/testsuite/Magento/CatalogRule/Model/Rule/JobTest.php b/dev/tests/unit/testsuite/Magento/CatalogRule/Model/Rule/JobTest.php index 8026bbcff62..fbac4e5a60b 100644 --- a/dev/tests/unit/testsuite/Magento/CatalogRule/Model/Rule/JobTest.php +++ b/dev/tests/unit/testsuite/Magento/CatalogRule/Model/Rule/JobTest.php @@ -34,7 +34,7 @@ class JobTest extends \PHPUnit_Framework_TestCase { $objectManagerHelper = new \Magento\TestFramework\Helper\ObjectManager($this); - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $eventManager->expects($this->once()) ->method('dispatch') ->with($this->equalTo('catalogrule_apply_all')); diff --git a/dev/tests/unit/testsuite/Magento/Checkout/Block/Cart/Item/RendererTest.php b/dev/tests/unit/testsuite/Magento/Checkout/Block/Cart/Item/RendererTest.php index e4885fda8af..44ce4d9adcf 100644 --- a/dev/tests/unit/testsuite/Magento/Checkout/Block/Cart/Item/RendererTest.php +++ b/dev/tests/unit/testsuite/Magento/Checkout/Block/Cart/Item/RendererTest.php @@ -36,7 +36,7 @@ class RendererTest extends \PHPUnit_Framework_TestCase $configView = $this->getMock('Magento\Config\View', array('getVarValue'), array(), '', false); $configView->expects($this->any())->method('getVarValue')->will($this->returnValue(75)); - $configManager = $this->getMock('Magento\Core\Model\View\Config', array(), array(), '', false); + $configManager = $this->getMock('Magento\View\ConfigInterface', array(), array(), '', false); $configManager->expects($this->any())->method('getViewConfig')->will($this->returnValue($configView)); $product = $this->getMock('Magento\Catalog\Model\Product', array('isConfigurable'), array(), '', false); diff --git a/dev/tests/unit/testsuite/Magento/Checkout/Block/Cart/LinkTest.php b/dev/tests/unit/testsuite/Magento/Checkout/Block/Cart/LinkTest.php index eece24755d8..03c415af5d4 100644 --- a/dev/tests/unit/testsuite/Magento/Checkout/Block/Cart/LinkTest.php +++ b/dev/tests/unit/testsuite/Magento/Checkout/Block/Cart/LinkTest.php @@ -40,7 +40,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase $path = 'checkout/cart'; $url = 'http://example.com/'; - $urlBuilder = $this->getMockForAbstractClass('Magento\Core\Model\UrlInterface'); + $urlBuilder = $this->getMockForAbstractClass('Magento\UrlInterface'); $urlBuilder->expects($this->once())->method('getUrl')->with($path)->will($this->returnValue($url . $path)); $helper = $this->getMockBuilder('Magento\Core\Helper\Data') diff --git a/dev/tests/unit/testsuite/Magento/Checkout/Block/LinkTest.php b/dev/tests/unit/testsuite/Magento/Checkout/Block/LinkTest.php index 0255664a831..606d3edbce0 100644 --- a/dev/tests/unit/testsuite/Magento/Checkout/Block/LinkTest.php +++ b/dev/tests/unit/testsuite/Magento/Checkout/Block/LinkTest.php @@ -40,7 +40,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase $path = 'checkout'; $url = 'http://example.com/'; - $urlBuilder = $this->getMockForAbstractClass('Magento\Core\Model\UrlInterface'); + $urlBuilder = $this->getMockForAbstractClass('Magento\UrlInterface'); $urlBuilder->expects($this->once())->method('getUrl')->with($path)->will($this->returnValue($url . $path)); $context = $this->_objectManagerHelper->getObject( diff --git a/dev/tests/unit/testsuite/Magento/Checkout/Controller/CartTest.php b/dev/tests/unit/testsuite/Magento/Checkout/Controller/CartTest.php index 17dccdada51..d9f04b05fc6 100644 --- a/dev/tests/unit/testsuite/Magento/Checkout/Controller/CartTest.php +++ b/dev/tests/unit/testsuite/Magento/Checkout/Controller/CartTest.php @@ -40,16 +40,14 @@ class CartTest extends \PHPUnit_Framework_TestCase public function testGoBack() { $helper = new \Magento\TestFramework\Helper\ObjectManager($this); - $responseMock = $this->getMock('Magento\Core\Controller\Response\Http', - array('setRedirect'), array(), '', false - ); + $responseMock = $this->getMock('Magento\App\Response\Http', array(), array(), '', false); $responseMock->headersSentThrowsException = false; $responseMock->expects($this->once()) ->method('setRedirect') ->with('http://some-url/index.php/checkout/cart/') ->will($this->returnSelf()); - $requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $requestMock = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); $requestMock->expects($this->any())->method('getActionName')->will($this->returnValue('add')); $requestMock->expects($this->at(0)) ->method('getParam')->with('return_url')->will($this->returnValue('http://malicious.com/')); diff --git a/dev/tests/unit/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php b/dev/tests/unit/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php index 58d2d749c55..ff50a4d4c58 100644 --- a/dev/tests/unit/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php +++ b/dev/tests/unit/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php @@ -59,7 +59,7 @@ class StorageTest extends \PHPUnit_Framework_TestCase protected $_resizeParameters; /** - * @var \Magento\Core\Model\Dir|PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\Dir|PHPUnit_Framework_MockObject_MockObject */ protected $_dirMock; @@ -108,7 +108,7 @@ class StorageTest extends \PHPUnit_Framework_TestCase $this->_imageHelperMock = $this->getMock('Magento\Cms\Helper\Wysiwyg\Images', array(), array(), '', false); $this->_resizeParameters = array('width' => 100, 'height' => 50); - $this->_dirMock = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $this->_dirMock = $this->getMock('Magento\App\Dir', array(), array(), '', false); $this->_storageCollectionFactoryMock = $this->getMock( 'Magento\Cms\Model\Wysiwyg\Images\Storage\CollectionFactory'); $this->_storageFileFactoryMock = $this->getMock('Magento\Core\Model\File\Storage\FileFactory'); diff --git a/dev/tests/unit/testsuite/Magento/Config/Reader/FilesystemTest.php b/dev/tests/unit/testsuite/Magento/Config/Reader/FilesystemTest.php index 805313bddf9..758bf9fe511 100644 --- a/dev/tests/unit/testsuite/Magento/Config/Reader/FilesystemTest.php +++ b/dev/tests/unit/testsuite/Magento/Config/Reader/FilesystemTest.php @@ -55,9 +55,7 @@ class FilesystemTest extends \PHPUnit_Framework_TestCase $this->_file = __DIR__ . '/../_files/reader/config.xml'; $this->_fileResolverMock = $this->getMock('Magento\Config\FileResolverInterface'); $this->_converterMock = $this->getMock('Magento\Config\ConverterInterface', array(), array(), '', false); - $this->_schemaLocatorMock = $this->getMock( - 'Magento\Core\Model\Module\Declaration\SchemaLocator', array(), array(), '', false - ); + $this->_schemaLocatorMock = $this->getMock('Magento\Config\SchemaLocatorInterface'); $this->_validationStateMock = $this->getMock('Magento\Config\ValidationStateInterface'); } diff --git a/dev/tests/unit/testsuite/Magento/Config/ValidationStateTest.php b/dev/tests/unit/testsuite/Magento/Config/ValidationStateTest.php index 254ba86e68c..58782327e43 100644 --- a/dev/tests/unit/testsuite/Magento/Config/ValidationStateTest.php +++ b/dev/tests/unit/testsuite/Magento/Config/ValidationStateTest.php @@ -43,15 +43,15 @@ class ValidationStateTest extends \PHPUnit_Framework_TestCase { return array( array( - \Magento\Core\Model\App\State::MODE_DEVELOPER, + \Magento\App\State::MODE_DEVELOPER, true ), array( - \Magento\Core\Model\App\State::MODE_DEFAULT, + \Magento\App\State::MODE_DEFAULT, false ), array( - \Magento\Core\Model\App\State::MODE_PRODUCTION, + \Magento\App\State::MODE_PRODUCTION, false ), ); diff --git a/dev/tests/unit/testsuite/Magento/Core/App/Area/Request/PathInfoProcessorTest.php b/dev/tests/unit/testsuite/Magento/Core/App/Area/Request/PathInfoProcessorTest.php new file mode 100644 index 00000000000..2aebe7588ec --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Core/App/Area/Request/PathInfoProcessorTest.php @@ -0,0 +1,111 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Core\App\Area\Request; +class PathInfoProcessorTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Core\App\Request\PathInfoProcessor + */ + protected $_model; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_storeManagerMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_requestMock; + + /** + * @var string + */ + protected $_pathInfo = '/storeCode/node_one/'; + + protected function setUp() + { + $this->_requestMock = $this->getMock('\Magento\App\RequestInterface', + array('isDirectAccessFrontendName', 'getModuleName', + 'setModuleName', 'getActionName', 'setActionName', 'getParam' + ) + ); + $this->_storeManagerMock = $this->getMock('\Magento\Core\Model\StoreManager', array(), array(), '', false); + $this->_model = new \Magento\Core\App\Request\PathInfoProcessor($this->_storeManagerMock); + } + + public function testProcessIfStoreExistsAndIsNotDirectAcccessToFrontName() + { + $store = $this->getMock('\Magento\Core\Model\Store', array(), array(), '', false); + $this->_storeManagerMock + ->expects($this->once())->method('getStores')->with(true, true) + ->will($this->returnValue(array('storeCode' => $store))); + $store->expects($this->once())->method('isUseStoreInUrl')->will($this->returnValue(true)); + $this->_requestMock + ->expects($this->once())->method('isDirectAccessFrontendName') + ->with('storeCode')->will($this->returnValue(false)); + $this->_storeManagerMock->expects($this->once())->method('setCurrentStore')->with('storeCode'); + $this->assertEquals('/node_one/', $this->_model->process($this->_requestMock, $this->_pathInfo)); + } + + public function testProcessIfStoreExistsAndDirectAcccessToFrontName() + { + $store = $this->getMock('\Magento\Core\Model\Store', array(), array(), '', false); + $this->_storeManagerMock + ->expects($this->once())->method('getStores')->with(true, true) + ->will($this->returnValue(array('storeCode' => $store))); + $store->expects($this->once())->method('isUseStoreInUrl')->will($this->returnValue(true)); + $this->_requestMock + ->expects($this->once())->method('isDirectAccessFrontendName') + ->with('storeCode')->will($this->returnValue(true)); + $this->_requestMock->expects($this->once())->method('setActionName')->with('noRoute'); + $this->assertEquals($this->_pathInfo, $this->_model->process($this->_requestMock, $this->_pathInfo)); + } + + public function testProcessIfStoreIsEmpty() + { + $path = '/0/node_one/'; + $store = $this->getMock('\Magento\Core\Model\Store', array(), array(), '', false); + $this->_storeManagerMock + ->expects($this->once())->method('getStores')->with(true, true) + ->will($this->returnValue(array('0' => $store))); + $store->expects($this->once())->method('isUseStoreInUrl')->will($this->returnValue(true)); + $this->_requestMock + ->expects($this->once())->method('isDirectAccessFrontendName') + ->with('0')->will($this->returnValue(true)); + $this->_requestMock->expects($this->never())->method('setActionName'); + $this->assertEquals($path, $this->_model->process($this->_requestMock, $path)); + } + + public function testProcessIfStoreCodeIsNotExist() + { + $store = $this->getMock('\Magento\Core\Model\Store', array(), array(), '', false); + $this->_storeManagerMock + ->expects($this->once())->method('getStores')->with(true, true) + ->will($this->returnValue(array('0' => $store))); + $store->expects($this->never())->method('isUseStoreInUrl'); + $this->_requestMock->expects($this->never())->method('isDirectAccessFrontendName'); + $this->assertEquals($this->_pathInfo, $this->_model->process($this->_requestMock, $this->_pathInfo)); + } +} \ No newline at end of file diff --git a/dev/tests/unit/testsuite/Magento/Core/App/FrontController/Plugin/InstallTest.php b/dev/tests/unit/testsuite/Magento/Core/App/FrontController/Plugin/InstallTest.php new file mode 100644 index 00000000000..751a223ef5a --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Core/App/FrontController/Plugin/InstallTest.php @@ -0,0 +1,78 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Core\App\FrontController\Plugin; +class InstallTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Core\App\FrontController\Plugin\Install + */ + protected $_model; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_appStateMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_cacheMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_dbUpdaterMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_invocationChainMock; + + protected function setUp() + { + $this->_appStateMock = $this->getMock('\Magento\App\State', array(), array(), '', false); + $this->_cacheMock = $this->getMock('\Magento\Cache\FrontendInterface'); + $this->_dbUpdaterMock = $this->getMock('\Magento\App\UpdaterInterface'); + $this->_invocationChainMock = + $this->getMock('\Magento\Code\Plugin\InvocationChain', array(), array(), '', false); + $this->_model = new \Magento\Core\App\FrontController\Plugin\Install( + $this->_appStateMock, + $this->_cacheMock, + $this->_dbUpdaterMock + ); + } + + public function testAroundDispatch() + { + $arguments = array(); + $this->_appStateMock->expects($this->once())->method('isInstalled')->will($this->returnValue(true)); + $this->_cacheMock + ->expects($this->once())->method('load')->with('data_upgrade')->will($this->returnValue(false)); + $this->_dbUpdaterMock->expects($this->once())->method('updateScheme'); + $this->_dbUpdaterMock->expects($this->once())->method('updateData'); + $this->_cacheMock->expects($this->once())->method('save')->with('true', 'data_upgrade'); + $this->_invocationChainMock->expects($this->once())->method('proceed')->with($arguments); + $this->_model->aroundDispatch($arguments, $this->_invocationChainMock); + } +} \ No newline at end of file diff --git a/dev/tests/unit/testsuite/Magento/Core/App/FrontController/Plugin/RequestPreprocessorTest.php b/dev/tests/unit/testsuite/Magento/Core/App/FrontController/Plugin/RequestPreprocessorTest.php new file mode 100644 index 00000000000..f3d62062b84 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Core/App/FrontController/Plugin/RequestPreprocessorTest.php @@ -0,0 +1,158 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Core\App\FrontController\Plugin; +class RequestPreprocessorTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Core\App\FrontController\Plugin\RequestPreprocessor + */ + protected $_model; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_rewriteServiceMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_storeManagerMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_appStateMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_urlMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_backendDataMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_storeConfigMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_invocationChainMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_requestMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_storeMock; + + protected function setUp() + { + $this->_storeMock = $this->getMock('\Magento\Core\Model\Store', array(), array(), '', false); + $this->_requestMock = $this->getMock('\Magento\App\Request\Http', array(), array(), '', false); + $this->_invocationChainMock + = $this->getMock('\Magento\Code\Plugin\InvocationChain', array(), array(), '', false); + $this->_rewriteServiceMock = + $this->getMock('\Magento\Core\App\Request\RewriteService', array(), array(), '', false); + $this->_storeManagerMock = $this->getMock('\Magento\Core\Model\StoreManager', array(), array(), '', false); + $this->_appStateMock = $this->getMock('\Magento\App\State', array(), array(), '', false); + $this->_urlMock = $this->getMock('\Magento\Core\Model\Url', array(), array(), '', false); + $this->_backendDataMock = $this->getMock('\Magento\Backend\Helper\Data', array(), array(), '', false); + $this->_storeConfigMock = $this->getMock('\Magento\Core\Model\Store\Config', array(), array(), '', false);; + + $this->_model = new \Magento\Core\App\FrontController\Plugin\RequestPreprocessor( + $this->_rewriteServiceMock, + $this->_storeManagerMock, + $this->_appStateMock, + $this->_urlMock, + $this->_backendDataMock, + $this->_storeConfigMock, + $this->getMock('\Magento\App\ResponseFactory', array(), array(), '', false) + ); + } + + public function testAroundDispatchIfNotInstalled() + { + $this->_appStateMock->expects($this->once())->method('isInstalled')->will($this->returnValue(false)); + $this->_requestMock->expects($this->once())->method('setDispatched')->with(false); + $this->_storeConfigMock->expects($this->never())->method('getConfig'); + $this->_rewriteServiceMock->expects($this->once())->method('applyRewrites')->with($this->_requestMock); + $this->_invocationChainMock->expects($this->once())->method('proceed')->with(array($this->_requestMock)); + $this->_model->aroundDispatch(array($this->_requestMock), $this->_invocationChainMock); + } + + public function testAroundDispatchIfInstalledAndRedirectCodeNotExist() + { + $this->_appStateMock->expects($this->once())->method('isInstalled')->will($this->returnValue(true)); + $this->_requestMock->expects($this->once())->method('setDispatched')->with(false); + $this->_storeConfigMock->expects($this->once())->method('getConfig')->with('web/url/redirect_to_base'); + $this->_rewriteServiceMock->expects($this->once())->method('applyRewrites')->with($this->_requestMock); + $this->_invocationChainMock->expects($this->once())->method('proceed')->with(array($this->_requestMock)); + $this->_requestMock->expects($this->never())->method('getPathInfo'); + $this->_model->aroundDispatch(array($this->_requestMock), $this->_invocationChainMock); + } + + public function testAroundDispatchIfInstalledAndRedirectCodeExist() + { + $this->_appStateMock->expects($this->once())->method('isInstalled')->will($this->returnValue(true)); + $this->_requestMock->expects($this->once())->method('setDispatched')->with(false); + $this->_storeConfigMock + ->expects($this->once())->method('getConfig') + ->with('web/url/redirect_to_base')->will($this->returnValue(302)); + $this->_requestMock->expects($this->once())->method('getPathInfo')->will($this->returnValue('node/')); + $this->_backendDataMock->expects($this->once())->method('getAreaFrontName')->will($this->returnValue('node')); + $this->_storeManagerMock->expects($this->never())->method('getStore'); + $this->_rewriteServiceMock->expects($this->once())->method('applyRewrites')->with($this->_requestMock); + $this->_invocationChainMock->expects($this->once())->method('proceed')->with(array($this->_requestMock)); + + $this->_model->aroundDispatch(array($this->_requestMock), $this->_invocationChainMock); + } + + + public function testAroundDispatchIfBaseUrlNotExists() + { + $this->_appStateMock->expects($this->once())->method('isInstalled')->will($this->returnValue(true)); + $this->_requestMock->expects($this->once())->method('setDispatched')->with(false); + $this->_storeConfigMock + ->expects($this->once())->method('getConfig') + ->with('web/url/redirect_to_base')->will($this->returnValue(302)); + $this->_requestMock->expects($this->once())->method('getPathInfo')->will($this->returnValue('node/')); + $this->_backendDataMock->expects($this->once())->method('getAreaFrontName')->will($this->returnValue('node1')); + $this->_storeManagerMock + ->expects($this->any())->method('getStore')->will($this->returnValue($this->_storeMock)); + $this->_storeMock->expects($this->once())->method('getBaseUrl')->will($this->returnValue(false)); + $this->_requestMock->expects($this->never())->method('getRequestUri'); + $this->_rewriteServiceMock->expects($this->once())->method('applyRewrites')->with($this->_requestMock); + $this->_invocationChainMock->expects($this->once())->method('proceed')->with(array($this->_requestMock)); + + $this->_model->aroundDispatch(array($this->_requestMock), $this->_invocationChainMock); + } +} \ No newline at end of file diff --git a/dev/tests/unit/testsuite/Magento/Core/App/Request/RewriteServiceTest.php b/dev/tests/unit/testsuite/Magento/Core/App/Request/RewriteServiceTest.php new file mode 100644 index 00000000000..58d75bc3178 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Core/App/Request/RewriteServiceTest.php @@ -0,0 +1,82 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Core\App\Request; +class RewriteServiceTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Core\App\Request\RewriteService + */ + protected $_model; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_routerListMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_rewriteFactoryMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_configMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_requestMock; + + protected function setUp() + { + $this->_routerListMock = $this->getMock('\Magento\App\RouterList', array(), array(), '', false); + $this->_configMock = $this->getMock('\Magento\Core\Model\Config', array(), array(), '', false); + $this->_requestMock = $this->getMock('\Magento\App\Request\Http', array(), array(), '', false); + $this->_rewriteFactoryMock = $this->getMock( + '\Magento\Core\Model\Url\RewriteFactory', array('create'), array(), '', false + ); + + $this->_model = new \Magento\Core\App\Request\RewriteService( + $this->_routerListMock, + $this->_rewriteFactoryMock, + $this->_configMock + ); + } + + public function testApplyRewritesWhenRequestIsStraight() + { + $this->_requestMock->expects($this->once())->method('isStraight')->will($this->returnValue(true)); + $this->_rewriteFactoryMock->expects($this->never())->method('create')->will($this->returnValue('nodeName')); + $this->_model->applyRewrites($this->_requestMock); + } + + public function testApplyRewritesWhenRequestIsNotStraight() + { + $this->_requestMock->expects($this->once())->method('isStraight')->will($this->returnValue(false)); + $urlRewriteMock = $this->getMock('\Magento\Core\Model\Url\Rewrite', array(), array(), '', false); + $this->_rewriteFactoryMock->expects($this->once())->method('create')->will($this->returnValue($urlRewriteMock)); + $this->_model->applyRewrites($this->_requestMock); + } +} \ No newline at end of file diff --git a/dev/tests/unit/testsuite/Magento/Core/Block/AbstractBlockTest.php b/dev/tests/unit/testsuite/Magento/Core/Block/AbstractBlockTest.php index 4501efb76c5..88c043bec55 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Block/AbstractBlockTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Block/AbstractBlockTest.php @@ -83,7 +83,7 @@ class AbstractBlockTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue('one')); $config->expects($this->at(1))->method('getVarValue')->with($module, 'v2')->will($this->returnValue('two')); - $configManager = $this->getMock('Magento\Core\Model\View\Config', array(), array(), '', false); + $configManager = $this->getMock('Magento\View\ConfigInterface', array(), array(), '', false); $configManager->expects($this->exactly(2))->method('getViewConfig')->will($this->returnValue($config)); /** @var $block \Magento\Core\Block\AbstractBlock|PHPUnit_Framework_MockObject_MockObject */ diff --git a/dev/tests/unit/testsuite/Magento/Core/Block/TemplateTest.php b/dev/tests/unit/testsuite/Magento/Core/Block/TemplateTest.php index 9d4534f6efa..b126cc7262c 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Block/TemplateTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Block/TemplateTest.php @@ -29,79 +29,89 @@ namespace Magento\Core\Block; class TemplateTest extends \PHPUnit_Framework_TestCase { - public function testGetTemplateFile() - { - $template = 'fixture'; - $area = 'areaFixture'; - $params = array('module' => 'Magento_Core', 'area' => $area); - - $fileSystem = $this->getMock('Magento\Core\Model\View\FileSystem', array(), array(), '', false); - $fileSystem->expects($this->once())->method('getFilename')->with($template, $params); - $arguments = array( - 'viewFileSystem' => $fileSystem, - 'data' => array('template' => $template, 'area' => $area), - ); - $helper = new \Magento\TestFramework\Helper\ObjectManager($this); + /** + * @var \Magento\Core\Block\Template + */ + protected $_block; - $block = $helper->getObject('Magento\Core\Block\Template', $arguments); + /** + * @var \Magento\Filesystem|\PHPUnit_Framework_MockObject_MockObject + */ + protected $_filesystem; - $block->getTemplateFile(); - } + /** + * @var \Magento\Core\Model\TemplateEngine\EngineInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $_templateEngine; /** - * @param string $filename - * @param string $expectedOutput - * @dataProvider fetchViewDataProvider + * @var \Magento\Core\Model\View\FileSystem|\PHPUnit_Framework_MockObject_MockObject */ - public function testFetchView($filename, $expectedOutput) + protected $_viewFileSystem; + + protected function setUp() { - $map = array( - array(\Magento\Core\Model\Dir::APP, __DIR__), - array(\Magento\Core\Model\Dir::THEMES, __DIR__ . 'design'), + $dirMap = array( + array(\Magento\App\Dir::APP, __DIR__), + array(\Magento\App\Dir::THEMES, __DIR__ . '/design'), ); - $dirMock = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false, false); - $dirMock->expects($this->any())->method('getDir')->will($this->returnValueMap($map)); - $layout = $this->getMock('Magento\Core\Model\Layout', array('isDirectOutput'), array(), '', false); - $filesystem = new \Magento\Filesystem(new \Magento\Filesystem\Adapter\Local); - $design = $this->getMock('Magento\Core\Model\View\DesignInterface', array(), array(), '', false); - $translator = $this->getMock('Magento\Core\Model\Translate', array(), array(), '', false); - - $objectManagerMock = $this->getMock('Magento\ObjectManager', array('get', 'create', 'configure')); - $objectManagerMock->expects($this->any()) + $dirs = $this->getMock('Magento\App\Dir', array(), array(), '', false, false); + $dirs->expects($this->any())->method('getDir')->will($this->returnValueMap($dirMap)); + + $this->_viewFileSystem = $this->getMock('\Magento\Core\Model\View\FileSystem', array(), array(), '', false); + + $this->_filesystem = $this->getMock('\Magento\Filesystem', array(), array(), '', false); + + $this->_templateEngine = $this->getMock('\Magento\Core\Model\TemplateEngine\EngineInterface'); + + $enginePool = $this->getMock('Magento\Core\Model\TemplateEngine\Pool', array(), array(), '', false); + $enginePool->expects($this->any()) ->method('get') - ->with('Magento\Core\Model\TemplateEngine\Php') - ->will($this->returnValue(new \Magento\Core\Model\TemplateEngine\Php())); - $engineFactory = new \Magento\Core\Model\TemplateEngine\Factory($objectManagerMock); - - $arguments = array( - 'design' => $design, - 'layout' => $layout, - 'dirs' => $dirMock, - 'filesystem' => $filesystem, - 'translator' => $translator, - 'engineFactory' => $engineFactory, - ); - $helper = new \Magento\TestFramework\Helper\ObjectManager($this); + ->with('phtml') + ->will($this->returnValue($this->_templateEngine)); - $block = $this->getMock( - 'Magento\Core\Block\Template', - array('getShowTemplateHints'), - $helper->getConstructArguments('Magento\Core\Block\Template', $arguments) + $context = $this->getMock('\Magento\Core\Block\Template\Context', array(), array(), '', false); + $context->expects($this->any())->method('getEnginePool')->will($this->returnValue($enginePool)); + $context->expects($this->any())->method('getDirs')->will($this->returnValue($dirs)); + $context->expects($this->any())->method('getFilesystem')->will($this->returnValue($this->_filesystem)); + $context->expects($this->any())->method('getViewFileSystem')->will($this->returnValue($this->_viewFileSystem)); + + $this->_block = new \Magento\Core\Block\Template( + $this->getMock('\Magento\Core\Helper\Data', array(), array(), '', false), + $context, + array('template' => 'template.phtml', 'area' => 'frontend', 'module_name' => 'Fixture_Module') ); - $layout->expects($this->once())->method('isDirectOutput')->will($this->returnValue(false)); + } - $this->assertSame($block, $block->assign(array('varOne' => 'value1', 'varTwo' => 'value2'))); - $this->assertEquals($expectedOutput, $block->fetchView(__DIR__ . "/_files/{$filename}")); + public function testGetTemplateFile() + { + $params = array('module' => 'Fixture_Module', 'area' => 'frontend'); + $this->_viewFileSystem->expects($this->once())->method('getFilename')->with('template.phtml', $params); + $this->_block->getTemplateFile(); } - /** - * @return array - */ - public function fetchViewDataProvider() + public function testFetchView() { - return array( - array('template_test_assign.phtml', 'value1, value2'), - array('invalid_file', ''), - ); + $this->expectOutputString(''); + + $this->_filesystem + ->expects($this->once()) + ->method('isPathInDirectory') + ->with('template.phtml', __DIR__) + ->will($this->returnValue(true)) + ; + $this->_filesystem + ->expects($this->once())->method('isFile')->with('template.phtml')->will($this->returnValue(true)); + + $output = '<h1>Template Contents</h1>'; + $vars = array('var1' => 'value1', 'var2' => 'value2'); + $this->_templateEngine + ->expects($this->once()) + ->method('render') + ->with($this->identicalTo($this->_block), 'template.phtml', $vars) + ->will($this->returnValue($output)) + ; + $this->_block->assign($vars); + $this->assertEquals($output, $this->_block->fetchView('template.phtml')); } } diff --git a/dev/tests/unit/testsuite/Magento/Core/Controller/Request/HttpTest.php b/dev/tests/unit/testsuite/Magento/Core/Controller/Request/HttpTest.php index 65a80f22808..ea3b74f9a8c 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Controller/Request/HttpTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Controller/Request/HttpTest.php @@ -26,15 +26,18 @@ namespace Magento\Core\Controller\Request; class HttpTest extends \PHPUnit_Framework_TestCase { - /** @var \Magento\Core\Controller\Request\Http */ + /** @var \Magento\App\RequestInterface */ protected $_model; + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_routerListMock; + protected function setUp() { - $storeManager = $this->getMock('Magento\Core\Model\StoreManager', array(), array(), '', false); - $helperMock = $this->getMock('Magento\Backend\Helper\DataProxy', array(), array(), - '', false); - $this->_model = new \Magento\Core\Controller\Request\Http($storeManager, $helperMock); + $this->_routerListMock = $this->getMock('\Magento\App\RouterList', array(), array(), '', false); + $this->_model = new \Magento\App\Request\Http($this->_routerListMock); } /** diff --git a/dev/tests/unit/testsuite/Magento/Core/Controller/Response/HttpTest.php b/dev/tests/unit/testsuite/Magento/Core/Controller/Response/HttpTest.php index 198f295a802..c11641f9994 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Controller/Response/HttpTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Controller/Response/HttpTest.php @@ -26,7 +26,7 @@ */ /** - * Test class for \Magento\Core\Controller\Response\Http + * Test class for \Magento\App\ResponseInterface */ namespace Magento\Core\Controller\Response; @@ -37,15 +37,13 @@ class HttpTest extends \PHPUnit_Framework_TestCase * Test for getHeader method * * @dataProvider headersDataProvider - * @covers \Magento\Core\Controller\Response\Http::getHeader + * @covers \Magento\App\ResponseInterface::getHeader * * @param string $header */ public function testGetHeaderExists($header) { - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); - - $response = new \Magento\Core\Controller\Response\Http($eventManager); + $response = new \Magento\App\Response\Http(); $response->headersSentThrowsException = false; $response->setHeader($header['name'], $header['value'], $header['replace']); $this->assertEquals($header, $response->getHeader($header['name'])); @@ -77,14 +75,12 @@ class HttpTest extends \PHPUnit_Framework_TestCase /** * Test for getHeader method. Validation for attempt to get not existing header * - * @covers \Magento\Core\Controller\Response\Http::getHeader + * @covers \Magento\App\ResponseInterface::getHeader * */ public function testGetHeaderNotExists() { - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); - - $response = new \Magento\Core\Controller\Response\Http($eventManager); + $response = new \Magento\App\Response\Http(); $response->headersSentThrowsException = false; $response->setHeader('Name', 'value', true); $this->assertFalse($response->getHeader('Wrong name')); diff --git a/dev/tests/unit/testsuite/Magento/Core/Controller/Varien/AbstractActionTest.php b/dev/tests/unit/testsuite/Magento/Core/Controller/Varien/AbstractActionTest.php index 2a27e1c690f..0c7142f0a54 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Controller/Varien/AbstractActionTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Controller/Varien/AbstractActionTest.php @@ -33,17 +33,17 @@ namespace Magento\Core\Controller\Varien; class AbstractActionTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Controller\Varien\AbstractAction + * @var \Magento\App\Action\AbstractAction */ protected $_actionAbstract; /** - * @var \Magento\Core\Controller\Request\Http|\PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_request; /** - * @var \Magento\Core\Controller\Response\Http|\PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_response; @@ -54,17 +54,10 @@ class AbstractActionTest extends \PHPUnit_Framework_TestCase */ protected function setUp() { - $helperMock = $this->getMock( 'Magento\Backend\Helper\DataProxy', array(), array(), '', false); - $this->_request = $this->getMock( - 'Magento\Core\Controller\Request\Http', - array('getRequestedRouteName', 'getRequestedControllerName', 'getRequestedActionName'), - array($helperMock), - '', - false - ); - $this->_response = $this->getMock('Magento\Core\Controller\Response\Http', array(), array(), '', false); + $this->_request = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); + $this->_response = $this->getMock('Magento\App\Response\Http', array(), array(), '', false); $this->_response->headersSentThrowsException = false; - $this->_actionAbstract = new \Magento\Core\Controller\Varien\Action\Forward($this->_request, $this->_response); + $this->_actionAbstract = new \Magento\App\Action\Forward($this->_request, $this->_response); } /** @@ -97,14 +90,11 @@ class AbstractActionTest extends \PHPUnit_Framework_TestCase */ public function testResponseHeaders() { - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); - - $storeManager = $this->getMock('Magento\Core\Model\StoreManager', array(), array(), '', false); - $helperMock = $this->getMock('Magento\Backend\Helper\DataProxy', array(), array(), '', false); - $request = new \Magento\Core\Controller\Request\Http($storeManager, $helperMock); - $response = new \Magento\Core\Controller\Response\Http($eventManager); + $routerListMock = $this->getMock('\Magento\App\RouterList', array(), array(), '', false); + $request = new \Magento\App\Request\Http($routerListMock); + $response = new \Magento\App\Response\Http(); $response->headersSentThrowsException = false; - $action = new \Magento\Core\Controller\Varien\Action\Forward($request, $response); + $action = new \Magento\App\Action\Forward($request, $response); $headers = array( array( diff --git a/dev/tests/unit/testsuite/Magento/Core/Controller/Varien/Action/FactoryTest.php b/dev/tests/unit/testsuite/Magento/Core/Controller/Varien/Action/FactoryTest.php index 9df177d53ad..9a2aa76dfb2 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Controller/Varien/Action/FactoryTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Controller/Varien/Action/FactoryTest.php @@ -47,7 +47,7 @@ class FactoryTest extends \PHPUnit_Framework_TestCase /** * Test class instance * - * @var \Magento\Core\Controller\Varien\Action\Factory + * @var \Magento\App\ActionFactory */ protected $_model; @@ -58,7 +58,7 @@ class FactoryTest extends \PHPUnit_Framework_TestCase public function testConstruct() { - $this->_model = new \Magento\Core\Controller\Varien\Action\Factory($this->_objectManager); + $this->_model = new \Magento\App\ActionFactory($this->_objectManager); $this->assertAttributeInstanceOf('Magento\ObjectManager', '_objectManager', $this->_model); } @@ -69,7 +69,7 @@ class FactoryTest extends \PHPUnit_Framework_TestCase ->with(self::CONTROLLER_NAME) ->will($this->returnValue('TestControllerInstance')); - $this->_model = new \Magento\Core\Controller\Varien\Action\Factory($this->_objectManager); + $this->_model = new \Magento\App\ActionFactory($this->_objectManager); $this->assertEquals('TestControllerInstance', $this->_model->createController(self::CONTROLLER_NAME)); } } diff --git a/dev/tests/unit/testsuite/Magento/Core/Controller/Varien/Action/ForwardTest.php b/dev/tests/unit/testsuite/Magento/Core/Controller/Varien/Action/ForwardTest.php index 721d80c1794..b16faca1071 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Controller/Varien/Action/ForwardTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Controller/Varien/Action/ForwardTest.php @@ -33,31 +33,32 @@ namespace Magento\Core\Controller\Varien\Action; class ForwardTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Controller\Varien\Action\Forward + * @var \Magento\App\Action\Forward */ protected $_object = null; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; /** - * @var \Magento\Core\Controller\Response\Http + * @var \Magento\App\Response\Http */ protected $_response; + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_routerListMock; + protected function setUp() { - $storeManager = $this->getMock('Magento\Core\Model\StoreManager', array(), array(), '', false); - $helperMock = $this->getMock('Magento\Backend\Helper\Data', array(), array(), - '', false); - $this->_request = new \Magento\Core\Controller\Request\Http($storeManager, $helperMock); - $this->_response = new \Magento\Core\Controller\Response\Http( - $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false) - ); + $this->_routerListMock = $this->getMock('\Magento\App\RouterList', array(), array(), '', false); + $this->_request = new \Magento\App\Request\Http($this->_routerListMock); + $this->_response = new \Magento\App\Response\Http(); - $this->_object = new \Magento\Core\Controller\Varien\Action\Forward($this->_request, $this->_response); + $this->_object = new \Magento\App\Action\Forward($this->_request, $this->_response); } protected function tearDown() diff --git a/dev/tests/unit/testsuite/Magento/Core/Controller/Varien/Action/RedirectTest.php b/dev/tests/unit/testsuite/Magento/Core/Controller/Varien/Action/RedirectTest.php index 8f4620435e4..d94b9d6a312 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Controller/Varien/Action/RedirectTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Controller/Varien/Action/RedirectTest.php @@ -33,31 +33,32 @@ namespace Magento\Core\Controller\Varien\Action; class RedirectTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Controller\Varien\Action\Redirect + * @var \Magento\App\Action\Redirect */ protected $_object = null; /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; /** - * @var \Magento\Core\Controller\Response\Http + * @var \Magento\App\Response\Http */ protected $_response; + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_routerListMock; + protected function setUp() { - $storeManager = $this->getMock('Magento\Core\Model\StoreManager', array(), array(), '', false); - $helperMock = $this->getMock('Magento\Backend\Helper\Data', array(), array(), - '', false); - $this->_request = new \Magento\Core\Controller\Request\Http($storeManager, $helperMock); - $this->_response = new \Magento\Core\Controller\Response\Http( - $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false) - ); + $this->_routerListMock = $this->getMock('\Magento\App\RouterList', array(), array(), '', false); + $this->_request = new \Magento\App\Request\Http($this->_routerListMock); + $this->_response = new \Magento\App\Response\Http(); - $this->_object = new \Magento\Core\Controller\Varien\Action\Redirect($this->_request, $this->_response); + $this->_object = new \Magento\App\Action\Redirect($this->_request, $this->_response); } protected function tearDown() diff --git a/dev/tests/unit/testsuite/Magento/Core/Helper/CookieTest.php b/dev/tests/unit/testsuite/Magento/Core/Helper/CookieTest.php index bbd1a949a45..08abeee40e5 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Helper/CookieTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Helper/CookieTest.php @@ -114,13 +114,13 @@ class CookieTest extends \PHPUnit_Framework_TestCase */ protected function _getCookieStub($cookieString = array()) { - $cookie = $this->getMock('Magento\Core\Model\Cookie', array('get'), array(), '', false); + $cookieMock = $this->getMock('Magento\Core\Model\Cookie', array(), array(), '', false); - $cookie->expects($this->any()) + $cookieMock->expects($this->any()) ->method('get') ->will($this->returnValue(json_encode($cookieString))); - return $cookie; + return $cookieMock; } /** @@ -129,13 +129,13 @@ class CookieTest extends \PHPUnit_Framework_TestCase */ protected function _getWebsiteStub() { - $website = $this->getMock('Magento\Core\Model\Website', array('getId'), array(), '', false); + $websiteMock = $this->getMock('Magento\Core\Model\Website', array(), array(), '', false); - $website->expects($this->any()) + $websiteMock->expects($this->any()) ->method('getId') ->will($this->returnValue(1)); - return $website; + return $websiteMock; } /** diff --git a/dev/tests/unit/testsuite/Magento/Core/Helper/CssTest.php b/dev/tests/unit/testsuite/Magento/Core/Helper/CssTest.php index 2e460f6db90..7d983d85acf 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Helper/CssTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Helper/CssTest.php @@ -34,7 +34,7 @@ class CssTest extends \PHPUnit_Framework_TestCase protected function setUp() { $filesystem = new \Magento\Filesystem(new \Magento\Filesystem\Adapter\Local()); - $dirs = new \Magento\Core\Model\Dir('/base_dir'); + $dirs = new \Magento\App\Dir('/base_dir'); $this->_object = new \Magento\Core\Helper\Css($filesystem, $dirs); } diff --git a/dev/tests/unit/testsuite/Magento/Core/Helper/HttpTest.php b/dev/tests/unit/testsuite/Magento/Core/Helper/HttpTest.php index 1defb392f0c..282b4ee9bbd 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Helper/HttpTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Helper/HttpTest.php @@ -51,7 +51,7 @@ class HttpTest extends \PHPUnit_Framework_TestCase */ public function testGetHttpAuthCredentials($server, $expectedLogin, $expectedPass) { - $request = $this->getMock('Zend_Controller_Request_Http', array('getServer')); + $request = $this->getMock('\Magento\App\Request\Http', array(), array(), '', false); $request->expects($this->once())->method('getServer')->will($this->returnValue($server)); $this->assertSame(array($expectedLogin, $expectedPass), $this->_object->getHttpAuthCredentials($request)); } @@ -95,7 +95,7 @@ class HttpTest extends \PHPUnit_Framework_TestCase public function testFailHttpAuthentication() { - $response = new \Zend_Controller_Response_Http; + $response = new \Magento\App\Response\Http(); $realm = uniqid(); $response->headersSentThrowsException = false; $this->_object->failHttpAuthentication($response, $realm); diff --git a/dev/tests/unit/testsuite/Magento/Core/Helper/ThemeTest.php b/dev/tests/unit/testsuite/Magento/Core/Helper/ThemeTest.php index 656be1e87c5..e9a920a07df 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Helper/ThemeTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Helper/ThemeTest.php @@ -43,12 +43,16 @@ class ThemeTest extends \PHPUnit_Framework_TestCase */ public function testGetSafePath($filePath, $basePath, $expectedResult) { - /** @var $dirs \Magento\Core\Model\Dir */ - $dirs = $this->getMock('Magento\Core\Model\Dir', null, array(), '', false); + /** @var $dirs \Magento\App\Dir */ + $dirs = $this->getMock('Magento\App\Dir', null, array(), '', false); - /** @var $layoutMergeFactory \Magento\Core\Model\Layout\MergeFactory */ - $layoutMergeFactory = $this->getMock('Magento\Core\Model\Layout\MergeFactory', array('create'), - array(), '', false + /** @var $processorFactory \Magento\View\Layout\ProcessorFactory */ + $processorFactory = $this->getMock( + 'Magento\View\Layout\ProcessorFactory', + array('create'), + array(), + '', + false ); /** @var $themeCollection \Magento\Core\Model\Resource\Theme\Collection */ @@ -63,7 +67,7 @@ class ThemeTest extends \PHPUnit_Framework_TestCase $helper = new \Magento\Core\Helper\Theme( $context, $dirs, - $layoutMergeFactory, + $processorFactory, $themeCollection, $fileSystem ); @@ -489,46 +493,42 @@ class ThemeTest extends \PHPUnit_Framework_TestCase /** * @param string $layoutStr - * @return \Magento\Core\Model\Layout\MergeFactory|\PHPUnit_Framework_MockObject_MockObject + * @return \Magento\View\Layout\ProcessorFactory|\PHPUnit_Framework_MockObject_MockObject */ protected function _getLayoutMergeFactory($layoutStr) { - /** @var $layoutMerge \Magento\Core\Model\Layout\Merge */ - $layoutMerge = $this->getMock('Magento\Core\Model\Layout\Merge', - array('getFileLayoutUpdatesXml'), array(), '', false - ); + /** @var $layoutProcessor \Magento\View\Layout\ProcessorInterface */ + $layoutProcessor = $this->getMockBuilder('Magento\View\Layout\ProcessorInterface')->getMockForAbstractClass(); $xml = '<layouts xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' . $layoutStr . '</layouts>'; $layoutElement = simplexml_load_string($xml); - $layoutMerge->expects($this->any()) + $layoutProcessor->expects($this->any()) ->method('getFileLayoutUpdatesXml') ->will($this->returnValue($layoutElement)); - /** @var $layoutMergeFactory \Magento\Core\Model\Layout\MergeFactory */ - $layoutMergeFactory = $this->getMock('Magento\Core\Model\Layout\MergeFactory', - array('create'), array(), '', false - ); - $layoutMergeFactory->expects($this->any()) + /** @var $processorFactory \Magento\View\Layout\ProcessorFactory */ + $processorFactory = $this->getMock('Magento\View\Layout\ProcessorFactory', array('create'), array(), '', false); + $processorFactory->expects($this->any()) ->method('create') - ->will($this->returnValue($layoutMerge)); + ->will($this->returnValue($layoutProcessor)); - return $layoutMergeFactory; + return $processorFactory; } /** - * @return \Magento\Core\Model\Dir|\PHPUnit_Framework_MockObject_MockObject + * @return \Magento\App\Dir|\PHPUnit_Framework_MockObject_MockObject */ protected function _getDirs() { - /** @var $dirs \Magento\Core\Model\Dir */ - $dirs = $this->getMock('Magento\Core\Model\Dir', array('getDir'), array(), '', false); + /** @var $dirs \Magento\App\Dir */ + $dirs = $this->getMock('Magento\App\Dir', array('getDir'), array(), '', false); $dirs->expects($this->any()) ->method('getDir') ->will($this->returnValueMap(array( - array(\Magento\Core\Model\Dir::ROOT, self::ROOT), - array(\Magento\Core\Model\Dir::APP, self::APP), - array(\Magento\Core\Model\Dir::MODULES, self::MODULES), - array(\Magento\Core\Model\Dir::THEMES, self::THEMES), - array(\Magento\Core\Model\Dir::PUB_LIB, self::PUB_LIB), + array(\Magento\App\Dir::ROOT, self::ROOT), + array(\Magento\App\Dir::APP, self::APP), + array(\Magento\App\Dir::MODULES, self::MODULES), + array(\Magento\App\Dir::THEMES, self::THEMES), + array(\Magento\App\Dir::PUB_LIB, self::PUB_LIB), ))); return $dirs; @@ -573,10 +573,8 @@ class ThemeTest extends \PHPUnit_Framework_TestCase $dirs = $this->_getDirs(); // 5. Get layout merge model and factory - /** @var $layoutMergeFactory \Magento\Core\Model\Layout\MergeFactory|\PHPUnit_Framework_MockObject_MockObject */ - $layoutMergeFactory = $this->getMock('Magento\Core\Model\Layout\MergeFactory', - array('create'), array(), '', false - ); + /** @var $processorFactory \Magento\View\Layout\ProcessorFactory|\PHPUnit_Framework_MockObject_MockObject */ + $processorFactory = $this->getMock('Magento\View\Layout\ProcessorFactory', array('create'), array(), '', false); /** @var $context \Magento\Core\Helper\Context */ $context = $this->getMock('Magento\Core\Helper\Context', null, array(), '', false); @@ -586,9 +584,11 @@ class ThemeTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor()->getMock(); /** @var $helper \Magento\Core\Helper\Theme|\PHPUnit_Framework_MockObject_MockObject */ - $helper = $this->getMock('Magento\Core\Helper\Theme', array('getCssFiles'), array( - $context, $dirs, $layoutMergeFactory, $themeCollection, $fileSystem - )); + $helper = $this->getMock( + 'Magento\Core\Helper\Theme', + array('getCssFiles'), + array($context, $dirs, $processorFactory, $themeCollection, $fileSystem) + ); $helper->expects($this->once()) ->method('getCssFiles') ->will($this->returnValue($files)); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/App/StateTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/App/StateTest.php index 4c2f749d651..482e65b0fc5 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/App/StateTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/App/StateTest.php @@ -30,7 +30,7 @@ namespace Magento\Core\Model\App; class StateTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_model; @@ -40,7 +40,7 @@ class StateTest extends \PHPUnit_Framework_TestCase */ public function testConstructor($mode) { - $model = new \Magento\Core\Model\App\State(time(), $mode); + $model = new \Magento\App\State(time(), $mode); $this->assertEquals($mode, $model->getMode()); } @@ -51,23 +51,23 @@ class StateTest extends \PHPUnit_Framework_TestCase { return array( 'default mode' => array( - \Magento\Core\Model\App\State::MODE_DEFAULT + \Magento\App\State::MODE_DEFAULT ), 'production mode' => array( - \Magento\Core\Model\App\State::MODE_PRODUCTION + \Magento\App\State::MODE_PRODUCTION ), 'developer mode' => array( - \Magento\Core\Model\App\State::MODE_DEVELOPER + \Magento\App\State::MODE_DEVELOPER ), ); } /** - * @expectedException \Magento\Core\Exception + * @expectedException Exception * @expectedExceptionMessage Unknown application mode: unknown mode */ public function testConstructorException() { - new \Magento\Core\Model\App\State(time(), "unknown mode"); + new \Magento\App\State(time(), "unknown mode"); } } diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/AppTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/AppTest.php index c3364bd50af..bbb792414c3 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/AppTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/AppTest.php @@ -53,43 +53,48 @@ class AppTest extends \PHPUnit_Framework_TestCase /** * @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_dbUpdaterMock; + protected $_storeManagerMock; /** * @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_storeManagerMock; + protected $_eventManagerMock; /** * @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_eventManagerMock; + protected $_appStateMock; /** * @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_appStateMock; + protected $_configScopeMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_frontControllerMock; protected function setUp() { $this->_configMock = $this->getMock('Magento\Core\Model\Config', array(), array(), '', false, false); - $this->_cacheMock = $this->getMock('Magento\Core\Model\CacheInterface', array(), array(), '', false, false); + $this->_cacheMock = $this->getMock('Magento\Core\Model\CacheInterface'); $this->_objectManagerMock = $this->getMock('Magento\ObjectManager', array(), array(), '', false, false); - $this->_dbUpdaterMock = $this->getMock('Magento\Core\Model\Db\UpdaterInterface', - array(), array(), '', false, false); $this->_storeManagerMock = $this->getMock('Magento\Core\Model\StoreManagerInterface'); - $this->_eventManagerMock = $this->getMock('Magento\Core\Model\Event\Manager', - array(), array(), '', false, false); - $this->_appStateMock = $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false, false); + $this->_eventManagerMock = $this->getMock('Magento\Event\ManagerInterface'); + $this->_appStateMock = $this->getMock('Magento\App\State', array(), array(), '', false, false); + $this->_configScopeMock = $this->getMock('Magento\Config\Scope', array(), array(), '', false); + $this->_frontControllerMock = $this->getMock('Magento\App\FrontControllerInterface'); + $this->_model = new \Magento\Core\Model\App( $this->_configMock, $this->_cacheMock, $this->_objectManagerMock, - $this->_dbUpdaterMock, $this->_storeManagerMock, $this->_eventManagerMock, $this->_appStateMock, - $this->getMock('Magento\Core\Model\Config\Scope', array(), array(), '', false) + $this->_configScopeMock, + $this->_frontControllerMock ); } @@ -98,7 +103,6 @@ class AppTest extends \PHPUnit_Framework_TestCase unset($this->_configMock); unset($this->_cacheMock); unset($this->_objectManagerMock); - unset($this->_dbUpdaterMock); unset($this->_storeManagerMock); unset($this->_eventManagerMock); unset($this->_appStateMock); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Cache/Frontend/FactoryTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Cache/Frontend/FactoryTest.php index dc1345ff649..6c4a7a40505 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Cache/Frontend/FactoryTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Cache/Frontend/FactoryTest.php @@ -182,10 +182,10 @@ class FactoryTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue(true)); $map = array( - array(\Magento\Core\Model\Dir::CACHE, 'CACHE_DIR'), - array(\Magento\Core\Model\Dir::CONFIG, 'CONFIG_DIR'), + array(\Magento\App\Dir::CACHE, 'CACHE_DIR'), + array(\Magento\App\Dir::CONFIG, 'CONFIG_DIR'), ); - $dirs = $this->getMock('Magento\Core\Model\Dir', array('getDir'), array(), '', false); + $dirs = $this->getMock('Magento\App\Dir', array('getDir'), array(), '', false); $resource = $this->getMock('Magento\Core\Model\Resource', array(), array(), '', false); $dirs->expects($this->any()) ->method('getDir') diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Cache/StateTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Cache/StateTest.php index 1cb9d47e5f4..48b1146e69d 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Cache/StateTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Cache/StateTest.php @@ -132,7 +132,7 @@ class StateTest extends \PHPUnit_Framework_TestCase ->method('getAllOptions') ->will($this->returnValue($resourceTypeOptions)); - $appState = $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false); + $appState = $this->getMock('Magento\App\State', array(), array(), '', false); $appState->expects($this->any()) ->method('isInstalled') ->will($this->returnValue($appInstalled)); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Config/FileResolver/PrimaryTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Config/FileResolver/PrimaryTest.php index 507fb779d0d..4363a073a3c 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Config/FileResolver/PrimaryTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Config/FileResolver/PrimaryTest.php @@ -36,10 +36,10 @@ class PrimaryTest extends \PHPUnit_Framework_TestCase . '_files' . DIRECTORY_SEPARATOR . 'primary' . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'etc'; - $applicationDirsMock = $this->getMock('Magento\Core\Model\Dir', array(), array('getDir'), '', false); + $applicationDirsMock = $this->getMock('Magento\App\Dir', array(), array('getDir'), '', false); $applicationDirsMock->expects($this->any()) ->method('getDir') - ->with(\Magento\Core\Model\Dir::CONFIG) + ->with(\Magento\App\Dir::CONFIG) ->will($this->returnValue($appConfigDir)); $this->_model = new \Magento\Core\Model\Config\FileResolver\Primary($applicationDirsMock); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Config/FileResolverTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Config/FileResolverTest.php index 231fdc222b9..8a8ad1355aa 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Config/FileResolverTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Config/FileResolverTest.php @@ -35,10 +35,10 @@ class FileResolverTest extends \PHPUnit_Framework_TestCase $appConfigDir = __DIR__ . DIRECTORY_SEPARATOR . 'FileResolver' . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'etc'; - $applicationDirs = $this->getMock('Magento\Core\Model\Dir', array(), array('getDir'), '', false); + $applicationDirs = $this->getMock('Magento\App\Dir', array(), array('getDir'), '', false); $applicationDirs->expects($this->any()) ->method('getDir') - ->with(\Magento\Core\Model\Dir::CONFIG) + ->with(\Magento\App\Dir::CONFIG) ->will($this->returnValue($appConfigDir)); $moduleReader = $this->getMock('Magento\Core\Model\Config\Modules\Reader', array(), diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Config/Modules/ReaderTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Config/Modules/ReaderTest.php index b4ff2a07a79..7b2ab85e130 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Config/Modules/ReaderTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Config/Modules/ReaderTest.php @@ -59,9 +59,9 @@ class ReaderTest extends \PHPUnit_Framework_TestCase { $this->_protFactoryMock = $this->getMock('Magento\Core\Model\Config\BaseFactory', array(), array(), '', false, false); - $this->_dirsMock = $this->getMock('Magento\Core\Model\Module\Dir', array(), array(), '', false, false); + $this->_dirsMock = $this->getMock('Magento\App\Module\Dir', array(), array(), '', false, false); $this->_baseConfigMock = $this->getMock('Magento\Core\Model\Config\Base', array(), array(), '', false, false); - $this->_moduleListMock = $this->getMock('Magento\Core\Model\ModuleListInterface'); + $this->_moduleListMock = $this->getMock('Magento\App\ModuleListInterface'); $this->_model = new \Magento\Core\Model\Config\Modules\Reader( $this->_dirsMock, @@ -108,15 +108,10 @@ class ReaderTest extends \PHPUnit_Framework_TestCase public function testGetModuleDir() { - $expectedResult = new \stdClass(); - $this->_dirsMock->expects($this->once()) + $this->_dirsMock->expects($this->any()) ->method('getDir') ->with('Test_Module', 'etc') - ->will($this->returnValue($expectedResult)); - $this->assertSame($expectedResult, $this->_model->getModuleDir('etc', 'Test_Module')); - - // Custom value overrides the default one - $this->_model->setModuleDir('Test_Module', 'etc', 'app/code/Test/Module/etc'); + ->will($this->returnValue('app/code/Test/Module/etc')); $this->assertEquals('app/code/Test/Module/etc', $this->_model->getModuleDir('etc', 'Test_Module')); } } diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Config/PrimaryTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Config/PrimaryTest.php index a8b0f84d305..a70e5482023 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Config/PrimaryTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Config/PrimaryTest.php @@ -47,10 +47,10 @@ class PrimaryTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_dirMock = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $this->_dirMock = $this->getMock('Magento\App\Dir', array(), array(), '', false); $this->_dirMock->expects($this->any())->method('getDir')->will($this->returnValueMap(array( - array(\Magento\Core\Model\Dir::DI, '/path_to_root/var/di'), - array(\Magento\Core\Model\Dir::ROOT, '/path_to_root'), + array(\Magento\App\Dir::DI, '/path_to_root/var/di'), + array(\Magento\App\Dir::ROOT, '/path_to_root'), ))); $this->_loaderMock = $this->getMock('Magento\Core\Model\Config\LoaderInterface'); $that = $this; diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Config/Section/Processor/PlaceholderTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Config/Section/Processor/PlaceholderTest.php index 39ba5300e29..f3a952039cd 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Config/Section/Processor/PlaceholderTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Config/Section/Processor/PlaceholderTest.php @@ -37,7 +37,7 @@ class PlaceholderTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $this->_requestMock = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); $this->_requestMock->expects($this->any()) ->method('getDistroBaseUrl') ->will($this->returnValue('http://localhost/')); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Config/Section/Reader/DefaultReaderTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Config/Section/Reader/DefaultReaderTest.php index a4cfce988b4..aaebb7ba632 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Config/Section/Reader/DefaultReaderTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Config/Section/Reader/DefaultReaderTest.php @@ -55,7 +55,7 @@ class DefaultReaderTest extends \PHPUnit_Framework_TestCase '', false ); - $this->_appStateMock = $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false); + $this->_appStateMock = $this->getMock('Magento\App\State', array(), array(), '', false); $this->_appStateMock->expects($this->any()) ->method('isInstalled') ->will($this->returnValue(true)); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Config/Section/Reader/StoreTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Config/Section/Reader/StoreTest.php index 470e0c3b884..8fb1c15b516 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Config/Section/Reader/StoreTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Config/Section/Reader/StoreTest.php @@ -72,7 +72,7 @@ class StoreTest extends \PHPUnit_Framework_TestCase ->method('create') ->will($this->returnValue($this->_storeMock)); - $this->_appStateMock = $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false); + $this->_appStateMock = $this->getMock('Magento\App\State', array(), array(), '', false); $this->_appStateMock->expects($this->any()) ->method('isInstalled') ->will($this->returnValue(true)); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Config/Section/Reader/WebsiteTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Config/Section/Reader/WebsiteTest.php index 2c89033c158..e2f83851798 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Config/Section/Reader/WebsiteTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Config/Section/Reader/WebsiteTest.php @@ -72,7 +72,7 @@ class WebsiteTest extends \PHPUnit_Framework_TestCase ->method('create') ->will($this->returnValue($this->_websiteMock)); - $this->_appStateMock = $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false); + $this->_appStateMock = $this->getMock('Magento\App\State', array(), array(), '', false); $this->_appStateMock->expects($this->any()) ->method('isInstalled') ->will($this->returnValue(true)); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/ConfigTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/ConfigTest.php index 0ecf5fa2436..1c410e31709 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/ConfigTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/ConfigTest.php @@ -44,7 +44,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase protected $_objectManagerMock; /** - * @var \Magento\Core\Model\ModuleListInterface + * @var \Magento\App\ModuleListInterface */ protected $_moduleListMock; @@ -81,7 +81,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase $configStorageMock->expects($this->any())->method('getConfiguration')->will($this->returnValue($configBase)); $modulesReaderMock = $this->getMock('Magento\Core\Model\Config\Modules\Reader', array(), array(), '', false); $this->_configScopeMock = $this->getMock('Magento\Config\ScopeInterface'); - $this->_moduleListMock = $this->getMock('Magento\Core\Model\ModuleListInterface'); + $this->_moduleListMock = $this->getMock('Magento\App\ModuleListInterface'); $this->_sectionPoolMock = $this->getMock('Magento\Core\Model\Config\SectionPool', array(), array(), '', false); $this->_model = new \Magento\Core\Model\Config( diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/DataService/Path/RequestTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/DataService/Path/RequestTest.php index 8dfe6d95ba4..4dd8c8e013d 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/DataService/Path/RequestTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/DataService/Path/RequestTest.php @@ -35,7 +35,7 @@ class RequestTest extends \PHPUnit_Framework_TestCase public function testGetChild() { - $requestMock = $this->getMockBuilder('Magento\Core\Controller\Request\Http') + $requestMock = $this->getMockBuilder('Magento\App\Request\Http') ->disableOriginalConstructor() ->getMock(); $requestMock->expects($this->once()) @@ -47,7 +47,8 @@ class RequestTest extends \PHPUnit_Framework_TestCase public function testNotFound() { - $requestMock = $this->getMockBuilder('Magento\Core\Controller\Request\Http')->disableOriginalConstructor() + $requestMock = $this->getMockBuilder('Magento\App\Request\Http') + ->disableOriginalConstructor() ->getMock(); $requestVisitor = new \Magento\Core\Model\DataService\Path\Request($requestMock); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Design/Fallback/FactoryTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Design/Fallback/FactoryTest.php index 6c4e17066dd..e16bad41a1c 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Design/Fallback/FactoryTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Design/Fallback/FactoryTest.php @@ -38,17 +38,17 @@ class FactoryTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $dirs = new \Magento\Core\Model\Dir(__DIR__, array(), array( - \Magento\Core\Model\Dir::THEMES => 'themes', - \Magento\Core\Model\Dir::MODULES => 'modules', - \Magento\Core\Model\Dir::PUB_LIB => 'pub_lib', + $dirs = new \Magento\App\Dir(__DIR__, array(), array( + \Magento\App\Dir::THEMES => 'themes', + \Magento\App\Dir::MODULES => 'modules', + \Magento\App\Dir::PUB_LIB => 'pub_lib', )); $this->_model = new \Magento\Core\Model\Design\Fallback\Factory($dirs); - $parentTheme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $parentTheme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $parentTheme->expects($this->any())->method('getThemePath')->will($this->returnValue('parent_theme_path')); - $theme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $theme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $theme->expects($this->any())->method('getThemePath')->will($this->returnValue('current_theme_path')); $theme->expects($this->any())->method('getParentTheme')->will($this->returnValue($parentTheme)); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Design/Fallback/Rule/ThemeTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Design/Fallback/Rule/ThemeTest.php index cba65854bc9..6457e25bb64 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Design/Fallback/Rule/ThemeTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Design/Fallback/Rule/ThemeTest.php @@ -39,10 +39,10 @@ class ThemeTest extends \PHPUnit_Framework_TestCase public function testGetPatternDirs() { - $parentTheme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $parentTheme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $parentTheme->expects($this->any())->method('getThemePath')->will($this->returnValue('package/parent_theme')); - $theme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $theme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $theme->expects($this->any())->method('getThemePath')->will($this->returnValue('package/current_theme')); $theme->expects($this->any())->method('getParentTheme')->will($this->returnValue($parentTheme)); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Design/FileResolution/Strategy/FallbackTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Design/FileResolution/Strategy/FallbackTest.php index 22204b0cad4..6f673705ea6 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Design/FileResolution/Strategy/FallbackTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Design/FileResolution/Strategy/FallbackTest.php @@ -70,7 +70,7 @@ class FallbackTest extends \PHPUnit_Framework_TestCase $this->_fallbackFactory = $this->getMock( 'Magento\Core\Model\Design\Fallback\Factory', array('createLocaleFileRule', 'createFileRule', 'createViewFileRule'), - array($this->getMock('Magento\Core\Model\Dir', array(), array(), '', false)) + array($this->getMock('Magento\App\Dir', array(), array(), '', false)) ); $this->_fallbackFactory ->expects($this->any())->method('createLocaleFileRule')->will($this->returnValue($this->_fallbackLocale)); @@ -79,7 +79,7 @@ class FallbackTest extends \PHPUnit_Framework_TestCase $this->_fallbackFactory ->expects($this->any())->method('createViewFileRule')->will($this->returnValue($this->_fallbackViewFile)); - $this->_theme = $this->getMock('Magento\Core\Model\Theme', array(), array(), '', false); + $this->_theme = $this->getMock('Magento\View\Design\ThemeInterface', array(), array(), '', false); } protected function tearDown() diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Design/FileResolution/StrategyPoolTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Design/FileResolution/StrategyPoolTest.php index d80e6910a51..c1e1d51ee51 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Design/FileResolution/StrategyPoolTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Design/FileResolution/StrategyPoolTest.php @@ -34,12 +34,12 @@ class StrategyPoolTest extends \PHPUnit_Framework_TestCase protected $_objectManager; /** - * @var \Magento\Core\Model\App\State|PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\State|PHPUnit_Framework_MockObject_MockObject */ protected $_appState; /** - * @var \Magento\Core\Model\Dir|PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\Dir|PHPUnit_Framework_MockObject_MockObject */ protected $_dirs; @@ -56,9 +56,9 @@ class StrategyPoolTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_objectManager = $this->getMock('Magento\Core\Model\ObjectManager', array(), array(), '', false); - $this->_appState = $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false); + $this->_appState = $this->getMock('Magento\App\State', array(), array(), '', false); - $this->_dirs = new \Magento\Core\Model\Dir('base_dir'); + $this->_dirs = new \Magento\App\Dir('base_dir'); $this->_filesystem = $this->getMock('Magento\Filesystem', array(), array(), '', false); @@ -113,13 +113,13 @@ class StrategyPoolTest extends \PHPUnit_Framework_TestCase { return array( 'default mode' => array( - \Magento\Core\Model\App\State::MODE_DEFAULT + \Magento\App\State::MODE_DEFAULT ), 'production mode' => array( - \Magento\Core\Model\App\State::MODE_PRODUCTION + \Magento\App\State::MODE_PRODUCTION ), 'developer mode' => array( - \Magento\Core\Model\App\State::MODE_DEVELOPER + \Magento\App\State::MODE_DEVELOPER ), ); } diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/DirTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/DirTest.php index ff9c4f61a09..59395f8b599 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/DirTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/DirTest.php @@ -33,7 +33,7 @@ class DirTest extends \PHPUnit_Framework_TestCase */ public function testInvalidUri($code, $value) { - new \Magento\Core\Model\Dir(__DIR__, array($code => $value)); + new \Magento\App\Dir(__DIR__, array($code => $value)); } /** @@ -42,23 +42,23 @@ class DirTest extends \PHPUnit_Framework_TestCase public function invalidUriDataProvider() { return array( - array(\Magento\Core\Model\Dir::MEDIA, '/'), - array(\Magento\Core\Model\Dir::MEDIA, '//'), - array(\Magento\Core\Model\Dir::MEDIA, '/value'), - array(\Magento\Core\Model\Dir::MEDIA, 'value/'), - array(\Magento\Core\Model\Dir::MEDIA, '/value/'), - array(\Magento\Core\Model\Dir::MEDIA, 'one\\two'), - array(\Magento\Core\Model\Dir::MEDIA, '../dir'), - array(\Magento\Core\Model\Dir::MEDIA, './dir'), - array(\Magento\Core\Model\Dir::MEDIA, 'one/../two'), + array(\Magento\App\Dir::MEDIA, '/'), + array(\Magento\App\Dir::MEDIA, '//'), + array(\Magento\App\Dir::MEDIA, '/value'), + array(\Magento\App\Dir::MEDIA, 'value/'), + array(\Magento\App\Dir::MEDIA, '/value/'), + array(\Magento\App\Dir::MEDIA, 'one\\two'), + array(\Magento\App\Dir::MEDIA, '../dir'), + array(\Magento\App\Dir::MEDIA, './dir'), + array(\Magento\App\Dir::MEDIA, 'one/../two'), ); } public function testGetUri() { - $dir = new \Magento\Core\Model\Dir(__DIR__, array( - \Magento\Core\Model\Dir::PUB => '', - \Magento\Core\Model\Dir::MEDIA => 'test', + $dir = new \Magento\App\Dir(__DIR__, array( + \Magento\App\Dir::PUB => '', + \Magento\App\Dir::MEDIA => 'test', 'custom' => 'test2' )); @@ -66,12 +66,12 @@ class DirTest extends \PHPUnit_Framework_TestCase $this->assertEquals('test2', $dir->getUri('custom')); // setting empty value correctly adjusts its children - $this->assertEquals('', $dir->getUri(\Magento\Core\Model\Dir::PUB)); - $this->assertEquals('lib', $dir->getUri(\Magento\Core\Model\Dir::PUB_LIB)); + $this->assertEquals('', $dir->getUri(\Magento\App\Dir::PUB)); + $this->assertEquals('lib', $dir->getUri(\Magento\App\Dir::PUB_LIB)); // at the same time if another child has custom value, it must not be affected by its parent - $this->assertEquals('test', $dir->getUri(\Magento\Core\Model\Dir::MEDIA)); - $this->assertEquals('test/upload', $dir->getUri(\Magento\Core\Model\Dir::UPLOAD)); + $this->assertEquals('test', $dir->getUri(\Magento\App\Dir::MEDIA)); + $this->assertEquals('test/upload', $dir->getUri(\Magento\App\Dir::UPLOAD)); } /** @@ -80,12 +80,12 @@ class DirTest extends \PHPUnit_Framework_TestCase public function testGetUriIndependentOfDirs() { $fixtureDirs = array( - \Magento\Core\Model\Dir::ROOT => __DIR__ . '/root', - \Magento\Core\Model\Dir::MEDIA => __DIR__ . '/media', + \Magento\App\Dir::ROOT => __DIR__ . '/root', + \Magento\App\Dir::MEDIA => __DIR__ . '/media', 'custom' => 'test2' ); - $default = new \Magento\Core\Model\Dir(__DIR__); - $custom = new \Magento\Core\Model\Dir(__DIR__, array(), $fixtureDirs); + $default = new \Magento\App\Dir(__DIR__); + $custom = new \Magento\App\Dir(__DIR__, array(), $fixtureDirs); foreach (array_keys($fixtureDirs) as $dirCode ) { $this->assertEquals($default->getUri($dirCode), $custom->getUri($dirCode)); } @@ -95,9 +95,9 @@ class DirTest extends \PHPUnit_Framework_TestCase { $newRoot = __DIR__ . DIRECTORY_SEPARATOR . 'root'; $newMedia = __DIR__ . DIRECTORY_SEPARATOR . 'media'; - $dir = new \Magento\Core\Model\Dir(__DIR__, array(), array( - \Magento\Core\Model\Dir::ROOT => $newRoot, - \Magento\Core\Model\Dir::MEDIA => $newMedia, + $dir = new \Magento\App\Dir(__DIR__, array(), array( + \Magento\App\Dir::ROOT => $newRoot, + \Magento\App\Dir::MEDIA => $newMedia, 'custom' => 'test2' )); @@ -105,12 +105,12 @@ class DirTest extends \PHPUnit_Framework_TestCase $this->assertEquals('test2', $dir->getDir('custom')); // new root has affected all its non-customized children - $this->assertStringStartsWith($newRoot, $dir->getDir(\Magento\Core\Model\Dir::APP)); - $this->assertStringStartsWith($newRoot, $dir->getDir(\Magento\Core\Model\Dir::MODULES)); + $this->assertStringStartsWith($newRoot, $dir->getDir(\Magento\App\Dir::APP)); + $this->assertStringStartsWith($newRoot, $dir->getDir(\Magento\App\Dir::MODULES)); // but it didn't affect the customized dirs - $this->assertEquals($newMedia, $dir->getDir(\Magento\Core\Model\Dir::MEDIA)); - $this->assertStringStartsWith($newMedia, $dir->getDir(\Magento\Core\Model\Dir::UPLOAD)); + $this->assertEquals($newMedia, $dir->getDir(\Magento\App\Dir::MEDIA)); + $this->assertStringStartsWith($newMedia, $dir->getDir(\Magento\App\Dir::UPLOAD)); } /** @@ -119,12 +119,12 @@ class DirTest extends \PHPUnit_Framework_TestCase public function testGetDirIndependentOfUris() { $fixtureUris = array( - \Magento\Core\Model\Dir::PUB => '', - \Magento\Core\Model\Dir::MEDIA => 'test', + \Magento\App\Dir::PUB => '', + \Magento\App\Dir::MEDIA => 'test', 'custom' => 'test2' ); - $default = new \Magento\Core\Model\Dir(__DIR__); - $custom = new \Magento\Core\Model\Dir(__DIR__, $fixtureUris); + $default = new \Magento\App\Dir(__DIR__); + $custom = new \Magento\App\Dir(__DIR__, $fixtureUris); foreach (array_keys($fixtureUris) as $dirCode ) { $this->assertEquals($default->getDir($dirCode), $custom->getDir($dirCode)); } diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Email/Template/Config/ReaderTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Email/Template/Config/ReaderTest.php index ccbe87d1ec8..0ab2abcd808 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Email/Template/Config/ReaderTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Email/Template/Config/ReaderTest.php @@ -36,7 +36,7 @@ class ReaderTest extends \PHPUnit_Framework_TestCase protected $_converter; /** - * @var \Magento\Core\Model\Module\Dir\ReverseResolver|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\Module\Dir\ReverseResolver|\PHPUnit_Framework_MockObject_MockObject */ protected $_moduleDirResolver; @@ -69,7 +69,7 @@ class ReaderTest extends \PHPUnit_Framework_TestCase $validationState->expects($this->once())->method('isValidated')->will($this->returnValue(false)); $this->_moduleDirResolver = $this->getMock( - 'Magento\Core\Model\Module\Dir\ReverseResolver', array(), array(), '', false + 'Magento\App\Module\Dir\ReverseResolver', array(), array(), '', false ); $this->_model = new \Magento\Core\Model\Email\Template\Config\Reader( diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/EntryPoint/CronTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/EntryPoint/CronTest.php index 43399bab1f3..7e8366b4de9 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/EntryPoint/CronTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/EntryPoint/CronTest.php @@ -46,13 +46,13 @@ class CronTest extends \PHPUnit_Framework_TestCase public function testProcessRequest() { $appMock = $this->getMock('Magento\Core\Model\App', array(), array(), '', false); - $eventManagerMock = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); - $configScopeMock = $this->getMock('Magento\Core\Model\Config\Scope', array(), array(), '', false); + $eventManagerMock = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); + $configScopeMock = $this->getMock('Magento\Config\Scope', array(), array(), '', false); $map = array( array('Magento\Core\Model\App', $appMock), - array('Magento\Core\Model\Event\Manager', $eventManagerMock), - array('Magento\Core\Model\Config\Scope', $configScopeMock), + array('Magento\Event\ManagerInterface', $eventManagerMock), + array('Magento\Config\ScopeInterface', $configScopeMock), ); $this->_objectManagerMock->expects($this->any())->method('get')->will($this->returnValueMap($map)); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/EntryPoint/MediaTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/EntryPoint/MediaTest.php index 2b798ea3a6b..1d9f4a31588 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/EntryPoint/MediaTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/EntryPoint/MediaTest.php @@ -93,17 +93,17 @@ class MediaTest extends \PHPUnit_Framework_TestCase return true; }; $this->_objectManagerMock = $this->getMock('Magento\ObjectManager'); - $this->_appState = $this->getMock('Magento\Core\Model\App\State', array(), array( ), '', false); + $this->_appState = $this->getMock('Magento\App\State', array(), array( ), '', false); $this->_configMock = $this->getMock('Magento\Core\Model\File\Storage\Config', array(), array(), '', false); $this->_sync= $this->getMock('Magento\Core\Model\File\Storage\Synchronization', array(), array(), '', false); $this->_dirVerificationMock = $this->getMock( - 'Magento\Core\Model\Dir\Verification', array(), array(), '', false + 'Magento\App\Dir\Verification', array(), array(), '', false ); $this->_responseMock = $this->getMock('Magento\Core\Model\File\Storage\Response', array(), array(), '', false); $map = array( - array('Magento\Core\Model\Dir\Verification', $this->_dirVerificationMock), - array('Magento\Core\Model\App\State', $this->_appState), + array('Magento\App\Dir\Verification', $this->_dirVerificationMock), + array('Magento\App\State', $this->_appState), array('Magento\Core\Model\File\Storage\Request', $this->_requestMock), array('Magento\Core\Model\File\Storage\Synchronization', $this->_sync), ); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/File/Storage/RequestTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/File/Storage/RequestTest.php index 9aed34a7e7f..1f58a1051f9 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/File/Storage/RequestTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/File/Storage/RequestTest.php @@ -48,7 +48,7 @@ class RequestTest extends \PHPUnit_Framework_TestCase protected function setUp() { $path = '..PathInfo'; - $this->_requestMock = $this->getMock('Zend_Controller_Request_Http', array(), array(), '', false); + $this->_requestMock = $this->getMock('\Magento\App\Request\Http', array(), array(), '', false); $this->_requestMock->expects($this->once())->method('getPathInfo')->will($this->returnValue($path)); $this->_model = new \Magento\Core\Model\File\Storage\Request($this->_workingDir, $this->_requestMock); } diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/AbstractHandlerTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/AbstractHandlerTest.php index ee60f5b99a2..5b397a3a423 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/AbstractHandlerTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/AbstractHandlerTest.php @@ -44,7 +44,7 @@ class AbstractHandlerTest extends \PHPUnit_Framework_TestCase } /** - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @param array $expectedResult * @dataProvider parseDataProvider */ @@ -65,7 +65,7 @@ class AbstractHandlerTest extends \PHPUnit_Framework_TestCase $layout = simplexml_load_file( __DIR__ . DIRECTORY_SEPARATOR . 'Handler' . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'arguments.xml', - 'Magento\Core\Model\Layout\Element' + 'Magento\View\Layout\Element' ); $withoutUpdater = $layout->xpath('//argument[@name="testParseWithoutUpdater"]'); $withUpdater = $layout->xpath('//argument[@name="testParseWithUpdater"]'); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/ArrayTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/ArrayTest.php index 30e491aae82..9d6f2107a37 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/ArrayTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/ArrayTest.php @@ -122,7 +122,7 @@ class ArrayTest extends \PHPUnit_Framework_TestCase } /** - * @param \Magento\Core\Model\Layout\Element $node + * @param \Magento\View\Layout\Element $node * @param $expected array * @dataProvider parseDataProvider */ @@ -158,7 +158,7 @@ class ArrayTest extends \PHPUnit_Framework_TestCase { $layout = simplexml_load_file( __DIR__ . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'arguments.xml', - 'Magento\Core\Model\Layout\Element' + 'Magento\View\Layout\Element' ); return array( diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/BooleanTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/BooleanTest.php index 86e8a1cba36..3ee35a12e11 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/BooleanTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/BooleanTest.php @@ -54,7 +54,7 @@ class BooleanTest extends \PHPUnit_Framework_TestCase /** * @dataProvider parseDataProvider() - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @param array $expectedResult */ public function testParse($argument, $expectedResult) @@ -70,7 +70,7 @@ class BooleanTest extends \PHPUnit_Framework_TestCase { $layout = simplexml_load_file( __DIR__ . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'arguments.xml', - 'Magento\Core\Model\Layout\Element' + 'Magento\View\Layout\Element' ); $result = $this->processDataProvider(); $simpleArg = $layout->xpath('//argument[@name="testSimpleBoolean"]'); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/HelperTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/HelperTest.php index 596dfd5f5c7..6bde44e9028 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/HelperTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/HelperTest.php @@ -56,7 +56,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase /** * @dataProvider parseDataProvider() - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @param array $expectedResult */ public function testParse($argument, $expectedResult) @@ -72,7 +72,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase { $layout = simplexml_load_file( __DIR__ . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'arguments.xml', - 'Magento\Core\Model\Layout\Element' + 'Magento\View\Layout\Element' ); $result = $this->processDataProvider(); $resultWithParams = $resultWithoutParams = $result[0][0]; diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/NumberTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/NumberTest.php index e4390391687..2baa8496ac5 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/NumberTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/NumberTest.php @@ -54,7 +54,7 @@ class NumberTest extends \PHPUnit_Framework_TestCase /** * @dataProvider parseDataProvider() - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @param array $expectedResult */ public function testParse($argument, $expectedResult) @@ -70,7 +70,7 @@ class NumberTest extends \PHPUnit_Framework_TestCase { $layout = simplexml_load_file( __DIR__ . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'arguments.xml', - 'Magento\Core\Model\Layout\Element' + 'Magento\View\Layout\Element' ); $result = $this->processDataProvider(); $simpleArg = $layout->xpath('//argument[@name="testSimpleNumber"]'); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/ObjectTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/ObjectTest.php index 5e007bb6679..176bdcb55d5 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/ObjectTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/ObjectTest.php @@ -56,7 +56,7 @@ class ObjectTest extends \PHPUnit_Framework_TestCase /** * @dataProvider parseDataProvider() - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @param array $expectedResult */ public function testParse($argument, $expectedResult) @@ -75,7 +75,7 @@ class ObjectTest extends \PHPUnit_Framework_TestCase { $layout = simplexml_load_file( __DIR__ . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'arguments.xml', - 'Magento\Core\Model\Layout\Element' + 'Magento\View\Layout\Element' ); $simpleObject = $layout->xpath('//argument[@name="testSimpleObject"]'); $complexObject = $layout->xpath('//argument[@name="testComplexObject"]'); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/OptionsTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/OptionsTest.php index ea1685d1b8b..9f97597da55 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/OptionsTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/OptionsTest.php @@ -56,7 +56,7 @@ class OptionsTest extends \PHPUnit_Framework_TestCase /** * @dataProvider parseDataProvider() - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @param array $expectedResult */ public function testParse($argument, $expectedResult) @@ -72,7 +72,7 @@ class OptionsTest extends \PHPUnit_Framework_TestCase { $layout = simplexml_load_file( __DIR__ . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'arguments.xml', - 'Magento\Core\Model\Layout\Element' + 'Magento\View\Layout\Element' ); $optionsArguments = $layout->xpath('//argument[@name="testOptions"]'); return array( diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/StringTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/StringTest.php index d82b1e96343..7497362f14e 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/StringTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/StringTest.php @@ -54,7 +54,7 @@ class StringTest extends \PHPUnit_Framework_TestCase /** * @dataProvider parseDataProvider - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @param array $expectedResult */ public function testParse($argument, $expectedResult) @@ -70,7 +70,7 @@ class StringTest extends \PHPUnit_Framework_TestCase { $layout = simplexml_load_file( __DIR__ . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'arguments.xml', - 'Magento\Core\Model\Layout\Element' + 'Magento\View\Layout\Element' ); $result = $this->processDataProvider(); $simpleString = $layout->xpath('//argument[@name="testSimpleString"]'); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/UrlTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/UrlTest.php index 1e8fc5d4c64..d9aa18908cb 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/UrlTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/Handler/UrlTest.php @@ -54,7 +54,7 @@ class UrlTest extends \PHPUnit_Framework_TestCase /** * @dataProvider parseDataProvider() - * @param \Magento\Core\Model\Layout\Element $argument + * @param \Magento\View\Layout\Element $argument * @param array $expectedResult */ public function testParse($argument, $expectedResult) @@ -70,7 +70,7 @@ class UrlTest extends \PHPUnit_Framework_TestCase { $layout = simplexml_load_file( __DIR__ . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'arguments.xml', - 'Magento\Core\Model\Layout\Element' + 'Magento\View\Layout\Element' ); $result = $this->processDataProvider(); $resultWithParams = $resultWithoutParams = $result[0][0]; diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/ProcessorTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/ProcessorTest.php index 0e8a4eafd99..0622ca07924 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/ProcessorTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/Argument/ProcessorTest.php @@ -131,7 +131,7 @@ class ProcessorTest extends \PHPUnit_Framework_TestCase public function testParse() { // Because descendants of \SimpleXMLElement couldn't be mocked - $argument = new \Magento\Core\Model\Layout\Element('<argument xsi:type="string" name="argumentName" ' + $argument = new \Magento\View\Layout\Element('<argument xsi:type="string" name="argumentName" ' . 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Value</argument>' ); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/FactoryTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/FactoryTest.php index 956850230dc..fd5f84d8588 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/FactoryTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/FactoryTest.php @@ -44,7 +44,7 @@ class FactoryTest extends \PHPUnit_Framework_TestCase public function testCreate() { - $theme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $theme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $file = new \Magento\Core\Model\Layout\File(__FILE__, 'Fixture_Module', $theme); $this->_objectManager ->expects($this->once()) diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/ListTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/ListTest.php index a1f0cd81bc1..4e3fd900426 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/ListTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/ListTest.php @@ -55,13 +55,13 @@ class ListTest extends \PHPUnit_Framework_TestCase * @param string $filename * @param string $module * @param string|null $themeFullPath - * @return \PHPUnit_Framework_MockObject_MockObject|\Magento\Core\Model\ThemeInterface + * @return \PHPUnit_Framework_MockObject_MockObject|\Magento\View\Design\ThemeInterface */ protected function _createLayoutFile($filename, $module, $themeFullPath = null) { $theme = null; if ($themeFullPath !== null) { - $theme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $theme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $theme->expects($this->any())->method('getFullPath')->will($this->returnValue($themeFullPath)); } return new \Magento\Core\Model\Layout\File($filename, $module, $theme); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/AggregateTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/AggregateTest.php index c49bad6d695..7e2924946ca 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/AggregateTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/AggregateTest.php @@ -74,8 +74,8 @@ class AggregateTest extends \PHPUnit_Framework_TestCase public function testGetFiles() { - $parentTheme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); - $theme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $parentTheme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); + $theme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $theme->expects($this->once())->method('getParentTheme')->will($this->returnValue($parentTheme)); $files = array( diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/BaseTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/BaseTest.php index 12961a3f9ea..9debddd6e38 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/BaseTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/BaseTest.php @@ -49,7 +49,7 @@ class BaseTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_filesystem = $this->getMock('Magento\Filesystem', array(), array(), '', false); - $this->_dirs = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $this->_dirs = $this->getMock('Magento\App\Dir', array(), array(), '', false); $this->_dirs->expects($this->any())->method('getDir')->will($this->returnArgument(0)); $this->_fileFactory = $this->getMock('Magento\Core\Model\Layout\File\Factory', array(), array(), '', false); $this->_model = new \Magento\Core\Model\Layout\File\Source\Base( @@ -59,7 +59,7 @@ class BaseTest extends \PHPUnit_Framework_TestCase public function testGetFiles() { - $theme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $theme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $theme->expects($this->once())->method('getArea')->will($this->returnValue('area')); $this->_filesystem diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/Decorator/ModuleDependencyTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/Decorator/ModuleDependencyTest.php index 4fda87304e4..716da4dc08d 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/Decorator/ModuleDependencyTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/Decorator/ModuleDependencyTest.php @@ -56,7 +56,7 @@ class ModuleDependencyTest extends \PHPUnit_Framework_TestCase ); $this->_fileSource = $this->getMockForAbstractClass('Magento\Core\Model\Layout\File\SourceInterface'); - $this->_moduleListMock = $this->getMock('Magento\Core\Model\ModuleListInterface'); + $this->_moduleListMock = $this->getMock('Magento\App\ModuleListInterface'); $this->_moduleListMock->expects($this->any())->method('getModules')->will($this->returnValue($modulesConfig)); $this->_model = new \Magento\Core\Model\Layout\File\Source\Decorator\ModuleDependency( $this->_fileSource, $this->_moduleListMock @@ -71,7 +71,7 @@ class ModuleDependencyTest extends \PHPUnit_Framework_TestCase */ public function testGetFiles(array $fixtureFiles, array $expectedFiles, $message) { - $theme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $theme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $this->_fileSource ->expects($this->once()) ->method('getFiles') diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/Decorator/ModuleOutputTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/Decorator/ModuleOutputTest.php index 89539ebc9f1..2623b2b7c7a 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/Decorator/ModuleOutputTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/Decorator/ModuleOutputTest.php @@ -60,7 +60,7 @@ class ModuleOutputTest extends \PHPUnit_Framework_TestCase public function testGetFiles() { - $theme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $theme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $fileOne = new \Magento\Core\Model\Layout\File('1.xml', 'Module_OutputEnabled'); $fileTwo = new \Magento\Core\Model\Layout\File('2.xml', 'Module_OutputDisabled'); $fileThree = new \Magento\Core\Model\Layout\File('3.xml', 'Module_OutputEnabled', $theme); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/Override/BaseTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/Override/BaseTest.php index 6bc02dddee6..107b208cf15 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/Override/BaseTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/Override/BaseTest.php @@ -49,7 +49,7 @@ class BaseTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_filesystem = $this->getMock('Magento\Filesystem', array(), array(), '', false); - $this->_dirs = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $this->_dirs = $this->getMock('Magento\App\Dir', array(), array(), '', false); $this->_dirs->expects($this->any())->method('getDir')->will($this->returnArgument(0)); $this->_fileFactory = $this->getMock('Magento\Core\Model\Layout\File\Factory', array(), array(), '', false); $this->_model = new \Magento\Core\Model\Layout\File\Source\Override\Base( @@ -59,7 +59,7 @@ class BaseTest extends \PHPUnit_Framework_TestCase public function testGetFiles() { - $theme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $theme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $theme->expects($this->once())->method('getFullPath')->will($this->returnValue('area/theme/path')); $this->_filesystem diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/Override/ThemeTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/Override/ThemeTest.php index bb3212f283e..1620bc5a694 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/Override/ThemeTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/Override/ThemeTest.php @@ -49,7 +49,7 @@ class ThemeTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_filesystem = $this->getMock('Magento\Filesystem', array(), array(), '', false); - $this->_dirs = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $this->_dirs = $this->getMock('Magento\App\Dir', array(), array(), '', false); $this->_dirs->expects($this->any())->method('getDir')->will($this->returnArgument(0)); $this->_fileFactory = $this->getMock('Magento\Core\Model\Layout\File\Factory', array(), array(), '', false); $this->_model = new \Magento\Core\Model\Layout\File\Source\Override\Theme( @@ -59,14 +59,14 @@ class ThemeTest extends \PHPUnit_Framework_TestCase public function testGetFiles() { - $grandparentTheme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $grandparentTheme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $grandparentTheme->expects($this->once())->method('getCode')->will($this->returnValue('grand_parent_theme')); - $parentTheme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $parentTheme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $parentTheme->expects($this->once())->method('getCode')->will($this->returnValue('parent_theme')); $parentTheme->expects($this->once())->method('getParentTheme')->will($this->returnValue($grandparentTheme)); - $theme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $theme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $theme->expects($this->once())->method('getFullPath')->will($this->returnValue('area/theme_path')); $theme->expects($this->once())->method('getParentTheme')->will($this->returnValue($parentTheme)); @@ -102,7 +102,7 @@ class ThemeTest extends \PHPUnit_Framework_TestCase . ", which is not ancestor of theme 'theme_path'" ); - $theme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $theme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $theme->expects($this->once())->method('getFullPath')->will($this->returnValue('area/theme_path')); $theme->expects($this->once())->method('getParentTheme')->will($this->returnValue(null)); $theme->expects($this->once())->method('getCode')->will($this->returnValue('theme_path')); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/ThemeTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/ThemeTest.php index 29fc46cf512..1bf60d2686b 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/ThemeTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/File/Source/ThemeTest.php @@ -49,7 +49,7 @@ class ThemeTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_filesystem = $this->getMock('Magento\Filesystem', array(), array(), '', false); - $this->_dirs = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $this->_dirs = $this->getMock('Magento\App\Dir', array(), array(), '', false); $this->_dirs->expects($this->any())->method('getDir')->will($this->returnArgument(0)); $this->_fileFactory = $this->getMock('Magento\Core\Model\Layout\File\Factory', array(), array(), '', false); $this->_model = new \Magento\Core\Model\Layout\File\Source\Theme( @@ -59,7 +59,7 @@ class ThemeTest extends \PHPUnit_Framework_TestCase public function testGetFiles() { - $theme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $theme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $theme->expects($this->once())->method('getFullPath')->will($this->returnValue('area/theme/path')); $this->_filesystem diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/FileTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/FileTest.php index 6c72c2e6dd9..f033cb2d5f4 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/FileTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/FileTest.php @@ -38,7 +38,7 @@ class FileTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_theme = $this->getMockForAbstractClass('Magento\Core\Model\ThemeInterface'); + $this->_theme = $this->getMockForAbstractClass('Magento\View\Design\ThemeInterface'); $this->_model = new \Magento\Core\Model\Layout\File(__FILE__, 'Fixture_TestModule', $this->_theme); } diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/MergeTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/MergeTest.php index 55cbac2e4f3..9161a567a5a 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/MergeTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Layout/MergeTest.php @@ -70,7 +70,7 @@ class MergeTest extends \PHPUnit_Framework_TestCase $fileSource = $this->getMockForAbstractClass('Magento\Core\Model\Layout\File\SourceInterface'); $fileSource->expects($this->any())->method('getFiles')->will($this->returnValue($files)); - $design = $this->getMockForAbstractClass('Magento\Core\Model\View\DesignInterface'); + $design = $this->getMockForAbstractClass('Magento\View\DesignInterface'); $this->_store = $this->getMock('Magento\Core\Model\Store', array(), array(), '', false); $this->_store->expects($this->any())->method('getId')->will($this->returnValue(20)); @@ -79,7 +79,7 @@ class MergeTest extends \PHPUnit_Framework_TestCase $this->_resource = $this->getMock('Magento\Core\Model\Resource\Layout\Update', array(), array(), '', false); - $this->_appState = $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false); + $this->_appState = $this->getMock('Magento\App\State', array(), array(), '', false); $this->_cache = $this->getMockForAbstractClass('Magento\Cache\FrontendInterface'); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Locale/Hierarchy/Config/FileResolverTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Locale/Hierarchy/Config/FileResolverTest.php index 1bfb609d49c..f2b851e57f1 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Locale/Hierarchy/Config/FileResolverTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Locale/Hierarchy/Config/FileResolverTest.php @@ -31,13 +31,13 @@ class FileResolverTest extends \PHPUnit_Framework_TestCase protected $_model; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_appDirsMock; protected function setUp() { - $this->_appDirsMock = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $this->_appDirsMock = $this->getMock('Magento\App\Dir', array(), array(), '', false); $this->_model = new \Magento\Core\Model\Locale\Hierarchy\Config\FileResolver($this->_appDirsMock); } @@ -50,7 +50,7 @@ class FileResolverTest extends \PHPUnit_Framework_TestCase $this->_appDirsMock->expects($this->once()) ->method('getDir') - ->with(\Magento\Core\Model\Dir::LOCALE) + ->with(\Magento\App\Dir::LOCALE) ->will($this->returnValue($path)); $expectedFilesList = array( diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/LoggerTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/LoggerTest.php index 26d113abb2e..26794efde6b 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/LoggerTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/LoggerTest.php @@ -43,8 +43,8 @@ class LoggerTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_filesystemMock = $this->getMock('Magento\Io\File', array(), array(), '', false, false); - $dirs = new \Magento\Core\Model\Dir(TESTS_TEMP_DIR); - $logDir = $dirs->getDir(\Magento\Core\Model\Dir::LOG); + $dirs = new \Magento\App\Dir(TESTS_TEMP_DIR); + $logDir = $dirs->getDir(\Magento\App\Dir::LOG); if (!is_dir($logDir)) { mkdir($logDir, 0777, true); } diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/ModuleManagerTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/ModuleManagerTest.php index b318419b544..e144aa99cb7 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/ModuleManagerTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/ModuleManagerTest.php @@ -48,7 +48,7 @@ class ModuleManagerTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_moduleList = $this->getMockForAbstractClass('Magento\Core\Model\ModuleListInterface'); + $this->_moduleList = $this->getMockForAbstractClass('Magento\App\ModuleListInterface'); $this->_storeConfig = $this->getMockForAbstractClass('Magento\Core\Model\Store\ConfigInterface'); $this->_model = new \Magento\Core\Model\ModuleManager($this->_storeConfig, $this->_moduleList, array( 'Module_DisabledOutputOne' => self::XML_PATH_OUTPUT_ENABLED, diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/NoRouteHandlerListTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/NoRouteHandlerListTest.php index 39226e105c5..03374f0941d 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/NoRouteHandlerListTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/NoRouteHandlerListTest.php @@ -31,7 +31,7 @@ class NoRouteHandlerListTest extends \PHPUnit_Framework_TestCase protected $_objectManagerMock; /** - * @var \Magento\Core\Model\NoRouteHandlerList + * @var \Magento\App\Router\NoRouteHandlerList */ protected $_model; @@ -40,33 +40,33 @@ class NoRouteHandlerListTest extends \PHPUnit_Framework_TestCase $this->_objectManagerMock = $this->getMock('Magento\ObjectManager'); $handlersList = array( 'default_handler' => array( - 'instance' => 'Magento\Core\Model\Router\NoRouteHandler', + 'instance' => 'Magento\Core\App\Router\NoRouteHandler', 'sortOrder' => 100 ), 'backend_handler' => array( - 'instance' => 'Magento\Backend\Model\Router\NoRouteHandler', + 'instance' => 'Magento\Backend\App\Router\NoRouteHandler', 'sortOrder' => 10 ), ); - $this->_model = new \Magento\Core\Model\NoRouteHandlerList($this->_objectManagerMock, $handlersList); + $this->_model = new \Magento\App\Router\NoRouteHandlerList($this->_objectManagerMock, $handlersList); } public function testGetHandlers() { $backendHandlerMock = $this->getMock( - 'Magento\Backend\Model\Router\NoRouteHandler', array(), array(), '', false + 'Magento\Backend\App\Router\NoRouteHandler', array(), array(), '', false ); - $defaultHandlerMock = $this->getMock('Magento\Core\Model\Router\NoRouteHandler', array(), array(), '', false); + $defaultHandlerMock = $this->getMock('Magento\Core\App\Router\NoRouteHandler', array(), array(), '', false); $this->_objectManagerMock->expects($this->at(0)) ->method('create') - ->with('Magento\Backend\Model\Router\NoRouteHandler') + ->with('Magento\Backend\App\Router\NoRouteHandler') ->will($this->returnValue($backendHandlerMock)); $this->_objectManagerMock->expects($this->at(1)) ->method('create') - ->with('Magento\Core\Model\Router\NoRouteHandler') + ->with('Magento\Core\App\Router\NoRouteHandler') ->will($this->returnValue($defaultHandlerMock)); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/ObserverTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/ObserverTest.php index 15546ae6ad8..e11aab60515 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/ObserverTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/ObserverTest.php @@ -93,7 +93,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase $themeMock->expects($this->any())->method('getCustomization') ->will($this->returnValue($this->_themeCustomization)); - $designMock = $this->getMock('Magento\Core\Model\View\DesignInterface'); + $designMock = $this->getMock('Magento\View\DesignInterface'); $designMock ->expects($this->any()) ->method('getDesignTheme') diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Page/Asset/MergeServiceTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Page/Asset/MergeServiceTest.php index 7e65f51f516..a9525819683 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Page/Asset/MergeServiceTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Page/Asset/MergeServiceTest.php @@ -63,8 +63,8 @@ class MergeServiceTest extends \PHPUnit_Framework_TestCase 'Magento\Core\Model\Store\Config', array('getConfigFlag'), array(), '', false ); $this->_filesystem = $this->getMock('Magento\Filesystem', array(), array(), '', false); - $this->_dirs = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); - $this->_state = $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false); + $this->_dirs = $this->getMock('Magento\App\Dir', array(), array(), '', false); + $this->_state = $this->getMock('Magento\App\State', array(), array(), '', false); $this->_object = new \Magento\Core\Model\Page\Asset\MergeService( $this->_objectManager, @@ -143,42 +143,42 @@ class MergeServiceTest extends \PHPUnit_Framework_TestCase $jsAssets, \Magento\Core\Model\View\Publisher::CONTENT_TYPE_JS, \Magento\Core\Model\Page\Asset\MergeService::XML_PATH_MERGE_JS_FILES, - \Magento\Core\Model\App\State::MODE_PRODUCTION, + \Magento\App\State::MODE_PRODUCTION, 'Magento\Core\Model\Page\Asset\MergeStrategy\FileExists' ), 'css production mode' => array( $cssAssets, \Magento\Core\Model\View\Publisher::CONTENT_TYPE_CSS, \Magento\Core\Model\Page\Asset\MergeService::XML_PATH_MERGE_CSS_FILES, - \Magento\Core\Model\App\State::MODE_PRODUCTION, + \Magento\App\State::MODE_PRODUCTION, 'Magento\Core\Model\Page\Asset\MergeStrategy\FileExists' ), 'js default mode' => array( $jsAssets, \Magento\Core\Model\View\Publisher::CONTENT_TYPE_JS, \Magento\Core\Model\Page\Asset\MergeService::XML_PATH_MERGE_JS_FILES, - \Magento\Core\Model\App\State::MODE_DEFAULT, + \Magento\App\State::MODE_DEFAULT, 'Magento\Core\Model\Page\Asset\MergeStrategy\Checksum' ), 'css default mode' => array( $cssAssets, \Magento\Core\Model\View\Publisher::CONTENT_TYPE_CSS, \Magento\Core\Model\Page\Asset\MergeService::XML_PATH_MERGE_CSS_FILES, - \Magento\Core\Model\App\State::MODE_DEFAULT, + \Magento\App\State::MODE_DEFAULT, 'Magento\Core\Model\Page\Asset\MergeStrategy\Checksum' ), 'js developer mode' => array( $jsAssets, \Magento\Core\Model\View\Publisher::CONTENT_TYPE_JS, \Magento\Core\Model\Page\Asset\MergeService::XML_PATH_MERGE_JS_FILES, - \Magento\Core\Model\App\State::MODE_DEVELOPER, + \Magento\App\State::MODE_DEVELOPER, 'Magento\Core\Model\Page\Asset\MergeStrategy\Checksum' ), 'css developer mode' => array( $cssAssets, \Magento\Core\Model\View\Publisher::CONTENT_TYPE_CSS, \Magento\Core\Model\Page\Asset\MergeService::XML_PATH_MERGE_CSS_FILES, - \Magento\Core\Model\App\State::MODE_DEVELOPER, + \Magento\App\State::MODE_DEVELOPER, 'Magento\Core\Model\Page\Asset\MergeStrategy\Checksum' ), ); @@ -188,7 +188,7 @@ class MergeServiceTest extends \PHPUnit_Framework_TestCase { $this->_dirs->expects($this->once()) ->method('getDir') - ->with(\Magento\Core\Model\Dir::PUB_VIEW_CACHE) + ->with(\Magento\App\Dir::PUB_VIEW_CACHE) ->will($this->returnValue('/pub/cache')); $mergedDir = '/pub/cache/' . \Magento\Core\Model\Page\Asset\Merged::PUBLIC_MERGE_DIR; diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Page/Asset/MergeStrategy/DirectTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Page/Asset/MergeStrategy/DirectTest.php index e737af48313..5f235dd9b3b 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Page/Asset/MergeStrategy/DirectTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Page/Asset/MergeStrategy/DirectTest.php @@ -50,7 +50,7 @@ class DirectTest extends \PHPUnit_Framework_TestCase { $this->_cssHelper = $this->getMock('Magento\Core\Helper\Css', array(), array(), '', false); $this->_filesystem = $this->getMock('Magento\Filesystem', array(), array(), '', false); - $this->_dirs = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $this->_dirs = $this->getMock('Magento\App\Dir', array(), array(), '', false); $this->_object = new \Magento\Core\Model\Page\Asset\MergeStrategy\Direct( $this->_filesystem, $this->_dirs, $this->_cssHelper diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Page/Asset/MergedTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Page/Asset/MergedTest.php index 6103e27a413..fe4dd87fa6a 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Page/Asset/MergedTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Page/Asset/MergedTest.php @@ -75,7 +75,7 @@ class MergedTest extends \PHPUnit_Framework_TestCase $this->_logger = $this->getMock('Magento\Core\Model\Logger', array('logException'), array(), '', false); - $this->_dirs = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $this->_dirs = $this->getMock('Magento\App\Dir', array(), array(), '', false); $this->_mergeStrategy = $this->getMock('Magento\Core\Model\Page\Asset\MergeStrategyInterface'); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Page/Asset/MinifyServiceTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Page/Asset/MinifyServiceTest.php index e5de04492d4..dc5eae08819 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Page/Asset/MinifyServiceTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Page/Asset/MinifyServiceTest.php @@ -42,16 +42,16 @@ class MinifyServiceTest extends \PHPUnit_Framework_TestCase protected $_model; /** - * @var \Magento\Core\Model\App\State|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\State|\PHPUnit_Framework_MockObject_MockObject */ protected $_appState; protected function setUp() { $this->_storeConfig = $this->getMock('Magento\Core\Model\Store\Config', array(), array(), '', false); - $dirs = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $dirs = $this->getMock('Magento\App\Dir', array(), array(), '', false); $this->_objectManager = $this->getMock('Magento\ObjectManager'); - $this->_appState = $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false); + $this->_appState = $this->getMock('Magento\App\State', array(), array(), '', false); $this->_model = new \Magento\Core\Model\Page\Asset\MinifyService($this->_storeConfig, $this->_objectManager, $dirs, $this->_appState); @@ -168,15 +168,15 @@ class MinifyServiceTest extends \PHPUnit_Framework_TestCase { return array( 'production' => array( - \Magento\Core\Model\App\State::MODE_PRODUCTION, + \Magento\App\State::MODE_PRODUCTION, 'Magento\Code\Minifier\Strategy\Lite' ), 'default' => array( - \Magento\Core\Model\App\State::MODE_DEFAULT, + \Magento\App\State::MODE_DEFAULT, 'Magento\Code\Minifier\Strategy\Generate' ), 'developer' => array( - \Magento\Core\Model\App\State::MODE_DEVELOPER, + \Magento\App\State::MODE_DEVELOPER, 'Magento\Code\Minifier\Strategy\Generate' ), ); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Resource/Db/AbstractTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Resource/Db/AbstractTest.php index 97205e9c83c..4cf96e75574 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Resource/Db/AbstractTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Resource/Db/AbstractTest.php @@ -75,7 +75,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase */ public function testGetConnectionInMemoryCaching() { - $dir = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $dir = $this->getMock('Magento\App\Dir', array(), array(), '', false); $connection = new \Magento\DB\Adapter\Pdo\Mysql($dir, array( 'dbname' => 'test_dbname', 'username' => 'test_username', diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Resource/Layout/Link/CollectionTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Resource/Layout/Link/CollectionTest.php index 28875a5a2b6..7325f6ec32a 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Resource/Layout/Link/CollectionTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Resource/Layout/Link/CollectionTest.php @@ -47,7 +47,7 @@ class CollectionTest extends \Magento\Core\Model\Resource\Layout\AbstractTestCas */ protected function _getCollection(\Zend_Db_Select $select) { - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); return new \Magento\Core\Model\Resource\Layout\Link\Collection( $eventManager, diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Resource/Layout/Update/CollectionTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Resource/Layout/Update/CollectionTest.php index 05c11bfca4e..5207f571fb8 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Resource/Layout/Update/CollectionTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Resource/Layout/Update/CollectionTest.php @@ -38,7 +38,7 @@ class CollectionTest */ protected function _getCollection(\Zend_Db_Select $select) { - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); return new \Magento\Core\Model\Resource\Layout\Update\Collection( $eventManager, diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Resource/SessionTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Resource/SessionTest.php index 2585be40d21..4126cb942bb 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Resource/SessionTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Resource/SessionTest.php @@ -108,7 +108,7 @@ class SessionTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue($connection)); $this->_model = new \Magento\Core\Model\Resource\Session( - $resource, $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false, false) + $resource, $this->getMock('Magento\App\Dir', array(), array(), '', false, false) ); } diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Resource/Setup/MigrationTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Resource/Setup/MigrationTest.php index f5c467a8271..71fa50d2e05 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Resource/Setup/MigrationTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Resource/Setup/MigrationTest.php @@ -151,7 +151,7 @@ class MigrationTest extends \PHPUnit_Framework_TestCase */ public function testAppendClassAliasReplace() { - $moduleListMock = $this->getMock('Magento\Core\Model\ModuleListInterface'); + $moduleListMock = $this->getMock('Magento\App\ModuleListInterface'); $moduleListMock->expects($this->once()) ->method('getModule') ->will($this->returnValue(array())); @@ -160,7 +160,7 @@ class MigrationTest extends \PHPUnit_Framework_TestCase $contextMock->expects($this->once()) ->method('getEventManager') - ->will($this->returnValue($this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false))); + ->will($this->returnValue($this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false))); $contextMock->expects($this->once()) ->method('getResourceModel') ->will($this->returnValue($this->getMock('Magento\Core\Model\Resource', array(), array(), '', false))); @@ -180,7 +180,7 @@ class MigrationTest extends \PHPUnit_Framework_TestCase $contextMock, $this->getMock('Magento\Filesystem', array(), array(), '', false), $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false), - $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false), + $this->getMock('Magento\App\Dir', array(), array(), '', false), 'core_setup', '' ); @@ -236,11 +236,11 @@ class MigrationTest extends \PHPUnit_Framework_TestCase $this->getMock('Magento\Core\Model\Resource', array(), array(), '', false, false), $this->getMock('Magento\Filesystem', array(), array(), '', false), $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false), - $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false), + $this->getMock('Magento\App\Dir', array(), array(), '', false), $this->getMock('Magento\Core\Model\Logger', array(), array(), '', false), - $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false), + $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false), $this->getMock('Magento\Core\Model\Config', array(), array(), '', false, false), - $this->getMock('Magento\Core\Model\ModuleListInterface'), + $this->getMock('Magento\App\ModuleListInterface'), $this->getMock('Magento\Core\Model\Config\Modules\Reader', array(), array(), '', false, false), $this->getMock('Magento\Core\Model\Resource\Resource', array(), array(), '', false), $this->getMock('Magento\Core\Model\Resource\Theme\CollectionFactory', array(), array(), '', false), diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/RouterListTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/RouterListTest.php index 2dfa97ead83..947dc27b876 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/RouterListTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/RouterListTest.php @@ -28,7 +28,7 @@ namespace Magento\Core\Model; class RouterListTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\RouterList + * @var \Magento\App\RouterList */ protected $_model; @@ -63,7 +63,7 @@ class RouterListTest extends \PHPUnit_Framework_TestCase ); $this->_objectManagerMock = $this->getMock('Magento\ObjectManager'); - $this->_model = new \Magento\Core\Model\RouterList($this->_objectManagerMock, $this->_routerList); + $this->_model = new \Magento\App\RouterList($this->_objectManagerMock, $this->_routerList); } public function testGetRoutes() diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Store/StorageFactoryTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Store/StorageFactoryTest.php index 20ccb6447bb..02115dd140c 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Store/StorageFactoryTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Store/StorageFactoryTest.php @@ -90,11 +90,12 @@ class StorageFactoryTest extends \PHPUnit_Framework_TestCase { $this->_arguments = array('test' => 'argument'); $this->_objectManagerMock = $this->getMock('Magento\ObjectManager'); - $this->_eventManagerMock = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $this->_eventManagerMock = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $this->_logMock = $this->getMock('Magento\Core\Model\Logger', array(), array(), '', false); $this->_configMock = $this->getMock('Magento\Core\Model\ConfigInterface', array(), array(), '', false); - $this->_appMock = $this->getMock('Magento\Core\Model\App\Proxy', array(), array(), '', false); - $this->_appStateMock = $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false); + $this->_appMock + = $this->getMock('Magento\Core\Model\App\Proxy', array('setUseSessionInUrl'), array(), '', false); + $this->_appStateMock = $this->getMock('Magento\App\State', array(), array(), '', false); $this->_storage = $this->getMock('Magento\Core\Model\Store\StorageInterface'); $this->_model = new \Magento\Core\Model\Store\StorageFactory( @@ -159,7 +160,8 @@ class StorageFactoryTest extends \PHPUnit_Framework_TestCase ->method('initForStore') ->with($store, $this->_configMock); - $this->_appMock->expects($this->once())->method('setUseSessionInUrl')->with(true); + $this->_appMock->expects($this->once()) + ->method('setUseSessionInUrl')->with(true); /** test create instance */ $this->assertEquals($this->_storage, $this->_model->get($this->_arguments)); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/StoreManagerTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/StoreManagerTest.php index a6138f487d3..d1098d22c59 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/StoreManagerTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/StoreManagerTest.php @@ -59,7 +59,7 @@ class StoreManagerTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_factoryMock = $this->getMock('Magento\Core\Model\Store\StorageFactory', array(), array(), '', false); - $this->_requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $this->_requestMock = $this->getMock('Magento\App\RequestInterface', array(), array(), '', false); $this->_helperFactoryMock = $this->getMock('Magento\Core\Model\Factory\Helper', array(), array(), '', false); $this->_storage = $this->getMock('Magento\Core\Model\Store\StorageInterface'); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Decorator/DebugHintsTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Decorator/DebugHintsTest.php new file mode 100644 index 00000000000..b0db664d169 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Decorator/DebugHintsTest.php @@ -0,0 +1,57 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Core\Model\TemplateEngine\Decorator; + +class DebugHintsTest extends \PHPUnit_Framework_TestCase +{ + /** + * @param bool $showBlockHints + * @dataProvider renderDataProvider + */ + public function testRender($showBlockHints) + { + $subject = $this->getMock('Magento\Core\Model\TemplateEngine\EngineInterface'); + $block = $this->getMock('Magento\Core\Block\Template', array(), array(), 'TestBlock', false); + $subject + ->expects($this->once()) + ->method('render') + ->with($this->identicalTo($block), 'template.phtml', array('var' => 'val')) + ->will($this->returnValue('<div id="fixture"/>')) + ; + $model = new DebugHints($subject, $showBlockHints); + $actualResult = $model->render($block, 'template.phtml', array('var' => 'val')); + $this->assertSelectEquals('div > div[title="template.phtml"]', 'template.phtml', 1, $actualResult); + $this->assertSelectCount('div > div#fixture', 1, $actualResult); + $this->assertSelectEquals('div > div[title="TestBlock"]', 'TestBlock', (int)$showBlockHints, $actualResult); + } + + public function renderDataProvider() + { + return array( + 'block hints disabled' => array(false), + 'block hints enabled' => array(true), + ); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/FactoryTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/FactoryTest.php index 0fa29dcd46f..6bdf3d4a83f 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/FactoryTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/FactoryTest.php @@ -26,78 +26,58 @@ namespace Magento\Core\Model\TemplateEngine; class FactoryTest extends \PHPUnit_Framework_TestCase { - - /** @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_objectManagerMock; - - /** @var \Magento\Core\Model\TemplateEngine\Factory */ - protected $_factory; - /** - * Setup a factory to test with an mocked object manager. + * @var Factory */ - protected function setUp() - { - $this->_objectManagerMock = $this->getMock('Magento\ObjectManager'); - $this->_factory = new \Magento\Core\Model\TemplateEngine\Factory($this->_objectManagerMock); - } + protected $_model; /** - * Test getting a phtml engine + * @var \PHPUnit_Framework_MockObject_MockObject */ - public function testGetPhtmlEngine() + protected $_objectManager; + + protected function setUp() { - $phtmlEngineMock = $this->getMock('Magento\Core\Model\TemplateEngine\Php'); - $this->_objectManagerMock->expects($this->once()) - ->method('get') - ->with($this->equalTo('Magento\Core\Model\TemplateEngine\Php')) - ->will($this->returnValue($phtmlEngineMock)); - $actual = $this->_factory->get(\Magento\Core\Model\TemplateEngine\Factory::ENGINE_PHTML); - $this->assertSame($phtmlEngineMock, $actual, 'phtml engine not returned'); + $this->_objectManager = $this->getMock('Magento\ObjectManager'); + $this->_model = new Factory($this->_objectManager, array( + 'test' => 'Fixture\Module\Model\TemplateEngine', + )); } - /** - * Test getting a Twig engine - */ - public function testGetTwigEngine() + public function testCreateKnownEngine() { - $twigEngineMock = $this->getMockBuilder('Magento\Core\Model\TemplateEngine\Twig') - ->disableOriginalConstructor()->getMock(); - $this->_objectManagerMock->expects($this->once()) - ->method('get') - ->with($this->equalTo('Magento\Core\Model\TemplateEngine\Twig')) - ->will($this->returnValue($twigEngineMock)); - $actual = $this->_factory->get(\Magento\Core\Model\TemplateEngine\Factory::ENGINE_TWIG); - $this->assertSame($twigEngineMock, $actual, 'phtml engine not returned'); + $engine = $this->getMock('Magento\Core\Model\TemplateEngine\EngineInterface'); + $this->_objectManager + ->expects($this->once()) + ->method('create') + ->with('Fixture\Module\Model\TemplateEngine') + ->will($this->returnValue($engine)) + ; + $this->assertSame($engine, $this->_model->create('test')); } /** - * Test attempting to get an engine the factory does not know about (neither Twig nor Phtml.) - * - * Should throw an exception - * * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Unknown template engine type: NotAnEngineName + * @expectedExceptionMessage Unknown template engine 'non_existing' */ - public function testGetBadEngine() + public function testCreateUnknownEngine() { - $this->_objectManagerMock->expects($this->never()) - ->method('get'); - $this->_factory->get('NotAnEngineName'); + $this->_objectManager->expects($this->never())->method('create'); + $this->_model->create('non_existing'); } /** - * Test attempting to get an engine passing in null as the engine type. - * - * Should throw an exception - * - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Unknown template engine type: + * @expectedException \UnexpectedValueException + * @expectedExceptionMessage Fixture\Module\Model\TemplateEngine has to implement the template engine interface */ - public function testGetNullEngine() + public function testCreateInvalidEngine() { - $this->_objectManagerMock->expects($this->never()) - ->method('get'); - $this->_factory->get(NULL); + $this->_objectManager + ->expects($this->once()) + ->method('create') + ->with('Fixture\Module\Model\TemplateEngine') + ->will($this->returnValue(new \stdClass())) + ; + $this->_model->create('test'); } } diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Plugin/DebugHintsTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Plugin/DebugHintsTest.php new file mode 100644 index 00000000000..5e78237ce6f --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Plugin/DebugHintsTest.php @@ -0,0 +1,123 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Core\Model\TemplateEngine\Plugin; + +class DebugHintsTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var DebugHints + */ + protected $_model; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManager; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_storeConfig; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_coreData; + + protected function setUp() + { + $this->_objectManager = $this->getMock('Magento\ObjectManager'); + $this->_storeConfig = $this->getMock('Magento\Core\Model\Store\Config', array(), array(), '', false); + $this->_coreData = $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false); + $this->_model = new DebugHints($this->_objectManager, $this->_storeConfig, $this->_coreData); + } + + /** + * @param bool $showBlockHints + * @dataProvider afterCreateActiveDataProvider + */ + public function testAfterCreateActive($showBlockHints) + { + $this->_coreData->expects($this->once())->method('isDevAllowed')->will($this->returnValue(true)); + $this->_setupConfigFixture(true, $showBlockHints); + $engine = $this->getMock('Magento\Core\Model\TemplateEngine\EngineInterface'); + $engineDecorated = $this->getMock('Magento\Core\Model\TemplateEngine\EngineInterface'); + $this->_objectManager + ->expects($this->once()) + ->method('create') + ->with( + 'Magento\Core\Model\TemplateEngine\Decorator\DebugHints', + $this->identicalTo(array('subject' => $engine, 'showBlockHints' => $showBlockHints)) + ) + ->will($this->returnValue($engineDecorated)) + ; + $this->assertEquals($engineDecorated, $this->_model->afterCreate($engine)); + } + + public function afterCreateActiveDataProvider() + { + return array( + 'block hints disabled' => array(false), + 'block hints enabled' => array(true), + ); + } + + /** + * @param bool $isDevAllowed + * @param bool $showTemplateHints + * @dataProvider afterCreateInactiveDataProvider + */ + public function testAfterCreateInactive($isDevAllowed, $showTemplateHints) + { + $this->_coreData->expects($this->any())->method('isDevAllowed')->will($this->returnValue($isDevAllowed)); + $this->_setupConfigFixture($showTemplateHints, true); + $this->_objectManager->expects($this->never())->method('create'); + $engine = $this->getMock('Magento\Core\Model\TemplateEngine\EngineInterface'); + $this->assertSame($engine, $this->_model->afterCreate($engine)); + } + + public function afterCreateInactiveDataProvider() + { + return array( + 'dev disabled, template hints disabled' => array(false, false), + 'dev disabled, template hints enabled' => array(false, true), + 'dev enabled, template hints disabled' => array(true, false), + ); + } + + /** + * Setup fixture values for store config + * + * @param bool $showTemplateHints + * @param bool $showBlockHints + */ + protected function _setupConfigFixture($showTemplateHints, $showBlockHints) + { + $this->_storeConfig->expects($this->atLeastOnce())->method('getConfig')->will($this->returnValueMap(array( + array(DebugHints::XML_PATH_DEBUG_TEMPLATE_HINTS, null, $showTemplateHints), + array(DebugHints::XML_PATH_DEBUG_TEMPLATE_HINTS_BLOCKS, null, $showBlockHints), + ))); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/PoolTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/PoolTest.php new file mode 100644 index 00000000000..4c2bb471b90 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/PoolTest.php @@ -0,0 +1,58 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\Core\Model\TemplateEngine; + +class PoolTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var Pool + */ + protected $_model; + + /** + * @var\PHPUnit_Framework_MockObject_MockObject + */ + protected $_factory; + + protected function setUp() + { + $this->_factory = $this->getMock('Magento\Core\Model\TemplateEngine\Factory', array(), array(), '', false); + $this->_model = new Pool($this->_factory); + } + + public function testGet() + { + $engine = $this->getMock('Magento\Core\Model\TemplateEngine\EngineInterface'); + $this->_factory + ->expects($this->once()) + ->method('create') + ->with('test') + ->will($this->returnValue($engine)) + ; + $this->assertSame($engine, $this->_model->get('test')); + // Make sure factory is invoked only once and the same instance is returned afterwards + $this->assertSame($engine, $this->_model->get('test')); + } +} diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/CommonFunctionsTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/CommonFunctionsTest.php deleted file mode 100644 index 06bdb9c4cfe..00000000000 --- a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/CommonFunctionsTest.php +++ /dev/null @@ -1,220 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\Core\Model\TemplateEngine\Twig; - -class CommonFunctionsTest extends \PHPUnit_Framework_TestCase -{ - /** @var \Magento\Core\Model\TemplateEngine\Twig\CommonFunctions */ - protected $_commonFunctions; - - /** @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_urlBuilderMock; - - /** @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_urlHelperMock; - - /** @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_dataHelperMock; - - /** @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_storeManagerMock; - - /** @var \Magento\Core\Model\View\Url */ - protected $_viewUrl; - - /** @var \Magento\Core\Model\View\Config */ - protected $_viewConfig; - - /** @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_helperImageMock; - - /** @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_loggerMock; - - /** @var \Magento\Core\Model\LocaleInterface */ - protected $_localeMock; - - protected function setUp() - { - $this->_urlBuilderMock = $this->getMock('Magento\Core\Model\UrlInterface'); - $this->_urlHelperMock = $this->getMockBuilder('Magento\Core\Helper\Url') - ->disableOriginalConstructor() - ->getMock(); - $this->_dataHelperMock = $this->getMockBuilder('Magento\Core\Helper\Data') - ->disableOriginalConstructor() - ->getMock(); - $this->_storeManagerMock = $this->getMockBuilder('Magento\Core\Model\StoreManager') - ->disableOriginalConstructor() - ->getMock(); - $this->_viewUrl = $this->getMockBuilder('Magento\Core\Model\View\Url') - ->disableOriginalConstructor() - ->getMock(); - $this->_viewConfig = $this->getMockBuilder('Magento\Core\Model\View\Config') - ->disableOriginalConstructor() - ->getMock(); - $this->_helperImageMock = $this->getMockBuilder('Magento\Catalog\Helper\Image') - ->disableOriginalConstructor() - ->getMock(); - $this->_loggerMock = $this->getMockBuilder('Magento\Core\Model\Logger') - ->disableOriginalConstructor() - ->getMock(); - $this->_localeMock = $this->getMockBuilder('Magento\Core\Model\LocaleInterface') - ->disableOriginalConstructor() - ->getMock(); - - $this->_commonFunctions = new \Magento\Core\Model\TemplateEngine\Twig\CommonFunctions( - $this->_urlBuilderMock, - $this->_urlHelperMock, - $this->_dataHelperMock, - $this->_storeManagerMock, - $this->_viewUrl, - $this->_viewConfig, - $this->_helperImageMock, - $this->_loggerMock, - $this->_localeMock - ); - } - - /** - * Test that the getFunctions return arrays of appropriate types - */ - public function testGetFunctions() - { - /** @var array $functions */ - $functions = $this->_commonFunctions->getFunctions(); - - $this->assertInternalType('array', $functions); - $this->assertTrue(count($functions) >= 1, 'Functions array does not contain any elements'); - $this->assertContainsOnly('Twig_SimpleFunction', $functions, false, - 'Contains something that is not a Twig function.'); - - } - - /** - * Test getViewFileUrl happy path. - */ - public function testGetViewFileUrl() - { - $themesUrl = "http://www.example.com/themes"; - - $this->_viewUrl->expects($this->once()) - ->method('getViewFileUrl') - ->will($this->returnValue($themesUrl)); - - $actual = $this->_commonFunctions->getViewFileUrl('file'); - $this->assertEquals($themesUrl, $actual, 'Themes url returned from getViewFileUrl did not match expected'); - } - - /** - * Test getViewFileUrl when model throws an exception - */ - public function testGetViewFileUrlException() - { - $magentoException = new \Magento\Exception('test exception'); - $notFoundUrl = 'not found'; - - $this->_viewUrl->expects($this->once()) - ->method('getViewFileUrl') - ->will($this->throwException($magentoException)); - $this->_loggerMock->expects($this->once()) - ->method('logException') - ->with($this->equalTo($magentoException)); - $this->_urlBuilderMock->expects($this->once()) - ->method('getUrl') - ->will($this->returnValue($notFoundUrl)); - - $actual = $this->_commonFunctions->getViewFileUrl('file'); - $this->assertEquals($notFoundUrl, $actual, 'Not Found url returned from getViewFileUrl did not match'); - } - - /** - * Data provider for testGetSelectFromToHtml. - * - * Provide varying ranges of 'from' and 'to' indexes along with the - * expected output array. - * - * @return array - */ - public function getSelectFromToHtmlDataProvider() - { - return array( - array( 1, 2, array( - array('value' => '', 'label' => '-'), - array('value' => '1', 'label' => '01'), - array('value' => '2', 'label' => '02')) - ), - array( 8, 11, array( - array('value' => '', 'label' => '-'), - array('value' => '8', 'label' => '08'), - array('value' => '9', 'label' => '09'), - array('value' => '10', 'label' => '10'), - array('value' => '11', 'label' => '11')) - ), - array( 99, 101, array( - array('value' => '', 'label' => '-'), - array('value' => '99', 'label' => '99'), - array('value' => '100', 'label' => '100'), - array('value' => '101', 'label' => '101')) - ) - ); - } - - /** - * @dataProvider getSelectFromToHtmlDataProvider - */ - public function testGetSelectFromToHtml($fromNumber, $toNumber, $expectedOptions) - { - $selectBlockMock = $this->getMockBuilder('Magento\Core\Block\Html\Select') - ->disableOriginalConstructor() - ->getMock();; - - $selectBlockMock->expects($this->once()) - ->method('setOptions') - ->with($this->equalTo($expectedOptions)) - ->will($this->returnValue($selectBlockMock)); - - $name = 'name'; - $nameOptionsById = array('aliasA' => 'blockA'); - $optionsId = 'options_id'; - $this->_commonFunctions->getSelectFromToHtml($selectBlockMock, - $name, $fromNumber, $toNumber, $nameOptionsById, $optionsId ); - } - - public function testGetSelectHtml() - { - $selectBlockMock = $this->getMockBuilder('Magento\Core\Block\Html\Select') - ->disableOriginalConstructor() - ->getMock();; - - $selectBlockMock->expects($this->once()) - ->method('setOptions') - ->will($this->returnValue($selectBlockMock)); - - $optionId = 'anId'; - $name = 'name'; - $nameOptionsById = array('aliasA' => 'blockA');; - $this->_commonFunctions->getSelectHtml($selectBlockMock, $optionId, $name, $nameOptionsById ); - - } -} diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/EnvironmentFactoryTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/EnvironmentFactoryTest.php deleted file mode 100644 index c3b9bd65557..00000000000 --- a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/EnvironmentFactoryTest.php +++ /dev/null @@ -1,115 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\Core\Model\TemplateEngine\Twig; - -class EnvironmentFactoryTest extends \PHPUnit_Framework_TestCase -{ - /** @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_dirMock; - - /** @var \PHPUnit_Framework_MockObject_MockObject */ - private $_extension; - - /** @var \PHPUnit_Framework_MockObject_MockObject \Magento\Core\Model\TemplateEngine\Twig\FullFileName */ - private $_loaderMock; - - /** @var \PHPUnit_Framework_MockObject_MockObject \Magento\Filesystem */ - private $_filesystem; - - /** @var \PHPUnit_Framework_MockObject_MockObject \Magento\Core\Model\Logger */ - private $_loggerMock; - - /** - * Validate \Twig_Environment returned on call - */ - public function testCreatePositive() - { - $this->_filesystem->expects($this->any()) - ->method('createDirectory') - ->will($this->returnValue(null)); - - $inst = new \Magento\Core\Model\TemplateEngine\Twig\EnvironmentFactory( - $this->_filesystem, - $this->_extension, - $this->_dirMock, - $this->_loggerMock, - $this->_loaderMock - ); - /** - * @var \Twig_Environment $factoryInst - */ - $factoryInst = $inst->create(); - $this->assertInstanceOf('Twig_Environment', $factoryInst); - } - - /** - * Validate \Twig_Environment returned on call even though directory not created - */ - public function testCreateNegative() - { - $this->_filesystem->expects($this->any()) - ->method('createDirectory') - ->will($this->throwException(new \Magento\Filesystem\FilesystemException())); - - $inst = new \Magento\Core\Model\TemplateEngine\Twig\EnvironmentFactory( - $this->_filesystem, - $this->_extension, - $this->_dirMock, - $this->_loggerMock, - $this->_loaderMock - ); - /** - * @var \Twig_Environment $factoryInst - */ - $factoryInst = $inst->create(); - $this->assertInstanceOf('Twig_Environment', $factoryInst); - } - - protected function setUp() - { - $this->_filesystem = $this->getMockBuilder('Magento\Filesystem') - ->disableOriginalConstructor() - ->getMock(); - - $this->_dirMock = $this->getMockBuilder('Magento\Core\Model\Dir') - ->disableOriginalConstructor() - ->getMock(); - - $this->_loaderMock = $this->getMockBuilder('Magento\Core\Model\TemplateEngine\Twig\FullFileName') - ->disableOriginalConstructor() - ->getMock(); - - $this->_extensionFactory = $this->getMockBuilder('Magento\Core\Model\TemplateEngine\Twig\ExtensionFactory') - ->disableOriginalConstructor() - ->getMock(); - - $this->_extension = $this->getMockBuilder('Magento\Core\Model\TemplateEngine\Twig\Extension') - ->disableOriginalConstructor() - ->getMock(); - - $this->_loggerMock = $this->getMockBuilder('Magento\Core\Model\Logger') - ->disableOriginalConstructor() - ->getMock(); - } -} diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/ExtensionTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/ExtensionTest.php deleted file mode 100644 index 146e894dd59..00000000000 --- a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/ExtensionTest.php +++ /dev/null @@ -1,113 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\Core\Model\TemplateEngine\Twig; - -class ExtensionTest extends \PHPUnit_Framework_TestCase -{ - /** @var \Magento\Core\Model\TemplateEngine\Twig\Extension */ - protected $_extension; - - /** @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_commonFunctionsMock; - - /** @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_layoutFunctionsMock; - - /** @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_blockTrackerMock; - - protected function setUp() - { - $this->_blockTrackerMock = $this->getMockBuilder('Magento\Core\Model\TemplateEngine\BlockTrackerInterface') - ->disableOriginalConstructor() - ->getMock(); - - $this->_commonFunctionsMock = $this->getMockBuilder('Magento\Core\Model\TemplateEngine\Twig\CommonFunctions') - ->disableOriginalConstructor() - ->getMock(); - - $this->_layoutFunctionsMock = $this->getMockBuilder('Magento\Core\Model\TemplateEngine\Twig\LayoutFunctions') - ->disableOriginalConstructor() - ->getMock(); - - $this->_extension = new \Magento\Core\Model\TemplateEngine\Twig\Extension( - $this->_commonFunctionsMock, - $this->_layoutFunctionsMock - ); - $this->_extension->setBlockTracker($this->_blockTrackerMock); - } - - /** - * Verify getName always returns 'Magento' - */ - public function testGetName() - { - $this->assertSame('Magento', $this->_extension->getName(), 'Name should be Magento'); - } - - /** - * Test that the getFunctions and getFilters return arrays of appropriate types - */ - public function testGetFunctionsAndFilters() - { - $layoutFunc = array($this->getMockBuilder('Twig_SimpleFunction')->disableOriginalConstructor()->getMock()); - $commonFunc = array($this->getMockBuilder('Twig_SimpleFunction')->disableOriginalConstructor()->getMock()); - $expectedFunctions = array_merge($commonFunc, $layoutFunc); - - $this->_layoutFunctionsMock->expects($this->once()) - ->method('getFunctions') - ->will($this->returnValue($layoutFunc)); - $this->_commonFunctionsMock->expects($this->once()) - ->method('getFunctions') - ->will($this->returnValue($commonFunc)); - - /** @var array $functions */ - $functions = $this->_extension->getFunctions(); - - $this->assertInternalType('array', $functions); - $this->assertTrue(count($functions) >= 1, 'Functions array does not contain any elements'); - $this->assertContainsOnly('Twig_SimpleFunction', $functions, false, - 'Contains something that is not a Twig function.'); - $this->assertEquals($expectedFunctions, $functions); - - /** @var array $filters */ - $filters = $this->_extension->getFilters(); - - $this->assertInternalType('array', $filters); - $this->assertTrue(count($filters) >= 1, 'Filters array does not contain any elements'); - $this->assertContainsOnly('Twig_SimpleFilter', $filters, false, - 'Contains something that is not a Twig filter.'); - } - - /** - * Test __ (translate) function - */ - public function testTranslate() - { - $translated = 'Good day'; - - $actual = $this->_extension->translate('Good day'); - $this->assertEquals($translated, (string)$actual, 'Translation did not work'); - } -} diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/FullFileNameTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/FullFileNameTest.php deleted file mode 100644 index b498417516b..00000000000 --- a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/FullFileNameTest.php +++ /dev/null @@ -1,151 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\Core\Model\TemplateEngine\Twig; - -class FullFileNameTest extends \PHPUnit_Framework_TestCase -{ - /** - * @var int - */ - private $_prevErrorLevel; - - /** - * @var bool - */ - private $_prevFrameworkWarningEnabled; - - /** - * @var bool - */ - private $_prevFrameworkNoticeEnabled; - - /** - * @var \PHPUnit_Framework_MockObject_MockObject \Magento\Core\Model\App\State - */ - private $_appStateMock; - - protected function setUp() - { - // prevent PHPUnit from converting real code exceptions - $this->_prevErrorLevel = error_reporting(); - error_reporting(0); - $this->_prevFrameworkNoticeEnabled = \PHPUnit_Framework_Error_Notice::$enabled; - \PHPUnit_Framework_Error_Notice::$enabled = false; - $this->_prevFrameworkWarningEnabled = \PHPUnit_Framework_Error_Warning::$enabled; - \PHPUnit_Framework_Error_Warning::$enabled = false; - - $this->_appStateMock = $this->getMockBuilder('Magento\Core\Model\App\State') - ->disableOriginalConstructor() - ->getMock(); - - // set to return developer mode by default - $this->_appStateMock - ->expects($this->any()) - ->method('getMode') - ->will($this->returnValue(\Magento\Core\Model\App\State::MODE_DEVELOPER)); - } - - protected function tearDown() - { - error_reporting($this->_prevErrorLevel); - \PHPUnit_Framework_Error_Warning::$enabled = $this->_prevFrameworkWarningEnabled; - \PHPUnit_Framework_Error_Notice::$enabled = $this->_prevFrameworkNoticeEnabled; - } - - public function testFileExistencePositive() - { - $loader = new \Magento\Core\Model\TemplateEngine\Twig\FullFileName($this->_appStateMock); - - $this->assertNotNull($loader->getSource(__FILE__)); - } - - /** - * @expectedException \Twig_Error_Loader - */ - public function testFileExistenceNegative() - { - $loader = new \Magento\Core\Model\TemplateEngine\Twig\FullFileName($this->_appStateMock); - $loader->getSource(__FILE__ . 'jnk'); - } - - public function testGetCacheKey() - { - $loader = new \Magento\Core\Model\TemplateEngine\Twig\FullFileName($this->_appStateMock); - - $keyActual = "SomeKey"; - $keyExpected = $loader->getCacheKey($keyActual); - - $this->assertEquals($keyActual, $keyExpected); - } - - public function testExists() - { - $loader = new \Magento\Core\Model\TemplateEngine\Twig\FullFileName($this->_appStateMock); - - $exists = $loader->exists(__FILE__); - $this->assertEquals($exists, true); - } - - public function testExistsBadFile() - { - $loader = new \Magento\Core\Model\TemplateEngine\Twig\FullFileName($this->_appStateMock); - - $name = 'bad-file'; - $exists = $loader->exists($name); - $this->assertEquals($exists, false); - } - - public function testIsFreshPositive() - { - $loader = new \Magento\Core\Model\TemplateEngine\Twig\FullFileName($this->_appStateMock); - - $this->assertEquals(true, $loader->isFresh(__FILE__, PHP_INT_MAX)); - $this->assertEquals(false, $loader->isFresh(__FILE__, 0)); - } - - /** - * @expectedException \Twig_Error_Loader - */ - public function testIsFreshNegative() - { - $loader = new \Magento\Core\Model\TemplateEngine\Twig\FullFileName($this->_appStateMock); - - $this->assertEquals(false, $loader->isFresh('bad-file', 0)); - } - - public function testIsFreshAppModes() - { - // set to return production mode - $productionStateMock = $this->getMockBuilder('Magento\Core\Model\App\State') - ->disableOriginalConstructor() - ->getMock(); - $productionStateMock->expects($this->any()) - ->method('getMode') - ->will($this->returnValue(\Magento\Core\Model\App\State::MODE_PRODUCTION)); - $loader = new \Magento\Core\Model\TemplateEngine\Twig\FullFileName($productionStateMock); - - // in production mode, even a bad file will return as fresh - $this->assertEquals(true, $loader->isFresh('bad-file', 0)); - } -} diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/LayoutFunctionsTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/LayoutFunctionsTest.php deleted file mode 100644 index 5c2e25ffc2c..00000000000 --- a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/LayoutFunctionsTest.php +++ /dev/null @@ -1,214 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\Core\Model\TemplateEngine\Twig; - -class LayoutFunctionsTest extends \PHPUnit_Framework_TestCase -{ - /** @var \Magento\Core\Model\TemplateEngine\Twig\LayoutFunctions */ - protected $_layoutFunctions; - - /** @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_layoutMock; - - /** @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_blockTrackerMock; - - protected function setUp() - { - $this->_layoutMock = $this->getMockBuilder('Magento\Core\Model\Layout') - ->disableOriginalConstructor() - ->getMock(); - $this->_blockTrackerMock = $this->getMockBuilder('Magento\Core\Model\TemplateEngine\BlockTrackerInterface') - ->disableOriginalConstructor() - ->getMock(); - - $this->_layoutFunctions = new \Magento\Core\Model\TemplateEngine\Twig\LayoutFunctions( - $this->_layoutMock - ); - $this->_layoutFunctions->setBlockTracker($this->_blockTrackerMock); - } - - /** - * Test that the getFunctions return arrays of appropriate types - */ - public function testGetFunctions() - { - /** @var array $functions */ - $functions = $this->_layoutFunctions->getFunctions(); - - $this->assertInternalType('array', $functions); - $this->assertTrue(count($functions) >= 1, 'Functions array does not contain any elements'); - $this->assertContainsOnly('Twig_SimpleFunction', $functions, false, - 'Contains something that is not a Twig function.'); - } - - /** - * Tests getChildHtml - * - * Sets childBlock to be a child of parentBlock. - * Sets parentBlock to be the current block. - * Then when getChildHtml is returned it should return html from childBlock - */ - public function testGetChildHtml() - { - $childBlockHtml = '<p>block mock B</p>'; - - $parentBlockMock = $this->getMockBuilder('Magento\Core\Block\Template') - ->disableOriginalConstructor() - ->getMock(); - $parentBlockMock->expects($this->any()) - ->method('getNameInLayout') - ->will($this->returnValue('parentBlockMock')); - - $this->_layoutMock->expects($this->once()) - ->method('getChildNames')->with($this->equalTo('parentBlockMock')) - ->will($this->returnValue(array('childBlockMock'))); - - $this->_layoutMock->expects($this->once()) - ->method('renderElement') - ->with($this->equalTo('childBlockMock'), $this->equalTo(true)) - ->will($this->returnValue($childBlockHtml)); - - // Set the current block to blockA and get the child's html - $this->_blockTrackerMock->expects($this->once()) - ->method('getCurrentBlock') - ->will($this->returnValue($parentBlockMock)); - - $actual = $this->_layoutFunctions->getChildHtml(); - - $this->assertEquals($childBlockHtml, $actual, 'actual child html did not match expected'); - } - - /** - * Tests setCurrentBlock, and getChildHtml. - * - * Sets childBock to be a child of parentBlock. - * Sets parentBlock to be the current block. - * Then when getChildHtml is returned it should return html from childBlock - */ - public function testRenderBlockWithAlias() - { - $childBlockHtml = '<p>child block mock</p>'; - - $parentBlockMock = $this->getMockBuilder('Magento\Core\Block\Template') - ->disableOriginalConstructor() - ->getMock(); - $parentBlockMock->expects($this->any()) - ->method('getNameInLayout') - ->will($this->returnValue('parentBlockMock')); - - $this->_layoutMock->expects($this->once()) - ->method('getChildName') - ->with($this->equalTo('parentBlockMock'), $this->equalTo('anAlias')) - ->will($this->returnValue('childBlockMock')); - - $this->_layoutMock->expects($this->once()) - ->method('renderElement') - ->with($this->equalTo('childBlockMock'), $this->equalTo(true)) - ->will($this->returnValue($childBlockHtml)); - - $actual = $this->_layoutFunctions->renderBlock('parentBlockMock', 'anAlias'); - - $this->assertEquals($childBlockHtml, $actual, 'actual child html did not match expected'); - } - - /** - * test getBlockData with and without the block in the layout - */ - public function testGetBlockData() - { - $key = 'aKey'; - $someData = 'this is some data'; - - $blockMock = $this->getMockBuilder('Magento\Core\Block\Template') - ->disableOriginalConstructor() - ->getMock();; - $blockMock->expects($this->any()) - ->method('getData') - ->with($this->equalTo($key)) - ->will($this->returnValue($someData)); - - $map = array( - array('datalessBlock', NULL), - array('dataBlock', $blockMock) - ); - - $this->_layoutMock->expects($this->any()) - ->method('getBlock') - ->will($this->returnValueMap($map)); - - $actual = $this->_layoutFunctions->getBlockData('datalessBlock'); - $this->assertNull($actual, 'datalessBlock should have returned null'); - $actual = $this->_layoutFunctions->getBlockData('dataBlock', $key); - $this->assertEquals($someData, $actual, 'dataBlock did not return expected data'); - } - - /** - * Test getBlockNameByAlias - * - * Do with mock layout returning a valid name and without - */ - public function testGetBlockNameByAlias() - { - $parentName = 'ParentName'; - $goodAlias = 'anAlias'; - $badAlias = 'hasNoName'; - $name = 'aName'; - - $this->_layoutMock->expects($this->at(0)) - ->method('getChildName') - ->with($this->equalTo($parentName), $this->equalTo($goodAlias)) - ->will($this->returnValue($name)); - - $this->_layoutMock->expects($this->at(1)) - ->method('getChildName') - ->with($this->equalTo($parentName), $this->equalTo($badAlias)) - ->will($this->returnValue(false)); - - $actual = $this->_layoutFunctions->getBlockNameByAlias($parentName, $goodAlias); - $this->assertEquals($name, $actual, 'dataBlock did not return expected data'); - $actual = $this->_layoutFunctions->getBlockNameByAlias($parentName, $badAlias); - $this->assertEquals('', $actual, 'datalessBlock should have returned empty string'); - } - - /** - * Test getGroupChildNames - */ - public function testGetGroupChildNames() - { - $parentName = 'ParentName'; - $groupName = 'GroupName'; - $aliasArray = array('aliasA' => 'blockA'); - - $this->_layoutMock->expects($this->once()) - ->method('getGroupChildNames') - ->with($this->equalTo($parentName), $this->equalTo($groupName)) - ->will($this->returnValue($aliasArray)); - - $actual = $this->_layoutFunctions->getGroupChildNames($parentName, $groupName); - $this->assertEquals($aliasArray, $actual, 'getGroupChildNames did not return expected aliasArray'); - } - - -} diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/_files/twig_templates/READEME.txt b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/_files/twig_templates/READEME.txt deleted file mode 100644 index 2b6778c2f50..00000000000 --- a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/Twig/_files/twig_templates/READEME.txt +++ /dev/null @@ -1,2 +0,0 @@ -This file exists for unit testing purposes. The code uses core php directory functions which cannot be mocked. -Thereby the twig_templates directory exists for this reason. \ No newline at end of file diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/TwigTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/TwigTest.php deleted file mode 100644 index 9b0c4e7e753..00000000000 --- a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateEngine/TwigTest.php +++ /dev/null @@ -1,100 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\Core\Model\TemplateEngine; - -class TwigTest extends \PHPUnit_Framework_TestCase -{ - /** @var \Magento\Core\Model\TemplateEngine\Twig */ - protected $_twigEngine; - - /** @var \PHPUnit_Framework_MockObject_MockObject \Magento\Core\Model\TemplateEngine_EnvironmentFactory */ - protected $_envFactoryMock; - - /** @var \PHPUnit_Framework_MockObject_MockObject */ - private $_extMock; - - /** - * Create a Twig template engine to test. - */ - protected function setUp() - { - // Objects that are injected into \Magento\Core\Model\TemplateEngine\Twig - $this->_envFactoryMock = $this->getMockBuilder('Magento\Core\Model\TemplateEngine\Twig\EnvironmentFactory') - ->disableOriginalConstructor() - ->getMock(); - $this->_extMock = $this->getMockBuilder('Magento\Core\Model\TemplateEngine\Twig\Extension') - ->disableOriginalConstructor() - ->getMock(); - $this->_twigEngine - = new \Magento\Core\Model\TemplateEngine\Twig($this->_envFactoryMock, $this->_extMock); - } - - /** - * Test the render() function with a very simple .twig file. - */ - public function testRenderPositive() - { - $renderedOutput = '<html></html>'; - $blockMock = $this->getMockBuilder('Magento\Core\Block\Template') - ->disableOriginalConstructor()->getMock(); - $environmentMock = $this->getMockBuilder('Twig_Environment')->disableOriginalConstructor()->getMock(); - $environmentMock->expects($this->once())->method('render')->will($this->returnValue($renderedOutput)); - $this->_envFactoryMock->expects($this->once())->method('create')->will( - $this->returnValue($environmentMock) - ); - $actualOutput = $this->_twigEngine->render($blockMock, ''); - $this->assertSame($renderedOutput, $actualOutput, 'Twig file did not render properly'); - } - - /** - * Test the render() function such that it throws an exception - * - * @expectedException \Magento\Exception - */ - public function testRenderNegative() - { - $blockMock = $this->getMockBuilder('Magento\Core\Block\Template') - ->disableOriginalConstructor()->getMock(); - $environmentMock = $this->getMockBuilder('Twig_Environment') - ->disableOriginalConstructor()->getMock(); - $environmentMock->expects($this->once()) - ->method('render') - ->will($this->throwException(new \Magento\Exception())); - $this->_envFactoryMock->expects($this->once())->method('create')->will( - $this->returnValue($environmentMock) - ); - $this->_twigEngine->render($blockMock, ''); - } - - /** - * Test the getCurrentBlock function. - * - * Since its set/reset during render(), make sure it does not return anything when empty. - */ - public function testGetCurrentBlock() - { - $block = $this->_twigEngine->getCurrentBlock(); - $this->assertNull($block); - } -} diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateTest.php index 0f50e4f16b7..6faa9a26385 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/TemplateTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/TemplateTest.php @@ -47,7 +47,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase $helper->getConstructArguments( 'Magento\Core\Model\Template', array( - 'design' => $this->getMock('Magento\Core\Model\View\DesignInterface'), + 'design' => $this->getMock('Magento\View\DesignInterface'), 'data' => array( 'area' => \Magento\Core\Model\App\Area::AREA_FRONTEND, 'store' => 1 diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Theme/CopyServiceTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Theme/CopyServiceTest.php index 307e381026f..4940b63e823 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Theme/CopyServiceTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Theme/CopyServiceTest.php @@ -169,7 +169,7 @@ class CopyServiceTest extends \PHPUnit_Framework_TestCase array('addThemeFilter', 'getIterator'), array(), '', false); $this->_link->expects($this->any())->method('getCollection')->will($this->returnValue($this->_linkCollection)); - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array('dispatch'), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array('dispatch'), array(), '', false); $this->_object = new \Magento\Core\Model\Theme\CopyService( $this->_filesystem, diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Theme/Customization/PathTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Theme/Customization/PathTest.php index a59ccb9d480..0daccfaaadc 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Theme/Customization/PathTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Theme/Customization/PathTest.php @@ -50,7 +50,7 @@ class PathTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_theme = $this->getMock('Magento\Core\Model\Theme', null, array(), '', false); - $this->_dir = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $this->_dir = $this->getMock('Magento\App\Dir', array(), array(), '', false); $this->_model = new \Magento\Core\Model\Theme\Customization\Path($this->_dir); } @@ -67,7 +67,7 @@ class PathTest extends \PHPUnit_Framework_TestCase */ public function testGetCustomizationPath() { - $this->_dir->expects($this->once())->method('getDir')->with(\Magento\Core\Model\Dir::MEDIA) + $this->_dir->expects($this->once())->method('getDir')->with(\Magento\App\Dir::MEDIA) ->will($this->returnValue('/media_dir')); $expectedPath = implode( DIRECTORY_SEPARATOR, @@ -83,7 +83,7 @@ class PathTest extends \PHPUnit_Framework_TestCase public function testGetThemeFilesPath() { $this->_theme->setArea('area51'); - $this->_dir->expects($this->once())->method('getDir')->with(\Magento\Core\Model\Dir::THEMES) + $this->_dir->expects($this->once())->method('getDir')->with(\Magento\App\Dir::THEMES) ->will($this->returnValue('/themes_dir')); $expectedPath = implode( \Magento\Filesystem::DIRECTORY_SEPARATOR, @@ -101,7 +101,7 @@ class PathTest extends \PHPUnit_Framework_TestCase */ public function testGetCustomViewConfigPath() { - $this->_dir->expects($this->once())->method('getDir')->with(\Magento\Core\Model\Dir::MEDIA) + $this->_dir->expects($this->once())->method('getDir')->with(\Magento\App\Dir::MEDIA) ->will($this->returnValue('/media_dir')); $expectedPath = implode( DIRECTORY_SEPARATOR, diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Theme/Domain/PhysicalTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Theme/Domain/PhysicalTest.php index d137e9f24c5..5f325c4074c 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Theme/Domain/PhysicalTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Theme/Domain/PhysicalTest.php @@ -89,7 +89,7 @@ class PhysicalTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue(1)); $domainModel = new \Magento\Core\Model\Theme\Domain\Physical( - $this->getMock('Magento\Core\Model\Theme', array(), array(), '', false, false), + $this->getMock('Magento\View\Design\ThemeInterface', array(), array(), '', false, false), $themeFactory, $copyService, $themeCollection diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Theme/Image/PathTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/Theme/Image/PathTest.php index 5f32cbd8807..f1a61dca10f 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Theme/Image/PathTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/Theme/Image/PathTest.php @@ -54,11 +54,11 @@ class PathTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_dirMock = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $this->_dirMock = $this->getMock('Magento\App\Dir', array(), array(), '', false); $this->_viewUrlMock = $this->getMock('Magento\Core\Model\View\Url', array(), array(), '', false); $this->_storeManagerMock = $this->getMock('Magento\Core\Model\StoreManager', array(), array(), '', false); - $this->_dirMock->expects($this->any())->method('getDir')->with(\Magento\Core\Model\Dir::MEDIA) + $this->_dirMock->expects($this->any())->method('getDir')->with(\Magento\App\Dir::MEDIA) ->will($this->returnValue('/media')); $this->_model = new \Magento\Core\Model\Theme\Image\Path( diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/UrlTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/UrlTest.php index 510805f8c92..6388dd0cc7b 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/UrlTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/UrlTest.php @@ -37,19 +37,13 @@ class UrlTest extends \PHPUnit_Framework_TestCase */ protected $_model; - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $_securityInfoMock; - protected function setUp() { - $coreStoreConfig = $this->getMock('Magento\Core\Model\Store\Config', array(), array(), '', false); - - $this->_securityInfoMock = $this->getMock('Magento\Core\Model\Url\SecurityInfoInterface'); $this->_model = new \Magento\Core\Model\Url( - $this->_securityInfoMock, - $coreStoreConfig, + $this->getMock('Magento\App\RouterListInterface'), + $this->getMock('Magento\App\Request\Http', array(), array(), '', false), + $this->getMock('Magento\Core\Model\Url\SecurityInfoInterface'), + $this->getMock('Magento\Core\Model\Store\Config', array(), array(), '', false), $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false, false), $this->getMock('Magento\Core\Model\App', array(), array(), '', false, false), $this->getMock('Magento\Core\Model\StoreManager', array(), array(), '', false, false), @@ -85,9 +79,8 @@ class UrlTest extends \PHPUnit_Framework_TestCase $controllerName = 'controllerName'; $actionName = 'actionName'; - $backendData = $this->getMock('Magento\Backend\Helper\Data', array(), array(), '', false); - $requestMock = $this->getMockForAbstractClass('Magento\Core\Controller\Request\Http', - array($backendData), '', false, false, true, + $requestMock = $this->getMockForAbstractClass('Magento\App\Request\Http', + array(), '', false, false, true, array('getRequestedRouteName', 'getRequestedControllerName', 'getRequestedActionName')); $requestMock->expects($this->once())->method('getRequestedRouteName') diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/View/Design/ProxyTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/View/Design/ProxyTest.php index 61fcf4cabac..8fdabac5f1e 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/View/Design/ProxyTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/View/Design/ProxyTest.php @@ -37,14 +37,14 @@ class ProxyTest extends \PHPUnit_Framework_TestCase protected $_objectManager; /** - * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Core\Model\View\DesignInterface + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\View\DesignInterface */ protected $_viewDesign; protected function setUp() { $this->_objectManager = $this->getMock('Magento\ObjectManager'); - $this->_viewDesign = $this->getMock('Magento\Core\Model\View\DesignInterface'); + $this->_viewDesign = $this->getMock('Magento\View\DesignInterface'); $this->_objectManager->expects($this->once()) ->method('get') ->with('Magento\Core\Model\View\Design') diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/View/FileSystemTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/View/FileSystemTest.php index f8560b51a67..a0b161bb7c7 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/View/FileSystemTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/View/FileSystemTest.php @@ -64,7 +64,7 @@ class FileSystemTest extends \PHPUnit_Framework_TestCase { $params = array( 'area' => 'some_area', - 'themeModel' => $this->getMock('Magento\Core\Model\Theme', array(), array(), '', false, false), + 'themeModel' => $this->getMock('Magento\View\Design\ThemeInterface', array(), array(), '', false, false), 'module' => 'Some_Module' //It should be set in \Magento\Core\Model\View\Service::extractScope // but PHPUnit has problems with passing arguments by reference ); @@ -95,7 +95,7 @@ class FileSystemTest extends \PHPUnit_Framework_TestCase { $params = array( 'area' => 'some_area', - 'themeModel' => $this->getMock('Magento\Core\Model\Theme', array(), array(), '', false, false), + 'themeModel' => $this->getMock('Magento\View\Design\ThemeInterface', array(), array(), '', false, false), 'locale' => 'some_locale' ); $file = 'some_file.ext'; @@ -120,7 +120,7 @@ class FileSystemTest extends \PHPUnit_Framework_TestCase { $params = array( 'area' => 'some_area', - 'themeModel' => $this->getMock('Magento\Core\Model\Theme', array(), array(), '', false, false), + 'themeModel' => $this->getMock('Magento\View\Design\ThemeInterface', array(), array(), '', false, false), 'locale' => 'some_locale', 'module' => 'Some_Module' //It should be set in \Magento\Core\Model\View\Service::extractScope // but PHPUnit has problems with passing arguments by reference diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/View/UrlTest.php b/dev/tests/unit/testsuite/Magento/Core/Model/View/UrlTest.php index 9305be1c635..8d0460a6f08 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/View/UrlTest.php +++ b/dev/tests/unit/testsuite/Magento/Core/Model/View/UrlTest.php @@ -30,7 +30,7 @@ namespace Magento\Core\Model\View; class UrlTest extends \PHPUnit_Framework_TestCase { /** - * @param \Magento\Core\Model\Theme $themeModel + * @param \Magento\View\Design\ThemeInterface $themeModel * @dataProvider getViewFileUrlProductionModeDataProvider */ public function testGetViewFileUrlProductionMode($themeModel) @@ -54,8 +54,8 @@ class UrlTest extends \PHPUnit_Framework_TestCase ->method('copy'); // 2. Get directories configuration - /** @var $dirs \Magento\Core\Model\Dir|PHPUnit_Framework_MockObject_MockObject */ - $dirs = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + /** @var $dirs \Magento\App\Dir|PHPUnit_Framework_MockObject_MockObject */ + $dirs = $this->getMock('Magento\App\Dir', array(), array(), '', false); $dirs->expects($this->any()) ->method('getDir') ->will($this->returnValue('some_dir')); @@ -125,7 +125,7 @@ class UrlTest extends \PHPUnit_Framework_TestCase public static function getViewFileUrlProductionModeDataProvider() { $usualTheme = \PHPUnit_Framework_MockObject_Generator::getMock( - 'Magento\Core\Model\Theme', + 'Magento\View\Design\ThemeInterface', array(), array(), '', diff --git a/dev/tests/unit/testsuite/Magento/Cron/Model/ObserverTest.php b/dev/tests/unit/testsuite/Magento/Cron/Model/ObserverTest.php index 68d3e116144..f4fcbf3a320 100644 --- a/dev/tests/unit/testsuite/Magento/Cron/Model/ObserverTest.php +++ b/dev/tests/unit/testsuite/Magento/Cron/Model/ObserverTest.php @@ -75,9 +75,8 @@ class ObserverTest extends \PHPUnit_Framework_TestCase $this->_coreStoreConfig = $this->getMockBuilder('Magento\Core\Model\Store\Config') ->disableOriginalConstructor() ->getMock(); - $this->_collection = $this->getMockBuilder('Magento\Cron\Model\Resource\Schedule\Collection') - ->setMethods(array('addFieldToFilter', 'load')) + ->setMethods(array('addFieldToFilter', 'load', '__wakeup')) ->disableOriginalConstructor() ->getMock(); $this->_collection->expects($this->any()) @@ -134,10 +133,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase ->method('getConfig') ->will($this->returnValue(0)); - $schedule = $this->getMockBuilder('Magento\Cron\Model\Schedule') - ->setMethods(array('getJobCode')) - ->disableOriginalConstructor() - ->getMock(); + $schedule = $this->getMock('Magento\Cron\Model\Schedule', array('getJobCode', '__wakeup'), array(), '', false); $schedule->expects($this->once()) ->method('getJobCode') ->will($this->returnValue('not_existed_job_code')); @@ -174,7 +170,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue(0)); $schedule = $this->getMockBuilder('Magento\Cron\Model\Schedule') - ->setMethods(array('getJobCode', 'tryLockJob', 'getScheduledAt')) + ->setMethods(array('getJobCode', 'tryLockJob', 'getScheduledAt', '__wakeup')) ->disableOriginalConstructor() ->getMock(); $schedule->expects($this->any()) @@ -222,7 +218,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase $schedule = $this->getMockBuilder('Magento\Cron\Model\Schedule') ->setMethods( - array('getJobCode', 'tryLockJob', 'getScheduledAt', 'save', 'setStatus', 'setMessages') + array('getJobCode', 'tryLockJob', 'getScheduledAt', 'save', 'setStatus', 'setMessages', '__wakeup') ) ->disableOriginalConstructor() ->getMock(); @@ -272,7 +268,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase $schedule = $this->getMockBuilder('Magento\Cron\Model\Schedule') ->setMethods( - array('getJobCode', 'tryLockJob', 'getScheduledAt', 'save', 'setStatus', 'setMessages') + array('getJobCode', 'tryLockJob', 'getScheduledAt', 'save', 'setStatus', 'setMessages', '__wakeup') ) ->disableOriginalConstructor() ->getMock(); @@ -337,7 +333,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase $schedule = $this->getMockBuilder('Magento\Cron\Model\Schedule') ->setMethods( - array('getJobCode', 'tryLockJob', 'getScheduledAt', 'save', 'setStatus', 'setMessages') + array('getJobCode', 'tryLockJob', 'getScheduledAt', 'save', 'setStatus', 'setMessages', '__wakeup') ) ->disableOriginalConstructor() ->getMock(); @@ -413,7 +409,8 @@ class ObserverTest extends \PHPUnit_Framework_TestCase 'setStatus', 'setMessages', 'setExecutedAt', - 'setFinishedAt' + 'setFinishedAt', + '__wakeup', ); $schedule = $this->getMockBuilder('Magento\Cron\Model\Schedule') ->setMethods($scheduleMethods) @@ -507,7 +504,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue(0)); $schedule = $this->getMockBuilder('Magento\Cron\Model\Schedule') - ->setMethods(array('getJobCode', 'getScheduledAt')) + ->setMethods(array('getJobCode', 'getScheduledAt', '__wakeup')) ->disableOriginalConstructor() ->getMock(); $schedule->expects($this->any()) @@ -578,7 +575,8 @@ class ObserverTest extends \PHPUnit_Framework_TestCase 'setStatus', 'trySchedule', 'unsScheduleId', - 'save' + 'save', + '__wakeup' ); $schedule = $this->getMockBuilder('Magento\Cron\Model\Schedule') ->setMethods($scheduleMethods) @@ -604,7 +602,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase $scheduleMock = $this->getMockBuilder('Magento\Cron\Model\Schedule') ->disableOriginalConstructor() - ->setMethods(array('getCollection')) + ->setMethods(array('getCollection', '__wakeup')) ->getMock(); $scheduleMock->expects($this->any())->method('getCollection')->will($this->returnValue($this->_collection)); $this->_objectManager->expects($this->any()) @@ -622,7 +620,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase { $schedule = $this->getMockBuilder('Magento\Cron\Model\Schedule') ->disableOriginalConstructor() - ->setMethods(array('getExecutedAt', 'getStatus', 'delete')) + ->setMethods(array('getExecutedAt', 'getStatus', 'delete', '__wakeup')) ->getMock(); $schedule->expects($this->any())->method('getExecutedAt')->will($this->returnValue('-1 day')); $schedule->expects($this->any())->method('getStatus')->will($this->returnValue('success')); @@ -654,7 +652,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue($scheduleMock)); $collection = $this->getMockBuilder('Magento\Cron\Model\Resource\Schedule\Collection') - ->setMethods(array('addFieldToFilter', 'load')) + ->setMethods(array('addFieldToFilter', 'load', '__wakeup')) ->disableOriginalConstructor() ->getMock(); $collection->expects($this->any()) diff --git a/dev/tests/unit/testsuite/Magento/Customer/Model/CustomerTest.php b/dev/tests/unit/testsuite/Magento/Customer/Model/CustomerTest.php index 22b5b0f45d4..36493d26c95 100644 --- a/dev/tests/unit/testsuite/Magento/Customer/Model/CustomerTest.php +++ b/dev/tests/unit/testsuite/Magento/Customer/Model/CustomerTest.php @@ -79,7 +79,7 @@ class CustomerTest extends \PHPUnit_Framework_TestCase ->getMock(); $this->_website = $this->getMockBuilder('Magento\Core\Model\Website') ->disableOriginalConstructor() - ->setMethods(array('getStoreIds')) + ->setMethods(array('getStoreIds', '__wakeup')) ->getMock(); $this->_senderMock = $this->getMockBuilder('Magento\Core\Model\Sender') ->disableOriginalConstructor() @@ -91,7 +91,7 @@ class CustomerTest extends \PHPUnit_Framework_TestCase ->getMock(); $this->_attribute = $this->getMockBuilder('Magento\Eav\Model\Attribute') ->disableOriginalConstructor() - ->setMethods(array('getIsVisible')) + ->setMethods(array('getIsVisible', '__wakeup')) ->getMock(); $this->_resourceMock = $this->getMockBuilder('Magento\Customer\Model\Resource\Customer') ->disableOriginalConstructor() @@ -116,7 +116,7 @@ class CustomerTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue($this->_storeManager)); $this->_model = new \Magento\Customer\Model\Customer( - $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false), + $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false), $this->_customerData, $this->_coreData, $this->_contextMock, diff --git a/dev/tests/unit/testsuite/Magento/Customer/Service/CustomerTest.php b/dev/tests/unit/testsuite/Magento/Customer/Service/CustomerTest.php index d84a8d5c9e4..e626c4cea16 100644 --- a/dev/tests/unit/testsuite/Magento/Customer/Service/CustomerTest.php +++ b/dev/tests/unit/testsuite/Magento/Customer/Service/CustomerTest.php @@ -75,7 +75,7 @@ class CustomerTest extends \PHPUnit_Framework_TestCase ->setMethods(array('save', 'generatePassword', 'getOrigData', 'sendNewAccountEmail', 'getConfirmation', 'getPrimaryAddress', 'getAddresses', 'getAdditionalAddresses', 'load', 'getId', 'changePassword', 'sendPasswordReminderEmail', 'addAddress', 'getAddressItemById', 'getAddressesCollection', - 'hashPassword', 'changeResetPasswordLinkToken') + 'hashPassword', 'changeResetPasswordLinkToken', '__wakeup') ) ->disableOriginalConstructor() ->getMock(); diff --git a/dev/tests/unit/testsuite/Magento/DesignEditor/Block/Adminhtml/Editor/ContainerTest.php b/dev/tests/unit/testsuite/Magento/DesignEditor/Block/Adminhtml/Editor/ContainerTest.php index 6d89e842c2d..3334222ce77 100644 --- a/dev/tests/unit/testsuite/Magento/DesignEditor/Block/Adminhtml/Editor/ContainerTest.php +++ b/dev/tests/unit/testsuite/Magento/DesignEditor/Block/Adminhtml/Editor/ContainerTest.php @@ -86,7 +86,7 @@ class ContainerTest extends \PHPUnit_Framework_TestCase public function testPrepareLayout() { $buttonTitle = 'Back'; - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $arguments = $this->_getBlockArguments(); $arguments['eventManager'] = $eventManager; diff --git a/dev/tests/unit/testsuite/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Files/ContentTest.php b/dev/tests/unit/testsuite/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Files/ContentTest.php index b04606f6d5d..5321102c2aa 100644 --- a/dev/tests/unit/testsuite/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Files/ContentTest.php +++ b/dev/tests/unit/testsuite/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Files/ContentTest.php @@ -44,7 +44,7 @@ class ContentTest extends \PHPUnit_Framework_TestCase protected $_filesContent; /** - * @var \Magento\Core\Controller\Request\Http|PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\RequestInterface|PHPUnit_Framework_MockObject_MockObject */ protected $_request; @@ -52,7 +52,7 @@ class ContentTest extends \PHPUnit_Framework_TestCase { $this->_helperStorage = $this->getMock('Magento\Theme\Helper\Storage', array(), array(), '', false); $this->_urlBuilder = $this->getMock('Magento\Backend\Model\Url', array(), array(), '', false); - $this->_request = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $this->_request = $this->getMock('Magento\App\RequestInterface', array(), array(), '', false); $objectManagerHelper = new \Magento\TestFramework\Helper\ObjectManager($this); $constructArguments = $objectManagerHelper->getConstructArguments( diff --git a/dev/tests/unit/testsuite/Magento/DesignEditor/Controller/Adminhtml/System/Design/EditorTest.php b/dev/tests/unit/testsuite/Magento/DesignEditor/Controller/Adminhtml/System/Design/EditorTest.php index df942f037b0..2c484716f7f 100644 --- a/dev/tests/unit/testsuite/Magento/DesignEditor/Controller/Adminhtml/System/Design/EditorTest.php +++ b/dev/tests/unit/testsuite/Magento/DesignEditor/Controller/Adminhtml/System/Design/EditorTest.php @@ -46,9 +46,7 @@ class EditorTest extends \PHPUnit_Framework_TestCase { $this->_objectManagerMock = $this->getMock('Magento\ObjectManager'); - $backendData = $this->getMock('Magento\Backend\Helper\Data', array(), array(), '', false); - $request = $this->getMockForAbstractClass('Magento\Core\Controller\Request\Http', - array($backendData), '', false, false, true, array('setActionName')); + $request = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); $request->expects($this->any())->method('setActionName')->will($this->returnSelf()); $objectManagerHelper = new \Magento\TestFramework\Helper\ObjectManager($this); @@ -190,7 +188,7 @@ class EditorTest extends \PHPUnit_Framework_TestCase $storeManager->expects($this->any())->method('getStore') ->will($this->returnSelf()); - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $configMock = $this->getMock('Magento\Core\Model\Config', array(), array(), '', false); $authMock = $this->getMock('Magento\AuthorizationInterface'); $authMock->expects($this->any())->method('filterAclNodes')->will($this->returnSelf()); @@ -210,7 +208,7 @@ class EditorTest extends \PHPUnit_Framework_TestCase ), array('Magento\Core\Model\Translate', $translate), array('Magento\Core\Model\Config', $configMock), - array('Magento\Core\Model\Event\Manager', $eventManager), + array('Magento\Event\ManagerInterface', $eventManager), array('Magento\Core\Model\StoreManager', $storeManager), array('Magento\AuthorizationInterface', $authMock), array('Magento\Backend\Model\Session', $backendSession), diff --git a/dev/tests/unit/testsuite/Magento/DesignEditor/Controller/Varien/Router/StandardTest.php b/dev/tests/unit/testsuite/Magento/DesignEditor/Controller/Varien/Router/StandardTest.php index 717389893d3..10837f626e8 100644 --- a/dev/tests/unit/testsuite/Magento/DesignEditor/Controller/Varien/Router/StandardTest.php +++ b/dev/tests/unit/testsuite/Magento/DesignEditor/Controller/Varien/Router/StandardTest.php @@ -44,12 +44,11 @@ class StandardTest extends \PHPUnit_Framework_TestCase */ const VDE_CONFIGURATION_DATA = 'vde_config_data'; - /**#@+ + /** * Test path and host */ const TEST_PATH = '/customer/account'; const TEST_HOST = 'http://test.domain'; - /**#@-*/ /** * @var \Magento\DesignEditor\Controller\Varien\Router\Standard @@ -57,7 +56,7 @@ class StandardTest extends \PHPUnit_Framework_TestCase protected $_model; /** - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @param bool $isVde * @param bool $isLoggedIn * @param bool $isConfiguration @@ -67,7 +66,7 @@ class StandardTest extends \PHPUnit_Framework_TestCase * @dataProvider matchDataProvider */ public function testMatch( - \Magento\Core\Controller\Request\Http $request, + \Magento\App\RequestInterface $request, $isVde, $isLoggedIn, $isConfiguration, @@ -92,27 +91,25 @@ class StandardTest extends \PHPUnit_Framework_TestCase $vdeUrl = self::TEST_HOST . '/' . self::VDE_FRONT_NAME . self::TEST_PATH; $notVdeUrl = self::TEST_HOST . self::TEST_PATH; - $silencedMethods = array('_isFrontArea'); $excludedRouters = array( 'admin' => 'admin router', 'vde' => 'vde router', ); + $routerListMock = $this->getMock('Magento\App\RouterListInterface'); + // test data to verify routers match logic - $storeManager = $this->getMock('Magento\Core\Model\StoreManager', array(), array(), '', false); - $helperMock = $this->getMock('Magento\Backend\Helper\DataProxy', array(), array(), '', false); - $matchedRequest = $this->getMock('Magento\Core\Controller\Request\Http', - $silencedMethods, - array($storeManager, $helperMock, $vdeUrl) + $matchedRequest = $this->getMock('Magento\App\Request\Http', + array('_isFrontArea'), + array($routerListMock, $vdeUrl) ); - $routerMockedMethods = array('match'); $matchedController = $this->getMockForAbstractClass( - 'Magento\Core\Controller\Varien\AbstractAction', array(), '', false); + 'Magento\App\Action\AbstractAction', array(), '', false); // method "match" will be invoked for this router because it's first in the list $matchedRouter = $this->getMock( - 'Magento\Core\Controller\Varien\Router\Base', $routerMockedMethods, array(), '', false + 'Magento\Core\Controller\Varien\Router\Base', array(), array(), '', false ); $matchedRouter->expects($this->once()) ->method('match') @@ -121,7 +118,7 @@ class StandardTest extends \PHPUnit_Framework_TestCase // method "match" will not be invoked for this router because controller will be found by first router $notMatchedRouter = $this->getMock( - 'Magento\Core\Controller\Varien\Router\Base', $routerMockedMethods, array(), '', false + 'Magento\Core\Controller\Varien\Router\Base', array(), array(), '', false ); $notMatchedRouter->expects($this->never()) ->method('match'); @@ -133,8 +130,8 @@ class StandardTest extends \PHPUnit_Framework_TestCase return array( 'not vde request' => array( '$request' => $this->getMock( - 'Magento\Core\Controller\Request\Http', $silencedMethods, array( - $storeManager, $helperMock, $notVdeUrl + 'Magento\App\Request\Http', array('_isFrontArea'), array( + $routerListMock, $notVdeUrl ) ), '$isVde' => false, @@ -143,7 +140,7 @@ class StandardTest extends \PHPUnit_Framework_TestCase ), 'not logged as admin' => array( '$request' => $this->getMock( - 'Magento\Core\Controller\Request\Http', $silencedMethods, array($storeManager, $helperMock, $vdeUrl) + 'Magento\App\Request\Http', array('_isFrontArea'), array($routerListMock, $vdeUrl) ), '$isVde' => true, '$isLoggedIn' => false, @@ -151,7 +148,7 @@ class StandardTest extends \PHPUnit_Framework_TestCase ), 'no matched routers' => array( '$request' => $this->getMock( - 'Magento\Core\Controller\Request\Http', $silencedMethods, array($storeManager, $helperMock, $vdeUrl) + 'Magento\App\Request\Http', array('_isFrontArea'), array($routerListMock, $vdeUrl) ), '$isVde' => true, '$isLoggedIn' => true, @@ -170,7 +167,7 @@ class StandardTest extends \PHPUnit_Framework_TestCase } /** - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @param bool $isVde * @param bool $isLoggedIn * @param bool $isConfiguration @@ -178,71 +175,70 @@ class StandardTest extends \PHPUnit_Framework_TestCase * @return \Magento\DesignEditor\Controller\Varien\Router\Standard */ protected function _prepareMocksForTestMatch( - \Magento\Core\Controller\Request\Http $request, + \Magento\App\RequestInterface $request, $isVde, $isLoggedIn, $isConfiguration, array $routers ) { // default mocks - not affected on method functionality - $controllerFactory = $this->getMock( - 'Magento\Core\Controller\Varien\Action\Factory', array(), array(), '', false); $objectManager = $this->getMock('Magento\ObjectManager'); - $filesystem = $this->getMockBuilder('Magento\Filesystem')->disableOriginalConstructor()->getMock(); - - $helper = $this->_getHelperMock($isVde); - $backendSession = $this->_getBackendSessionMock($isVde, $isLoggedIn); - $stateModel = $this->_getStateModelMock($routers); - $configuration = $this->_getConfigurationMock($isVde, $isLoggedIn, $isConfiguration); - $app = $this->getMock('Magento\Core\Model\App', array(), array(), '', false); - $callback = function ($name) use ($helper, $backendSession, $stateModel, $configuration) { + $helperMock = $this->_getHelperMock($isVde); + $backendSessionMock = $this->_getBackendSessionMock($isVde, $isLoggedIn); + $stateMock = $this->_getStateModelMock($routers); + $configurationMock = $this->_getConfigurationMock($isVde, $isLoggedIn, $isConfiguration); + + $callback = function ($name) use ($helperMock, $backendSessionMock, $stateMock, $configurationMock) { switch ($name) { case 'Magento\DesignEditor\Helper\Data': - return $helper; + return $helperMock; case 'Magento\Backend\Model\Auth\Session': - return $backendSession; + return $backendSessionMock; case 'Magento\DesignEditor\Model\State': - return $stateModel; + return $stateMock; case 'Magento\Core\Model\Config': - return $configuration; + return $configurationMock; default: return null; } }; + $objectManager->expects($this->any()) ->method('get') ->will($this->returnCallback($callback)); - $frontController = $this->getMock('Magento\Core\Controller\Varien\Front', - array('applyRewrites', 'getRouters'), array(), '', false - ); + $frontControllerMock = $this->getMock('Magento\App\FrontController', array(), array(), '', false); + $rewriteServiceMock = $this->getMock('Magento\Core\App\Request\RewriteService', array(), array(), '', false); + $routerListMock = $this->getMock('Magento\App\RouterListInterface'); + if ($isVde && $isLoggedIn) { - $frontController->expects($this->once()) + $rewriteServiceMock->expects($this->once()) ->method('applyRewrites') ->with($request); - $frontController->expects($this->once()) + $routerListMock->expects($this->once()) ->method('getRouters') ->will($this->returnValue($routers)); } $router = new \Magento\DesignEditor\Controller\Varien\Router\Standard( - $controllerFactory, + $routerListMock, + $this->getMock('Magento\App\ActionFactory', array(), array(), '', false), $objectManager, - $filesystem, - $app, - $this->getMock('Magento\Core\Model\Config\Scope', array(), array(), '', false), + $this->getMock('Magento\Filesystem', array(), array(), '', false), + $this->getMock('Magento\Core\Model\App', array(), array(), '', false), $this->getMock('Magento\Core\Model\Route\Config', array(), array(), '', false), $this->getMock('Magento\Core\Model\Url\SecurityInfoInterface'), $this->getMock('Magento\Core\Model\Store\Config', array(), array(), '', false), $this->getMock('Magento\Core\Model\Config', array(), array(), '', false), $this->getMock('Magento\Core\Model\Url', array(), array(), '', false), $this->getMock('Magento\Core\Model\StoreManager', array(), array(), '', false), - $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false), + $this->getMock('Magento\App\State', array(), array(), '', false), + $rewriteServiceMock, 'frontend', 'Magento\Core\Controller\Varien\Action', 'vde' ); - $router->setFront($frontController); + $router->setFront($frontControllerMock); return $router; } @@ -266,10 +262,11 @@ class StandardTest extends \PHPUnit_Framework_TestCase */ protected function _getBackendSessionMock($isVde, $isLoggedIn) { - $backendSession = $this->getMock('Magento\Backend\Model\Auth\Session', array('isLoggedIn'), array(), '', false); + $backendSession = $this->getMock('Magento\Backend\Model\Auth\Session', array(), array(), '', false); $backendSession->expects($isVde ? $this->once() : $this->never()) ->method('isLoggedIn') ->will($this->returnValue($isLoggedIn)); + return $backendSession; } @@ -279,13 +276,14 @@ class StandardTest extends \PHPUnit_Framework_TestCase */ protected function _getStateModelMock(array $routers) { - $stateModel = $this->getMock('Magento\DesignEditor\Model\State', array('update'), array(), '', false); + $stateModel = $this->getMock('Magento\DesignEditor\Model\State', array(), array(), '', false); + if (array_key_exists('matched', $routers)) { $stateModel->expects($this->once()) ->method('update') ->with(self::AREA_CODE); - return $stateModel; } + return $stateModel; } @@ -297,7 +295,8 @@ class StandardTest extends \PHPUnit_Framework_TestCase */ protected function _getConfigurationMock($isVde, $isLoggedIn, $isConfiguration) { - $configuration = $this->getMock('Magento\Core\Model\Config', array('getNode'), array(), '', false); + $configuration = $this->getMock('Magento\Core\Model\Config', array(), array(), '', false); + if ($isVde && $isLoggedIn) { $configurationData = null; if ($isConfiguration) { diff --git a/dev/tests/unit/testsuite/Magento/DesignEditor/Helper/DataTest.php b/dev/tests/unit/testsuite/Magento/DesignEditor/Helper/DataTest.php index 559adab82db..2fb06c8c9bc 100644 --- a/dev/tests/unit/testsuite/Magento/DesignEditor/Helper/DataTest.php +++ b/dev/tests/unit/testsuite/Magento/DesignEditor/Helper/DataTest.php @@ -82,8 +82,7 @@ class DataTest extends \PHPUnit_Framework_TestCase public function testIsVdeRequest($path, $expected) { $this->_model = new \Magento\DesignEditor\Helper\Data($this->_context, self::TEST_FRONT_NAME); - $requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array('getOriginalPathInfo'), - array(), '', false); + $requestMock = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); $requestMock->expects($this->once()) ->method('getOriginalPathInfo') ->will($this->returnValue($path)); diff --git a/dev/tests/unit/testsuite/Magento/DesignEditor/Model/StateTest.php b/dev/tests/unit/testsuite/Magento/DesignEditor/Model/StateTest.php index c8dc8bba305..5392e502d01 100644 --- a/dev/tests/unit/testsuite/Magento/DesignEditor/Model/StateTest.php +++ b/dev/tests/unit/testsuite/Magento/DesignEditor/Model/StateTest.php @@ -235,7 +235,7 @@ class StateTest extends \PHPUnit_Framework_TestCase public function testUpdateNavigationMode() { $this->_setAdditionalExpectations(); - $request = $this->getMock('Magento\Core\Controller\Request\Http', array('getPathInfo'), array(), '', false); + $request = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); $request->expects($this->once()) ->method('getPathInfo') diff --git a/dev/tests/unit/testsuite/Magento/DesignEditor/Model/Theme/ContextTest.php b/dev/tests/unit/testsuite/Magento/DesignEditor/Model/Theme/ContextTest.php index cacae1100a8..fd839b93ef8 100644 --- a/dev/tests/unit/testsuite/Magento/DesignEditor/Model/Theme/ContextTest.php +++ b/dev/tests/unit/testsuite/Magento/DesignEditor/Model/Theme/ContextTest.php @@ -245,7 +245,7 @@ class ContextTest extends \PHPUnit_Framework_TestCase { $writersProperty = new \ReflectionProperty($this->_model, '_stagingTheme'); $writersProperty->setAccessible(true); - $themeObject = $this->getMock('Magento\Core\Model\Theme', array(), array(), '', false); + $themeObject = $this->getMock('Magento\View\Design\ThemeInterface', array(), array(), '', false); $writersProperty->setValue($this->_model, $themeObject); return $themeObject; } diff --git a/dev/tests/unit/testsuite/Magento/DesignEditor/Model/Url/NavigationModeTest.php b/dev/tests/unit/testsuite/Magento/DesignEditor/Model/Url/NavigationModeTest.php index ca652ac5f2c..2a287d2d1e0 100644 --- a/dev/tests/unit/testsuite/Magento/DesignEditor/Model/Url/NavigationModeTest.php +++ b/dev/tests/unit/testsuite/Magento/DesignEditor/Model/Url/NavigationModeTest.php @@ -29,13 +29,12 @@ namespace Magento\DesignEditor\Model\Url; class NavigationModeTest extends \PHPUnit_Framework_TestCase { - /**#@+ + /** * Test route params */ const FRONT_NAME = 'vde'; const ROUTE_PATH = 'some-rout-url/page.html'; const BASE_URL = 'http://test.com'; - /**#@-*/ /** * @var \Magento\DesignEditor\Model\Url\NavigationMode @@ -43,14 +42,49 @@ class NavigationModeTest extends \PHPUnit_Framework_TestCase protected $_model; /** - * @var \Magento\DesignEditor\Helper\Data|\PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_designHelperMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_coreHelperMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_requestMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_storeConfigMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_appMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_storeManagerMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_sessionMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_helper; + protected $_routerListMock; /** - * @var \Magento\Core\Helper\Data|\PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_coreData; + protected $_securityInfoMock; /** * @var array @@ -59,41 +93,46 @@ class NavigationModeTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_helper = $this->getMock('Magento\DesignEditor\Helper\Data', array('getFrontName'), - array(), '', false); - $this->_coreData = $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false); - $requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array('getAlias'), array(), '', false); - $requestMock->expects($this->any())->method('getAlias')->will($this->returnValueMap(array( - array('editorMode', 'navigation'), - array('themeId', 1) - ))); - $coreStoreConfig = $this->getMock('Magento\Core\Model\Store\Config', array(), array(), '', false); - $app = $this->getMock('Magento\Core\Model\App', array(), array(), '', false); - $storeManager = $this->getMock('Magento\Core\Model\StoreManager', array(), array(), '', false); - $session = $this->getMock('Magento\Core\Model\Session', array(), array(), '', false); + $this->_designHelperMock = $this->getMock('Magento\DesignEditor\Helper\Data', array(), array(), '', false); + $this->_coreHelperMock = $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false); + $this->_requestMock = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); + $this->_storeConfigMock = $this->getMock('Magento\Core\Model\Store\Config', array(), array(), '', false); + $this->_appMock = $this->getMock('Magento\Core\Model\App', array(), array(), '', false); + $this->_storeManagerMock = $this->getMock('Magento\Core\Model\StoreManager', array(), array(), '', false); + $this->_sessionMock = $this->getMock('Magento\Core\Model\Session', array(), array(), '', false); + $this->_routerListMock = $this->getMock('\Magento\App\RouterListInterface'); + $this->_securityInfoMock = $this->getMock('Magento\Core\Model\Url\SecurityInfoInterface'); + + $this->_requestMock->expects($this->any()) + ->method('getAlias') + ->will($this->returnValueMap(array( + array('editorMode', 'navigation'), + array('themeId', 1)))); $this->_model = new \Magento\DesignEditor\Model\Url\NavigationMode( - $this->getMock('Magento\Core\Model\Url\SecurityInfoInterface'), - $this->_helper, - $coreStoreConfig, - $this->_coreData, - $app, - $storeManager, - $session, + $this->_routerListMock, + $this->_requestMock, + $this->_securityInfoMock, + $this->_designHelperMock, + $this->_storeConfigMock, + $this->_coreHelperMock, + $this->_appMock, + $this->_storeManagerMock, + $this->_sessionMock, $this->_testData ); - $this->_model->setRequest($requestMock); + $this->_model->setRequest($this->_requestMock); } public function testConstruct() { - $this->assertAttributeEquals($this->_helper, '_helper', $this->_model); + $this->assertAttributeEquals($this->_designHelperMock, '_helper', $this->_model); $this->assertAttributeEquals($this->_testData, '_data', $this->_model); } public function testGetRouteUrl() { - $this->_helper->expects($this->any()) + $this->_designHelperMock->expects($this->any()) ->method('getFrontName') ->will($this->returnValue(self::FRONT_NAME)); diff --git a/dev/tests/unit/testsuite/Magento/Directory/Model/Currency/DefaultLocatorTest.php b/dev/tests/unit/testsuite/Magento/Directory/Model/Currency/DefaultLocatorTest.php index 42d4b613417..3f2f0452a9d 100644 --- a/dev/tests/unit/testsuite/Magento/Directory/Model/Currency/DefaultLocatorTest.php +++ b/dev/tests/unit/testsuite/Magento/Directory/Model/Currency/DefaultLocatorTest.php @@ -47,7 +47,7 @@ class DefaultLocatorTest extends \PHPUnit_Framework_TestCase protected function setUp() { $backendData = $this->getMock('Magento\Backend\Helper\Data', array(), array(), '', false); - $this->_requestMock = $this->getMockForAbstractClass('Magento\Core\Controller\Request\Http', + $this->_requestMock = $this->getMockForAbstractClass('Magento\App\RequestInterface', array($backendData), '', false, false, true, array('getParam')); $this->_appMock = $this->getMock('Magento\Core\Model\App', array(), array(), '', false); $this->_model = new \Magento\Directory\Model\Currency\DefaultLocator($this->_appMock); diff --git a/dev/tests/unit/testsuite/Magento/Directory/Model/Resource/Country/CollectionTest.php b/dev/tests/unit/testsuite/Magento/Directory/Model/Resource/Country/CollectionTest.php index 68d01d84473..9744401d95f 100644 --- a/dev/tests/unit/testsuite/Magento/Directory/Model/Resource/Country/CollectionTest.php +++ b/dev/tests/unit/testsuite/Magento/Directory/Model/Resource/Country/CollectionTest.php @@ -52,7 +52,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase ->method('getTable') ->will($this->returnArgument(0)); - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $stringHelper = $this->getMock('Magento\Core\Helper\String', array(), array(), '', false); $localeMock = $this->getMock('Magento\Core\Model\LocaleInterface'); $localeMock->expects($this->any())->method('getCountryTranslation')->will($this->returnArgument(0)); diff --git a/dev/tests/unit/testsuite/Magento/Downloadable/Model/Product/TypeTest.php b/dev/tests/unit/testsuite/Magento/Downloadable/Model/Product/TypeTest.php index 110fa685721..9247b021608 100644 --- a/dev/tests/unit/testsuite/Magento/Downloadable/Model/Product/TypeTest.php +++ b/dev/tests/unit/testsuite/Magento/Downloadable/Model/Product/TypeTest.php @@ -37,7 +37,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase protected function setUp() { $objectHelper = new \Magento\TestFramework\Helper\ObjectManager($this); - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $downloadableFile = $this->getMockBuilder('Magento\Downloadable\Helper\File') ->disableOriginalConstructor()->getMock(); $coreData = $this->getMockBuilder('Magento\Core\Helper\Data')->disableOriginalConstructor()->getMock(); diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Event/Config/ConverterTest.php b/dev/tests/unit/testsuite/Magento/Event/Config/ConverterTest.php similarity index 87% rename from dev/tests/unit/testsuite/Magento/Core/Model/Event/Config/ConverterTest.php rename to dev/tests/unit/testsuite/Magento/Event/Config/ConverterTest.php index 7f184192bca..d29717e7738 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Event/Config/ConverterTest.php +++ b/dev/tests/unit/testsuite/Magento/Event/Config/ConverterTest.php @@ -21,12 +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\Core\Model\Event\Config; +namespace Magento\Event\Config; class ConverterTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Event\Config\Converter + * @var \Magento\Event\Config\Converter */ protected $_model; @@ -42,9 +42,9 @@ class ConverterTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_filePath = __DIR__ . DIRECTORY_SEPARATOR . '/../../_files' . DIRECTORY_SEPARATOR; + $this->_filePath = __DIR__ . DIRECTORY_SEPARATOR . '/_files' . DIRECTORY_SEPARATOR; $this->_source = new \DOMDocument(); - $this->_model = new \Magento\Core\Model\Event\Config\Converter(); + $this->_model = new \Magento\Event\Config\Converter(); } public function testConvert() diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Event/Config/DataTest.php b/dev/tests/unit/testsuite/Magento/Event/Config/DataTest.php similarity index 84% rename from dev/tests/unit/testsuite/Magento/Core/Model/Event/Config/DataTest.php rename to dev/tests/unit/testsuite/Magento/Event/Config/DataTest.php index 533cf907488..22e133e7736 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Event/Config/DataTest.php +++ b/dev/tests/unit/testsuite/Magento/Event/Config/DataTest.php @@ -21,12 +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\Core\Model\Event\Config; +namespace Magento\Event\Config; class DataTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Event\Config\Data + * @var \Magento\Event\Config\Data */ protected $_model; @@ -52,11 +52,11 @@ class DataTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_readerMock = $this->getMock('Magento\Core\Model\Event\Config\Reader', array(), array(), '', false); + $this->_readerMock = $this->getMock('Magento\Event\Config\Reader', array(), array(), '', false); $this->_configScopeMock = $this->getMock('Magento\Config\ScopeInterface'); $this->_cacheMock = $this->getMock('Magento\Config\CacheInterface'); - $this->_appStateMock = $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false); - $this->_model = new \Magento\Core\Model\Event\Config\Data( + $this->_appStateMock = $this->getMock('Magento\App\State', array(), array(), '', false); + $this->_model = new \Magento\Event\Config\Data( $this->_readerMock, $this->_configScopeMock, $this->_cacheMock, diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Event/Config/SchemaLocatorTest.php b/dev/tests/unit/testsuite/Magento/Event/Config/SchemaLocatorTest.php similarity index 64% rename from dev/tests/unit/testsuite/Magento/Core/Model/Event/Config/SchemaLocatorTest.php rename to dev/tests/unit/testsuite/Magento/Event/Config/SchemaLocatorTest.php index 0dd57ca69a8..426c5308ca5 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Event/Config/SchemaLocatorTest.php +++ b/dev/tests/unit/testsuite/Magento/Event/Config/SchemaLocatorTest.php @@ -21,7 +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\Core\Model\Event\Config; +namespace Magento\Event\Config; class SchemaLocatorTest extends \PHPUnit_Framework_TestCase { @@ -31,27 +31,27 @@ class SchemaLocatorTest extends \PHPUnit_Framework_TestCase protected $_moduleReaderMock; /** - * @var \Magento\Core\Model\Event\Config\SchemaLocator + * @var \Magento\Event\Config\SchemaLocator */ protected $_model; protected function setUp() { - $this->_moduleReaderMock = $this->getMock( - 'Magento\Core\Model\Config\Modules\Reader', array(), array(), '', false - ); - $this->_moduleReaderMock->expects($this->once()) - ->method('getModuleDir')->with('etc', 'Magento_Core')->will($this->returnValue('schema_dir')); - $this->_model = new \Magento\Core\Model\Event\Config\SchemaLocator($this->_moduleReaderMock); + $this->_model = new \Magento\Event\Config\SchemaLocator(); } public function testGetSchema() { - $this->assertEquals('schema_dir' . DIRECTORY_SEPARATOR . 'events.xsd', $this->_model->getSchema()); + $expected = BP . str_replace('\\', DIRECTORY_SEPARATOR, '\lib\Magento\Event\etc\events.xsd'); + $actual = $this->_model->getSchema(); + $this->assertEquals($expected, $actual); + } public function testGetPerFileSchema() { - $this->assertEquals(null, $this->_model->getPerFileSchema()); + $actual = $this->_model->getPerFileSchema(); + $expected = BP . str_replace('\\', DIRECTORY_SEPARATOR, '\lib\Magento\Event\etc\events.xsd'); + $this->assertEquals($expected, $actual); } } diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Event/Config/XsdTest.php b/dev/tests/unit/testsuite/Magento/Event/Config/XsdTest.php similarity index 94% rename from dev/tests/unit/testsuite/Magento/Core/Model/Event/Config/XsdTest.php rename to dev/tests/unit/testsuite/Magento/Event/Config/XsdTest.php index 91fc6e45fef..7ae0d7f9a83 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Event/Config/XsdTest.php +++ b/dev/tests/unit/testsuite/Magento/Event/Config/XsdTest.php @@ -21,7 +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\Core\Model\Event\Config; +namespace Magento\Event\Config; class XsdTest extends \PHPUnit_Framework_TestCase { @@ -38,7 +38,7 @@ class XsdTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_xsdSchema = BP . '/app/code/Magento/Core/etc/events.xsd'; + $this->_xsdSchema = BP . '/lib/Magento/Event/etc/events.xsd'; $this->_xsdValidator = new \Magento\TestFramework\Utility\XsdValidator(); } diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/_files/event_config.php b/dev/tests/unit/testsuite/Magento/Event/Config/_files/event_config.php similarity index 100% rename from dev/tests/unit/testsuite/Magento/Core/Model/_files/event_config.php rename to dev/tests/unit/testsuite/Magento/Event/Config/_files/event_config.php diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/_files/event_config.xml b/dev/tests/unit/testsuite/Magento/Event/Config/_files/event_config.xml similarity index 100% rename from dev/tests/unit/testsuite/Magento/Core/Model/_files/event_config.xml rename to dev/tests/unit/testsuite/Magento/Event/Config/_files/event_config.xml diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/_files/event_invalid_config.xml b/dev/tests/unit/testsuite/Magento/Event/Config/_files/event_invalid_config.xml similarity index 100% rename from dev/tests/unit/testsuite/Magento/Core/Model/_files/event_invalid_config.xml rename to dev/tests/unit/testsuite/Magento/Event/Config/_files/event_invalid_config.xml diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Event/Config/_files/invalidEventsXmlArray.php b/dev/tests/unit/testsuite/Magento/Event/Config/_files/invalidEventsXmlArray.php similarity index 100% rename from dev/tests/unit/testsuite/Magento/Core/Model/Event/Config/_files/invalidEventsXmlArray.php rename to dev/tests/unit/testsuite/Magento/Event/Config/_files/invalidEventsXmlArray.php diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Event/Config/_files/valid_events.xml b/dev/tests/unit/testsuite/Magento/Event/Config/_files/valid_events.xml similarity index 100% rename from dev/tests/unit/testsuite/Magento/Core/Model/Event/Config/_files/valid_events.xml rename to dev/tests/unit/testsuite/Magento/Event/Config/_files/valid_events.xml diff --git a/dev/tests/unit/testsuite/Magento/Event/EventFactoryTest.php b/dev/tests/unit/testsuite/Magento/Event/EventFactoryTest.php new file mode 100644 index 00000000000..9b104b2508f --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/Event/EventFactoryTest.php @@ -0,0 +1,59 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Event; + +class EventFactoryTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\EventFactory + */ + protected $_model; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_objectManagerMock; + + /** + * @var \Magento\Event + */ + protected $_expectedObject; + + protected function setUp() + { + $this->_objectManagerMock = $this->getMock('Magento\ObjectManager'); + $this->_model = new \Magento\EventFactory($this->_objectManagerMock); + $this->_expectedObject = $this->getMockBuilder('Magento\Event')->getMock(); + } + + public function testCreate() + { + $arguments = array('property' => 'value'); + $this->_objectManagerMock->expects($this->once()) + ->method('create') + ->with('Magento\Event', $arguments)->will($this->returnValue($this->_expectedObject)); + + $this->assertEquals($this->_expectedObject, $this->_model->create($arguments)); + } +} \ No newline at end of file diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Event/Invoker/InvokerDefaultTest.php b/dev/tests/unit/testsuite/Magento/Event/Invoker/InvokerDefaultTest.php similarity index 90% rename from dev/tests/unit/testsuite/Magento/Core/Model/Event/Invoker/InvokerDefaultTest.php rename to dev/tests/unit/testsuite/Magento/Event/Invoker/InvokerDefaultTest.php index d7225b112c7..f93497fdfb9 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Event/Invoker/InvokerDefaultTest.php +++ b/dev/tests/unit/testsuite/Magento/Event/Invoker/InvokerDefaultTest.php @@ -21,7 +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\Core\Model\Event\Invoker; +namespace Magento\Event\Invoker; class InvokerDefaultTest extends \PHPUnit_Framework_TestCase { @@ -46,21 +46,21 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase protected $_appStateMock; /** - * @var \Magento\Core\Model\Event\Invoker\InvokerDefault + * @var \Magento\Event\Invoker\InvokerDefault */ protected $_invokerDefault; protected function setUp() { $this->_observerFactoryMock = $this->getMock( - 'Magento\Core\Model\ObserverFactory', array(), array(), '', false + 'Magento\Event\ObserverFactory', array(), array(), '', false ); $this->_observerMock = $this->getMock('Magento\Event\Observer', array(), array(), '', false); $this->_listenerMock = $this->getMock('Magento_Some_Model_Observer_Some', array('method_name'), array(), '', false); - $this->_appStateMock = $this->getMock('Magento\Core\Model\App\State', array(), array(), '', false); + $this->_appStateMock = $this->getMock('Magento\App\State', array(), array(), '', false); - $this->_invokerDefault = new \Magento\Core\Model\Event\Invoker\InvokerDefault( + $this->_invokerDefault = new \Magento\Event\Invoker\InvokerDefault( $this->_observerFactoryMock, $this->_appStateMock ); @@ -112,7 +112,7 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase $this->_observerFactoryMock->expects($this->any())->method('get')->with('class_name') ->will($this->returnValue($this->_listenerMock)); $this->_appStateMock->expects($this->once())->method('getMode') - ->will($this->returnValue(\Magento\Core\Model\App\State::MODE_DEVELOPER)); + ->will($this->returnValue(\Magento\App\State::MODE_DEVELOPER)); $this->_invokerDefault->dispatch( array( @@ -136,7 +136,7 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase $this->_observerFactoryMock->expects($this->any())->method('get')->with('class_name') ->will($this->returnValue($this->_listenerMock)); $this->_appStateMock->expects($this->once())->method('getMode') - ->will($this->returnValue(\Magento\Core\Model\App\State::MODE_PRODUCTION)); + ->will($this->returnValue(\Magento\App\State::MODE_PRODUCTION)); $this->_invokerDefault->dispatch( array( diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Event/ManagerStub.php b/dev/tests/unit/testsuite/Magento/Event/ManagerStub.php similarity index 93% rename from dev/tests/unit/testsuite/Magento/Core/Model/Event/ManagerStub.php rename to dev/tests/unit/testsuite/Magento/Event/ManagerStub.php index 91c15c78dbd..acfe885c81b 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Event/ManagerStub.php +++ b/dev/tests/unit/testsuite/Magento/Event/ManagerStub.php @@ -26,9 +26,9 @@ * Event manager stub */ -namespace Magento\Core\Model\Event; +namespace Magento\Event; -class ManagerStub extends \Magento\Core\Model\Event\Manager +class ManagerStub extends \Magento\Event\ManagerInterface { /** * Stub dispatch event diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Event/ManagerTest.php b/dev/tests/unit/testsuite/Magento/Event/ManagerTest.php similarity index 76% rename from dev/tests/unit/testsuite/Magento/Core/Model/Event/ManagerTest.php rename to dev/tests/unit/testsuite/Magento/Event/ManagerTest.php index aa69a927460..8186551d630 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Event/ManagerTest.php +++ b/dev/tests/unit/testsuite/Magento/Event/ManagerTest.php @@ -21,32 +21,32 @@ * @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\Core\Model\Event; +namespace Magento\Event; class ManagerTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Model\Event\InvokerInterface|PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_invoker; /** - * @var \Magento\EventFactory|PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_eventFactory; /** - * @var \Magento\Event|PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_event; /** - * @var \Magento\Event\ObserverFactory|PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_observerFactory; + protected $_wrapperFactory; /** - * @var \Magento\Event\Observer|PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_observer; @@ -56,22 +56,22 @@ class ManagerTest extends \PHPUnit_Framework_TestCase protected $_eventConfigMock; /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\Manager */ protected $_eventManager; protected function setUp() { - $this->_invoker = $this->getMock('Magento\Core\Model\Event\InvokerInterface'); + $this->_invoker = $this->getMock('Magento\Event\InvokerInterface'); $this->_eventFactory = $this->getMock('Magento\EventFactory', array('create'), array(), '', false); $this->_event = $this->getMock('Magento\Event', array(), array(), '', false); - $this->_observerFactory = $this->getMock('Magento\Event\ObserverFactory', array('create'), array(), '', + $this->_wrapperFactory = $this->getMock('Magento\Event\WrapperFactory', array(), array(), '', false); $this->_observer = $this->getMock('Magento\Event\Observer', array(), array(), '', false); - $this->_eventConfigMock = $this->getMock('Magento\Core\Model\Event\ConfigInterface'); + $this->_eventConfigMock = $this->getMock('Magento\Event\ConfigInterface'); - $this->_eventManager = new \Magento\Core\Model\Event\Manager( - $this->_invoker, $this->_eventConfigMock, $this->_eventFactory, $this->_observerFactory + $this->_eventManager = new \Magento\Event\Manager( + $this->_invoker, $this->_eventConfigMock, $this->_eventFactory, $this->_wrapperFactory ); } @@ -85,7 +85,7 @@ class ManagerTest extends \PHPUnit_Framework_TestCase $this->_observer->expects($this->once())->method('setData') ->with(array_merge(array('event' => $this->_event), $data))->will($this->returnSelf()); - $this->_observerFactory->expects($this->once())->method('create') + $this->_wrapperFactory->expects($this->once())->method('create') ->will($this->returnValue($this->_observer)); $this->_invoker->expects($this->once())->method('dispatch')->with(array( 'instance' => 'class', diff --git a/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/Block/Category/TabTest.php b/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/Block/Category/TabTest.php index 6a88bcc3bf8..03ac2a20ec4 100644 --- a/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/Block/Category/TabTest.php +++ b/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/Block/Category/TabTest.php @@ -78,7 +78,7 @@ class TabTest extends \PHPUnit_Framework_TestCase { $this->_helperMock->expects($this->once())->method('isGoogleExperimentActive')->will($this->returnValue(true)); - $block = $this->getMock('Magento\Core\Block', array(), array(), '', false); + $block = $this->getMock('Magento\View\Element\BlockInterface', array(), array(), '', false); $block->expects($this->once())->method('toHtml')->will($this->returnValue('generated html')); $this->_layoutMock->expects($this->once())->method('createBlock')->with( diff --git a/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/Category/SaveTest.php b/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/Category/SaveTest.php index cfdbbaf0a35..4c95be6e5dd 100644 --- a/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/Category/SaveTest.php +++ b/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/Category/SaveTest.php @@ -72,7 +72,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase $this->_eventObserverMock = $this->getMock('Magento\Event\Observer', array(), array(), '', false); $this->_eventObserverMock->expects($this->once())->method('getEvent')->will($this->returnValue($event)); $this->_codeMock = $this->getMock('Magento\GoogleOptimizer\Model\Code', array(), array(), '', false); - $this->_requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $this->_requestMock = $this->getMock('Magento\App\RequestInterface', array(), array(), '', false); $objectManagerHelper = new \Magento\TestFramework\Helper\ObjectManager($this); $this->_modelObserver = $objectManagerHelper->getObject( diff --git a/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/CmsPage/DeleteTest.php b/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/CmsPage/DeleteTest.php index 68c7e3ff50f..23dce075378 100644 --- a/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/CmsPage/DeleteTest.php +++ b/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/CmsPage/DeleteTest.php @@ -43,7 +43,7 @@ class DeleteTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_codeMock = $this->getMock('Magento\GoogleOptimizer\Model\Code', array(), array(), '', false); - $this->_requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $this->_requestMock = $this->getMock('Magento\App\RequestInterface', array(), array(), '', false); $page = $this->getMock('Magento\Cms\Model\Page', array(), array(), '', false); $page->expects($this->once())->method('getId')->will($this->returnValue(3)); diff --git a/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/CmsPage/SaveTest.php b/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/CmsPage/SaveTest.php index fe3d3a444b9..9b43082687e 100644 --- a/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/CmsPage/SaveTest.php +++ b/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/CmsPage/SaveTest.php @@ -64,7 +64,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase { $this->_helperMock = $this->getMock('Magento\GoogleOptimizer\Helper\Data', array(), array(), '', false); $this->_codeMock = $this->getMock('Magento\GoogleOptimizer\Model\Code', array(), array(), '', false); - $this->_requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $this->_requestMock = $this->getMock('Magento\App\RequestInterface', array(), array(), '', false); $this->_pageMock = $this->getMock('Magento\Cms\Model\Page', array(), array(), '', false); $event = $this->getMock('Magento\Event', array('getObject'), array(), '', false); diff --git a/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/Product/SaveTest.php b/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/Product/SaveTest.php index 6329b470160..787e35895ed 100644 --- a/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/Product/SaveTest.php +++ b/dev/tests/unit/testsuite/Magento/GoogleOptimizer/Model/Observer/Product/SaveTest.php @@ -72,7 +72,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase $this->_eventObserverMock = $this->getMock('Magento\Event\Observer', array(), array(), '', false); $this->_eventObserverMock->expects($this->once())->method('getEvent')->will($this->returnValue($event)); $this->_codeMock = $this->getMock('Magento\GoogleOptimizer\Model\Code', array(), array(), '', false); - $this->_requestMock = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $this->_requestMock = $this->getMock('Magento\App\RequestInterface', array(), array(), '', false); $objectManagerHelper = new \Magento\TestFramework\Helper\ObjectManager($this); $this->_modelObserver = $objectManagerHelper->getObject( diff --git a/dev/tests/unit/testsuite/Magento/GoogleShopping/Block/SiteVerificationTest.php b/dev/tests/unit/testsuite/Magento/GoogleShopping/Block/SiteVerificationTest.php index e61115f5950..c6a51c5738f 100644 --- a/dev/tests/unit/testsuite/Magento/GoogleShopping/Block/SiteVerificationTest.php +++ b/dev/tests/unit/testsuite/Magento/GoogleShopping/Block/SiteVerificationTest.php @@ -46,7 +46,7 @@ class SiteVerificationTest extends \PHPUnit_Framework_TestCase $layout->expects($this->any()) ->method('helper')->with('Magento\Core\Helper\Data')->will($this->returnValue($coreHelper)); $context = $objectHelper->getObject('Magento\Core\Block\Context', array( - 'eventManager' => $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false), + 'eventManager' => $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false), 'layout' => $layout, 'helperFactory' => $helperFactory )); diff --git a/dev/tests/unit/testsuite/Magento/Http/Handler/CompositeTest.php b/dev/tests/unit/testsuite/Magento/Http/Handler/CompositeTest.php deleted file mode 100644 index 0fa163afdfe..00000000000 --- a/dev/tests/unit/testsuite/Magento/Http/Handler/CompositeTest.php +++ /dev/null @@ -1,116 +0,0 @@ -<?php -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\Http\Handler; - -class CompositeTest extends \PHPUnit_Framework_TestCase -{ - /** - * @var \Magento\HTTP\Handler\Composite - */ - protected $_model; - - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $_requestMock; - - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $_responseMock; - - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $_handlerFactoryMock; - - protected function setUp() - { - $handlers = array( - 'app' => array( - 'sortOrder' => 50, - 'class' => 'Class_App_Handler', - ), - 'fpc' => array( - 'sortOrder' => 20, - 'class' => 'Class_Fpc_Handler', - ), - ); - $this->_requestMock = $this->getMock('Zend_Controller_Request_Http', array(), array(), '', false); - $this->_responseMock = $this->getMock('Zend_Controller_Response_Http', array(), array(), '', false); - $this->_handlerFactoryMock = $this->getMock('Magento\HTTP\HandlerFactory', array(), array(), '', false, false); - $this->_handlerMock = $this->getMock('Magento\HTTP\HandlerInterface', array(), array(), '', false, false); - $this->_model = new \Magento\HTTP\Handler\Composite($this->_handlerFactoryMock, $handlers); - } - - protected function tearDown() - { - unset($this->_requestMock); - unset($this->_responseMock); - unset($this->_handlerFactoryMock); - unset($this->_model); - } - - public function testHandleBreaksCycleIfRequestIsDispatched() - { - $this->_handlerFactoryMock->expects($this->once()) - ->method('create')->with('Class_Fpc_Handler')->will($this->returnValue($this->_handlerMock)); - $this->_handlerMock->expects($this->once()) - ->method('handle')->with($this->_requestMock, $this->_responseMock); - $this->_requestMock->expects($this->once())->method('isDispatched')->will($this->returnValue(true)); - - $this->_model->handle($this->_requestMock, $this->_responseMock); - } - - public function testSorting() - { - $handlers = array( - 'app' => array( - 'sortOrder' => 50, - 'class' => 'Class_App_Handler', - ), - 'fpc' => array( - 'sortOrder' => 20, - 'class' => 'Class_Fpc_Handler', - ), - ); - - $model = new \Magento\HTTP\Handler\Composite($this->_handlerFactoryMock, $handlers); - - $this->_handlerMock->expects($this->exactly(2))->method('handle') - ->with($this->_requestMock, $this->_responseMock); - - $this->_handlerFactoryMock->expects($this->at(0)) - ->method('create') - ->with('Class_Fpc_Handler') - ->will($this->returnValue($this->_handlerMock)); - - $this->_handlerFactoryMock->expects($this->at(1)) - ->method('create') - ->with('Class_App_Handler') - ->will($this->returnValue($this->_handlerMock)); - - $model->handle($this->_requestMock, $this->_responseMock); - } -} diff --git a/dev/tests/unit/testsuite/Magento/ImportExport/Model/ExportTest.php b/dev/tests/unit/testsuite/Magento/ImportExport/Model/ExportTest.php index 6612003e706..e0c97211a15 100644 --- a/dev/tests/unit/testsuite/Magento/ImportExport/Model/ExportTest.php +++ b/dev/tests/unit/testsuite/Magento/ImportExport/Model/ExportTest.php @@ -76,7 +76,7 @@ class ExportTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue($this->_exportFileExtension)); $logger = $this->getMock('Magento\Core\Model\Logger', array(), array(), '', false); - $dir = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $dir = $this->getMock('Magento\App\Dir', array(), array(), '', false); $adapterFactory = $this->getMock('Magento\Core\Model\Log\AdapterFactory', array(), array(), '', false); $entityFactory = $this->getMock( 'Magento\ImportExport\Model\Export\Entity\Factory', array(), array(), '', false);; diff --git a/dev/tests/unit/testsuite/Magento/Index/Model/Lock/StorageTest.php b/dev/tests/unit/testsuite/Magento/Index/Model/Lock/StorageTest.php index 7249deac661..da7eed6f5fa 100644 --- a/dev/tests/unit/testsuite/Magento/Index/Model/Lock/StorageTest.php +++ b/dev/tests/unit/testsuite/Magento/Index/Model/Lock/StorageTest.php @@ -42,10 +42,10 @@ class StorageTest extends \PHPUnit_Framework_TestCase public function testGetFile() { - $this->_dirsMock = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false, false); + $this->_dirsMock = $this->getMock('Magento\App\Dir', array(), array(), '', false, false); $this->_dirsMock->expects($this->any()) ->method('getDir') - ->with(\Magento\Core\Model\Dir::VAR_DIR) + ->with(\Magento\App\Dir::VAR_DIR) ->will($this->returnValue(__DIR__ . DIRECTORY_SEPARATOR. 'var')); $fileModel = $this->getMock('Magento\Index\Model\Process\File', diff --git a/dev/tests/unit/testsuite/Magento/Install/Model/EntryPoint/ConsoleTest.php b/dev/tests/unit/testsuite/Magento/Install/Model/EntryPoint/ConsoleTest.php index d40f436adfa..6666deaa48f 100644 --- a/dev/tests/unit/testsuite/Magento/Install/Model/EntryPoint/ConsoleTest.php +++ b/dev/tests/unit/testsuite/Magento/Install/Model/EntryPoint/ConsoleTest.php @@ -47,7 +47,7 @@ class ConsoleTest extends \PHPUnit_Framework_TestCase protected $_installerMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Core\Model\Dir\Verification + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\App\Dir\Verification */ protected $_dirVerifierMock; @@ -61,7 +61,7 @@ class ConsoleTest extends \PHPUnit_Framework_TestCase $this->_objectManagerMock = $this->getMock('Magento\ObjectManager'); $this->_configMock = $this->getMock('Magento\Core\Model\Config\Primary', array(), array(), '', false); $this->_installerMock = $this->getMock('Magento\Install\Model\Installer\Console', array(), array(), '', false); - $this->_dirVerifierMock = $this->getMock('Magento\Core\Model\Dir\Verification', array(), array(), '', false); + $this->_dirVerifierMock = $this->getMock('Magento\App\Dir\Verification', array(), array(), '', false); $this->_outputMock = $this->getMock('Magento\Install\Model\EntryPoint\Output', array(), array(), '', false); $this->_objectManagerMock->expects($this->once())->method('create') diff --git a/dev/tests/unit/testsuite/Magento/Install/Model/EntryPoint/UpgradeTest.php b/dev/tests/unit/testsuite/Magento/Install/Model/EntryPoint/UpgradeTest.php index 6b5171be3a8..2affff579db 100644 --- a/dev/tests/unit/testsuite/Magento/Install/Model/EntryPoint/UpgradeTest.php +++ b/dev/tests/unit/testsuite/Magento/Install/Model/EntryPoint/UpgradeTest.php @@ -44,7 +44,7 @@ class UpgradeTest extends \PHPUnit_Framework_TestCase { $this->_config = $this->getMock('Magento\Core\Model\Config\Primary', array('getParam'), array(), '', false); - $dirVerification = $this->getMock('Magento\Core\Model\Dir\Verification', array(), array(), '', false); + $dirVerification = $this->getMock('Magento\App\Dir\Verification', array(), array(), '', false); $cacheFrontend = $this->getMockForAbstractClass('Magento\Cache\FrontendInterface'); $cacheFrontend->expects($this->once())->method('clean')->with('all', array()); @@ -57,7 +57,7 @@ class UpgradeTest extends \PHPUnit_Framework_TestCase $cacheFrontendPool->expects($this->once())->method('current')->will($this->returnValue($cacheFrontend)); $update = $this->getMock( - 'Magento\Core\Model\Db\Updater', array('updateScheme', 'updateData'), array(), '', false); + 'Magento\App\Updater', array('updateScheme', 'updateData'), array(), '', false); $update->expects($this->once())->method('updateScheme'); $update->expects($this->once())->method('updateData'); @@ -68,10 +68,10 @@ class UpgradeTest extends \PHPUnit_Framework_TestCase $this->_objectManager = $this->getMock('Magento\ObjectManager'); $this->_objectManager->expects($this->any())->method('get')->will($this->returnValueMap(array( array('Magento\Core\Model\Cache\Frontend\Pool', $cacheFrontendPool), - array('Magento\Core\Model\Db\Updater', $update), + array('Magento\App\Updater', $update), array('Magento\Core\Model\Config\Primary', $this->_config), array('Magento\Index\Model\Indexer', $this->_indexer), - array('Magento\Core\Model\Dir\Verification', $dirVerification), + array('Magento\App\Dir\Verification', $dirVerification), ))); } diff --git a/dev/tests/unit/testsuite/Magento/Install/Model/Installer/ConfigTest.php b/dev/tests/unit/testsuite/Magento/Install/Model/Installer/ConfigTest.php index 8b191267460..e54e9d9fee9 100644 --- a/dev/tests/unit/testsuite/Magento/Install/Model/Installer/ConfigTest.php +++ b/dev/tests/unit/testsuite/Magento/Install/Model/Installer/ConfigTest.php @@ -51,8 +51,8 @@ class ConfigTest extends \PHPUnit_Framework_TestCase $this->_model = new \Magento\Install\Model\Installer\Config( $this->getMock('Magento\Install\Model\Installer', array(), array(), '', false), - $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false), - new \Magento\Core\Model\Dir(__DIR__, array(), array(\Magento\Core\Model\Dir::CONFIG => TESTS_TEMP_DIR)), + $this->getMock('Magento\App\RequestInterface', array(), array(), '', false), + new \Magento\App\Dir(__DIR__, array(), array(\Magento\App\Dir::CONFIG => TESTS_TEMP_DIR)), $this->_filesystemMock, $this->getMock('Magento\Core\Model\StoreManagerInterface', array(), array(), '', false) ); diff --git a/dev/tests/unit/testsuite/Magento/Log/Model/ShellTest.php b/dev/tests/unit/testsuite/Magento/Log/Model/ShellTest.php index 89956eae02b..7838d12cf6e 100644 --- a/dev/tests/unit/testsuite/Magento/Log/Model/ShellTest.php +++ b/dev/tests/unit/testsuite/Magento/Log/Model/ShellTest.php @@ -44,7 +44,7 @@ class ShellTest extends \PHPUnit_Framework_TestCase { $this->_factoryMock = $this->getMock('Magento\Log\Model\Shell\Command\Factory', array(), array(), '', false); $filesystemMock = $this->getMock('Magento\Filesystem', array(), array(), '', false); - $dirMock = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $dirMock = $this->getMock('Magento\App\Dir', array(), array(), '', false); $this->_model = $this->getMock('Magento\Log\Model\Shell', array('_applyPhpVariables'), array($this->_factoryMock, $filesystemMock, 'entryPoint.php', $dirMock) diff --git a/dev/tests/unit/testsuite/Magento/Newsletter/Model/TemplateTest.php b/dev/tests/unit/testsuite/Magento/Newsletter/Model/TemplateTest.php index 8e1bf2626ab..af9ea36720b 100644 --- a/dev/tests/unit/testsuite/Magento/Newsletter/Model/TemplateTest.php +++ b/dev/tests/unit/testsuite/Magento/Newsletter/Model/TemplateTest.php @@ -32,7 +32,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase */ public function testGetProcessedTemplate($isSingleStore) { - $design = $this->getMock('Magento\Core\Model\View\DesignInterface'); + $design = $this->getMock('Magento\View\DesignInterface'); $context = $this->getMock('Magento\Core\Model\Context', array(), array(), '', false); $registry = $this->getMock('Magento\Core\Model\Registry', array(), array(), '', false); @@ -41,7 +41,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase ->method('hasSingleStore') ->will($this->returnValue($isSingleStore)); - $request = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $request = $this->getMock('Magento\App\RequestInterface', array(), array(), '', false); if ($isSingleStore) { $store = $this->getMock('Magento\Core\Model\Store', array(), array(), '', false); diff --git a/dev/tests/unit/testsuite/Magento/Oauth/Helper/DataTest.php b/dev/tests/unit/testsuite/Magento/Oauth/Helper/DataTest.php index cc6535338c7..c2c0996e0e9 100644 --- a/dev/tests/unit/testsuite/Magento/Oauth/Helper/DataTest.php +++ b/dev/tests/unit/testsuite/Magento/Oauth/Helper/DataTest.php @@ -67,27 +67,27 @@ class DataTest extends \PHPUnit_Framework_TestCase return [ [ new \Magento\Oauth\Exception('msg', \Magento\Oauth\Service\OauthV1Interface::ERR_VERSION_REJECTED), - new \Zend_Controller_Response_Http(), + new \Magento\App\Response\Http(), ['version_rejected&message=msg', \Magento\Oauth\Helper\Data::HTTP_BAD_REQUEST] ], [ new \Magento\Oauth\Exception('msg', 255), - new \Zend_Controller_Response_Http(), + new \Magento\App\Response\Http(), ['unknown_problem&code=255&message=msg', \Magento\Oauth\Helper\Data::HTTP_INTERNAL_ERROR] ], [ new \Magento\Oauth\Exception('param', \Magento\Oauth\Service\OauthV1Interface::ERR_PARAMETER_ABSENT), - new \Zend_Controller_Response_Http(), + new \Magento\App\Response\Http(), ['parameter_absent&oauth_parameters_absent=param', \Magento\Oauth\Helper\Data::HTTP_BAD_REQUEST] ], [ new \Exception('msg'), - new \Zend_Controller_Response_Http(), + new \Magento\App\Response\Http(), ['internal_error&message=msg', \Magento\Oauth\Helper\Data::HTTP_INTERNAL_ERROR] ], [ new \Exception(), - new \Zend_Controller_Response_Http(), + new \Magento\App\Response\Http(), ['internal_error&message=empty_message', \Magento\Oauth\Helper\Data::HTTP_INTERNAL_ERROR] ], ]; diff --git a/dev/tests/unit/testsuite/Magento/Oauth/Helper/ServiceTest.php b/dev/tests/unit/testsuite/Magento/Oauth/Helper/ServiceTest.php index de3d67e3ed4..1070c201b3f 100644 --- a/dev/tests/unit/testsuite/Magento/Oauth/Helper/ServiceTest.php +++ b/dev/tests/unit/testsuite/Magento/Oauth/Helper/ServiceTest.php @@ -53,14 +53,14 @@ class ServiceTest extends \PHPUnit_Framework_TestCase $this->_coreHelper = new \Magento\Core\Helper\Data( $this->_coreContextMock, - $this->getMockBuilder('Magento\Core\Model\Event\Manager')->disableOriginalConstructor()->getMock(), + $this->getMockBuilder('Magento\Event\ManagerInterface')->disableOriginalConstructor()->getMock(), $this->getMockBuilder('Magento\Core\Helper\Http')->disableOriginalConstructor()->getMock(), $this->getMockBuilder('Magento\Core\Model\Config')->disableOriginalConstructor()->getMock(), $this->_storeConfigMock, $this->getMockBuilder('Magento\Core\Model\StoreManager')->disableOriginalConstructor()->getMock(), $this->getMockBuilder('Magento\Core\Model\Locale')->disableOriginalConstructor()->getMock(), $this->getMockBuilder('Magento\Core\Model\Date')->disableOriginalConstructor()->getMock(), - $this->getMockBuilder('Magento\Core\Model\App\State')->disableOriginalConstructor()->getMock(), + $this->getMockBuilder('Magento\App\State')->disableOriginalConstructor()->getMock(), $this->_encryptorMock ); diff --git a/dev/tests/unit/testsuite/Magento/ObjectManager/Config/Mapper/_files/mapped_simple_di_config.php b/dev/tests/unit/testsuite/Magento/ObjectManager/Config/Mapper/_files/mapped_simple_di_config.php index 02c0c2eec16..ad1ae3d1340 100644 --- a/dev/tests/unit/testsuite/Magento/ObjectManager/Config/Mapper/_files/mapped_simple_di_config.php +++ b/dev/tests/unit/testsuite/Magento/ObjectManager/Config/Mapper/_files/mapped_simple_di_config.php @@ -23,11 +23,11 @@ */ return array( 'preferences' => array( - 'Magento\Core\Model\Db\UpdaterInterface' => 'Magento\Core\Model\Db\Updater', + 'Magento\App\UpdaterInterface' => 'Magento\App\Updater', 'Magento\Core\Model\AppInterface' => 'Magento\Core\Model\App\Proxy', ), - 'Magento\Core\Model\App\State' => array( + 'Magento\App\State' => array( 'parameters' => array( 'mode' => array( 'argument' => 'MAGE_MODE', diff --git a/dev/tests/unit/testsuite/Magento/ObjectManager/Config/Mapper/_files/simple_di_config.xml b/dev/tests/unit/testsuite/Magento/ObjectManager/Config/Mapper/_files/simple_di_config.xml index 4d937a8cd0d..e2e2fb34d8e 100644 --- a/dev/tests/unit/testsuite/Magento/ObjectManager/Config/Mapper/_files/simple_di_config.xml +++ b/dev/tests/unit/testsuite/Magento/ObjectManager/Config/Mapper/_files/simple_di_config.xml @@ -25,9 +25,9 @@ --> <config> <!-- Comment within root node --> - <preference for="Magento\Core\Model\Db\UpdaterInterface" type="Magento\Core\Model\Db\Updater" /> + <preference for="Magento\App\UpdaterInterface" type="Magento\App\Updater" /> <preference for="Magento\Core\Model\AppInterface" type="Magento\Core\Model\App\Proxy" /> - <type name="Magento\Core\Model\App\State"> + <type name="Magento\App\State"> <param name="mode"> <value type="argument">Magento\Core\Model\App::PARAM_MODE</value> </param> diff --git a/dev/tests/unit/testsuite/Magento/Ogone/Model/ApiTest.php b/dev/tests/unit/testsuite/Magento/Ogone/Model/ApiTest.php index 0e16a2f6443..6cc150f7e37 100644 --- a/dev/tests/unit/testsuite/Magento/Ogone/Model/ApiTest.php +++ b/dev/tests/unit/testsuite/Magento/Ogone/Model/ApiTest.php @@ -44,8 +44,8 @@ class ApiTest extends \PHPUnit_Framework_TestCase // Test protected method via reflection $storeManager = $this->getMock('Magento\Core\Model\StoreManagerInterface', array(), array(), '', false); $locale = $this->getMock('Magento\Core\Model\LocaleInterface', array(), array(), '', false); - $urlBuilder = $this->getMock('Magento\Core\Model\UrlInterface', array(), array(), '', false); - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $urlBuilder = $this->getMock('Magento\UrlInterface', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $coreString = $this->getMock('Magento\Core\Helper\String', array(), array(), '', false); $config = $this->getMock('Magento\Ogone\Model\Config', array(), array(), '', false); $paymentDataMock = $this->getMock('Magento\Payment\Helper\Data', array(), array(), '', false); diff --git a/dev/tests/unit/testsuite/Magento/Page/Block/Html/HeaderTest.php b/dev/tests/unit/testsuite/Magento/Page/Block/Html/HeaderTest.php index 9b6e523b4d8..6e910bb119e 100644 --- a/dev/tests/unit/testsuite/Magento/Page/Block/Html/HeaderTest.php +++ b/dev/tests/unit/testsuite/Magento/Page/Block/Html/HeaderTest.php @@ -39,7 +39,7 @@ class HeaderTest extends \PHPUnit_Framework_TestCase ->method('getConfig') ->will($this->returnValue('default/image.gif')); - $urlBuilder = $this->getMock('Magento\Core\Model\UrlInterface'); + $urlBuilder = $this->getMock('Magento\UrlInterface'); $urlBuilder->expects($this->once()) ->method('getBaseUrl') ->will($this->returnValue('http://localhost/pub/media/')); @@ -56,10 +56,10 @@ class HeaderTest extends \PHPUnit_Framework_TestCase ->method('get') ->will($this->returnValue($helper)); - $dirsMock = $this->getMock('Magento\Core\Model\Dir', array('getDir'), array(), '', false); + $dirsMock = $this->getMock('Magento\App\Dir', array('getDir'), array(), '', false); $dirsMock->expects($this->any()) ->method('getDir') - ->with(\Magento\Core\Model\Dir::MEDIA) + ->with(\Magento\App\Dir::MEDIA) ->will($this->returnValue(__DIR__ . DIRECTORY_SEPARATOR . '_files')); $objectManager = new \Magento\TestFramework\Helper\ObjectManager($this); diff --git a/dev/tests/unit/testsuite/Magento/Page/Block/Link/CurrentTest.php b/dev/tests/unit/testsuite/Magento/Page/Block/Link/CurrentTest.php index a02a0f5a3e0..e76f251699b 100644 --- a/dev/tests/unit/testsuite/Magento/Page/Block/Link/CurrentTest.php +++ b/dev/tests/unit/testsuite/Magento/Page/Block/Link/CurrentTest.php @@ -26,13 +26,47 @@ namespace Magento\Page\Block\Link; class CurrentTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\TestFramework\Helper\ObjectManager + * @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_objectManagerHelper; + protected $_contextMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_urlBuilderMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_requestMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_frontControllerMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_coreHelperMock; protected function setUp() { - $this->_objectManagerHelper = new \Magento\TestFramework\Helper\ObjectManager($this); + $this->_urlBuilderMock = $this->getMock('\Magento\UrlInterface'); + $this->_requestMock = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); + $this->_frontControllerMock = $this->getMock('Magento\App\FrontController', array(), array(), '', false); + $this->_coreHelperMock = $this->getMock('Magento\Core\Helper\Data', array(), array(), '', false); + $this->_contextMock = $this->getMock('Magento\Core\Block\Template\Context', array(), array(), '', false); + + $this->_contextMock->expects($this->any()) + ->method('getUrlBuilder') + ->will($this->returnValue($this->_urlBuilderMock)); + $this->_contextMock->expects($this->any()) + ->method('getRequest') + ->will($this->returnValue($this->_requestMock)); + $this->_contextMock->expects($this->any()) + ->method('getFrontController') + ->will($this->returnValue($this->_frontControllerMock)); } public function testGetUrl() @@ -40,17 +74,13 @@ class CurrentTest extends \PHPUnit_Framework_TestCase $path = 'test/path'; $url = 'http://example.com/asdasd'; - /** @var \Magento\Core\Block\Template\Context $context */ - $context = $this->_objectManagerHelper->getObject('Magento\Core\Block\Template\Context'); - $urlBuilder = $context->getUrlBuilder(); - $urlBuilder->expects($this->once())->method('getUrl')->with($path)->will($this->returnValue($url)); - - $link = $this->_objectManagerHelper->getObject( - 'Magento\Page\Block\Link\Current', - array( - 'context' => $context, - ) - ); + $this->_urlBuilderMock->expects($this->once()) + ->method('getUrl') + ->with($path) + ->will($this->returnValue($url)); + + $link = new \Magento\Page\Block\Link\Current($this->_coreHelperMock, $this->_contextMock); + $link->setPath($path); $this->assertEquals($url, $link->getHref()); } @@ -58,7 +88,7 @@ class CurrentTest extends \PHPUnit_Framework_TestCase public function testIsCurrentIfIsset() { - $link = $this->_objectManagerHelper->getObject('Magento\Page\Block\Link\Current'); + $link = new \Magento\Page\Block\Link\Current($this->_coreHelperMock, $this->_contextMock); $link->setCurrent(true); $this->assertTrue($link->IsCurrent()); } @@ -68,50 +98,31 @@ class CurrentTest extends \PHPUnit_Framework_TestCase $path = 'test/path'; $url = 'http://example.com/a/b'; - /** @var \Magento\Core\Block\Template\Context $context */ - $context = $this->_objectManagerHelper->getObject('Magento\Core\Block\Template\Context'); - - $request = $context->getRequest(); - $request->expects($this->once())->method('getModuleName')->will($this->returnValue('a')); - $request->expects($this->once())->method('getControllerName')->will($this->returnValue('b')); - $request->expects($this->once())->method('getActionName')->will($this->returnValue('d')); + $this->_requestMock->expects($this->once())->method('getModuleName')->will($this->returnValue('a')); + $this->_requestMock->expects($this->once())->method('getControllerName')->will($this->returnValue('b')); + $this->_requestMock->expects($this->once())->method('getActionName')->will($this->returnValue('d')); - $context->getFrontController()->expects($this->once())->method('getDefault') + $this->_frontControllerMock->expects($this->once()) + ->method('getDefault') ->will($this->returnValue(array('action' => 'd'))); - $urlBuilder = $context->getUrlBuilder(); - $urlBuilder->expects($this->at(0))->method('getUrl')->with($path)->will($this->returnValue($url)); - $urlBuilder->expects($this->at(1))->method('getUrl')->with('a/b')->will( - $this->returnValue($url) - ); - - /** @var \Magento\Page\Block\Link\Current $link */ - $link = $this->_objectManagerHelper->getObject( - 'Magento\Page\Block\Link\Current', - array( - 'context' => $context, - ) - ); + $this->_urlBuilderMock->expects($this->at(0))->method('getUrl')->with($path)->will($this->returnValue($url)); + $this->_urlBuilderMock->expects($this->at(1)) + ->method('getUrl') + ->with('a/b') + ->will($this->returnValue($url)); + + $link = new \Magento\Page\Block\Link\Current($this->_coreHelperMock, $this->_contextMock); $link->setPath($path); $this->assertTrue($link->isCurrent()); } public function testIsCurrentFalse() { - /** @var \Magento\Core\Block\Template\Context $context */ - $context = $this->_objectManagerHelper->getObject('Magento\Core\Block\Template\Context'); - - $urlBuilder = $context->getUrlBuilder(); - $urlBuilder->expects($this->at(0))->method('getUrl')->will($this->returnValue('1')); - $urlBuilder->expects($this->at(1))->method('getUrl')->will($this->returnValue('2')); - - /** @var \Magento\Page\Block\Link\Current $link */ - $link = $this->_objectManagerHelper->getObject( - 'Magento\Page\Block\Link\Current', - array( - 'context' => $context, - ) - ); + $this->_urlBuilderMock->expects($this->at(0))->method('getUrl')->will($this->returnValue('1')); + $this->_urlBuilderMock->expects($this->at(1))->method('getUrl')->will($this->returnValue('2')); + + $link = new \Magento\Page\Block\Link\Current($this->_coreHelperMock, $this->_contextMock); $this->assertFalse($link->isCurrent()); } } diff --git a/dev/tests/unit/testsuite/Magento/Page/Block/SwitchTest.php b/dev/tests/unit/testsuite/Magento/Page/Block/SwitchTest.php index f6ba3478402..49b89c97a3b 100644 --- a/dev/tests/unit/testsuite/Magento/Page/Block/SwitchTest.php +++ b/dev/tests/unit/testsuite/Magento/Page/Block/SwitchTest.php @@ -30,13 +30,46 @@ namespace Magento\Page\Block; class SwitchTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\TestFramework\Helper\ObjectManager + * @var \Magento\Page\Block\Switcher */ - protected $_objectManager; + protected $_block; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_storeManagerMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_coreHelperMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_contextMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_appMock; protected function setUp() { - $this->_objectManager = new \Magento\TestFramework\Helper\ObjectManager($this); + $this->_storeManagerMock = $this->getMock('\Magento\Core\Model\StoreManagerInterface'); + $this->_coreHelperMock = $this->getMock('\Magento\Core\Helper\Data', array(), array(), '', false); + $this->_contextMock = $this->getMock('\Magento\Core\Block\Template\Context', array(), array(), '', false); + $this->_appMock = $this->getMock('\Magento\Core\Model\App', array(), array(), '', false); + + $this->_contextMock->expects($this->any()) + ->method('getApp') + ->will($this->returnValue($this->_appMock)); + + $this->_block = new \Magento\Page\Block\Switcher( + $this->_storeManagerMock, + $this->_coreHelperMock, + $this->_contextMock + ); } /** @@ -46,15 +79,15 @@ class SwitchTest extends \PHPUnit_Framework_TestCase { $storeMock = $this->getMock('Magento\Core\Model\Store', array(), array(), '', false); $storeMock->expects($this->once())->method('isUseStoreInUrl')->will($this->returnValue($isUseStoreInUrl)); - $storeManager = $this->getMock('Magento\Core\Model\StoreManagerInterface'); - $storeManager->expects($this->any())->method('getStore')->will($this->returnValue($storeMock)); - $block = $this->_objectManager->getObject('Magento\Page\Block\Switcher', array('storeManager' => - $storeManager)); - $this->assertEquals($block->isStoreInUrl(), $isUseStoreInUrl); + $this->_storeManagerMock = $this->getMock('Magento\Core\Model\StoreManagerInterface'); + $this->_storeManagerMock->expects($this->any())->method('getStore')->will($this->returnValue($storeMock)); + + $this->_appMock->expects($this->any())->method('getStore')->will($this->returnValue($storeMock)); - // check cached value - $this->assertEquals($block->isStoreInUrl(), $isUseStoreInUrl); + $this->assertEquals($this->_block->isStoreInUrl(), $isUseStoreInUrl); + // check value is cached + $this->assertEquals($this->_block->isStoreInUrl(), $isUseStoreInUrl); } /** diff --git a/dev/tests/unit/testsuite/Magento/Payment/Model/Method/BanktransferTest.php b/dev/tests/unit/testsuite/Magento/Payment/Model/Method/BanktransferTest.php index 9daf60024bd..1b8278b8c27 100644 --- a/dev/tests/unit/testsuite/Magento/Payment/Model/Method/BanktransferTest.php +++ b/dev/tests/unit/testsuite/Magento/Payment/Model/Method/BanktransferTest.php @@ -37,7 +37,7 @@ class BanktransferTest extends \PHPUnit_Framework_TestCase protected function setUp() { $objectManagerHelper = new \Magento\TestFramework\Helper\ObjectManager($this); - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $paymentDataMock = $this->getMock('Magento\Payment\Helper\Data', array(), array(), '', false); $coreStoreConfig = $this->getMock('Magento\Core\Model\Store\Config', array(), array(), '', false); $adapterFactoryMock = $this->getMock('Magento\Core\Model\Log\AdapterFactory', array('create'), diff --git a/dev/tests/unit/testsuite/Magento/Payment/Model/Method/CashondeliveryTest.php b/dev/tests/unit/testsuite/Magento/Payment/Model/Method/CashondeliveryTest.php index 4de6e0d9ce8..4552a713c58 100644 --- a/dev/tests/unit/testsuite/Magento/Payment/Model/Method/CashondeliveryTest.php +++ b/dev/tests/unit/testsuite/Magento/Payment/Model/Method/CashondeliveryTest.php @@ -38,7 +38,7 @@ class CashondeliveryTest extends \PHPUnit_Framework_TestCase { $helper = new \Magento\TestFramework\Helper\ObjectManager($this); - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $paymentDataMock = $this->getMock('Magento\Payment\Helper\Data', array(), array(), '', false); $adapterFactoryMock = $this->getMock('Magento\Core\Model\Log\AdapterFactory', array('create'), array(), '', false); diff --git a/dev/tests/unit/testsuite/Magento/Sales/Block/Recurring/Profile/GridTest.php b/dev/tests/unit/testsuite/Magento/Sales/Block/Recurring/Profile/GridTest.php index 4705607a0e3..8bcc68eab18 100644 --- a/dev/tests/unit/testsuite/Magento/Sales/Block/Recurring/Profile/GridTest.php +++ b/dev/tests/unit/testsuite/Magento/Sales/Block/Recurring/Profile/GridTest.php @@ -141,14 +141,14 @@ class GridTest extends \PHPUnit_Framework_TestCase /** * Get layout mock * - * @return \Magento\Core\Model\Layout + * @return \Magento\View\LayoutInterface */ protected function _getMockLayout() { - $layout = $this->getMockBuilder('Magento\Core\Model\Layout') + $layout = $this->getMockBuilder('Magento\View\LayoutInterface') ->disableOriginalConstructor() ->setMethods(array('createBlock', 'getChildName', 'setChild')) - ->getMock(); + ->getMockForAbstractClass(); return $layout; } diff --git a/dev/tests/unit/testsuite/Magento/Sales/Block/Recurring/Profile/Related/Orders/GridTest.php b/dev/tests/unit/testsuite/Magento/Sales/Block/Recurring/Profile/Related/Orders/GridTest.php index 6e3056e3199..3e48f0e2f90 100644 --- a/dev/tests/unit/testsuite/Magento/Sales/Block/Recurring/Profile/Related/Orders/GridTest.php +++ b/dev/tests/unit/testsuite/Magento/Sales/Block/Recurring/Profile/Related/Orders/GridTest.php @@ -142,14 +142,14 @@ class GridTest extends \PHPUnit_Framework_TestCase /** * Get layout mock * - * @return \Magento\Core\Model\Layout + * @return \Magento\View\LayoutInterface */ protected function _getMockLayout() { - $layout = $this->getMockBuilder('Magento\Core\Model\Layout') + $layout = $this->getMockBuilder('Magento\View\LayoutInterface') ->disableOriginalConstructor() ->setMethods(array('createBlock', 'getChildName', 'setChild')) - ->getMock(); + ->getMockForAbstractClass(); return $layout; } diff --git a/dev/tests/unit/testsuite/Magento/Sales/Model/Observer/Backend/RecurringProfile/FormRendererTest.php b/dev/tests/unit/testsuite/Magento/Sales/Model/Observer/Backend/RecurringProfile/FormRendererTest.php index fb370095075..32e4f3aec79 100644 --- a/dev/tests/unit/testsuite/Magento/Sales/Model/Observer/Backend/RecurringProfile/FormRendererTest.php +++ b/dev/tests/unit/testsuite/Magento/Sales/Model/Observer/Backend/RecurringProfile/FormRendererTest.php @@ -55,7 +55,8 @@ class FormRendererTest extends \PHPUnit_Framework_TestCase public function testRender() { $blockMock = $this->getMock( - 'Magento\Core\Block', array( + 'Magento\View\Element\BlockInterface', + array( 'setNameInLayout', 'setParentElement', 'setProductEntity', 'toHtml', 'addFieldMap', 'addFieldDependence', 'addConfigOptions' ) diff --git a/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Pdf/AbstractTest.php b/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Pdf/AbstractTest.php index 978aa8d8e93..f8d0acee480 100644 --- a/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Pdf/AbstractTest.php +++ b/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Pdf/AbstractTest.php @@ -47,7 +47,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase $coreString = $this->getMock('Magento\Core\Helper\String', array(), array(), '', false); $coreStoreConfig = $this->getMock('Magento\Core\Model\Store\Config', array(), array(), '', false); $translate = $this->getMock('Magento\Core\Model\Translate', array(), array(), '', false); - $coreDir = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false); + $coreDir = $this->getMock('Magento\App\Dir', array(), array(), '', false); $shippingConfig = $this->getMock('Magento\Shipping\Model\Config', array(), array(), '', false); $pdfItemsFactory = $this->getMock('Magento\Sales\Model\Order\Pdf\ItemsFactory', array(), array(), '', false); diff --git a/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Pdf/InvoiceTest.php b/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Pdf/InvoiceTest.php index 252f4892a56..a9fe51ce9b8 100644 --- a/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Pdf/InvoiceTest.php +++ b/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Pdf/InvoiceTest.php @@ -43,7 +43,7 @@ class InvoiceTest extends \PHPUnit_Framework_TestCase $coreHelperStringMock = $this->getMock('Magento\Core\Helper\String', array(), array(), '', false, false); $storeConfigMock = $this->getMock('Magento\Core\Model\Store\Config', array(), array(), '', false, false); $translateMock = $this->getMock('Magento\Core\Model\Translate', array(), array(), '', false, false); - $coreDirMock = $this->getMock('Magento\Core\Model\Dir', array(), array(), '', false, false); + $coreDirMock = $this->getMock('Magento\App\Dir', array(), array(), '', false, false); $coreDirMock->expects($this->once()) ->method('getDir') ->will($this->returnValue(BP)); diff --git a/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Pdf/Total/FactoryTest.php b/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Pdf/Total/FactoryTest.php index 1b8a8912ca1..389c8512501 100644 --- a/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Pdf/Total/FactoryTest.php +++ b/dev/tests/unit/testsuite/Magento/Sales/Model/Order/Pdf/Total/FactoryTest.php @@ -81,7 +81,7 @@ class FactoryTest extends \PHPUnit_Framework_TestCase /** * @expectedException \Magento\Core\Exception * @expectedExceptionMessage The PDF total model TEST must be or extend - * \Magento\Sales\Model\Order\Pdf\Total\Default. + * \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal. */ public function testCreateException() { diff --git a/dev/tests/unit/testsuite/Magento/Sales/Model/Order/StatusTest.php b/dev/tests/unit/testsuite/Magento/Sales/Model/Order/StatusTest.php index b9dc1316889..11ec58e2257 100644 --- a/dev/tests/unit/testsuite/Magento/Sales/Model/Order/StatusTest.php +++ b/dev/tests/unit/testsuite/Magento/Sales/Model/Order/StatusTest.php @@ -42,7 +42,7 @@ class StatusTest extends \PHPUnit_Framework_TestCase $resource = $this->getMock('Magento\Sales\Model\Resource\Order\Status', array(), array(), '', false); } if (!$eventDispatcher) { - $eventDispatcher = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventDispatcher = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); } $helper = new \Magento\TestFramework\Helper\ObjectManager($this); $model = $helper->getObject('Magento\Sales\Model\Order\Status', array( @@ -64,7 +64,7 @@ class StatusTest extends \PHPUnit_Framework_TestCase $resource->expects($this->once())->method('commit'); $params = array('status' => $status, 'state' => $state); - $eventDispatcher = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventDispatcher = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $eventDispatcher->expects($this->once())->method('dispatch') ->with($this->equalTo('sales_order_status_unassign'), $this->equalTo($params)); diff --git a/dev/tests/unit/testsuite/Magento/Test/Tools/View/Generator/CopyRuleTest.php b/dev/tests/unit/testsuite/Magento/Test/Tools/View/Generator/CopyRuleTest.php index f7a389de7ab..8dde5621796 100644 --- a/dev/tests/unit/testsuite/Magento/Test/Tools/View/Generator/CopyRuleTest.php +++ b/dev/tests/unit/testsuite/Magento/Test/Tools/View/Generator/CopyRuleTest.php @@ -58,7 +58,7 @@ class CopyRuleTest extends \PHPUnit_Framework_TestCase array('isLoaded'), array( $this->_filesystem, - new \Magento\Core\Model\Dir(__DIR__), + new \Magento\App\Dir(__DIR__), $this->getMock('Magento\Core\Model\EntityFactory', array(), array(), '', false) ) ); diff --git a/dev/tests/unit/testsuite/Magento/Test/Tools/View/Generator/ThemeDeploymentTest.php b/dev/tests/unit/testsuite/Magento/Test/Tools/View/Generator/ThemeDeploymentTest.php index 65f1851715d..2754f7c3789 100644 --- a/dev/tests/unit/testsuite/Magento/Test/Tools/View/Generator/ThemeDeploymentTest.php +++ b/dev/tests/unit/testsuite/Magento/Test/Tools/View/Generator/ThemeDeploymentTest.php @@ -44,7 +44,7 @@ class ThemeDeploymentTest extends \PHPUnit_Framework_TestCase protected function setUp() { $filesystem = new \Magento\Filesystem(new \Magento\Filesystem\Adapter\Local()); - $dirs = new \Magento\Core\Model\Dir($filesystem->normalizePath(__DIR__ . '/../../../../../../')); + $dirs = new \Magento\App\Dir($filesystem->normalizePath(__DIR__ . '/../../../../../../')); $this->_cssHelper = new \Magento\Core\Helper\Css($filesystem, $dirs); $this->_tmpDir = TESTS_TEMP_DIR . DIRECTORY_SEPARATOR . 'tool_theme_deployment'; mkdir($this->_tmpDir); diff --git a/dev/tests/unit/testsuite/Magento/Theme/Block/Adminhtml/System/Design/Theme/Tab/CssTest.php b/dev/tests/unit/testsuite/Magento/Theme/Block/Adminhtml/System/Design/Theme/Tab/CssTest.php index 97ea2f5d52a..565cebd7ed4 100644 --- a/dev/tests/unit/testsuite/Magento/Theme/Block/Adminhtml/System/Design/Theme/Tab/CssTest.php +++ b/dev/tests/unit/testsuite/Magento/Theme/Block/Adminhtml/System/Design/Theme/Tab/CssTest.php @@ -63,7 +63,7 @@ class CssTest extends \PHPUnit_Framework_TestCase array( 'formFactory' => $this->getMock('Magento\Data\Form\Factory', array(), array(), '', false), 'objectManager' => $this->_objectManager, - 'dirs' => new \Magento\Core\Model\Dir(__DIR__), + 'dirs' => new \Magento\App\Dir(__DIR__), 'uploaderService' => $this->getMock( 'Magento\Theme\Model\Uploader\Service', array(), array(), '', false ), diff --git a/dev/tests/unit/testsuite/Magento/Theme/Block/Adminhtml/Wysiwyg/Files/ContentTest.php b/dev/tests/unit/testsuite/Magento/Theme/Block/Adminhtml/Wysiwyg/Files/ContentTest.php index d724cf2a33b..44590978f8f 100644 --- a/dev/tests/unit/testsuite/Magento/Theme/Block/Adminhtml/Wysiwyg/Files/ContentTest.php +++ b/dev/tests/unit/testsuite/Magento/Theme/Block/Adminhtml/Wysiwyg/Files/ContentTest.php @@ -44,7 +44,7 @@ class ContentTest extends \PHPUnit_Framework_TestCase protected $_filesContent; /** - * @var \Magento\Core\Controller\Request\Http|PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\RequestInterface|PHPUnit_Framework_MockObject_MockObject */ protected $_request; @@ -52,7 +52,7 @@ class ContentTest extends \PHPUnit_Framework_TestCase { $this->_helperStorage = $this->getMock('Magento\Theme\Helper\Storage', array(), array(), '', false); $this->_urlBuilder = $this->getMock('Magento\Backend\Model\Url', array(), array(), '', false); - $this->_request = $this->getMock('Magento\Core\Controller\Request\Http', array(), array(), '', false); + $this->_request = $this->getMock('Magento\App\RequestInterface', array(), array(), '', false); $objectManagerHelper = new \Magento\TestFramework\Helper\ObjectManager($this); $constructArguments = $objectManagerHelper->getConstructArguments( diff --git a/dev/tests/unit/testsuite/Magento/Theme/Controller/Adminhtml/System/Design/ThemeTest.php b/dev/tests/unit/testsuite/Magento/Theme/Controller/Adminhtml/System/Design/ThemeTest.php index 537ba7d19d2..b841703596a 100644 --- a/dev/tests/unit/testsuite/Magento/Theme/Controller/Adminhtml/System/Design/ThemeTest.php +++ b/dev/tests/unit/testsuite/Magento/Theme/Controller/Adminhtml/System/Design/ThemeTest.php @@ -51,9 +51,7 @@ class ThemeTest extends \PHPUnit_Framework_TestCase { $this->_objectManagerMock = $this->getMock('Magento\ObjectManager', array(), array(), '', false); - $this->_request = $this->getMock( - 'Magento\Core\Controller\Request\Http', array('getParam', 'getPost'), array(), '', false - ); + $this->_request = $this->getMock('Magento\App\Request\Http', array(), array(), '', false); $helper = new \Magento\TestFramework\Helper\ObjectManager($this); $arguments = array( diff --git a/dev/tests/unit/testsuite/Magento/Theme/Helper/StorageTest.php b/dev/tests/unit/testsuite/Magento/Theme/Helper/StorageTest.php index 57060b15bc9..6da9c82ede2 100644 --- a/dev/tests/unit/testsuite/Magento/Theme/Helper/StorageTest.php +++ b/dev/tests/unit/testsuite/Magento/Theme/Helper/StorageTest.php @@ -47,7 +47,7 @@ class StorageTest extends \PHPUnit_Framework_TestCase protected $_themeFactory; /** - * @var \Zend_Controller_Request_Http|PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_request; @@ -66,7 +66,7 @@ class StorageTest extends \PHPUnit_Framework_TestCase $this->_customizationPath = \Magento\Filesystem::DIRECTORY_SEPARATOR . implode(\Magento\Filesystem::DIRECTORY_SEPARATOR, array('var', 'theme')); - $this->_request = $this->getMock('Zend_Controller_Request_Http', array('getParam'), array(), '', false); + $this->_request = $this->getMock('\Magento\App\Request\Http', array(), array(), '', false); $this->_filesystem = $this->getMock('Magento\Filesystem', array(), array(), '', false); $this->_session = $this->getMock('Magento\Backend\Model\Session', array(), array(), '', false); $this->_themeFactory = $this->getMock('Magento\Core\Model\Theme\FlyweightFactory', array('create'), array(), diff --git a/dev/tests/unit/testsuite/Magento/Theme/Model/Config/CustomizationTest.php b/dev/tests/unit/testsuite/Magento/Theme/Model/Config/CustomizationTest.php index 06b4e0d42ce..a7b6fe5b236 100644 --- a/dev/tests/unit/testsuite/Magento/Theme/Model/Config/CustomizationTest.php +++ b/dev/tests/unit/testsuite/Magento/Theme/Model/Config/CustomizationTest.php @@ -38,7 +38,7 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase protected $_storeManager; /** - * @var \Magento\Core\Model\View\DesignInterface + * @var \Magento\View\DesignInterface */ protected $_designPackage; @@ -58,7 +58,7 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase 'Magento\Core\Model\StoreManagerInterface', array(), '', true, true, true, array('getStores') ); $this->_designPackage = $this->getMockForAbstractClass( - 'Magento\Core\Model\View\DesignInterface', array(), '', true, true, true, + 'Magento\View\DesignInterface', array(), '', true, true, true, array('getConfigurationDesignTheme') ); $this->_themeCollection = $this->getMock( diff --git a/dev/tests/unit/testsuite/Magento/Theme/Model/ConfigTest.php b/dev/tests/unit/testsuite/Magento/Theme/Model/ConfigTest.php index 660f244a45d..84c7611217e 100644 --- a/dev/tests/unit/testsuite/Magento/Theme/Model/ConfigTest.php +++ b/dev/tests/unit/testsuite/Magento/Theme/Model/ConfigTest.php @@ -89,7 +89,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase $this->_configData, $this->_storeConfigWriter, $this->_storeManagerMock, - $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false), + $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false), $this->_configCacheMock, $this->_layoutCacheMock ); diff --git a/dev/tests/unit/testsuite/Magento/User/Model/UserTest.php b/dev/tests/unit/testsuite/Magento/User/Model/UserTest.php index 1601bfd2ab1..970a78b9206 100644 --- a/dev/tests/unit/testsuite/Magento/User/Model/UserTest.php +++ b/dev/tests/unit/testsuite/Magento/User/Model/UserTest.php @@ -83,7 +83,7 @@ class UserTest extends \PHPUnit_Framework_TestCase ->getMock(); $coreRegistry = $this->getMock('Magento\Core\Model\Registry', array(), array(), '', false); - $eventManagerMock = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManagerMock = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $objectFactoryMock = $this->getMock('Magento\Validator\Composite\VarienObjectFactory', array('create'), array(), '', false); $roleFactoryMock = $this->getMock('Magento\User\Model\RoleFactory', array('create'), diff --git a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/ElementTest.php b/dev/tests/unit/testsuite/Magento/View/Layout/ElementTest.php similarity index 91% rename from dev/tests/unit/testsuite/Magento/Core/Model/Layout/ElementTest.php rename to dev/tests/unit/testsuite/Magento/View/Layout/ElementTest.php index bbcc53a61f9..918706aca8d 100644 --- a/dev/tests/unit/testsuite/Magento/Core/Model/Layout/ElementTest.php +++ b/dev/tests/unit/testsuite/Magento/View/Layout/ElementTest.php @@ -26,9 +26,9 @@ */ /** - * Test class for \Magento\Core\Model\Layout\Element + * Test class for \Magento\View\Layout\Element */ -namespace Magento\Core\Model\Layout; +namespace Magento\View\Layout; class ElementTest extends \PHPUnit_Framework_TestCase { @@ -37,7 +37,7 @@ class ElementTest extends \PHPUnit_Framework_TestCase */ public function testGetElementName($xml, $name) { - $model = new \Magento\Core\Model\Layout\Element($xml); + $model = new \Magento\View\Layout\Element($xml); $this->assertEquals($name, $model->getElementName()); } diff --git a/dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/TabsTest.php b/dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/TabsTest.php index 6e09346246c..456b1dfc755 100644 --- a/dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/TabsTest.php +++ b/dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/TabsTest.php @@ -43,7 +43,7 @@ class TabsTest extends \PHPUnit_Framework_TestCase protected $_helper; /** - * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Core\Controller\Request\Http + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\App\RequestInterface */ protected $_request; @@ -60,7 +60,7 @@ class TabsTest extends \PHPUnit_Framework_TestCase ->getMock(); $backendData = $this->getMock('Magento\Backend\Helper\Data', array(), array(), '', false); - $this->_request = $this->getMockForAbstractClass('Magento\Core\Controller\Request\Http', + $this->_request = $this->getMockForAbstractClass('Magento\App\RequestInterface', array($backendData), '', false, false, true, array('getParam')); $this->_helper = new \Magento\TestFramework\Helper\ObjectManager($this); diff --git a/dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/Role/EditTest.php b/dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/Role/EditTest.php index 7e8c5b15290..6cc1eff4e3d 100644 --- a/dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/Role/EditTest.php +++ b/dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/Role/EditTest.php @@ -28,7 +28,7 @@ namespace Magento\Webapi\Block\Adminhtml\Role; class EditTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Controller\Request\Http|PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\RequestInterface|PHPUnit_Framework_MockObject_MockObject */ protected $_request; @@ -53,9 +53,8 @@ class EditTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->getMock(); - $this->_request = $this->getMockBuilder('Magento\Core\Controller\Request\Http') + $this->_request = $this->getMockBuilder('Magento\App\Request\Http') ->disableOriginalConstructor() - ->setMethods(array('getParam')) ->getMock(); $this->_request->expects($this->any()) diff --git a/dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/User/EditTest.php b/dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/User/EditTest.php index ab49ae4212a..f5c0981c179 100644 --- a/dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/User/EditTest.php +++ b/dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/User/EditTest.php @@ -28,7 +28,7 @@ namespace Magento\Webapi\Block\Adminhtml\User; class EditTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Core\Controller\Request\Http|PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\RequestInterface|PHPUnit_Framework_MockObject_MockObject */ protected $_request; @@ -44,9 +44,8 @@ class EditTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_request = $this->getMockBuilder('Magento\Core\Controller\Request\Http') + $this->_request = $this->getMockBuilder('Magento\App\Request\Http') ->disableOriginalConstructor() - ->setMethods(array('getParam')) ->getMock(); $this->_request->expects($this->any()) diff --git a/dev/tests/unit/testsuite/Magento/Webapi/Controller/Rest/RequestTest.php b/dev/tests/unit/testsuite/Magento/Webapi/Controller/Rest/RequestTest.php index 406b27daf93..307ebb43169 100644 --- a/dev/tests/unit/testsuite/Magento/Webapi/Controller/Rest/RequestTest.php +++ b/dev/tests/unit/testsuite/Magento/Webapi/Controller/Rest/RequestTest.php @@ -45,20 +45,15 @@ class RequestTest extends \PHPUnit_Framework_TestCase ->setMethods(array('deserialize', 'get')) ->disableOriginalConstructor() ->getMock(); - $applicationMock = $this->getMockBuilder('Magento\Core\Model\App') - ->disableOriginalConstructor() - ->getMock(); - $configMock = $this->getMockBuilder('Magento\Core\Model\Config') - ->disableOriginalConstructor() - ->getMock(); - $applicationMock->expects($this->once())->method('getConfig')->will($this->returnValue($configMock)); - $configMock->expects($this->once())->method('getAreaFrontName')->will($this->returnValue('rest')); + $areaListMock = $this->getMock('Magento\App\AreaList', array(), array(), '', false); + $configScopeMock = $this->getMock('Magento\Config\ScopeInterface'); + $areaListMock->expects($this->once())->method('getFrontName')->will($this->returnValue('rest')); /** Instantiate request. */ // TODO: Get rid of SUT mocks. $this->_request = $this->getMock( 'Magento\Webapi\Controller\Rest\Request', array('getHeader', 'getMethod', 'isGet', 'isPost', 'isPut', 'isDelete', 'getRawBody'), - array($applicationMock, $this->_deserializerFactory) + array($areaListMock, $configScopeMock, $this->_deserializerFactory) ); parent::setUp(); } diff --git a/dev/tests/unit/testsuite/Magento/Webapi/Controller/Rest/RouterTest.php b/dev/tests/unit/testsuite/Magento/Webapi/Controller/Rest/RouterTest.php index 13be912adcd..0f60435d190 100644 --- a/dev/tests/unit/testsuite/Magento/Webapi/Controller/Rest/RouterTest.php +++ b/dev/tests/unit/testsuite/Magento/Webapi/Controller/Rest/RouterTest.php @@ -54,16 +54,12 @@ class RouterTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->setMethods(array('match')) ->getMock(); - $applicationMock = $this->getMockBuilder('Magento\Core\Model\App') - ->disableOriginalConstructor() - ->getMock(); - $configMock = $this->getMockBuilder('Magento\Core\Model\Config') - ->disableOriginalConstructor() - ->getMock(); - $applicationMock->expects($this->once())->method('getConfig')->will($this->returnValue($configMock)); - $configMock->expects($this->once())->method('getAreaFrontName')->will($this->returnValue('rest')); + $areaListMock = $this->getMock('Magento\App\AreaList', array(), array(), '', false); + $configScopeMock = $this->getMock('Magento\Config\ScopeInterface'); + $areaListMock->expects($this->once())->method('getFrontName')->will($this->returnValue('rest')); $this->_request = new \Magento\Webapi\Controller\Rest\Request( - $applicationMock, + $areaListMock, + $configScopeMock, $deserializerFactory ); /** Initialize SUT. */ diff --git a/dev/tests/unit/testsuite/Magento/Webapi/Controller/RestTest.php b/dev/tests/unit/testsuite/Magento/Webapi/Controller/RestTest.php index 0b6da094269..4e528b33df7 100644 --- a/dev/tests/unit/testsuite/Magento/Webapi/Controller/RestTest.php +++ b/dev/tests/unit/testsuite/Magento/Webapi/Controller/RestTest.php @@ -48,7 +48,7 @@ class RestTest extends \PHPUnit_Framework_TestCase /** @var \stdClass */ protected $_serviceMock; - /** @var \Magento\Core\Model\App\State */ + /** @var \Magento\App\State */ protected $_appStateMock; /** @var \Magento\Oauth\Service\OauthV1 */ @@ -91,7 +91,7 @@ class RestTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->getMock(); - $this->_appStateMock = $this->getMockBuilder('Magento\Core\Model\App\State') + $this->_appStateMock = $this->getMockBuilder('Magento\App\State') ->disableOriginalConstructor() ->getMock(); @@ -153,7 +153,7 @@ class RestTest extends \PHPUnit_Framework_TestCase $this->_appStateMock->expects($this->any())->method('isInstalled')->will($this->returnValue(false)); $expectedMsg = 'Magento is not yet installed'; - $this->_restController->dispatch(); + $this->_restController->dispatch($this->_requestMock); $this->assertTrue($this->_responseMock->isException()); $exceptionArray = $this->_responseMock->getException(); $this->assertEquals($expectedMsg, $exceptionArray[0]->getMessage()); @@ -183,7 +183,7 @@ class RestTest extends \PHPUnit_Framework_TestCase ->expects($this->any())->method(self::SERVICE_METHOD)->will($this->returnValue(array())); $this->_routeMock->expects($this->any())->method('isSecure')->will($this->returnValue($isSecureRoute)); $this->_requestMock->expects($this->any())->method('isSecure')->will($this->returnValue($isSecureRequest)); - $this->_restController->dispatch(); + $this->_restController->dispatch($this->_requestMock); $this->assertFalse($this->_responseMock->isException()); } @@ -225,7 +225,7 @@ class RestTest extends \PHPUnit_Framework_TestCase // Override default prepareResponse. It should never be called in this case $this->_responseMock->expects($this->never())->method('prepareResponse'); - $this->_restController->dispatch(); + $this->_restController->dispatch($this->_requestMock); $this->assertTrue($this->_responseMock->isException()); $exceptionArray = $this->_responseMock->getException(); $this->assertEquals('Operation allowed only in HTTPS', $exceptionArray[0]->getMessage()); @@ -248,7 +248,7 @@ class RestTest extends \PHPUnit_Framework_TestCase $expectedMsg = 'The method "' . self::SERVICE_METHOD . '" of service "' . self::SERVICE_ID . '" must return an array.'; - $this->_restController->dispatch(); + $this->_restController->dispatch($this->_requestMock); $this->assertTrue($this->_responseMock->isException()); $exceptionArray = $this->_responseMock->getException(); $this->assertEquals($expectedMsg, $exceptionArray[0]->getMessage()); diff --git a/dev/tests/unit/testsuite/Magento/Webapi/Controller/Soap/RequestTest.php b/dev/tests/unit/testsuite/Magento/Webapi/Controller/Soap/RequestTest.php index 87ab204ea0c..2ecf954478a 100644 --- a/dev/tests/unit/testsuite/Magento/Webapi/Controller/Soap/RequestTest.php +++ b/dev/tests/unit/testsuite/Magento/Webapi/Controller/Soap/RequestTest.php @@ -33,17 +33,12 @@ class RequestTest extends \PHPUnit_Framework_TestCase protected function setUp() { /** Prepare mocks for SUT constructor. */ - $applicationMock = $this->getMockBuilder('Magento\Core\Model\App') - ->disableOriginalConstructor() - ->getMock(); - $configMock = $this->getMockBuilder('Magento\Core\Model\Config') - ->disableOriginalConstructor() - ->getMock(); - $applicationMock->expects($this->once())->method('getConfig')->will($this->returnValue($configMock)); - $configMock->expects($this->once())->method('getAreaFrontName')->will($this->returnValue('soap')); + $areaListMock = $this->getMock('Magento\App\AreaList', array(), array(), '', false); + $configScopeMock = $this->getMock('Magento\Config\ScopeInterface'); + $areaListMock->expects($this->once())->method('getFrontName')->will($this->returnValue('soap')); /** Initialize SUT. */ - $this->_soapRequest = new \Magento\Webapi\Controller\Soap\Request($applicationMock); + $this->_soapRequest = new \Magento\Webapi\Controller\Soap\Request($areaListMock, $configScopeMock); parent::setUp(); } diff --git a/dev/tests/unit/testsuite/Magento/Webapi/Controller/SoapTest.php b/dev/tests/unit/testsuite/Magento/Webapi/Controller/SoapTest.php index 67e0669847e..4d5d4c790f6 100644 --- a/dev/tests/unit/testsuite/Magento/Webapi/Controller/SoapTest.php +++ b/dev/tests/unit/testsuite/Magento/Webapi/Controller/SoapTest.php @@ -45,7 +45,7 @@ class SoapTest extends \PHPUnit_Framework_TestCase /** @var \Magento\Webapi\Controller\ErrorProcessor */ protected $_errorProcessorMock; - /** @var \Magento\Core\Model\App\State */ + /** @var \Magento\App\State */ protected $_appStateMock; /** @var \Magento\Core\Model\App */ @@ -84,7 +84,7 @@ class SoapTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->setMethods(array('maskException')) ->getMock(); - $this->_appStateMock = $this->getMockBuilder('Magento\Core\Model\App\State') + $this->_appStateMock = $this->getMockBuilder('Magento\App\State') ->disableOriginalConstructor() ->getMock(); $localeMock = $this->getMockBuilder('Magento\Core\Model\Locale') @@ -161,7 +161,7 @@ class SoapTest extends \PHPUnit_Framework_TestCase ->method('getApiCharset') ->will($this->returnValue($encoding)); - $this->_soapController->dispatch(); + $this->_soapController->dispatch($this->_requestMock); $expectedMessage = <<<EXPECTED_MESSAGE <?xml version="1.0" encoding="{$encoding}"?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" > @@ -195,7 +195,7 @@ EXPECTED_MESSAGE; ->method('generate') ->will($this->returnValue($wsdl)); - $this->_soapController->dispatch(); + $this->_soapController->dispatch($this->_requestMock); $this->assertEquals($wsdl, $this->_responseMock->getBody()); } @@ -216,7 +216,7 @@ EXPECTED_MESSAGE; ->method('validateAccessToken') ->will($this->returnValue(array('isValid' => true))); - $this->_soapController->dispatch(); + $this->_soapController->dispatch($this->_requestMock); unset($_SERVER['HTTP_AUTHORIZATION']); $this->assertEquals($soapResponse, $this->_responseMock->getBody()); } @@ -242,7 +242,7 @@ EXPECTED_MESSAGE; ->method('getApiCharset') ->will($this->returnValue($encoding)); - $this->_soapController->dispatch(); + $this->_soapController->dispatch($this->_requestMock); $expectedMessage = <<<EXPECTED_MESSAGE <?xml version="1.0" encoding="{$encoding}"?> diff --git a/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/Role/InRoleUserUpdaterTest.php b/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/Role/InRoleUserUpdaterTest.php index 5e303326291..bae65f93618 100644 --- a/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/Role/InRoleUserUpdaterTest.php +++ b/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/Role/InRoleUserUpdaterTest.php @@ -34,7 +34,7 @@ class InRoleUserUpdaterTest extends \PHPUnit_Framework_TestCase $helper = new \Magento\TestFramework\Helper\ObjectManager($this); - $request = $this->getMockBuilder('Magento\Core\Controller\Request\Http') + $request = $this->getMockBuilder('Magento\App\RequestInterface') ->disableOriginalConstructor() ->getMock(); $request->expects($this->any())->method('getParam')->will($this->returnValueMap(array( diff --git a/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/Role/UsersUpdaterTest.php b/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/Role/UsersUpdaterTest.php index a326f88b69d..d23f30d0997 100644 --- a/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/Role/UsersUpdaterTest.php +++ b/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/Role/UsersUpdaterTest.php @@ -38,7 +38,7 @@ class UsersUpdaterTest extends \PHPUnit_Framework_TestCase protected $_backendHelper; /** - * @var \Magento\Core\Controller\Request\Http|PHPUnit_Framework_MockObject_MockObject + * @var \Magento\App\RequestInterface|PHPUnit_Framework_MockObject_MockObject */ protected $_request; @@ -57,7 +57,7 @@ class UsersUpdaterTest extends \PHPUnit_Framework_TestCase ->getMock(); $this->_backendHelper->expects($this->any())->method('prepareFilterString')->will($this->returnArgument(0)); - $this->_request = $this->getMockBuilder('Magento\Core\Controller\Request\Http') + $this->_request = $this->getMockBuilder('Magento\App\Request\Http') ->disableOriginalConstructor() ->getMock(); $this->_collection = $this->getMockBuilder('Magento\Webapi\Model\Resource\Acl\User\Collection') diff --git a/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/RoleTest.php b/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/RoleTest.php index 0e698e4e8be..de08d16b286 100644 --- a/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/RoleTest.php +++ b/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/RoleTest.php @@ -77,7 +77,7 @@ class RoleTest extends \PHPUnit_Framework_TestCase protected function _createModel($roleService, $serviceCollection = null) { return $this->_helper->getObject('Magento\Webapi\Model\Acl\Role', array( - 'eventDispatcher' => $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false), + 'eventDispatcher' => $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false), 'cacheManager' => $this->getMock('Magento\Core\Model\CacheInterface', array(), array(), '', false), 'resource' => $roleService, 'resourceCollection' => $serviceCollection @@ -100,7 +100,7 @@ class RoleTest extends \PHPUnit_Framework_TestCase */ public function testGetCollection() { - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $fetchStrategy = $this->getMockForAbstractClass('Magento\Data\Collection\Db\FetchStrategyInterface'); $entityFactory = $this->getMock('Magento\Core\Model\EntityFactory', array(), array(), '', false); $logger = $this->getMock('Magento\Core\Model\Logger', array(), array(), '', false); diff --git a/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/RuleTest.php b/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/RuleTest.php index e8d008c5130..65d48c9752e 100644 --- a/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/RuleTest.php +++ b/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/RuleTest.php @@ -77,7 +77,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase protected function _createModel($ruleResource, $resourceCollection = null) { return $this->_helper->getObject('Magento\Webapi\Model\Acl\Rule', array( - 'eventDispatcher' => $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false), + 'eventDispatcher' => $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false), 'cacheManager' => $this->getMock('Magento\Core\Model\CacheInterface', array(), array(), '', false), 'resource' => $ruleResource, 'resourceCollection' => $resourceCollection @@ -115,7 +115,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase */ public function testGetCollection() { - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $fetchStrategy = $this->getMockForAbstractClass('Magento\Data\Collection\Db\FetchStrategyInterface'); $entityFactory = $this->getMock('Magento\Core\Model\EntityFactory', array(), array(), '', false); $logger = $this->getMock('Magento\Core\Model\Logger', array(), array(), '', false); diff --git a/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/User/RoleUpdaterTest.php b/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/User/RoleUpdaterTest.php index f09cba64eee..2b92ddd0155 100644 --- a/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/User/RoleUpdaterTest.php +++ b/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/User/RoleUpdaterTest.php @@ -34,7 +34,7 @@ class RoleUpdaterTest extends \PHPUnit_Framework_TestCase $helper = new \Magento\TestFramework\Helper\ObjectManager($this); - $request = $this->getMockBuilder('Magento\Core\Controller\Request\Http') + $request = $this->getMockBuilder('Magento\App\RequestInterface') ->disableOriginalConstructor() ->getMock(); $request->expects($this->any())->method('getParam')->will($this->returnValueMap(array( diff --git a/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/UserTest.php b/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/UserTest.php index f46940336af..30c183b6cf0 100644 --- a/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/UserTest.php +++ b/dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/UserTest.php @@ -77,7 +77,7 @@ class UserTest extends \PHPUnit_Framework_TestCase protected function _createModel($userService, $serviceCollection = null) { return $this->_helper->getObject('Magento\Webapi\Model\Acl\User', array( - 'eventDispatcher' => $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false), + 'eventDispatcher' => $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false), 'cacheManager' => $this->getMock('Magento\Core\Model\CacheInterface', array(), array(), '', false), 'resource' => $userService, 'resourceCollection' => $serviceCollection @@ -146,7 +146,7 @@ class UserTest extends \PHPUnit_Framework_TestCase */ public function testGetCollection() { - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $fetchStrategy = $this->getMockForAbstractClass('Magento\Data\Collection\Db\FetchStrategyInterface'); $entityFactory = $this->getMock('Magento\Core\Model\EntityFactory', array(), array(), '', false); $logger = $this->getMock('Magento\Core\Model\Logger', array(), array(), '', false); diff --git a/dev/tests/unit/testsuite/Magento/Webapi/Model/Soap/ConfigTest.php b/dev/tests/unit/testsuite/Magento/Webapi/Model/Soap/ConfigTest.php index 8b6e5439d3a..deb72f4b145 100644 --- a/dev/tests/unit/testsuite/Magento/Webapi/Model/Soap/ConfigTest.php +++ b/dev/tests/unit/testsuite/Magento/Webapi/Model/Soap/ConfigTest.php @@ -44,7 +44,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->getMock(); $fileSystemMock = $this->getMockBuilder('Magento\Filesystem')->disableOriginalConstructor()->getMock(); - $dirMock = $this->getMockBuilder('Magento\Core\Model\Dir')->disableOriginalConstructor()->getMock(); + $dirMock = $this->getMockBuilder('Magento\App\Dir')->disableOriginalConstructor()->getMock(); $configMock = $this->getMockBuilder('Magento\Webapi\Model\Config')->disableOriginalConstructor()->getMock(); $this->_soapConfig = new \Magento\Webapi\Model\Soap\Config( $objectManagerMock, diff --git a/dev/tests/unit/testsuite/Magento/Webapi/Model/Soap/ServerTest.php b/dev/tests/unit/testsuite/Magento/Webapi/Model/Soap/ServerTest.php index 1deeaabdc46..7a5246a728a 100644 --- a/dev/tests/unit/testsuite/Magento/Webapi/Model/Soap/ServerTest.php +++ b/dev/tests/unit/testsuite/Magento/Webapi/Model/Soap/ServerTest.php @@ -36,9 +36,6 @@ class ServerTest extends \PHPUnit_Framework_TestCase /** @var \Magento\Core\Model\Store */ protected $_storeMock; - /** @var \Magento\Core\Model\Config */ - protected $_configMock; - /** @var \Magento\Webapi\Controller\Soap\Request */ protected $_requestMock; @@ -64,9 +61,9 @@ class ServerTest extends \PHPUnit_Framework_TestCase $this->_storeManagerMock->expects($this->any())->method('getStore') ->will($this->returnValue($this->_storeMock)); - $this->_configMock = $this->getMockBuilder('Magento\Core\Model\Config') - ->disableOriginalConstructor()->getMock(); - $this->_configMock->expects($this->any())->method('getAreaFrontName')->will($this->returnValue('soap')); + $areaListMock = $this->getMock('Magento\App\AreaList', array(), array(), '', false); + $configScopeMock = $this->getMock('Magento\Config\ScopeInterface'); + $areaListMock->expects($this->any())->method('getFrontName')->will($this->returnValue('soap')); $this->_requestMock = $this->getMockBuilder('Magento\Webapi\Controller\Soap\Request') ->disableOriginalConstructor() @@ -80,7 +77,8 @@ class ServerTest extends \PHPUnit_Framework_TestCase /** Init SUT. */ $this->_soapServer = new \Magento\Webapi\Model\Soap\Server( - $this->_configMock, + $areaListMock, + $configScopeMock, $this->_requestMock, $this->_domDocumentFactory, $this->_storeManagerMock, @@ -93,7 +91,6 @@ class ServerTest extends \PHPUnit_Framework_TestCase protected function tearDown() { unset($this->_soapServer); - unset($this->_configMock); unset($this->_requestMock); unset($this->_domDocumentFactory); unset($this->_storeMock); diff --git a/dev/tests/unit/testsuite/Magento/Webhook/Controller/Adminhtml/Webhook/RegistrationTest.php b/dev/tests/unit/testsuite/Magento/Webhook/Controller/Adminhtml/Webhook/RegistrationTest.php index 418d51f9a06..769203b4fa2 100644 --- a/dev/tests/unit/testsuite/Magento/Webhook/Controller/Adminhtml/Webhook/RegistrationTest.php +++ b/dev/tests/unit/testsuite/Magento/Webhook/Controller/Adminhtml/Webhook/RegistrationTest.php @@ -92,7 +92,7 @@ class RegistrationTest extends \PHPUnit_Framework_TestCase $this->_mockConfig = $this->getMockBuilder('Magento\Core\Model\Config')->disableOriginalConstructor() ->getMock(); $this->_mockApp->expects($this->any())->method('getConfig')->will($this->returnValue($this->_mockConfig)); - $this->_mockEventManager = $this->getMockBuilder('Magento\Core\Model\Event\Manager') + $this->_mockEventManager = $this->getMockBuilder('Magento\Event\ManagerInterface') ->disableOriginalConstructor() ->getMock(); $this->_mockLayoutFilter = $this->getMockBuilder('Magento\Core\Model\Layout\Filter\Acl') @@ -112,12 +112,10 @@ class RegistrationTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->getMock(); - $this->_mockRequest = $this->getMockBuilder('Magento\Core\Controller\Request\Http') - ->disableOriginalConstructor() - ->getMock(); - $this->_mockResponse = $this->getMockBuilder('Magento\Core\Controller\Response\Http') + $this->_mockRequest = $this->getMockBuilder('Magento\App\Request\Http') ->disableOriginalConstructor() ->getMock(); + $this->_mockResponse = $this->getMock('Magento\App\Response\Http'); } public function testActivateActionException() diff --git a/dev/tests/unit/testsuite/Magento/Webhook/Controller/Adminhtml/Webhook/SubscriptionTest.php b/dev/tests/unit/testsuite/Magento/Webhook/Controller/Adminhtml/Webhook/SubscriptionTest.php index ce8e712013c..4c350d71590 100644 --- a/dev/tests/unit/testsuite/Magento/Webhook/Controller/Adminhtml/Webhook/SubscriptionTest.php +++ b/dev/tests/unit/testsuite/Magento/Webhook/Controller/Adminhtml/Webhook/SubscriptionTest.php @@ -67,6 +67,9 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase /** @var \PHPUnit_Framework_MockObject_MockObject */ protected $_mockRequest; + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $_mockResponse; + /** @var \PHPUnit_Framework_MockObject_MockObject */ protected $_mockConfigScope; @@ -88,7 +91,7 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase $this->_mockConfig = $this->getMockBuilder('Magento\Core\Model\Config')->disableOriginalConstructor() ->getMock(); $this->_mockApp->expects($this->any())->method('getConfig')->will($this->returnValue($this->_mockConfig)); - $this->_mockEventManager = $this->getMockBuilder('Magento\Core\Model\Event\Manager') + $this->_mockEventManager = $this->getMockBuilder('Magento\Event\ManagerInterface') ->disableOriginalConstructor() ->getMock(); $this->_mockLayoutFilter = $this->getMockBuilder('Magento\Core\Model\Layout\Filter\Acl') @@ -103,7 +106,10 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase $this->_mockSubscriptionSvc = $this->getMockBuilder('Magento\Webhook\Service\SubscriptionV1') ->disableOriginalConstructor() ->getMock(); - $this->_mockRequest = $this->getMockBuilder('Magento\Core\Controller\Request\Http') + $this->_mockRequest = $this->getMockBuilder('Magento\App\Request\Http') + ->disableOriginalConstructor() + ->getMock(); + $this->_mockResponse = $this->getMockBuilder('Magento\App\Response\Http') ->disableOriginalConstructor() ->getMock(); $this->_mockRegistry = $this->getMockBuilder('Magento\Core\Model\Registry') @@ -568,6 +574,7 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase 'session' => $this->_mockBackendModSess, 'translator' => $this->_mockTranslateModel, 'request' => $this->_mockRequest, + 'response' => $this->_mockResponse, ); $this->_mockBackendCntCtxt = $this->_objectManagerHelper diff --git a/dev/tests/unit/testsuite/Magento/Webhook/Model/EndpointTest.php b/dev/tests/unit/testsuite/Magento/Webhook/Model/EndpointTest.php index 428a2c26f85..249cd8927be 100644 --- a/dev/tests/unit/testsuite/Magento/Webhook/Model/EndpointTest.php +++ b/dev/tests/unit/testsuite/Magento/Webhook/Model/EndpointTest.php @@ -122,7 +122,7 @@ class EndpointTest extends \PHPUnit_Framework_TestCase */ public function testBeforeSave($hasAuthType, $hasDataChanges) { - $mockEventManager = $this->getMockBuilder('Magento\Core\Model\Event\Manager') + $mockEventManager = $this->getMockBuilder('Magento\Event\ManagerInterface') ->disableOriginalConstructor() ->getMock(); diff --git a/dev/tests/unit/testsuite/Magento/Webhook/Model/EventTest.php b/dev/tests/unit/testsuite/Magento/Webhook/Model/EventTest.php index 451f8dc7374..5d6eb4b7535 100644 --- a/dev/tests/unit/testsuite/Magento/Webhook/Model/EventTest.php +++ b/dev/tests/unit/testsuite/Magento/Webhook/Model/EventTest.php @@ -50,7 +50,7 @@ class EventTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->getMock(); - $mockEventManager = $this->getMockBuilder('Magento\Core\Model\Event\Manager') + $mockEventManager = $this->getMockBuilder('Magento\Event\ManagerInterface') ->disableOriginalConstructor() ->getMock(); diff --git a/dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Event/CollectionTest.php b/dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Event/CollectionTest.php index 873f74da5b0..128a7b9d3e5 100644 --- a/dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Event/CollectionTest.php +++ b/dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Event/CollectionTest.php @@ -31,8 +31,8 @@ class CollectionTest extends \PHPUnit_Framework_TestCase { public function testConstructor() { - /** @var \Magento\Core\Model\Event\Manager $eventManager */ - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + /** @var \Magento\Event\ManagerInterface $eventManager */ + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); /** @var \Magento\Data\Collection\Db\FetchStrategyInterface $mockFetchStrategy */ $mockFetchStrategy = $this->getMockBuilder('Magento\Data\Collection\Db\FetchStrategyInterface') ->disableOriginalConstructor() diff --git a/dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Job/CollectionTest.php b/dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Job/CollectionTest.php index 3ab515725f4..ec79757386f 100644 --- a/dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Job/CollectionTest.php +++ b/dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Job/CollectionTest.php @@ -31,8 +31,8 @@ class CollectionTest extends \PHPUnit_Framework_TestCase { public function testConstructor() { - /** @var \Magento\Core\Model\Event\Manager $eventManager */ - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + /** @var \Magento\Event\ManagerInterface $eventManager */ + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); /** @var \Magento\Data\Collection\Db\FetchStrategyInterface $mockFetchStrategy */ $mockFetchStrategy = $this->getMockBuilder('Magento\Data\Collection\Db\FetchStrategyInterface') ->disableOriginalConstructor() diff --git a/dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Subscription/CollectionTest.php b/dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Subscription/CollectionTest.php index ed67684f5dd..52cec64b34f 100644 --- a/dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Subscription/CollectionTest.php +++ b/dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Subscription/CollectionTest.php @@ -55,7 +55,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase private $_entityFactory; /** - * @var \Magento\Core\Model\Event\Manager + * @var \Magento\Event\ManagerInterface */ private $_eventManager; @@ -78,10 +78,10 @@ class CollectionTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue($this->_selectMock)); $subscriptionMock = $this->_makeMock('Magento\Webhook\Model\Subscription'); - $eventMgrMock = $this->_makeMock('Magento\Core\Model\Event\Manager'); + $eventMgrMock = $this->_makeMock('Magento\Event\ManagerInterface'); // Arguments to collection constructor - $this->_eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $this->_eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $this->_fetchStrategyMock = $this->_makeMock('Magento\Data\Collection\Db\FetchStrategyInterface'); $this->_endpointResMock = $this->_makeMock('Magento\Webhook\Model\Resource\Endpoint'); $this->_resourceMock = $this-> _makeMock('Magento\Webhook\Model\Resource\Subscription'); @@ -95,7 +95,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase array('Magento\Webhook\Model\Subscription', array(), $subscriptionMock) ); $getReturnMap = array( - array('Magento\Core\Model\Event\Manager', $eventMgrMock), + array('Magento\Event\ManagerInterface', $eventMgrMock), ); $mockObjectManager = $this->_setMageObjectManager(); $mockObjectManager->expects($this->any()) diff --git a/dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Subscription/Grid/CollectionTest.php b/dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Subscription/Grid/CollectionTest.php index 189ba2b6df6..733201eec4b 100644 --- a/dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Subscription/Grid/CollectionTest.php +++ b/dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Subscription/Grid/CollectionTest.php @@ -31,7 +31,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase { public function testConstructor() { - $eventManager = $this->getMock('Magento\Core\Model\Event\Manager', array(), array(), '', false); + $eventManager = $this->getMock('Magento\Event\ManagerInterface', array(), array(), '', false); $fetchStrategyMock = $this->_makeMock('Magento\Data\Collection\Db\FetchStrategyInterface'); $endpointResMock = $this->_makeMock('Magento\Webhook\Model\Resource\Endpoint'); diff --git a/dev/tests/unit/testsuite/Magento/Webhook/Model/SubscriptionTest.php b/dev/tests/unit/testsuite/Magento/Webhook/Model/SubscriptionTest.php index 9f308eb6772..15457f0dc6a 100644 --- a/dev/tests/unit/testsuite/Magento/Webhook/Model/SubscriptionTest.php +++ b/dev/tests/unit/testsuite/Magento/Webhook/Model/SubscriptionTest.php @@ -61,7 +61,7 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase ->method('getUser') ->will($this->returnValue($this->_mockUser)); - $mockEventDispatcher = $this->getMockBuilder('Magento\Core\Model\Event\Manager') + $mockEventDispatcher = $this->getMockBuilder('Magento\Event\ManagerInterface') ->disableOriginalConstructor() ->getMock(); diff --git a/dev/tools/Magento/Tools/Migration/aliases_map/composite_modules_ce.php b/dev/tools/Magento/Tools/Migration/aliases_map/composite_modules_ce.php index 9a1b7d1fc9a..36059e8de84 100644 --- a/dev/tools/Magento/Tools/Migration/aliases_map/composite_modules_ce.php +++ b/dev/tools/Magento/Tools/Migration/aliases_map/composite_modules_ce.php @@ -27,10 +27,11 @@ /** * List on composite module names for Magento CE */ - -require_once realpath(dirname(dirname(dirname(dirname(__DIR__))))) +require_once realpath(dirname(dirname(dirname(dirname(dirname(dirname(__DIR__))))))) + . '/app/code/Magento/Core/Model/Resource/SetupInterface.php'; +require_once realpath(dirname(dirname(dirname(dirname(dirname(dirname(__DIR__))))))) . '/app/code/Magento/Core/Model/Resource/Setup.php'; -require_once realpath(dirname(dirname(dirname(dirname(__DIR__))))) +require_once realpath(dirname(dirname(dirname(dirname(dirname(dirname(__DIR__))))))) . '/app/code/Magento/Core/Model/Resource/Setup/Migration.php'; return \Magento\Core\Model\Resource\Setup\Migration::getCompositeModules(); diff --git a/dev/tools/Magento/Tools/Migration/get_aliases_map.php b/dev/tools/Magento/Tools/Migration/get_aliases_map.php index 2e401dd8c46..93811cd4eaa 100644 --- a/dev/tools/Magento/Tools/Migration/get_aliases_map.php +++ b/dev/tools/Magento/Tools/Migration/get_aliases_map.php @@ -43,21 +43,24 @@ if (isset($options['h'])) { exit(0); } -require_once realpath(dirname(dirname(dirname(__DIR__)))) . '/dev/tests/static/framework/bootstrap.php'; -require_once realpath(dirname(dirname(dirname(__DIR__)))) . '/lib/Zend/Json.php'; +require_once realpath(dirname(dirname(dirname(dirname(dirname(__DIR__)))))) . + '/dev/tests/static/framework/bootstrap.php'; +require_once realpath(dirname(dirname(dirname(dirname(dirname(__DIR__)))))) . + '/dev/tests/static/framework/Magento/TestFramework/Utility/Classes.php'; +require_once realpath(dirname(dirname(dirname(dirname(dirname(__DIR__)))))) . '/lib/Zend/Json.php'; -$magentoBaseDir = dirname(__DIR__) . '/../../'; +$magentoBaseDir = dirname(__DIR__) . '/../../../../'; if (isset($options['p'])) { $magentoBaseDir = $options['p']; } $utilityFiles = new Magento\TestFramework\Utility\Files($magentoBaseDir); $map = array(); -$compositeModules = getFilesCombinedArray(__DIR__ . '/AliasesMap', '/^composite_modules_.*\.php$/'); +$compositeModules = getFilesCombinedArray(__DIR__ . '/aliases_map', '/^composite_modules_.*\.php$/'); // PHP code foreach ($utilityFiles->getPhpFiles(true, true, true, false) as $file) { $content = file_get_contents($file); - $classes = \Magento\Test\Legacy\ClassesTest::collectPhpCodeClasses($content); + $classes = \Magento\TestFramework\Utility\Classes::collectPhpCodeClasses($content); if ($classes) { $factoryNames = array_filter($classes, 'isFactoryName'); foreach ($factoryNames as $factoryName) { diff --git a/dev/tools/Magento/Tools/View/Generator/Config.php b/dev/tools/Magento/Tools/View/Generator/Config.php index d325aebc0c3..3e746269d97 100644 --- a/dev/tools/Magento/Tools/View/Generator/Config.php +++ b/dev/tools/Magento/Tools/View/Generator/Config.php @@ -61,8 +61,8 @@ class Config if (isset($cmdOptions['destination'])) { $destinationDir = $cmdOptions['destination']; } else { - $dirs = new \Magento\Core\Model\Dir($sourceDir); - $destinationDir = $dirs->getDir(\Magento\Core\Model\Dir::STATIC_VIEW); + $dirs = new \Magento\App\Dir($sourceDir); + $destinationDir = $dirs->getDir(\Magento\App\Dir::STATIC_VIEW); } if (!is_dir($destinationDir)) { throw new \Magento\Exception('Destination directory does not exist: ' . $destinationDir); diff --git a/dev/tools/Magento/Tools/View/Generator/CopyRule.php b/dev/tools/Magento/Tools/View/Generator/CopyRule.php index 4049dd44e85..84f7b27643c 100644 --- a/dev/tools/Magento/Tools/View/Generator/CopyRule.php +++ b/dev/tools/Magento/Tools/View/Generator/CopyRule.php @@ -82,7 +82,7 @@ class CopyRule public function getCopyRules() { $result = array(); - /** @var $theme \Magento\Core\Model\ThemeInterface */ + /** @var $theme \Magento\View\Design\ThemeInterface */ foreach ($this->_themes as $theme) { $area = $theme->getArea(); $nonModularLocations = $this->_fallbackRule->getPatternDirs(array( diff --git a/dev/tools/Magento/Tools/View/Generator/ThemeLight.php b/dev/tools/Magento/Tools/View/Generator/ThemeLight.php index 0f1f1ded935..6dcf3ae8e51 100644 --- a/dev/tools/Magento/Tools/View/Generator/ThemeLight.php +++ b/dev/tools/Magento/Tools/View/Generator/ThemeLight.php @@ -29,7 +29,7 @@ */ namespace Magento\Tools\View\Generator; -class ThemeLight extends \Magento\Object implements \Magento\Core\Model\ThemeInterface +class ThemeLight extends \Magento\Object implements \Magento\View\Design\ThemeInterface { /** * {@inheritdoc} @@ -70,4 +70,12 @@ class ThemeLight extends \Magento\Object implements \Magento\Core\Model\ThemeInt { return (string)$this->getData('code'); } + + /** + * {@inheritdoc} + */ + public function isPhysical() + { + return false; + } } diff --git a/dev/tools/Magento/Tools/View/generator.php b/dev/tools/Magento/Tools/View/generator.php index 9076ca01faf..bdf9fd03ad6 100644 --- a/dev/tools/Magento/Tools/View/generator.php +++ b/dev/tools/Magento/Tools/View/generator.php @@ -62,7 +62,7 @@ try { $config = new \Magento\Tools\View\Generator\Config(BP, $options); $filesystem = new \Magento\Filesystem(new \Magento\Filesystem\Adapter\Local); - $dirs = new \Magento\Core\Model\Dir($config->getSourceDir()); + $dirs = new \Magento\App\Dir($config->getSourceDir()); $objectManager = new \Magento\ObjectManager\ObjectManager(); $themes = new \Magento\Core\Model\Theme\Collection($filesystem, $objectManager, $dirs); diff --git a/downloader/app/Magento/Downloader/Controller.php b/downloader/app/Magento/Downloader/Controller.php index f2f7234fe66..89a7b31da55 100755 --- a/downloader/app/Magento/Downloader/Controller.php +++ b/downloader/app/Magento/Downloader/Controller.php @@ -513,7 +513,7 @@ final class Controller include_once self::$_instance->getBootstrapPath(); \Magento\Core\Model\ObjectManager::getInstance() - ->get('Magento\Core\Model\App\State') + ->get('Magento\App\State') ->setIsDownloader(); } \Magento\Core\Model\ObjectManager::getInstance()->get('Magento\Core\Model\App'); @@ -943,9 +943,9 @@ final class Controller // reinit config and apply all updates \Mage::app()->getConfig()->reinit(); - /** @var $updater \Magento\Core\Model\Db\UpdaterInterface*/ + /** @var $updater \Magento\App\UpdaterInterface*/ $updater = \Magento\Core\Model\ObjectManager::getInstance() - ->get('Magento\Core\Model\Db\UpdaterInterface'); + ->get('Magento\App\UpdaterInterface'); $updater->updateScheme(); $updater->updateData(); $message .= 'Cache cleaned successfully'; diff --git a/app/code/Magento/Core/Controller/Varien/AbstractAction.php b/lib/Magento/App/Action/AbstractAction.php similarity index 73% rename from app/code/Magento/Core/Controller/Varien/AbstractAction.php rename to lib/Magento/App/Action/AbstractAction.php index 4b8c2d63c09..001ce4812ac 100644 --- a/app/code/Magento/Core/Controller/Varien/AbstractAction.php +++ b/lib/Magento/App/Action/AbstractAction.php @@ -1,5 +1,7 @@ <?php /** + * Abstract redirect/forward action class + * * Magento * * NOTICE OF LICENSE @@ -18,41 +20,30 @@ * 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_Core * @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\App\Action; -/** - * Abstract redirect/forward action class - * - * @category Magento - * @package Magento_Core - * @author Magento Core Team <core@magentocommerce.com> - */ -namespace Magento\Core\Controller\Varien; - -abstract class AbstractAction - implements \Magento\Core\Controller\Varien\DispatchableInterface +abstract class AbstractAction implements \Magento\App\ActionInterface { /** - * @var \Magento\Core\Controller\Request\Http + * @var \Magento\App\RequestInterface */ protected $_request; /** - * @var \Magento\Core\Controller\Response\Http + * @var \Magento\App\ResponseInterface */ protected $_response; /** - * @param \Magento\Core\Controller\Request\Http $request - * @param \Magento\Core\Controller\Response\Http $response + * @param \Magento\App\RequestInterface $request + * @param \Magento\App\ResponseInterface $response */ public function __construct( - \Magento\Core\Controller\Request\Http $request, - \Magento\Core\Controller\Response\Http $response + \Magento\App\RequestInterface $request, + \Magento\App\ResponseInterface $response ) { $this->_request = $request; $this->_response = $response; @@ -61,7 +52,7 @@ abstract class AbstractAction /** * Retrieve request object * - * @return \Magento\Core\Controller\Request\Http + * @return \Magento\App\RequestInterface */ public function getRequest() { @@ -71,7 +62,7 @@ abstract class AbstractAction /** * Retrieve response object * - * @return \Magento\Core\Controller\Response\Http + * @return \Magento\App\ResponseInterface */ public function getResponse() { diff --git a/app/code/Magento/Core/Controller/Varien/Exception.php b/lib/Magento/App/Action/Exception.php similarity index 87% rename from app/code/Magento/Core/Controller/Varien/Exception.php rename to lib/Magento/App/Action/Exception.php index 60657a9336f..d555c7b9126 100644 --- a/app/code/Magento/Core/Controller/Varien/Exception.php +++ b/lib/Magento/App/Action/Exception.php @@ -1,5 +1,7 @@ <?php /** + * Controller exception that can fork different actions, cause forward or redirect + * * Magento * * NOTICE OF LICENSE @@ -18,18 +20,14 @@ * 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_Core * @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\App\Action; /** - * Controller exception that can fork different actions, cause forward or redirect - * + * @SuppressWarnings(PHPMD.LongVariable) */ -namespace Magento\Core\Controller\Varien; - class Exception extends \Exception { const RESULT_FORWARD = '_forward'; @@ -47,10 +45,11 @@ class Exception extends \Exception * @param string $controllerName * @param string $moduleName * @param array $params - * @return \Magento\Core\Controller\Varien\Exception + * @return \Magento\App\Action\Exception */ - public function prepareForward($actionName = null, $controllerName = null, $moduleName = null, array $params = array()) - { + public function prepareForward( + $actionName = null, $controllerName = null, $moduleName = null, array $params = array() + ) { $this->_resultCallback = self::RESULT_FORWARD; if (null === $actionName) { $actionName = $this->_defaultActionName; @@ -63,7 +62,7 @@ class Exception extends \Exception * Prepare data for running a custom action * * @param string $actionName - * @return \Magento\Core\Controller\Varien\Exception + * @return \Magento\App\Action\Exception */ public function prepareFork($actionName = null) { @@ -80,7 +79,7 @@ class Exception extends \Exception * @param string $action * @param string $flag * @param bool $value - * @return \Magento\Core\Controller\Varien\Exception + * @return \Magento\App\Action\Exception */ public function prepareFlag($action, $flag, $value) { diff --git a/app/code/Magento/Core/Controller/Varien/Action/Forward.php b/lib/Magento/App/Action/Forward.php similarity index 78% rename from app/code/Magento/Core/Controller/Varien/Action/Forward.php rename to lib/Magento/App/Action/Forward.php index a0c5b992dcc..c4b87142764 100644 --- a/app/code/Magento/Core/Controller/Varien/Action/Forward.php +++ b/lib/Magento/App/Action/Forward.php @@ -1,5 +1,7 @@ <?php /** + * Forward action class + * * Magento * * NOTICE OF LICENSE @@ -18,22 +20,12 @@ * 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_Core * @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\App\Action; -/** - * Forward controller - * - * @category Magento - * @package Magento_Core - * @author Magento Core Team <core@magentocommerce.com> - */ -namespace Magento\Core\Controller\Varien\Action; - -class Forward extends \Magento\Core\Controller\Varien\AbstractAction +class Forward extends AbstractAction { /** * Dispatch controller action diff --git a/app/code/Magento/Core/Controller/Varien/Action/Redirect.php b/lib/Magento/App/Action/Redirect.php similarity index 76% rename from app/code/Magento/Core/Controller/Varien/Action/Redirect.php rename to lib/Magento/App/Action/Redirect.php index c7d448a1925..635b9e38f98 100644 --- a/app/code/Magento/Core/Controller/Varien/Action/Redirect.php +++ b/lib/Magento/App/Action/Redirect.php @@ -1,5 +1,7 @@ <?php /** + * Redirect action class + * * Magento * * NOTICE OF LICENSE @@ -18,28 +20,17 @@ * 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_Core * @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\App\Action; -/** - * Redirect controller - * - * @category Magento - * @package Magento_Core - * @author Magento Core Team <core@magentocommerce.com> - */ -namespace Magento\Core\Controller\Varien\Action; - -class Redirect extends \Magento\Core\Controller\Varien\AbstractAction +class Redirect extends AbstractAction { - /** + /** * Dispatch controller action * * @param string $action action name - * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function dispatch($action) diff --git a/app/code/Magento/Core/Controller/Varien/Action/Factory.php b/lib/Magento/App/ActionFactory.php similarity index 86% rename from app/code/Magento/Core/Controller/Varien/Action/Factory.php rename to lib/Magento/App/ActionFactory.php index 531b123c729..ef56443fbe9 100644 --- a/app/code/Magento/Core/Controller/Varien/Action/Factory.php +++ b/lib/Magento/App/ActionFactory.php @@ -1,5 +1,7 @@ <?php /** + * Action Factory + * * Magento * * NOTICE OF LICENSE @@ -18,22 +20,12 @@ * 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_Core * @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\App; -/** - * Controller factory - * - * @category Magento - * @package Magento_Core - * @author Magento Core Team <core@magentocommerce.com> - */ -namespace Magento\Core\Controller\Varien\Action; - -class Factory +class ActionFactory { /** * @var \Magento\ObjectManager diff --git a/app/code/Magento/Core/Model/TemplateEngine/BlockTrackerInterface.php b/lib/Magento/App/ActionInterface.php similarity index 79% rename from app/code/Magento/Core/Model/TemplateEngine/BlockTrackerInterface.php rename to lib/Magento/App/ActionInterface.php index 42112b25b18..2c3205128d4 100644 --- a/app/code/Magento/Core/Model/TemplateEngine/BlockTrackerInterface.php +++ b/lib/Magento/App/ActionInterface.php @@ -1,6 +1,6 @@ <?php /** - * Interface for keeping track of the current block + * Magento application action * * Magento * @@ -23,13 +23,16 @@ * @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\Core\Model\TemplateEngine; +namespace Magento\App; -interface BlockTrackerInterface +interface ActionInterface { /** - * Get the current block - * @return \Magento\Core\Block\Template + * Dispatch controller action + * + * @abstract + * @param string $action action name + * @return void */ - public function getCurrentBlock(); + public function dispatch($action); } diff --git a/lib/Magento/App/Area/FrontNameResolverFactory.php b/lib/Magento/App/Area/FrontNameResolverFactory.php new file mode 100644 index 00000000000..8c81099b540 --- /dev/null +++ b/lib/Magento/App/Area/FrontNameResolverFactory.php @@ -0,0 +1,51 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\App\Area; + +class FrontNameResolverFactory +{ + /** + * @var \Magento\ObjectManager + */ + protected $_objectManager; + + /** + * @param \Magento\ObjectManager $objectManager + */ + public function __construct(\Magento\ObjectManager $objectManager) + { + $this->_objectManager = $objectManager; + } + + /** + * Create front name resolver + * + * @param string $className + * @return FrontNameResolverInterface + */ + public function create($className) + { + return $this->_objectManager->create($className); + } +} \ No newline at end of file diff --git a/app/code/Magento/Core/Controller/FrontInterface.php b/lib/Magento/App/Area/FrontNameResolverInterface.php similarity index 79% rename from app/code/Magento/Core/Controller/FrontInterface.php rename to lib/Magento/App/Area/FrontNameResolverInterface.php index 3191972da30..9c311b441ce 100644 --- a/app/code/Magento/Core/Controller/FrontInterface.php +++ b/lib/Magento/App/Area/FrontNameResolverInterface.php @@ -18,20 +18,17 @@ * 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_Core * @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\App\Area; -namespace Magento\Core\Controller; - -interface FrontInterface +interface FrontNameResolverInterface { /** - * Dispatch request and send response + * Retrieve front name * - * @return \Magento\Core\Controller\FrontInterface + * @return string */ - public function dispatch(); -} + public function getFrontName(); +} \ No newline at end of file diff --git a/lib/Magento/App/AreaList.php b/lib/Magento/App/AreaList.php new file mode 100644 index 00000000000..091c226ca2f --- /dev/null +++ b/lib/Magento/App/AreaList.php @@ -0,0 +1,97 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\App; + +class AreaList +{ + /** + * Area configuration list + * + * @var array + */ + protected $_areas; + + /** + * @var string + */ + protected $_defaultAreaCode; + + /** + * @var Area\FrontNameResolverFactory + */ + protected $_resolverFactory; + + /** + * @param Area\FrontNameResolverFactory $resolverFactory + * @param array $areas + * @param string $default + */ + public function __construct(\Magento\App\Area\FrontNameResolverFactory $resolverFactory, array $areas, $default) + { + $this->_resolverFactory = $resolverFactory; + $this->_areas = $areas; + $this->_defaultAreaCode = $default; + } + + /** + * Retrieve area code by front name + * + * @param string $frontName + * @return null|string + */ + public function getCodeByFrontName($frontName) + { + foreach ($this->_areas as $areaCode => &$areaInfo) { + if (!isset($areaInfo['frontName']) && isset($areaInfo['frontNameResolver'])) { + $areaInfo['frontName'] = $this->_resolverFactory->create($areaInfo['frontNameResolver']) + ->getFrontName(); + } + if ($areaInfo['frontName'] == $frontName) { + return $areaCode; + } + } + return $this->_defaultAreaCode; + } + + /** + * Retrieve area front name by code + * + * @param string $areaCode + * @return string + */ + public function getFrontName($areaCode) + { + return isset($this->_areas[$areaCode]['frontName']) ? $this->_areas[$areaCode]['frontName'] : null; + } + + /** + * Retrieve area codes + * + * @return array + */ + public function getCodes() + { + return array_keys($this->_areas); + } +} \ No newline at end of file diff --git a/app/code/Magento/Core/Model/Dir.php b/lib/Magento/App/Dir.php similarity index 99% rename from app/code/Magento/Core/Model/Dir.php rename to lib/Magento/App/Dir.php index 4de063011cd..5ac0e745a96 100644 --- a/app/code/Magento/Core/Model/Dir.php +++ b/lib/Magento/App/Dir.php @@ -26,7 +26,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\Core\Model; +namespace Magento\App; class Dir { diff --git a/app/code/Magento/Core/Model/Dir/Verification.php b/lib/Magento/App/Dir/Verification.php similarity index 76% rename from app/code/Magento/Core/Model/Dir/Verification.php rename to lib/Magento/App/Dir/Verification.php index 330e4ba1fd2..c3859764f88 100644 --- a/app/code/Magento/Core/Model/Dir/Verification.php +++ b/lib/Magento/App/Dir/Verification.php @@ -23,7 +23,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\Core\Model\Dir; +namespace Magento\App\Dir; class Verification { @@ -33,12 +33,12 @@ class Verification * @var array */ protected static $_productionDirs = array( - \Magento\Core\Model\Dir::MEDIA, - \Magento\Core\Model\Dir::VAR_DIR, - \Magento\Core\Model\Dir::TMP, - \Magento\Core\Model\Dir::CACHE, - \Magento\Core\Model\Dir::LOG, - \Magento\Core\Model\Dir::SESSION, + \Magento\App\Dir::MEDIA, + \Magento\App\Dir::VAR_DIR, + \Magento\App\Dir::TMP, + \Magento\App\Dir::CACHE, + \Magento\App\Dir::LOG, + \Magento\App\Dir::SESSION, ); /** @@ -47,13 +47,13 @@ class Verification * @var array */ protected static $_nonProductionDirs = array( - \Magento\Core\Model\Dir::MEDIA, - \Magento\Core\Model\Dir::STATIC_VIEW, - \Magento\Core\Model\Dir::VAR_DIR, - \Magento\Core\Model\Dir::TMP, - \Magento\Core\Model\Dir::CACHE, - \Magento\Core\Model\Dir::LOG, - \Magento\Core\Model\Dir::SESSION, + \Magento\App\Dir::MEDIA, + \Magento\App\Dir::STATIC_VIEW, + \Magento\App\Dir::VAR_DIR, + \Magento\App\Dir::TMP, + \Magento\App\Dir::CACHE, + \Magento\App\Dir::LOG, + \Magento\App\Dir::SESSION, ); /** @@ -62,7 +62,7 @@ class Verification protected $_filesystem; /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs; @@ -77,13 +77,13 @@ class Verification * Constructor - initialize object with required dependencies, determine application state * * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Dir $dirs - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\Dir $dirs + * @param \Magento\App\State $appState */ public function __construct( \Magento\Filesystem $filesystem, - \Magento\Core\Model\Dir $dirs, - \Magento\Core\Model\App\State $appState + \Magento\App\Dir $dirs, + \Magento\App\State $appState ) { $this->_filesystem = $filesystem; $this->_dirs = $dirs; @@ -93,13 +93,13 @@ class Verification /** * Return list of directories, that must be verified according to the application mode * - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState * @return array */ - protected function _getDirsToVerify(\Magento\Core\Model\App\State $appState) + protected function _getDirsToVerify(\Magento\App\State $appState) { $result = array(); - $codes = ($appState->getMode() == \Magento\Core\Model\App\State::MODE_PRODUCTION) + $codes = ($appState->getMode() == \Magento\App\State::MODE_PRODUCTION) ? self::$_productionDirs : self::$_nonProductionDirs; foreach ($codes as $code) { diff --git a/lib/Magento/App/FrontController.php b/lib/Magento/App/FrontController.php new file mode 100644 index 00000000000..52e0d7760db --- /dev/null +++ b/lib/Magento/App/FrontController.php @@ -0,0 +1,183 @@ +<?php +/** + * Front controller responsible for dispatcing application requests + * + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\App; + +class FrontController implements FrontControllerInterface +{ + /** + * @var array + */ + protected $_defaults = array(); + + /** + * @var \Magento\App\RouterList + */ + protected $_routerList; + + /** + * @var \Magento\App\RequestInterface + */ + protected $_request; + + /** + * @var \Magento\App\ResponseInterface + */ + protected $_response; + + /** + * @var \Magento\Event\ManagerInterface + */ + protected $_eventManager; + + /** + * @var ActionInterface + */ + protected $_action; + + /** + * @param \Magento\Event\ManagerInterface $eventManager + * @param \Magento\App\ResponseInterface $response + * @param RouterList $routerList + * @param array $data + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function __construct( + \Magento\Event\ManagerInterface $eventManager, + \Magento\App\ResponseInterface $response, + RouterList $routerList, + array $data = array() + ) { + $this->_eventManager = $eventManager; + $this->_routerList = $routerList; + $this->_response = $response; + } + + /** + * Set Default Value + * + * @param string $key + * @param mixed $value + * @return $this + */ + public function setDefault($key, $value = null) + { + if (is_array($key)) { + $this->_defaults = $key; + } else { + $this->_defaults[$key] = $value; + } + return $this; + } + + /** + * Retrieve default value + * + * @param string $key + * @return mixed + */ + public function getDefault($key=null) + { + if (is_null($key)) { + return $this->_defaults; + } elseif (isset($this->_defaults[$key])) { + return $this->_defaults[$key]; + } + return false; + } + + /** + * Retrieve request object + * + * @return \Magento\App\RequestInterface + */ + public function getRequest() + { + return $this->_request; + } + + /** + * Retrieve response object + * + * @return \Magento\App\ResponseInterface + */ + public function getResponse() + { + return $this->_response; + } + + /** + * Seta application action + * + * @param ActionInterface $action + */ + public function setAction(ActionInterface $action) + { + $this->_action = $action; + } + + /** + * @return ActionInterface + */ + public function getAction() + { + return $this->_action; + } + + /** + * @param RequestInterface $request + * @throws \LogicException + */ + public function dispatch(RequestInterface $request) + { + $this->_request = $request; + \Magento\Profiler::start('routers_match'); + $routingCycleCounter = 0; + while (!$request->isDispatched() && $routingCycleCounter++ < 100) { + /** @var $router \Magento\App\Router\AbstractRouter */ + foreach ($this->_routerList->getRouters() as $router) { + $router->setFront($this); + + /** @var $controllerInstance \Magento\App\ActionInterface */ + $controllerInstance = $router->match($this->getRequest()); + if ($controllerInstance) { + $controllerInstance->dispatch($request->getActionName()); + break; + } + } + } + \Magento\Profiler::stop('routers_match'); + if ($routingCycleCounter > 100) { + throw new \LogicException('Front controller reached 100 router match iterations'); + } + // This event gives possibility to launch something before sending output (allow cookie setting) + $this->_eventManager->dispatch('controller_front_send_response_before', array('front' => $this)); + \Magento\Profiler::start('send_response'); + $this->_eventManager->dispatch('http_response_send_before', array('response' => $this)); + $this->getResponse()->sendResponse(); + \Magento\Profiler::stop('send_response'); + $this->_eventManager->dispatch('controller_front_send_response_after', array('front' => $this)); + } +} diff --git a/lib/Magento/App/FrontControllerInterface.php b/lib/Magento/App/FrontControllerInterface.php new file mode 100644 index 00000000000..fe382c2a00f --- /dev/null +++ b/lib/Magento/App/FrontControllerInterface.php @@ -0,0 +1,36 @@ +<?php +/** + * Application front controller responsible for dispatching application requests + * + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\App; + +interface FrontControllerInterface +{ + /** + * Dispatch application action + * + * @param RequestInterface $request + */ + public function dispatch(RequestInterface $request); +} diff --git a/app/code/Magento/Core/Model/Module/Declaration/Converter/Dom.php b/lib/Magento/App/Module/Declaration/Converter/Dom.php old mode 100755 new mode 100644 similarity index 99% rename from app/code/Magento/Core/Model/Module/Declaration/Converter/Dom.php rename to lib/Magento/App/Module/Declaration/Converter/Dom.php index 34de226ee1f..7625dd3b2a0 --- a/app/code/Magento/Core/Model/Module/Declaration/Converter/Dom.php +++ b/lib/Magento/App/Module/Declaration/Converter/Dom.php @@ -21,7 +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\Core\Model\Module\Declaration\Converter; +namespace Magento\App\Module\Declaration\Converter; class Dom implements \Magento\Config\ConverterInterface { diff --git a/app/code/Magento/Core/Model/Module/Declaration/FileResolver.php b/lib/Magento/App/Module/Declaration/FileResolver.php similarity index 89% rename from app/code/Magento/Core/Model/Module/Declaration/FileResolver.php rename to lib/Magento/App/Module/Declaration/FileResolver.php index 5fd9a021c47..aba33599fb8 100644 --- a/app/code/Magento/Core/Model/Module/Declaration/FileResolver.php +++ b/lib/Magento/App/Module/Declaration/FileResolver.php @@ -21,19 +21,19 @@ * @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\Core\Model\Module\Declaration; +namespace Magento\App\Module\Declaration; class FileResolver implements \Magento\Config\FileResolverInterface { /** - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_applicationDirs; /** - * @param \Magento\Core\Model\Dir $applicationDirs + * @param \Magento\App\Dir $applicationDirs */ - public function __construct(\Magento\Core\Model\Dir $applicationDirs) + public function __construct(\Magento\App\Dir $applicationDirs) { $this->_applicationDirs = $applicationDirs; } @@ -44,7 +44,7 @@ class FileResolver implements \Magento\Config\FileResolverInterface */ public function get($filename, $scope) { - $appCodeDir = $this->_applicationDirs->getDir(\Magento\Core\Model\Dir::MODULES); + $appCodeDir = $this->_applicationDirs->getDir(\Magento\App\Dir::MODULES); $moduleFilePattern = $appCodeDir . DIRECTORY_SEPARATOR . '*' . DIRECTORY_SEPARATOR . '*' . DIRECTORY_SEPARATOR . 'etc' . DIRECTORY_SEPARATOR . 'module.xml'; $moduleFileList = glob($moduleFilePattern); @@ -60,7 +60,7 @@ class FileResolver implements \Magento\Config\FileResolverInterface $output[$scope][] = $file; } - $appConfigDir = $this->_applicationDirs->getDir(\Magento\Core\Model\Dir::CONFIG); + $appConfigDir = $this->_applicationDirs->getDir(\Magento\App\Dir::CONFIG); $globalEnablerPattern = $appConfigDir . DIRECTORY_SEPARATOR . '*' . DIRECTORY_SEPARATOR . 'module.xml'; $output['base'] = glob($globalEnablerPattern); // Put global enablers at the end of the file list diff --git a/app/code/Magento/Core/Model/Module/Declaration/Reader/Filesystem.php b/lib/Magento/App/Module/Declaration/Reader/Filesystem.php old mode 100755 new mode 100644 similarity index 93% rename from app/code/Magento/Core/Model/Module/Declaration/Reader/Filesystem.php rename to lib/Magento/App/Module/Declaration/Reader/Filesystem.php index 876d6cd141b..dd21f43b16d --- a/app/code/Magento/Core/Model/Module/Declaration/Reader/Filesystem.php +++ b/lib/Magento/App/Module/Declaration/Reader/Filesystem.php @@ -21,7 +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\Core\Model\Module\Declaration\Reader; +namespace Magento\App\Module\Declaration\Reader; class Filesystem extends \Magento\Config\Reader\Filesystem { @@ -43,9 +43,9 @@ class Filesystem extends \Magento\Config\Reader\Filesystem ); /** - * @param \Magento\Core\Model\Module\Declaration\FileResolver $fileResolver - * @param \Magento\Core\Model\Module\Declaration\Converter\Dom $converter - * @param \Magento\Core\Model\Module\Declaration\SchemaLocator $schemaLocator + * @param \Magento\App\Module\Declaration\FileResolver $fileResolver + * @param \Magento\App\Module\Declaration\Converter\Dom $converter + * @param \Magento\App\Module\Declaration\SchemaLocator $schemaLocator * @param \Magento\Config\ValidationStateInterface $validationState * @param string $fileName * @param array $idAttributes @@ -53,9 +53,9 @@ class Filesystem extends \Magento\Config\Reader\Filesystem * @param array $allowedModules */ public function __construct( - \Magento\Core\Model\Module\Declaration\FileResolver $fileResolver, - \Magento\Core\Model\Module\Declaration\Converter\Dom $converter, - \Magento\Core\Model\Module\Declaration\SchemaLocator $schemaLocator, + \Magento\App\Module\Declaration\FileResolver $fileResolver, + \Magento\App\Module\Declaration\Converter\Dom $converter, + \Magento\App\Module\Declaration\SchemaLocator $schemaLocator, \Magento\Config\ValidationStateInterface $validationState, $fileName = 'module.xml', $idAttributes = array(), @@ -191,7 +191,7 @@ class Filesystem extends \Magento\Config\Reader\Filesystem * (in order not to add extra information about dependencies to module config) */ $moduleDependencyMap = array(); - foreach ($modules as $moduleName => $moduleConfig) { + foreach (array_keys($modules) as $moduleName) { $moduleDependencyMap[] = array( 'moduleName' => $moduleName, 'dependencies' => $this->_getExtendedModuleDependencies($moduleName, $modules), diff --git a/app/code/Magento/Core/Model/Module/Declaration/SchemaLocator.php b/lib/Magento/App/Module/Declaration/SchemaLocator.php similarity index 92% rename from app/code/Magento/Core/Model/Module/Declaration/SchemaLocator.php rename to lib/Magento/App/Module/Declaration/SchemaLocator.php index c3a17184475..c61020159d1 100644 --- a/app/code/Magento/Core/Model/Module/Declaration/SchemaLocator.php +++ b/lib/Magento/App/Module/Declaration/SchemaLocator.php @@ -23,7 +23,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\Core\Model\Module\Declaration; +namespace Magento\App\Module\Declaration; class SchemaLocator implements \Magento\Config\SchemaLocatorInterface { @@ -34,7 +34,7 @@ class SchemaLocator implements \Magento\Config\SchemaLocatorInterface */ public function getSchema() { - return realpath(__DIR__ . '/../../../etc/module.xsd'); + return realpath(__DIR__ . '/../../etc/module.xsd'); } /** diff --git a/app/code/Magento/Core/Model/Module/Dir.php b/lib/Magento/App/Module/Dir.php similarity index 86% rename from app/code/Magento/Core/Model/Module/Dir.php rename to lib/Magento/App/Module/Dir.php index 184e6b053e7..ebe1b15d5b5 100644 --- a/app/code/Magento/Core/Model/Module/Dir.php +++ b/lib/Magento/App/Module/Dir.php @@ -23,21 +23,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\Core\Model\Module; +namespace Magento\App\Module; class Dir { /** * Directory registry * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_applicationDirs; /** - * @param \Magento\Core\Model\Dir $applicationDirs + * @param \Magento\App\Dir $applicationDirs */ - public function __construct(\Magento\Core\Model\Dir $applicationDirs) + public function __construct(\Magento\App\Dir $applicationDirs) { $this->_applicationDirs = $applicationDirs; } @@ -52,7 +52,7 @@ class Dir */ public function getDir($moduleName, $type = '') { - $result = $this->_applicationDirs->getDir(\Magento\Core\Model\Dir::MODULES) + $result = $this->_applicationDirs->getDir(\Magento\App\Dir::MODULES) . DIRECTORY_SEPARATOR . uc_words($moduleName, DIRECTORY_SEPARATOR); if ($type) { diff --git a/app/code/Magento/Core/Model/Module/Dir/ReverseResolver.php b/lib/Magento/App/Module/Dir/ReverseResolver.php similarity index 83% rename from app/code/Magento/Core/Model/Module/Dir/ReverseResolver.php rename to lib/Magento/App/Module/Dir/ReverseResolver.php index 32360620a56..cff0b9c4053 100644 --- a/app/code/Magento/Core/Model/Module/Dir/ReverseResolver.php +++ b/lib/Magento/App/Module/Dir/ReverseResolver.php @@ -23,27 +23,27 @@ * @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\Core\Model\Module\Dir; +namespace Magento\App\Module\Dir; class ReverseResolver { /** - * @var \Magento\Core\Model\ModuleListInterface + * @var \Magento\App\ModuleListInterface */ protected $_moduleList; /** - * @var \Magento\Core\Model\Module\Dir + * @var \Magento\App\Module\Dir */ protected $_moduleDirs; /** - * @param \Magento\Core\Model\ModuleListInterface $moduleList - * @param \Magento\Core\Model\Module\Dir $moduleDirs + * @param \Magento\App\ModuleListInterface $moduleList + * @param \Magento\App\Module\Dir $moduleDirs */ public function __construct( - \Magento\Core\Model\ModuleListInterface $moduleList, - \Magento\Core\Model\Module\Dir $moduleDirs + \Magento\App\ModuleListInterface $moduleList, + \Magento\App\Module\Dir $moduleDirs ) { $this->_moduleList = $moduleList; $this->_moduleDirs = $moduleDirs; diff --git a/app/code/Magento/Core/Model/Module/ResourceResolver.php b/lib/Magento/App/Module/ResourceResolver.php similarity index 95% rename from app/code/Magento/Core/Model/Module/ResourceResolver.php rename to lib/Magento/App/Module/ResourceResolver.php index 6603cb033cf..ca42738dd95 100644 --- a/app/code/Magento/Core/Model/Module/ResourceResolver.php +++ b/lib/Magento/App/Module/ResourceResolver.php @@ -23,9 +23,9 @@ * @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\Core\Model\Module; +namespace Magento\App\Module; -class ResourceResolver implements \Magento\Core\Model\Module\ResourceResolverInterface +class ResourceResolver implements \Magento\App\Module\ResourceResolverInterface { /** * @var \Magento\Core\Model\Config\Modules\Reader diff --git a/app/code/Magento/Core/Model/Module/ResourceResolverInterface.php b/lib/Magento/App/Module/ResourceResolverInterface.php similarity index 93% rename from app/code/Magento/Core/Model/Module/ResourceResolverInterface.php rename to lib/Magento/App/Module/ResourceResolverInterface.php index 989c5a90f1b..35f85a0b3f9 100644 --- a/app/code/Magento/Core/Model/Module/ResourceResolverInterface.php +++ b/lib/Magento/App/Module/ResourceResolverInterface.php @@ -23,7 +23,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\Core\Model\Module; +namespace Magento\App\Module; interface ResourceResolverInterface { @@ -33,5 +33,5 @@ interface ResourceResolverInterface * @param string $moduleName * @return array */ - function getResourceList($moduleName); + public function getResourceList($moduleName); } diff --git a/app/code/Magento/Core/Model/ModuleList.php b/lib/Magento/App/ModuleList.php similarity index 89% rename from app/code/Magento/Core/Model/ModuleList.php rename to lib/Magento/App/ModuleList.php index 848617c3f93..20ffd25d552 100644 --- a/app/code/Magento/Core/Model/ModuleList.php +++ b/lib/Magento/App/ModuleList.php @@ -21,9 +21,9 @@ * @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\Core\Model; +namespace Magento\App; -class ModuleList implements \Magento\Core\Model\ModuleListInterface +class ModuleList implements \Magento\App\ModuleListInterface { /** * Configuration data @@ -40,12 +40,12 @@ class ModuleList implements \Magento\Core\Model\ModuleListInterface protected $_scope = 'global'; /** - * @param \Magento\Core\Model\Module\Declaration\Reader\Filesystem $reader + * @param \Magento\App\Module\Declaration\Reader\Filesystem $reader * @param \Magento\Config\CacheInterface $cache * @param string $cacheId */ public function __construct( - \Magento\Core\Model\Module\Declaration\Reader\Filesystem $reader, + Module\Declaration\Reader\Filesystem $reader, \Magento\Config\CacheInterface $cache, $cacheId = 'modules_declaration_cache' ) { diff --git a/app/code/Magento/Core/Model/ModuleListInterface.php b/lib/Magento/App/ModuleListInterface.php similarity index 97% rename from app/code/Magento/Core/Model/ModuleListInterface.php rename to lib/Magento/App/ModuleListInterface.php index f2193fe0343..9d22d6adbca 100644 --- a/app/code/Magento/Core/Model/ModuleListInterface.php +++ b/lib/Magento/App/ModuleListInterface.php @@ -21,7 +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\Core\Model; +namespace Magento\App; interface ModuleListInterface { diff --git a/app/code/Magento/Core/Controller/Request/Http.php b/lib/Magento/App/Request/Http.php similarity index 82% rename from app/code/Magento/Core/Controller/Request/Http.php rename to lib/Magento/App/Request/Http.php index c740e9f02ba..218f6fdcc2f 100644 --- a/app/code/Magento/Core/Controller/Request/Http.php +++ b/lib/Magento/App/Request/Http.php @@ -1,5 +1,7 @@ <?php /** + * Http request + * * Magento * * NOTICE OF LICENSE @@ -18,21 +20,12 @@ * 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_Core * @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\App\Request; - -/** - * Custom \Zend_Controller_Request_Http class (formally) - * - * Allows dispatching before and after events for each controller action - */ -namespace Magento\Core\Controller\Request; - -class Http extends \Zend_Controller_Request_Http +class Http extends \Zend_Controller_Request_Http implements \Magento\App\RequestInterface { const DEFAULT_HTTP_PORT = 80; const DEFAULT_HTTPS_PORT = 443; @@ -74,31 +67,31 @@ class Http extends \Zend_Controller_Request_Http protected $_beforeForwardInfo = array(); /** - * @var \Magento\Backend\Helper\Data + * @var \Magento\App\RouterListInterface */ - protected $_helper; + protected $_routerList; /** - * @var \Magento\Core\Model\StoreManager + * @var PathInfoProcessorInterface */ - protected $_storeManager; + private $_pathInfoProcessor; /** - * @param \Magento\Core\Model\StoreManager $storeManager - * @param \Magento\Backend\Helper\Data $helper - * @param string|Zend_Uri $uri + * @param \Magento\App\RouterListInterface $routerList + * @param string $uri * @param array $directFrontNames + * @param PathInfoProcessorInterface $pathInfoProcessor */ public function __construct( - \Magento\Core\Model\StoreManager $storeManager, - \Magento\Backend\Helper\Data $helper, + \Magento\App\RouterListInterface $routerList, $uri = null, - $directFrontNames = array() + $directFrontNames = array(), + \Magento\App\Request\PathInfoProcessorInterface $pathInfoProcessor = null ) { - $this->_helper = $helper; + $this->_routerList = $routerList; $this->_directFrontNames = $directFrontNames; - $this->_storeManager = $storeManager; parent::__construct($uri); + $this->_pathInfoProcessor = $pathInfoProcessor; } /** @@ -145,19 +138,8 @@ class Http extends \Zend_Controller_Request_Http $pathInfo = $requestUri; } - $pathParts = explode('/', ltrim($pathInfo, '/'), 2); - $storeCode = $pathParts[0]; - - if ($this->_isFrontArea($storeCode)) { - $stores = $this->_storeManager->getStores(true, true); - if (isset($stores[$storeCode]) && $stores[$storeCode]->isUseStoreInUrl()) { - if (!$this->isDirectAccessFrontendName($storeCode)) { - $this->_storeManager->setCurrentStore($storeCode); - $pathInfo = '/'.(isset($pathParts[1]) ? $pathParts[1] : ''); - } elseif (!empty($storeCode)) { - $this->setActionName('noRoute'); - } - } + if ($this->_pathInfoProcessor) { + $pathInfo = $this->_pathInfoProcessor->process($this, $pathInfo); } $this->_originalPathInfo = (string)$pathInfo; @@ -169,23 +151,12 @@ class Http extends \Zend_Controller_Request_Http return $this; } - /** - * Check area by store code - * - * @param string $storeCode - * @return boolean - */ - protected function _isFrontArea($storeCode) - { - return $storeCode != $this->_helper->getAreaFrontName(); - } - /** * Specify new path info * It happen when occur rewrite based on configuration * * @param string $pathInfo - * @return \Magento\Core\Controller\Request\Http + * @return \Magento\App\RequestInterface */ public function rewritePathInfo($pathInfo) { @@ -205,18 +176,7 @@ class Http extends \Zend_Controller_Request_Http */ public function isDirectAccessFrontendName($code) { - $names = $this->getDirectFrontNames(); - return isset($names[$code]); - } - - /** - * Get list of front names available with access without store code - * - * @return array - */ - public function getDirectFrontNames() - { - return $this->_directFrontNames; + return isset($this->_directFrontNames[$code]); } /** @@ -266,9 +226,7 @@ class Http extends \Zend_Controller_Request_Http public function setRouteName($route) { $this->_route = $route; - $router = \Magento\Core\Model\ObjectManager::getInstance()->get('Magento\Core\Model\App') - ->getFrontController() - ->getRouterList()->getRouterByRoute($route); + $router = $this->_routerList->getRouterByRoute($route); if (!$router) { return $this; } @@ -279,6 +237,17 @@ class Http extends \Zend_Controller_Request_Http return $this; } + /** + * Retrieve request front name + * + * @return string|null + */ + public function getFrontName() + { + $pathParts = explode('/', trim($this->getPathInfo(), '/')); + return reset($pathParts); + } + public function getRouteName() { return $this->_route; @@ -308,7 +277,7 @@ class Http extends \Zend_Controller_Request_Http * @param string|array $key * @param mixed $value * - * @return \Magento\Core\Controller\Request\Http + * @return \Magento\App\RequestInterface */ public function setPost($key, $value = null) { @@ -324,7 +293,7 @@ class Http extends \Zend_Controller_Request_Http * Specify module name where was found currently used controller * * @param string $module - * @return \Magento\Core\Controller\Request\Http + * @return \Magento\App\RequestInterface */ public function setControllerModule($module) { @@ -415,9 +384,7 @@ class Http extends \Zend_Controller_Request_Http if ($this->_requestedRouteName === null) { if ($this->_rewritedPathInfo !== null && isset($this->_rewritedPathInfo[0])) { $frontName = $this->_rewritedPathInfo[0]; - $router = \Magento\Core\Model\ObjectManager::getInstance()->get('Magento\Core\Model\App') - ->getFrontController() - ->getRouterList()->getRouterByFrontName($frontName); + $router = $this->_routerList->getRouterByFrontName($frontName); $this->_requestedRouteName = $router->getRouteByFrontName($frontName); } else { // no rewritten path found, use default route name @@ -463,7 +430,7 @@ class Http extends \Zend_Controller_Request_Http * Set routing info data * * @param array $data - * @return \Magento\Core\Controller\Request\Http + * @return \Magento\App\RequestInterface */ public function setRoutingInfo($data) { @@ -477,7 +444,7 @@ class Http extends \Zend_Controller_Request_Http * Collect properties changed by _forward in protected storage * before _forward was called first time. * - * @return \Magento\Core\Controller\Varien\Action + * @return \Magento\App\ActionInterface */ public function initForward() { @@ -558,7 +525,7 @@ class Http extends \Zend_Controller_Request_Http return $_FILES; } - return (isset($_FILES[$key])) ? $_FILES[$key] : $default; + return isset($_FILES[$key]) ? $_FILES[$key] : $default; } /** diff --git a/lib/Magento/App/Request/PathInfoProcessorInterface.php b/lib/Magento/App/Request/PathInfoProcessorInterface.php new file mode 100644 index 00000000000..aec0609e989 --- /dev/null +++ b/lib/Magento/App/Request/PathInfoProcessorInterface.php @@ -0,0 +1,38 @@ +<?php +/** + * PATH_INFO processor + * + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\App\Request; + +interface PathInfoProcessorInterface +{ + /** + * Process Request path info + * + * @param \Magento\App\RequestInterface $request + * @param string $pathInfo + * @return string + */ + public function process(\Magento\App\RequestInterface $request, $pathInfo); +} \ No newline at end of file diff --git a/app/code/Magento/Core/Model/Resource/SetupFactory.php b/lib/Magento/App/RequestFactory.php similarity index 67% rename from app/code/Magento/Core/Model/Resource/SetupFactory.php rename to lib/Magento/App/RequestFactory.php index 39fa055554a..ec08243681b 100644 --- a/app/code/Magento/Core/Model/Resource/SetupFactory.php +++ b/lib/Magento/App/RequestFactory.php @@ -1,6 +1,6 @@ <?php /** - * Setup model factory + * Application request factory * * Magento * @@ -23,10 +23,9 @@ * @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\App; -namespace Magento\Core\Model\Resource; - -class SetupFactory +class RequestFactory { /** * @var \Magento\ObjectManager @@ -42,19 +41,13 @@ class SetupFactory } /** - * Create setup model instance + * Create request * - * @param $className * @param array $arguments - * @return \Magento\Core\Model\Resource\SetupInterface - * @throws \LogicException + * @return \Magento\App\RequestInterface */ - public function create($className, array $arguments = array()) + public function create(array $arguments = array()) { - $object = $this->_objectManager->create($className, $arguments); - if (false == ($object instanceof \Magento\Core\Model\Resource\SetupInterface)) { - throw new \LogicException($className . ' doesn\'t implement \Magento\Core\Model\Resource\SetupInterface'); - } - return $object; + return $this->_objectManager->create('Magento\App\RequestInterface', $arguments); } -} +} \ No newline at end of file diff --git a/lib/Magento/App/RequestInterface.php b/lib/Magento/App/RequestInterface.php new file mode 100644 index 00000000000..e41af2faf05 --- /dev/null +++ b/lib/Magento/App/RequestInterface.php @@ -0,0 +1,66 @@ +<?php +/** + * Application request + * + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\App; + +interface RequestInterface +{ + /** + * Retrieve module name + * + * @return string + */ + public function getModuleName(); + + /** + * Set Module name + * + * @param string $name + */ + public function setModuleName($name); + + /** + * Retrieve action name + * + * @return string + */ + public function getActionName(); + + /** + * Set action name + * + * @param string $name + */ + public function setActionName($name); + + /** + * Retrieve param by key + * + * @param string $key + * @param mixed $defaultValue + * @return mixed + */ + public function getParam($key, $defaultValue = null); +} \ No newline at end of file diff --git a/lib/Magento/App/Response/Http.php b/lib/Magento/App/Response/Http.php new file mode 100644 index 00000000000..01ea81b9d12 --- /dev/null +++ b/lib/Magento/App/Response/Http.php @@ -0,0 +1,47 @@ +<?php +/** + * HTTP response + * + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\App\Response; + +class Http extends \Zend_Controller_Response_Http implements \Magento\App\ResponseInterface +{ + /** + * Get header value by name. + * Returns first found header by passed name. + * If header with specified name was not found returns false. + * + * @param string $name + * @return array|bool + */ + public function getHeader($name) + { + foreach ($this->_headers as $header) { + if ($header['name'] == $name) { + return $header; + } + } + return false; + } +} diff --git a/lib/Magento/App/ResponseFactory.php b/lib/Magento/App/ResponseFactory.php new file mode 100644 index 00000000000..d392b806811 --- /dev/null +++ b/lib/Magento/App/ResponseFactory.php @@ -0,0 +1,53 @@ +<?php +/** + * Application response factory + * + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\App; + +class ResponseFactory +{ + /** + * @var \Magento\ObjectManager + */ + protected $_objectManager; + + /** + * @param \Magento\ObjectManager $objectManager + */ + public function __construct(\Magento\ObjectManager $objectManager) + { + $this->_objectManager = $objectManager; + } + + /** + * Create response + * + * @param array $arguments + * @return \Magento\App\ResponseInterface + */ + public function create(array $arguments = array()) + { + return $this->_objectManager->create('Magento\App\ResponseInterface', $arguments); + } +} \ No newline at end of file diff --git a/lib/Magento/App/ResponseInterface.php b/lib/Magento/App/ResponseInterface.php new file mode 100644 index 00000000000..bd12804ea53 --- /dev/null +++ b/lib/Magento/App/ResponseInterface.php @@ -0,0 +1,34 @@ +<?php +/** + * Application response + * + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\App; + +interface ResponseInterface +{ + /** + * Send response to client + */ + public function sendResponse(); +} \ No newline at end of file diff --git a/app/code/Magento/Core/Controller/Varien/Router/AbstractRouter.php b/lib/Magento/App/Router/AbstractRouter.php similarity index 68% rename from app/code/Magento/Core/Controller/Varien/Router/AbstractRouter.php rename to lib/Magento/App/Router/AbstractRouter.php index 66a2bd7080c..12f509a38ae 100644 --- a/app/code/Magento/Core/Controller/Varien/Router/AbstractRouter.php +++ b/lib/Magento/App/Router/AbstractRouter.php @@ -1,5 +1,7 @@ <?php /** + * Abstract application router + * * Magento * * NOTICE OF LICENSE @@ -18,33 +20,31 @@ * 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_Core * @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\App\Router; -/** - * Abstract router class - */ -namespace Magento\Core\Controller\Varien\Router; +use \Magento\App\FrontControllerInterface, + \Magento\App\ActionFactory, + \Magento\App\RequestInterface; abstract class AbstractRouter { /** - * @var \Magento\Core\Controller\Varien\Front + * @var \Magento\App\FrontController */ protected $_front; /** - * @var \Magento\Core\Controller\Varien\Action\Factory + * @var \Magento\App\ActionFactory */ protected $_controllerFactory; /** - * @param \Magento\Core\Controller\Varien\Action\Factory $controllerFactory + * @param \Magento\App\ActionFactory $controllerFactory */ - public function __construct(\Magento\Core\Controller\Varien\Action\Factory $controllerFactory) + public function __construct(ActionFactory $controllerFactory) { $this->_controllerFactory = $controllerFactory; } @@ -52,10 +52,10 @@ abstract class AbstractRouter /** * Assign front controller instance * - * @param $front \Magento\Core\Controller\Varien\Front - * @return \Magento\Core\Controller\Varien\Router\AbstractRouter + * @param $front FrontControllerInterface + * @return AbstractRouter */ - public function setFront(\Magento\Core\Controller\Varien\Front $front) + public function setFront(FrontControllerInterface $front) { $this->_front = $front; return $this; @@ -64,7 +64,7 @@ abstract class AbstractRouter /** * Retrieve front controller instance * - * @return \Magento\Core\Controller\Varien\Front + * @return FrontControllerInterface */ public function getFront() { @@ -96,8 +96,8 @@ abstract class AbstractRouter /** * Match controller by request * - * @param \Magento\Core\Controller\Request\Http $request - * @return \Magento\Core\Controller\Varien\Action + * @param RequestInterface $request + * @return \Magento\App\Action\AbstractAction */ - abstract public function match(\Magento\Core\Controller\Request\Http $request); + abstract public function match(RequestInterface $request); } diff --git a/app/code/Magento/Core/Controller/Varien/Router/DefaultRouter.php b/lib/Magento/App/Router/DefaultRouter.php similarity index 69% rename from app/code/Magento/Core/Controller/Varien/Router/DefaultRouter.php rename to lib/Magento/App/Router/DefaultRouter.php index d078b435206..cedd6b063d9 100644 --- a/app/code/Magento/Core/Controller/Varien/Router/DefaultRouter.php +++ b/lib/Magento/App/Router/DefaultRouter.php @@ -1,5 +1,7 @@ <?php /** + * Default application router + * * Magento * * NOTICE OF LICENSE @@ -18,28 +20,28 @@ * 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_Core * @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\App\Router; -namespace Magento\Core\Controller\Varien\Router; +use \Magento\App\ActionFactory, + \Magento\App\RequestInterface; -class DefaultRouter extends \Magento\Core\Controller\Varien\Router\AbstractRouter +class DefaultRouter extends AbstractRouter { /** - * @var \Magento\Core\Model\NoRouteHandlerList + * @var \Magento\App\Router\NoRouteHandlerList */ protected $_noRouteHandlerList; /** - * @param \Magento\Core\Controller\Varien\Action\Factory $controllerFactory - * @param \Magento\Core\Model\NoRouteHandlerList $noRouteHandlerList + * @param ActionFactory $controllerFactory + * @param \Magento\App\Router\NoRouteHandlerList $noRouteHandlerList */ public function __construct( - \Magento\Core\Controller\Varien\Action\Factory $controllerFactory, - \Magento\Core\Model\NoRouteHandlerList $noRouteHandlerList + ActionFactory $controllerFactory, + \Magento\App\Router\NoRouteHandlerList $noRouteHandlerList ) { parent::__construct($controllerFactory); $this->_noRouteHandlerList = $noRouteHandlerList; @@ -48,10 +50,10 @@ class DefaultRouter extends \Magento\Core\Controller\Varien\Router\AbstractRoute /** * Modify request and set to no-route action * - * @param \Magento\Core\Controller\Request\Http $request + * @param RequestInterface $request * @return boolean */ - public function match(\Magento\Core\Controller\Request\Http $request) + public function match(RequestInterface $request) { foreach ($this->_noRouteHandlerList->getHandlers() as $noRouteHandler) { if ($noRouteHandler->process($request)) { @@ -59,7 +61,7 @@ class DefaultRouter extends \Magento\Core\Controller\Varien\Router\AbstractRoute } } - return $this->_controllerFactory->createController('Magento\Core\Controller\Varien\Action\Forward', + return $this->_controllerFactory->createController('Magento\App\Action\Forward', array('request' => $request) ); } diff --git a/app/code/Magento/Core/Model/NoRouteHandlerList.php b/lib/Magento/App/Router/NoRouteHandlerList.php similarity index 98% rename from app/code/Magento/Core/Model/NoRouteHandlerList.php rename to lib/Magento/App/Router/NoRouteHandlerList.php index 886d3ec7979..e98fc4af890 100644 --- a/app/code/Magento/Core/Model/NoRouteHandlerList.php +++ b/lib/Magento/App/Router/NoRouteHandlerList.php @@ -23,8 +23,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\Core\Model; +namespace Magento\App\Router; class NoRouteHandlerList { diff --git a/app/code/Magento/Core/Model/RouterList.php b/lib/Magento/App/RouterList.php similarity index 95% rename from app/code/Magento/Core/Model/RouterList.php rename to lib/Magento/App/RouterList.php index 8606be97429..90781da07b5 100644 --- a/app/code/Magento/Core/Model/RouterList.php +++ b/lib/Magento/App/RouterList.php @@ -24,9 +24,11 @@ * @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\Core\Model; +namespace Magento\App; -class RouterList +use \Magento\App\RouterListInterface; + +class RouterList implements RouterListInterface { /** * @var \Magento\ObjectManager @@ -123,7 +125,7 @@ class RouterList * Get router by route * * @param string $routeId - * @return \Magento\Core\Controller\Varien\Router\AbstractRouter + * @return \Magento\App\Router\AbstractRouter */ public function getRouterByRoute($routeId) { @@ -162,7 +164,7 @@ class RouterList * Get router by frontName * * @param string $frontName - * @return \Magento\Core\Controller\Varien\Router\AbstractRouter + * @return \Magento\App\Router\AbstractRouter */ public function getRouterByFrontName($frontName) { diff --git a/lib/Magento/App/RouterListInterface.php b/lib/Magento/App/RouterListInterface.php new file mode 100644 index 00000000000..0222bf8f932 --- /dev/null +++ b/lib/Magento/App/RouterListInterface.php @@ -0,0 +1,53 @@ +<?php +/** + * Application router list + * + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\App; + +interface RouterListInterface +{ + /** + * Get list of active routers + * sorted by sortOrder + * + * @return array + */ + public function getRouters(); + + /** + * Get router by route + * + * @param string $routeId + * @return \Magento\App\Router\AbstractRouter + */ + public function getRouterByRoute($routeId); + + /** + * Get router by frontName + * + * @param string $frontName + * @return \Magento\App\Router\AbstractRouter + */ + public function getRouterByFrontName($frontName); +} \ No newline at end of file diff --git a/app/code/Magento/Core/Model/App/State.php b/lib/Magento/App/State.php similarity index 92% rename from app/code/Magento/Core/Model/App/State.php rename to lib/Magento/App/State.php index e7c6cfb8b87..7825ab03b0e 100644 --- a/app/code/Magento/Core/Model/App/State.php +++ b/lib/Magento/App/State.php @@ -24,7 +24,9 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ -namespace Magento\Core\Model\App; +namespace Magento\App; + +use Zend\Soap\Exception\InvalidArgumentException; class State { @@ -69,7 +71,7 @@ class State /** * @param string $installDate * @param string $mode - * @throws \Magento\Core\Exception + * @throws \LogicException */ public function __construct($installDate, $mode = self::MODE_DEFAULT) { @@ -81,7 +83,7 @@ class State $this->_appMode = $mode; break; default: - throw new \Magento\Core\Exception("Unknown application mode: {$mode}"); + throw new \InvalidArgumentException("Unknown application mode: {$mode}"); } } @@ -119,6 +121,7 @@ class State * Get update mode flag * * @return bool + * @SuppressWarnings(PHPMD.BooleanGetMethodName) */ public function getUpdateMode() { diff --git a/app/code/Magento/Core/Model/Db/Updater.php b/lib/Magento/App/Updater.php similarity index 59% rename from app/code/Magento/Core/Model/Db/Updater.php rename to lib/Magento/App/Updater.php index 909ae75faea..01fcf8a629e 100644 --- a/app/code/Magento/Core/Model/Db/Updater.php +++ b/lib/Magento/App/Updater.php @@ -22,21 +22,14 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ -namespace Magento\Core\Model\Db; +namespace Magento\App; -class Updater implements \Magento\Core\Model\Db\UpdaterInterface +class Updater implements \Magento\App\UpdaterInterface { - /** - * Default setup class name - * - * @var string - */ - protected $_defaultClass = 'Magento\Core\Model\Resource\Setup'; - /** * Setup model factory * - * @var \Magento\Core\Model\Resource\SetupFactory + * @var \Magento\App\Updater\SetupFactory */ protected $_factory; @@ -50,7 +43,7 @@ class Updater implements \Magento\Core\Model\Db\UpdaterInterface /** * Application state model * - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; @@ -69,36 +62,38 @@ class Updater implements \Magento\Core\Model\Db\UpdaterInterface protected $_resourceList; /** - * @var \Magento\Core\Model\ModuleListInterface + * @var \Magento\App\ModuleListInterface */ protected $_moduleList; /** - * @var \Magento\Core\Model\Module\ResourceResolverInterface + * @var \Magento\App\Module\ResourceResolverInterface */ protected $_resourceResolver; /** - * @param \Magento\Core\Model\Resource\SetupFactory $factory - * @param \Magento\Core\Model\App\State $appState - * @param \Magento\Core\Model\ModuleListInterface $moduleList - * @param \Magento\Core\Model\Module\ResourceResolverInterface $resourceResolver - * @param array $resourceList + * @var Updater\SetupFactory + */ + protected $_setupFactory; + + /** + * @param Updater\SetupFactory $setupFactory + * @param State $appState + * @param ModuleListInterface $moduleList + * @param Module\ResourceResolverInterface $resourceResolver * @param bool $skipModuleUpdate */ public function __construct( - \Magento\Core\Model\Resource\SetupFactory $factory, - \Magento\Core\Model\App\State $appState, - \Magento\Core\Model\ModuleListInterface $moduleList, - \Magento\Core\Model\Module\ResourceResolverInterface $resourceResolver, - array $resourceList, + \Magento\App\Updater\SetupFactory $setupFactory, + \Magento\App\State $appState, + \Magento\App\ModuleListInterface $moduleList, + \Magento\App\Module\ResourceResolverInterface $resourceResolver, $skipModuleUpdate = false ) { - $this->_factory = $factory; $this->_appState = $appState; $this->_moduleList = $moduleList; $this->_resourceResolver = $resourceResolver; - $this->_resourceList = $resourceList; + $this->_setupFactory = $setupFactory; $this->_skipModuleUpdate = (bool)$skipModuleUpdate; } @@ -131,28 +126,18 @@ class Updater implements \Magento\Core\Model\Db\UpdaterInterface $afterApplyUpdates = array(); foreach (array_keys($this->_moduleList->getModules()) as $moduleName) { foreach ($this->_resourceResolver->getResourceList($moduleName) as $resourceName) { - $className = isset($this->_resourceList[$resourceName]) - ? $this->_resourceList[$resourceName] - : $this->_defaultClass; - - $setupClass = $this->_factory->create( - $className, - array( - 'resourceName' => $resourceName, - 'moduleName' => $moduleName, - ) - ); - $setupClass->applyUpdates(); - - if ($setupClass->getCallAfterApplyAllUpdates()) { - $afterApplyUpdates[] = $setupClass; + $setup = $this->_setupFactory->create($resourceName, $moduleName); + $setup->applyUpdates(); + + if ($setup->getCallAfterApplyAllUpdates()) { + $afterApplyUpdates[] = $setup; } } } - /** @var $setupClass \Magento\Core\Model\Resource\SetupInterface*/ - foreach ($afterApplyUpdates as $setupClass) { - $setupClass->afterApplyAllUpdates(); + /** @var $setup \Magento\App\Updater\SetupInterface*/ + foreach ($afterApplyUpdates as $setup) { + $setup->afterApplyAllUpdates(); } $this->_appState->setUpdateMode(false); @@ -170,12 +155,7 @@ class Updater implements \Magento\Core\Model\Db\UpdaterInterface } foreach (array_keys($this->_moduleList->getModules()) as $moduleName) { foreach ($this->_resourceResolver->getResourceList($moduleName) as $resourceName) { - $className = isset($this->_resourceList[$resourceName]) - ? $this->_resourceList[$resourceName] - : $this->_defaultClass; - $setupClass = $this->_factory->create($className, array('resourceName' => $resourceName, - 'moduleName' => $moduleName,)); - $setupClass->applyDataUpdates(); + $this->_setupFactory->create($resourceName, $moduleName)->applyDataUpdates(); } } } diff --git a/lib/Magento/App/Updater/SetupFactory.php b/lib/Magento/App/Updater/SetupFactory.php new file mode 100644 index 00000000000..3ee75f5409c --- /dev/null +++ b/lib/Magento/App/Updater/SetupFactory.php @@ -0,0 +1,72 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\App\Updater; +use \Magento\ObjectManager; + +class SetupFactory +{ + const INSTANCE_TYPE = 'Magento\App\Updater\SetupInterface'; + + /** + * @var ObjectManager + */ + protected $_objectManager; + + /** + * @var array + */ + protected $_resourceTypes; + + /** + * @param ObjectManager $objectManager + * @param array $resourceTypes + */ + public function __construct(ObjectManager $objectManager, array $resourceTypes) + { + $this->_objectManager = $objectManager; + $this->_resourceTypes = $resourceTypes; + } + + /** + * @param string $resourceName + * @param string $moduleName + * @return SetupInterface + * @throws \LogicException + */ + public function create($resourceName, $moduleName) + { + $className = isset($this->_resourceTypes[$resourceName]) + ? $this->_resourceTypes[$resourceName] + : 'Magento\App\Updater\SetupInterface'; + + if (false == (is_subclass_of($className, self::INSTANCE_TYPE)) && $className !== self::INSTANCE_TYPE) { + throw new \LogicException($className . ' is not a \Magento\App\Updater\SetupInterface'); + } + + return $this->_objectManager->create($className, array( + 'resourceName' => $resourceName, + 'moduleName' => $moduleName, + )); + } +} \ No newline at end of file diff --git a/app/code/Magento/Core/Model/Resource/SetupInterface.php b/lib/Magento/App/Updater/SetupInterface.php similarity index 91% rename from app/code/Magento/Core/Model/Resource/SetupInterface.php rename to lib/Magento/App/Updater/SetupInterface.php index 6cfbc210189..cfa2d93739a 100644 --- a/app/code/Magento/Core/Model/Resource/SetupInterface.php +++ b/lib/Magento/App/Updater/SetupInterface.php @@ -21,7 +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\Core\Model\Resource; +namespace Magento\App\Updater; interface SetupInterface { @@ -40,7 +40,7 @@ interface SetupInterface /** * Apply module resource install, upgrade and data scripts * - * @return \Magento\Core\Model\Resource\SetupInterface + * @return \Magento\App\Updater\SetupInterface */ public function applyUpdates(); @@ -48,13 +48,14 @@ interface SetupInterface * Check call afterApplyAllUpdates method for setup class * * @return boolean + * @SuppressWarnings(PHPMD.BooleanGetMethodName) */ public function getCallAfterApplyAllUpdates(); /** * Run each time after applying of all updates, * - * @return \Magento\Core\Model\Resource\SetupInterface + * @return \Magento\App\Updater\SetupInterface */ public function afterApplyAllUpdates(); diff --git a/app/code/Magento/Core/Model/Db/UpdaterInterface.php b/lib/Magento/App/UpdaterInterface.php similarity index 97% rename from app/code/Magento/Core/Model/Db/UpdaterInterface.php rename to lib/Magento/App/UpdaterInterface.php index 645a4b59811..edd9c9441c6 100644 --- a/app/code/Magento/Core/Model/Db/UpdaterInterface.php +++ b/lib/Magento/App/UpdaterInterface.php @@ -23,7 +23,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\Core\Model\Db; +namespace Magento\App; interface UpdaterInterface { diff --git a/app/code/Magento/Core/etc/module.xsd b/lib/Magento/App/etc/module.xsd similarity index 100% rename from app/code/Magento/Core/etc/module.xsd rename to lib/Magento/App/etc/module.xsd diff --git a/app/code/Magento/Core/Model/Router/NoRouteHandlerInterface.php b/lib/Magento/Appl/Router/NoRouteHandlerInterface.php similarity index 85% rename from app/code/Magento/Core/Model/Router/NoRouteHandlerInterface.php rename to lib/Magento/Appl/Router/NoRouteHandlerInterface.php index 501f3105566..acc2f68b5d7 100644 --- a/app/code/Magento/Core/Model/Router/NoRouteHandlerInterface.php +++ b/lib/Magento/Appl/Router/NoRouteHandlerInterface.php @@ -23,15 +23,15 @@ * @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\Core\Model\Router; +namespace Magento\Appl\Router; interface NoRouteHandlerInterface { /** * Check and process no route request * - * @param \Magento\Core\Controller\Request\Http $request + * @param \Magento\App\RequestInterface $request * @return bool */ - public function process(\Magento\Core\Controller\Request\Http $request); + public function process(\Magento\App\RequestInterface $request); } diff --git a/lib/Magento/Backup/Snapshot.php b/lib/Magento/Backup/Snapshot.php index 33dc089bd3a..eba6efa4907 100644 --- a/lib/Magento/Backup/Snapshot.php +++ b/lib/Magento/Backup/Snapshot.php @@ -45,7 +45,7 @@ class Snapshot extends \Magento\Backup\Filesystem /** * Dirs instance * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs; @@ -55,11 +55,11 @@ class Snapshot extends \Magento\Backup\Filesystem protected $_backupFactory; /** - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param \Magento\Backup\Factory $backupFactory */ public function __construct( - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, \Magento\Backup\Factory $backupFactory ) { $this->_dirs = $dirs; diff --git a/lib/Magento/Code/Generator/Io.php b/lib/Magento/Code/Generator/Io.php index 1dbc79d508f..b974aabb5fd 100644 --- a/lib/Magento/Code/Generator/Io.php +++ b/lib/Magento/Code/Generator/Io.php @@ -30,7 +30,7 @@ class Io { /** * Default code generation directory - * Should correspond the value from \Magento\Core\Model\Dir + * Should correspond the value from \Magento\App\Dir */ const DEFAULT_DIRECTORY = 'var/generation'; diff --git a/app/code/Magento/Core/Model/Config/Scope.php b/lib/Magento/Config/Scope.php similarity index 73% rename from app/code/Magento/Core/Model/Config/Scope.php rename to lib/Magento/Config/Scope.php index bcdff198e44..7ccff434ce2 100644 --- a/app/code/Magento/Core/Model/Config/Scope.php +++ b/lib/Magento/Config/Scope.php @@ -21,10 +21,17 @@ * @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\Core\Model\Config; +namespace Magento\Config; class Scope implements \Magento\Config\ScopeInterface { + /** + * Default application scope + * + * @var string + */ + protected $_defaultScope; + /** * Current config scope * @@ -33,18 +40,20 @@ class Scope implements \Magento\Config\ScopeInterface protected $_currentScope; /** - * List of all available config scopes + * List of all available areas * - * @var array + * @var \Magento\App\AreaList */ - protected $_availableScopes = array('global', 'adminhtml', 'frontend'); + protected $_areaList; /** + * @param \Magento\App\AreaList $areaList * @param string $defaultScope */ - public function __construct($defaultScope = 'global') + public function __construct(\Magento\App\AreaList $areaList, $defaultScope = 'global') { - $this->_currentScope = $defaultScope; + $this->_defaultScope = $this->_currentScope = $defaultScope; + $this->_areaList = $areaList; } /** @@ -74,6 +83,8 @@ class Scope implements \Magento\Config\ScopeInterface */ public function getAllScopes() { - return $this->_availableScopes; + $codes = $this->_areaList->getCodes(); + array_unshift($codes, $this->_defaultScope); + return $codes; } } diff --git a/lib/Magento/Config/ScopeInterface.php b/lib/Magento/Config/ScopeInterface.php index 44892a3acd3..327358d0e6d 100644 --- a/lib/Magento/Config/ScopeInterface.php +++ b/lib/Magento/Config/ScopeInterface.php @@ -38,4 +38,11 @@ interface ScopeInterface * @return array */ public function getAllScopes(); + + /** + * Set current configuration scope + * + * @param string $scope + */ + public function setCurrentScope($scope); } diff --git a/lib/Magento/DB/Adapter/Pdo/Mysql.php b/lib/Magento/DB/Adapter/Pdo/Mysql.php index 71e93675ac4..e37d7b40398 100644 --- a/lib/Magento/DB/Adapter/Pdo/Mysql.php +++ b/lib/Magento/DB/Adapter/Pdo/Mysql.php @@ -220,16 +220,16 @@ class Mysql extends \Zend_Db_Adapter_Pdo_Mysql implements \Magento\DB\Adapter\Ad /** * Dirs instance * - * @var \Magento\Core\Model\Dir + * @var \Magento\App\Dir */ protected $_dirs; /** - * @param \Magento\Core\Model\Dir $dirs + * @param \Magento\App\Dir $dirs * @param array $config */ public function __construct( - \Magento\Core\Model\Dir $dirs, + \Magento\App\Dir $dirs, array $config = array() ) { $this->_dirs = $dirs; @@ -1411,7 +1411,7 @@ class Mysql extends \Zend_Db_Adapter_Pdo_Mysql implements \Magento\DB\Adapter\Ad $str = '## ' . date('Y-m-d H:i:s') . "\r\n" . $str; if (!$this->_debugIoAdapter) { $this->_debugIoAdapter = new \Magento\Io\File(); - $dir = $this->_dirs->getDir(\Magento\Core\Model\Dir::ROOT) + $dir = $this->_dirs->getDir(\Magento\App\Dir::ROOT) . DS . $this->_debugIoAdapter->dirname($this->_debugFile); $this->_debugIoAdapter->checkAndCreateFolder($dir); $this->_debugIoAdapter->open(array('path' => $dir)); diff --git a/lib/Magento/Data/Form/Element/AbstractElement.php b/lib/Magento/Data/Form/Element/AbstractElement.php index 76a692ffdb7..51b4ca27f20 100644 --- a/lib/Magento/Data/Form/Element/AbstractElement.php +++ b/lib/Magento/Data/Form/Element/AbstractElement.php @@ -269,7 +269,7 @@ abstract class AbstractElement extends \Magento\Data\Form\AbstractForm $html = '<label class="label" for="' . $this->getHtmlId() . $idSuffix . '"' . $this->_getUiId('label') . '><span>' . $this->_escape($this->getLabel()) - . ($this->getRequired() ? ' <span class="required">*</span>' : '') . '</span></label>' . "\n"; + . '</span></label>' . "\n"; } else { $html = ''; } diff --git a/lib/Magento/Data/Form/Element/Image.php b/lib/Magento/Data/Form/Element/Image.php index 2a83d18f990..c45dfb96267 100644 --- a/lib/Magento/Data/Form/Element/Image.php +++ b/lib/Magento/Data/Form/Element/Image.php @@ -36,21 +36,21 @@ namespace Magento\Data\Form\Element; class Image extends \Magento\Data\Form\Element\AbstractElement { /** - * @var \Magento\Core\Model\UrlInterface + * @var \Magento\UrlInterface */ protected $_urlBuilder; /** * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection - * @param \Magento\Core\Model\UrlInterface $urlBuilder + * @param \Magento\UrlInterface $urlBuilder * @param array $attributes */ public function __construct( \Magento\Core\Helper\Data $coreData, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, - \Magento\Core\Model\UrlInterface $urlBuilder, + \Magento\UrlInterface $urlBuilder, $attributes = array() ) { $this->_urlBuilder = $urlBuilder; diff --git a/lib/Magento/Event.php b/lib/Magento/Event.php index 3fa528fa1a6..f7e2b24abfd 100644 --- a/lib/Magento/Event.php +++ b/lib/Magento/Event.php @@ -50,7 +50,7 @@ class Event extends \Magento\Object * * @param array $data */ - public function __construct(array $data=array()) + public function __construct(array $data = array()) { $this->_observers = new \Magento\Event\Observer\Collection(); parent::__construct($data); diff --git a/app/code/Magento/Core/Model/Event/Config.php b/lib/Magento/Event/Config.php similarity index 81% rename from app/code/Magento/Core/Model/Event/Config.php rename to lib/Magento/Event/Config.php index 279cceb1804..03f1ef8ff06 100644 --- a/app/code/Magento/Core/Model/Event/Config.php +++ b/lib/Magento/Event/Config.php @@ -23,21 +23,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\Core\Model\Event; +namespace Magento\Event; -class Config implements \Magento\Core\Model\Event\ConfigInterface +class Config implements \Magento\Event\ConfigInterface { /** * Modules configuration model * - * @var \Magento\Core\Model\Event\Config\Data + * @var \Magento\Event\Config\Data */ protected $_dataContainer; /** - * @param \Magento\Core\Model\Event\Config\Data $dataContainer + * @param \Magento\Event\Config\Data $dataContainer */ - public function __construct(\Magento\Core\Model\Event\Config\Data $dataContainer) + public function __construct(Config\Data $dataContainer) { $this->_dataContainer = $dataContainer; } diff --git a/app/code/Magento/Core/Model/Event/Config/Converter.php b/lib/Magento/Event/Config/Converter.php similarity index 98% rename from app/code/Magento/Core/Model/Event/Config/Converter.php rename to lib/Magento/Event/Config/Converter.php index 20d9fb440b9..96c76113f01 100644 --- a/app/code/Magento/Core/Model/Event/Config/Converter.php +++ b/lib/Magento/Event/Config/Converter.php @@ -23,7 +23,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\Core\Model\Event\Config; +namespace Magento\Event\Config; class Converter implements \Magento\Config\ConverterInterface { diff --git a/app/code/Magento/Core/Model/Event/Config/Data.php b/lib/Magento/Event/Config/Data.php similarity index 87% rename from app/code/Magento/Core/Model/Event/Config/Data.php rename to lib/Magento/Event/Config/Data.php index 91266ec3923..8a47948f17c 100644 --- a/app/code/Magento/Core/Model/Event/Config/Data.php +++ b/lib/Magento/Event/Config/Data.php @@ -23,7 +23,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\Core\Model\Event\Config; +namespace Magento\Event\Config; class Data extends \Magento\Config\Data\Scoped { @@ -35,22 +35,22 @@ class Data extends \Magento\Config\Data\Scoped protected $_scopePriorityScheme = array('global'); /** - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; /** - * @param \Magento\Core\Model\Event\Config\Reader $reader + * @param \Magento\Event\Config\Reader $reader * @param \Magento\Config\ScopeInterface $configScope * @param \Magento\Config\CacheInterface $cache * @param string $cacheId - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\App\State $appState */ public function __construct( - \Magento\Core\Model\Event\Config\Reader $reader, + \Magento\Event\Config\Reader $reader, \Magento\Config\ScopeInterface $configScope, \Magento\Config\CacheInterface $cache, - \Magento\Core\Model\App\State $appState, + \Magento\App\State $appState, $cacheId = 'event_config_cache' ) { $this->_appState = $appState; diff --git a/app/code/Magento/Core/Model/Event/Config/Reader.php b/lib/Magento/Event/Config/Reader.php similarity index 86% rename from app/code/Magento/Core/Model/Event/Config/Reader.php rename to lib/Magento/Event/Config/Reader.php index 8c246608eaf..681ec65a3b3 100644 --- a/app/code/Magento/Core/Model/Event/Config/Reader.php +++ b/lib/Magento/Event/Config/Reader.php @@ -23,7 +23,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\Core\Model\Event\Config; +namespace Magento\Event\Config; class Reader extends \Magento\Config\Reader\Filesystem { @@ -39,17 +39,17 @@ class Reader extends \Magento\Config\Reader\Filesystem /** * @param \Magento\Config\FileResolverInterface $fileResolver - * @param \Magento\Core\Model\Event\Config\Converter $converter + * @param Converter $converter + * @param SchemaLocator $schemaLocator * @param \Magento\Config\ValidationStateInterface $validationState - * @param \Magento\Core\Model\Event\Config\SchemaLocator $schemaLocator * @param string $fileName * @param array $idAttributes * @param string $domDocumentClass */ public function __construct( \Magento\Config\FileResolverInterface $fileResolver, - \Magento\Core\Model\Event\Config\Converter $converter, - \Magento\Core\Model\Event\Config\SchemaLocator $schemaLocator, + Converter $converter, + SchemaLocator $schemaLocator, \Magento\Config\ValidationStateInterface $validationState, $fileName = 'events.xml', $idAttributes = array(), diff --git a/lib/Magento/Event/Config/SchemaLocator.php b/lib/Magento/Event/Config/SchemaLocator.php new file mode 100644 index 00000000000..93c383b59aa --- /dev/null +++ b/lib/Magento/Event/Config/SchemaLocator.php @@ -0,0 +1,49 @@ +<?php +/** + * Event observers configuration schema locator + * + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Event\Config; + +class SchemaLocator implements \Magento\Config\SchemaLocatorInterface +{ + /** + * Get path to merged config schema + * + * @return string + */ + public function getSchema() + { + return realpath(__DIR__ . '/../etc/events.xsd'); + } + + /** + * Get path to pre file validation schema + * + * @return string + */ + public function getPerFileSchema() + { + return $this->getSchema(); + } +} diff --git a/app/code/Magento/Core/Model/Event/ConfigInterface.php b/lib/Magento/Event/ConfigInterface.php similarity index 96% rename from app/code/Magento/Core/Model/Event/ConfigInterface.php rename to lib/Magento/Event/ConfigInterface.php index aac170632a6..e14dc9dfd1e 100644 --- a/app/code/Magento/Core/Model/Event/ConfigInterface.php +++ b/lib/Magento/Event/ConfigInterface.php @@ -23,7 +23,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\Core\Model\Event; +namespace Magento\Event; interface ConfigInterface { diff --git a/app/code/Magento/Core/Model/Event/Invoker/InvokerDefault.php b/lib/Magento/Event/Invoker/InvokerDefault.php similarity index 80% rename from app/code/Magento/Core/Model/Event/Invoker/InvokerDefault.php rename to lib/Magento/Event/Invoker/InvokerDefault.php index 04443104489..a2230ec5cc8 100644 --- a/app/code/Magento/Core/Model/Event/Invoker/InvokerDefault.php +++ b/lib/Magento/Event/Invoker/InvokerDefault.php @@ -23,29 +23,29 @@ * @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\Core\Model\Event\Invoker; +namespace Magento\Event\Invoker; -class InvokerDefault implements \Magento\Core\Model\Event\InvokerInterface +class InvokerDefault implements \Magento\Event\InvokerInterface { /** * Observer model factory * - * @var \Magento\Core\Model\ObserverFactory + * @var \Magento\Event\ObserverFactory */ protected $_observerFactory; /** * Application state * - * @var \Magento\Core\Model\App\State + * @var \Magento\App\State */ protected $_appState; /** - * @param \Magento\Core\Model\ObserverFactory $observerFactory - * @param \Magento\Core\Model\App\State $appState + * @param \Magento\Event\ObserverFactory $observerFactory + * @param \Magento\App\State $appState */ - public function __construct(\Magento\Core\Model\ObserverFactory $observerFactory, \Magento\Core\Model\App\State $appState) + public function __construct(\Magento\Event\ObserverFactory $observerFactory, \Magento\App\State $appState) { $this->_observerFactory = $observerFactory; $this->_appState = $appState; @@ -78,14 +78,14 @@ class InvokerDefault implements \Magento\Core\Model\Event\InvokerInterface * @param object $object * @param string $method * @param \Magento\Event\Observer $observer - * @return \Magento\Core\Model\Event\InvokerInterface + * @return \Magento\Event\InvokerInterface * @throws \Magento\Core\Exception */ protected function _callObserverMethod($object, $method, $observer) { if (method_exists($object, $method)) { $object->$method($observer); - } elseif ($this->_appState->getMode() == \Magento\Core\Model\App\State::MODE_DEVELOPER) { + } elseif ($this->_appState->getMode() == \Magento\App\State::MODE_DEVELOPER) { throw new \Magento\Core\Exception('Method "' . $method . '" is not defined in "' . get_class($object) . '"'); } return $this; diff --git a/app/code/Magento/Core/Model/Event/InvokerInterface.php b/lib/Magento/Event/InvokerInterface.php similarity index 97% rename from app/code/Magento/Core/Model/Event/InvokerInterface.php rename to lib/Magento/Event/InvokerInterface.php index aa420f0d040..e5a9545e5a8 100644 --- a/app/code/Magento/Core/Model/Event/InvokerInterface.php +++ b/lib/Magento/Event/InvokerInterface.php @@ -23,7 +23,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\Core\Model\Event; +namespace Magento\Event; interface InvokerInterface { diff --git a/app/code/Magento/Core/Model/Event/Manager.php b/lib/Magento/Event/Manager.php similarity index 72% rename from app/code/Magento/Core/Model/Event/Manager.php rename to lib/Magento/Event/Manager.php index 372ab1442b4..019f776dcd9 100644 --- a/app/code/Magento/Core/Model/Event/Manager.php +++ b/lib/Magento/Event/Manager.php @@ -24,9 +24,9 @@ * @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\Core\Model\Event; +namespace Magento\Event; -class Manager +class Manager implements ManagerInterface { /** * Events cache @@ -38,14 +38,14 @@ class Manager /** * Event invoker * - * @var \Magento\Core\Model\Event\InvokerInterface + * @var \Magento\Event\InvokerInterface */ protected $_invoker; /** * Event config * - * @var \Magento\Core\Model\Event\ConfigInterface + * @var \Magento\Event\ConfigInterface */ protected $_eventConfig; @@ -59,26 +59,26 @@ class Manager /** * Magento event observer factory * - * @var \Magento\Event\ObserverFactory + * @var \Magento\Event\WrapperFactory */ - protected $_eventObserverFactory; + protected $wrapperFactory; /** - * @param \Magento\Core\Model\Event\InvokerInterface $invoker - * @param \Magento\Core\Model\Event\ConfigInterface $eventConfig + * @param InvokerInterface $invoker + * @param ConfigInterface $eventConfig * @param \Magento\EventFactory $eventFactory - * @param \Magento\Event\ObserverFactory $eventObserverFactory + * @param WrapperFactory $wrapperFactory */ public function __construct( - \Magento\Core\Model\Event\InvokerInterface $invoker, - \Magento\Core\Model\Event\ConfigInterface $eventConfig, + \Magento\Event\InvokerInterface $invoker, + \Magento\Event\ConfigInterface $eventConfig, \Magento\EventFactory $eventFactory, - \Magento\Event\ObserverFactory $eventObserverFactory + \Magento\Event\WrapperFactory $wrapperFactory ) { $this->_invoker = $invoker; $this->_eventConfig = $eventConfig; $this->_eventFactory = $eventFactory; - $this->_eventObserverFactory = $eventObserverFactory; + $this->wrapperFactory = $wrapperFactory; } /** @@ -98,12 +98,12 @@ class Manager $event = $this->_eventFactory->create(array('data' => $data)); $event->setName($eventName); - /** @var $observer \Magento\Event\Observer */ - $observer = $this->_eventObserverFactory->create(); - $observer->setData(array_merge(array('event' => $event), $data)); + /** @var $wrapper \Magento\Event\Observer */ + $wrapper = $this->wrapperFactory->create(); + $wrapper->setData(array_merge(array('event' => $event), $data)); \Magento\Profiler::start('OBSERVER:' . $observerConfig['name']); - $this->_invoker->dispatch($observerConfig, $observer); + $this->_invoker->dispatch($observerConfig, $wrapper); \Magento\Profiler::stop('OBSERVER:' . $observerConfig['name']); } \Magento\Profiler::stop('EVENT:' . $eventName); diff --git a/lib/Magento/Event/ManagerInterface.php b/lib/Magento/Event/ManagerInterface.php new file mode 100644 index 00000000000..df1ffbbd186 --- /dev/null +++ b/lib/Magento/Event/ManagerInterface.php @@ -0,0 +1,38 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ +namespace Magento\Event; + +interface ManagerInterface +{ + /** + * Dispatch event + * + * Calls all observer callbacks registered for this event + * and multiple observers matching event name pattern + * + * @param string $eventName + * @param array $data + */ + public function dispatch($eventName, array $data = array()); +} \ No newline at end of file diff --git a/lib/Magento/Event/Observer.php b/lib/Magento/Event/Observer.php index 91773921c4a..2009f2ca3af 100644 --- a/lib/Magento/Event/Observer.php +++ b/lib/Magento/Event/Observer.php @@ -24,27 +24,19 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ - -/** - * Event observer object - * - * @category Magento - * @package \Magento\Event - * @author Magento Core Team <core@magentocommerce.com> - */ namespace Magento\Event; class Observer extends \Magento\Object { /** - * Checkes the observer's event_regex against event's name + * Checks the observer's event_regex against event's name * * @param \Magento\Event $event * @return boolean */ public function isValidFor(\Magento\Event $event) { - return $this->getEventName()===$event->getName(); + return $this->getEventName() === $event->getName(); } /** diff --git a/app/code/Magento/Core/Model/ObserverFactory.php b/lib/Magento/Event/ObserverFactory.php similarity index 92% rename from app/code/Magento/Core/Model/ObserverFactory.php rename to lib/Magento/Event/ObserverFactory.php index 88b4a9596fe..337dd0132ae 100644 --- a/app/code/Magento/Core/Model/ObserverFactory.php +++ b/lib/Magento/Event/ObserverFactory.php @@ -24,7 +24,7 @@ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ -namespace Magento\Core\Model; +namespace Magento\Event; class ObserverFactory { @@ -45,7 +45,7 @@ class ObserverFactory * Get observer model instance * * @param string $className - * @return \Magento\Core\Model\AbstractModel|bool + * @return mixed */ public function get($className) { @@ -57,7 +57,7 @@ class ObserverFactory * * @param string $className * @param array $arguments - * @return \Magento\Core\Model\AbstractModel|bool + * @return mixed */ public function create($className, array $arguments = array()) { diff --git a/lib/Magento/HTTP/HandlerFactory.php b/lib/Magento/Event/WrapperFactory.php similarity index 79% rename from lib/Magento/HTTP/HandlerFactory.php rename to lib/Magento/Event/WrapperFactory.php index 7f7044d5fd3..fe3b9be61a4 100644 --- a/lib/Magento/HTTP/HandlerFactory.php +++ b/lib/Magento/Event/WrapperFactory.php @@ -1,6 +1,6 @@ <?php /** - * Request Handler factory + * Observer model factory * * Magento * @@ -22,15 +22,13 @@ * * @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\HTTP; + */ -class HandlerFactory -{ +namespace Magento\Event; +class WrapperFactory +{ /** - * Application object manager - * * @var \Magento\ObjectManager */ protected $_objectManager; @@ -44,13 +42,13 @@ class HandlerFactory } /** - * Create new http request handler + * Create wrapper instance * - * @param string $name - * @return \Magento\HTTP\HandlerInterface + * @param array $arguments + * @return \Magento\Event\Observer */ - public function create($name) + public function create(array $arguments = array()) { - return $this->_objectManager->create($name); + return $this->_objectManager->create('Magento\Event\Observer', $arguments); } } diff --git a/app/code/Magento/Core/etc/events.xsd b/lib/Magento/Event/etc/events.xsd similarity index 100% rename from app/code/Magento/Core/etc/events.xsd rename to lib/Magento/Event/etc/events.xsd diff --git a/app/code/Magento/Core/Controller/Varien/DispatchableInterface.php b/lib/Magento/EventFactory.php similarity index 66% rename from app/code/Magento/Core/Controller/Varien/DispatchableInterface.php rename to lib/Magento/EventFactory.php index 6acab3d8d6f..ea5bf004cd1 100644 --- a/app/code/Magento/Core/Controller/Varien/DispatchableInterface.php +++ b/lib/Magento/EventFactory.php @@ -18,30 +18,33 @@ * 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_Core * @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; -/** - * Controller dispatchable interface - * - * @category Magento - * @package Magento_Core - * @author Magento Core Team <core@magentocommerce.com> - */ -namespace Magento\Core\Controller\Varien; - -interface DispatchableInterface +class EventFactory { /** - * Dispatch controller action - * - * @abstract - * @param string $action action name - * @return void + * @var ObjectManager + */ + protected $_objectManager; + + /** + * @param ObjectManager $objectManager + */ + public function __construct(ObjectManager $objectManager) + { + $this->_objectManager = $objectManager; + } + + /** + * @param array $arguments + * @return Event */ - public function dispatch($action); -} + public function create($arguments = array()) + { + return $this->_objectManager->create('Magento\Event', $arguments); + } +} \ No newline at end of file diff --git a/lib/Magento/HTTP/Handler/Composite.php b/lib/Magento/HTTP/Handler/Composite.php deleted file mode 100644 index 2fc21cb09ce..00000000000 --- a/lib/Magento/HTTP/Handler/Composite.php +++ /dev/null @@ -1,88 +0,0 @@ -<?php -/** - * Composite http request handler. Used to apply multiple request handlers - * - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\HTTP\Handler; - -class Composite implements \Magento\HTTP\HandlerInterface -{ - /** - * Leaf request handlers - * - * @var \Magento\HTTP\HandlerInterface[] - */ - protected $_children; - - /** - * Handler factory - * - * @var \Magento\HTTP\HandlerFactory - */ - protected $_handlerFactory; - - /** - * @param \Magento\HTTP\HandlerFactory $factory - * @param array $handlers - */ - public function __construct(\Magento\HTTP\HandlerFactory $factory, array $handlers) - { - usort($handlers, array($this, '_cmp')); - $this->_children = $handlers; - $this->_handlerFactory = $factory; - } - - /** - * Sort handlers - * - * @param array $handlerA - * @param array $handlerB - * @return int - */ - protected function _cmp($handlerA, $handlerB) - { - $sortOrderA = intval($handlerA['sortOrder']); - $sortOrderB = intval($handlerB['sortOrder']); - if ($sortOrderA == $sortOrderB) { - return 0; - } - return ($sortOrderA < $sortOrderB) ? -1 : 1; - } - - /** - * Handle http request - * - * @param \Zend_Controller_Request_Http $request - * @param \Zend_Controller_Response_Http $response - */ - public function handle(\Zend_Controller_Request_Http $request, \Zend_Controller_Response_Http $response) - { - foreach ($this->_children as $handlerConfig) { - $this->_handlerFactory->create($handlerConfig['class'])->handle($request, $response); - if ($request->isDispatched()) { - break; - } - } - } -} - diff --git a/lib/Magento/HTTP/HandlerInterface.php b/lib/Magento/HTTP/HandlerInterface.php deleted file mode 100644 index 346c29f4471..00000000000 --- a/lib/Magento/HTTP/HandlerInterface.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php -/** - * Http request handler interface - * - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Open Software License (OSL 3.0) - * that is bundled with this package in the file LICENSE.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) - */ -namespace Magento\HTTP; - -interface HandlerInterface -{ - /** - * Handle http request - * - * @param \Zend_Controller_Request_Http $request - * @param \Zend_Controller_Response_Http $response - */ - public function handle(\Zend_Controller_Request_Http $request, \Zend_Controller_Response_Http $response); -} diff --git a/lib/Magento/Interception/PluginList/PluginList.php b/lib/Magento/Interception/PluginList/PluginList.php index 1213838b55c..bf9037d4e36 100644 --- a/lib/Magento/Interception/PluginList/PluginList.php +++ b/lib/Magento/Interception/PluginList/PluginList.php @@ -25,6 +25,8 @@ */ namespace Magento\Interception\PluginList; +use Zend\Soap\Exception\InvalidArgumentException; + class PluginList extends \Magento\Config\Data\Scoped implements \Magento\Interception\PluginList @@ -139,6 +141,9 @@ class PluginList continue; } $pluginType = $this->_omConfig->getInstanceType($plugin['instance']); + if (!class_exists($pluginType)) { + throw new InvalidArgumentException('Plugin class ' . $pluginType . ' doesn\'t exist'); + } foreach ($this->_definitions->getMethodList($pluginType) as $pluginMethod) { $this->_data['processed'][$type][$pluginMethod][] = $plugin['instance']; } diff --git a/app/code/Magento/Core/Model/UrlInterface.php b/lib/Magento/UrlInterface.php similarity index 88% rename from app/code/Magento/Core/Model/UrlInterface.php rename to lib/Magento/UrlInterface.php index d46aa032b13..6110c104388 100644 --- a/app/code/Magento/Core/Model/UrlInterface.php +++ b/lib/Magento/UrlInterface.php @@ -23,7 +23,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\Core\Model; +namespace Magento; interface UrlInterface { @@ -49,7 +49,7 @@ interface UrlInterface * Initialize object data from retrieved url * * @param string $url - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function parseUrl($url); @@ -64,7 +64,7 @@ interface UrlInterface * Set use_url_cache flag * * @param boolean $flag - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function setUseUrlCache($flag); @@ -72,7 +72,7 @@ interface UrlInterface * Set use session rule * * @param bool $useSession - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function setUseSession($useSession); @@ -80,7 +80,7 @@ interface UrlInterface * Set route front name * * @param string $name - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function setRouteFrontName($name); @@ -110,15 +110,15 @@ interface UrlInterface /** * Set request * - * @param \Zend_Controller_Request_Http $request - * @return \Magento\Core\Model\UrlInterface + * @param \Magento\App\RequestInterface $request + * @return \Magento\UrlInterface */ - public function setRequest(\Zend_Controller_Request_Http $request); + public function setRequest(\Magento\App\RequestInterface $request); /** * Zend request object * - * @return \Magento\Core\Controller\Request\Http + * @return \Magento\App\RequestInterface */ public function getRequest(); @@ -140,7 +140,7 @@ interface UrlInterface * Set store entity * * @param mixed $params - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function setStore($params); @@ -163,7 +163,7 @@ interface UrlInterface * Set Route Parameters * * @param array $data - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function setRoutePath($data); @@ -186,7 +186,7 @@ interface UrlInterface * Set route name * * @param string $data - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function setRouteName($data); @@ -211,7 +211,7 @@ interface UrlInterface * Reset action name and route path if has change * * @param string $data - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function setControllerName($data); @@ -228,7 +228,7 @@ interface UrlInterface * Reseted route path if action name has change * * @param string $data - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function setActionName($data); @@ -245,7 +245,7 @@ interface UrlInterface * * @param array $data * @param boolean $unsetOldParams - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function setRouteParams(array $data, $unsetOldParams = true); @@ -261,7 +261,7 @@ interface UrlInterface * * @param string $key * @param mixed $data - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function setRouteParam($key, $data); @@ -285,14 +285,14 @@ interface UrlInterface /** * If the host was switched but session cookie won't recognize it - add session id to query * - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function checkCookieDomains(); /** * Add session param * - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function addSessionParam(); @@ -300,7 +300,7 @@ interface UrlInterface * Set URL query param(s) * * @param mixed $data - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function setQuery($data); @@ -316,14 +316,14 @@ interface UrlInterface * Set query Params as array * * @param array $data - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function setQueryParams(array $data); /** * Purge Query params array * - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function purgeQueryParams(); @@ -339,7 +339,7 @@ interface UrlInterface * * @param string $key * @param mixed $data - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function setQueryParam($key, $data); @@ -355,7 +355,7 @@ interface UrlInterface * Set fragment to URL * * @param string $data - * @return \Magento\Core\Model\UrlInterface + * @return \Magento\UrlInterface */ public function setFragment($data); diff --git a/lib/Magento/View/ConfigInterface.php b/lib/Magento/View/ConfigInterface.php new file mode 100644 index 00000000000..59ffb9b33fd --- /dev/null +++ b/lib/Magento/View/ConfigInterface.php @@ -0,0 +1,41 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\View; + +/** + * Config Interface + * + * @package Magento\View + */ +interface ConfigInterface +{ + /** + * Render view config object for current package and theme + * + * @param array $params + * @return \Magento\Config\View + */ + public function getViewConfig(array $params = array()); +} diff --git a/app/code/Magento/Core/Model/ThemeInterface.php b/lib/Magento/View/Design/ThemeInterface.php similarity index 88% rename from app/code/Magento/Core/Model/ThemeInterface.php rename to lib/Magento/View/Design/ThemeInterface.php index dfb9d2ab861..5097da60462 100644 --- a/app/code/Magento/Core/Model/ThemeInterface.php +++ b/lib/Magento/View/Design/ThemeInterface.php @@ -18,17 +18,17 @@ * 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_Core * @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\View\Design; + /** - * Minimal required interface a theme has to implement + * Theme Interface + * + * @package Magento\View\Design */ -namespace Magento\Core\Model; - interface ThemeInterface { /** @@ -65,7 +65,7 @@ interface ThemeInterface /** * Retrieve parent theme instance * - * @return \Magento\Core\Model\ThemeInterface|null + * @return ThemeInterface|null */ public function getParentTheme(); @@ -75,4 +75,11 @@ interface ThemeInterface * @return string */ public function getCode(); + + /** + * Check if theme is physical + * + * @return bool + */ + public function isPhysical(); } diff --git a/app/code/Magento/Core/Model/View/DesignInterface.php b/lib/Magento/View/DesignInterface.php similarity index 84% rename from app/code/Magento/Core/Model/View/DesignInterface.php rename to lib/Magento/View/DesignInterface.php index 438fdb47c9a..b5be26f55ff 100644 --- a/app/code/Magento/Core/Model/View/DesignInterface.php +++ b/lib/Magento/View/DesignInterface.php @@ -18,14 +18,17 @@ * 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_Core * @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\Core\Model\View; +namespace Magento\View; +/** + * Design Interface + * + * @package Magento\View + */ interface DesignInterface { /** @@ -37,7 +40,7 @@ interface DesignInterface * Set package area * * @param string $area - * @return \Magento\Core\Model\View\DesignInterface + * @return DesignInterface */ public function setArea($area); @@ -51,9 +54,9 @@ interface DesignInterface /** * Set theme path * - * @param \Magento\Core\Model\Theme|int|string $theme + * @param Design\ThemeInterface|int|string $theme * @param string $area - * @return \Magento\Core\Model\View\DesignInterface + * @return DesignInterface */ public function setDesignTheme($theme, $area = null); @@ -69,14 +72,14 @@ interface DesignInterface /** * Set default design theme * - * @return \Magento\Core\Model\View\DesignInterface + * @return DesignInterface */ public function setDefaultDesignTheme(); /** * Design theme model getter * - * @return \Magento\Core\Model\Theme + * @return Design\ThemeInterface */ public function getDesignTheme(); diff --git a/app/code/Magento/Core/Block.php b/lib/Magento/View/Element/BlockInterface.php similarity index 88% rename from app/code/Magento/Core/Block.php rename to lib/Magento/View/Element/BlockInterface.php index 795cbacacd5..94de53510da 100644 --- a/app/code/Magento/Core/Block.php +++ b/lib/Magento/View/Element/BlockInterface.php @@ -1,5 +1,7 @@ <?php /** + * Magento Block. Used to present information to user + * * Magento * * NOTICE OF LICENSE @@ -18,18 +20,15 @@ * 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_Core * @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\View\Element; /** - * Magento Block interface + * @package Magento\View */ -namespace Magento\Core; - -interface Block +interface BlockInterface { /** * Produce and return block's html output diff --git a/app/code/Magento/Core/Model/Layout/Element.php b/lib/Magento/View/Layout/Element.php similarity index 63% rename from app/code/Magento/Core/Model/Layout/Element.php rename to lib/Magento/View/Layout/Element.php index c3b2d5c2b1f..92245142838 100644 --- a/app/code/Magento/Core/Model/Layout/Element.php +++ b/lib/Magento/View/Layout/Element.php @@ -18,42 +18,53 @@ * 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_Core * @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\Core\Model\Layout; +namespace Magento\View\Layout; class Element extends \Magento\Simplexml\Element { - public function prepare($args) + /**#@+ + * Supported layout directives + */ + const TYPE_BLOCK = 'block'; + const TYPE_CONTAINER = 'container'; + const TYPE_ACTION = 'action'; + const TYPE_ARGUMENTS = 'arguments'; + const TYPE_ARGUMENT = 'argument'; + const TYPE_REFERENCE_BLOCK = 'referenceBlock'; + const TYPE_REFERENCE_CONTAINER = 'referenceContainer'; + const TYPE_REMOVE = 'remove'; + const TYPE_MOVE = 'move'; + /**#@-*/ + + public function prepare() { switch ($this->getName()) { - case \Magento\Core\Model\Layout::TYPE_BLOCK: - $this->prepareBlock($args); + case self::TYPE_BLOCK: + $this->prepareBlock(); break; - case \Magento\Core\Model\Layout::TYPE_REFERENCE_BLOCK: - case \Magento\Core\Model\Layout::TYPE_REFERENCE_CONTAINER: - $this->prepareReference($args); + case self::TYPE_REFERENCE_BLOCK: + case self::TYPE_REFERENCE_CONTAINER: + $this->prepareReference(); break; - case \Magento\Core\Model\Layout::TYPE_ACTION: - $this->prepareAction($args); + case self::TYPE_ACTION: + $this->prepareAction(); break; - case \Magento\Core\Model\Layout::TYPE_ARGUMENT: - $this->prepareActionArgument($args); + case self::TYPE_ARGUMENT: + $this->prepareActionArgument(); break; default: break; } foreach ($this as $child) { - $child->prepare($args); + $child->prepare(); } return $this; } @@ -62,8 +73,8 @@ class Element extends \Magento\Simplexml\Element { $tagName = (string)$this->getName(); if (empty($this['name']) || !in_array($tagName, array( - \Magento\Core\Model\Layout::TYPE_BLOCK, - \Magento\Core\Model\Layout::TYPE_REFERENCE_BLOCK, + self::TYPE_BLOCK, + self::TYPE_REFERENCE_BLOCK, ))) { return false; } @@ -81,10 +92,10 @@ class Element extends \Magento\Simplexml\Element { $tagName = $this->getName(); if (!in_array($tagName, array( - \Magento\Core\Model\Layout::TYPE_BLOCK, - \Magento\Core\Model\Layout::TYPE_REFERENCE_BLOCK, - \Magento\Core\Model\Layout::TYPE_CONTAINER, - \Magento\Core\Model\Layout::TYPE_REFERENCE_CONTAINER + self::TYPE_BLOCK, + self::TYPE_REFERENCE_BLOCK, + self::TYPE_CONTAINER, + self::TYPE_REFERENCE_CONTAINER ))) { return false; } @@ -108,7 +119,12 @@ class Element extends \Magento\Simplexml\Element return $sibling; } - public function prepareBlock($args) + /** + * Add parent element name to parent attribute + * + * @return Element + */ + public function prepareBlock() { $parent = $this->getParent(); if (isset($parent['name']) && !isset($this['parent'])) { @@ -118,12 +134,20 @@ class Element extends \Magento\Simplexml\Element return $this; } - public function prepareReference($args) + /** + * @return Element + */ + public function prepareReference() { return $this; } - public function prepareAction($args) + /** + * Add parent element name to block attribute + * + * @return Element + */ + public function prepareAction() { $parent = $this->getParent(); $this->addAttribute('block', (string)$parent['name']); @@ -131,7 +155,10 @@ class Element extends \Magento\Simplexml\Element return $this; } - public function prepareActionArgument($args) + /** + * @return Element + */ + public function prepareActionArgument() { return $this; } diff --git a/lib/Magento/View/Layout/ProcessorFactory.php b/lib/Magento/View/Layout/ProcessorFactory.php new file mode 100644 index 00000000000..5aa72ffe51b --- /dev/null +++ b/lib/Magento/View/Layout/ProcessorFactory.php @@ -0,0 +1,70 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\View\Layout; + +/** + * Factory class for Processor + */ +class ProcessorFactory +{ + /** + * Object Manager instance + * + * @var \Magento\ObjectManager + */ + protected $_objectManager = null; + + /** + * Instance name to create + * + * @var string + */ + protected $_instanceName = null; + + /** + * Factory constructor + * + * @param \Magento\ObjectManager $objectManager + * @param string $instanceName + */ + public function __construct( + \Magento\ObjectManager $objectManager, + $instanceName = 'Magento\View\Layout\ProcessorInterface' + ) { + $this->_objectManager = $objectManager; + $this->_instanceName = $instanceName; + } + + /** + * Create class instance with specified parameters + * + * @param array $data + * @return ProcessorInterface + */ + public function create(array $data = array()) + { + return $this->_objectManager->create($this->_instanceName, $data); + } +} \ No newline at end of file diff --git a/lib/Magento/View/Layout/ProcessorInterface.php b/lib/Magento/View/Layout/ProcessorInterface.php new file mode 100644 index 00000000000..b6fc393a04c --- /dev/null +++ b/lib/Magento/View/Layout/ProcessorInterface.php @@ -0,0 +1,145 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\View\Layout; + +interface ProcessorInterface +{ + /** + * Add XML update instruction + * + * @param string $update + * @return ProcessorInterface + */ + public function addUpdate($update); + + /** + * Get all registered updates as array + * + * @return array + */ + public function asArray(); + + /** + * Get all registered updates as string + * + * @return string + */ + public function asString(); + + /** + * Add handle(s) to update + * + * @param array|string $handleName + * @return ProcessorInterface + */ + public function addHandle($handleName); + + /** + * Remove handle from update + * + * @param string $handleName + * @return ProcessorInterface + */ + public function removeHandle($handleName); + + /** + * Get handle names array + * + * @return array + */ + public function getHandles(); + + /** + * Add the first existing (declared in layout updates) page handle along with all parents to the update. + * Return whether any page handles have been added or not. + * + * @param array $handlesToTry + * @return ProcessorInterface + */ + public function addPageHandles(array $handlesToTry); + + /** + * Retrieve full hierarchy of types and fragment types in the system + * + * Result format: + * array( + * 'handle_name_1' => array( + * 'name' => 'handle_name_1', + * 'label' => 'Handle Name 1', + * 'children' => array( + * 'handle_name_2' => array( + * 'name' => 'handle_name_2', + * 'label' => 'Handle Name 2', + * 'type' => self::TYPE_PAGE or self::TYPE_FRAGMENT, + * 'children' => array( + * // ... + * ) + * ), + * // ... + * ) + * ), + * // ... + * ) + * + * @return array + */ + public function getPageHandlesHierarchy(); + + /** + * Load layout updates by handles + * + * @param array|string $handles + * @throws \Magento\Exception + * @return ProcessorInterface + */ + public function load($handles = array()); + + /** + * Get layout updates as \Magento\View\Layout\Element object + * + * @return \SimpleXMLElement + */ + public function asSimplexml(); + + /** + * Retrieve already merged layout updates from files for specified area/theme/package/store + * + * @return \Magento\View\Layout\Element + */ + public function getFileLayoutUpdatesXml(); + + /** + * Retrieve containers from the update handles that have been already loaded + * + * Result format: + * array( + * 'container_name' => 'Container Label', + * // ... + * ) + * + * @return array + */ + public function getContainers(); +} diff --git a/lib/Magento/View/LayoutFactory.php b/lib/Magento/View/LayoutFactory.php new file mode 100644 index 00000000000..f1484630742 --- /dev/null +++ b/lib/Magento/View/LayoutFactory.php @@ -0,0 +1,70 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\View; + +/** + * Factory class for Layout + */ +class LayoutFactory +{ + /** + * Object Manager instance + * + * @var \Magento\ObjectManager + */ + protected $_objectManager = null; + + /** + * Instance name to create + * + * @var string + */ + protected $_instanceName = null; + + /** + * Factory constructor + * + * @param \Magento\ObjectManager $objectManager + * @param string $instanceName + */ + public function __construct( + \Magento\ObjectManager $objectManager, + $instanceName = 'Magento\View\LayoutInterface' + ) { + $this->_objectManager = $objectManager; + $this->_instanceName = $instanceName; + } + + /** + * Create class instance with specified parameters + * + * @param array $data + * @return LayoutInterface + */ + public function create(array $data = array()) + { + return $this->_objectManager->create($this->_instanceName, $data); + } +} \ No newline at end of file diff --git a/lib/Magento/View/LayoutInterface.php b/lib/Magento/View/LayoutInterface.php new file mode 100644 index 00000000000..db3dfbacbec --- /dev/null +++ b/lib/Magento/View/LayoutInterface.php @@ -0,0 +1,333 @@ +<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-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/osl-3.0.php Open Software License (OSL 3.0) + */ + +namespace Magento\View; + +interface LayoutInterface +{ + /** + * Retrieve the layout processor + * + * @return Layout\ProcessorInterface + */ + public function getUpdate(); + + /** + * Layout xml generation + * + * @return LayoutInterface + */ + public function generateXml(); + + /** + * Create structure of elements from the loaded XML configuration + */ + public function generateElements(); + + /** + * Find an element in layout, render it and return string with its output + * + * @param string $name + * @param bool $useCache + * @return string + */ + public function renderElement($name, $useCache = true); + + /** + * Add an element to output + * + * @param string $name + * @return LayoutInterface + */ + public function addOutputElement($name); + + /** + * Get all blocks marked for output + * + * @return string + */ + public function getOutput(); + + /** + * Check if element exists in layout structure + * + * @param string $name + * @return bool + */ + public function hasElement($name); + + /** + * Remove block from registry + * + * @param string $name + * @return LayoutInterface + */ + public function unsetElement($name); + + /** + * Retrieve all blocks from registry as array + * + * @return array + */ + public function getAllBlocks(); + + /** + * Get block object by name + * + * @param string $name + * @return Element\BlockInterface|bool + */ + public function getBlock($name); + + /** + * Get child block if exists + * + * @param string $parentName + * @param string $alias + * @return null + */ + public function getChildBlock($parentName, $alias); + + /** + * Set child element into layout structure + * + * @param string $parentName + * @param string $elementName + * @param string $alias + * @return LayoutInterface + */ + public function setChild($parentName, $elementName, $alias); + + /** + * Reorder a child of a specified element + * + * If $offsetOrSibling is null, it will put the element to the end + * If $offsetOrSibling is numeric (integer) value, it will put the element after/before specified position + * Otherwise -- after/before specified sibling + * + * @param string $parentName + * @param string $childName + * @param string|int|null $offsetOrSibling + * @param bool $after + */ + public function reorderChild($parentName, $childName, $offsetOrSibling, $after = true); + + /** + * Remove child element from parent + * + * @param string $parentName + * @param string $alias + * @return LayoutInterface + */ + public function unsetChild($parentName, $alias); + + /** + * Get list of child names + * + * @param string $parentName + * @return array + */ + public function getChildNames($parentName); + + /** + * Get list of child blocks + * + * Returns associative array of <alias> => <block instance> + * + * @param string $parentName + * @return array + */ + public function getChildBlocks($parentName); + + /** + * Get child name by alias + * + * @param string $parentName + * @param string $alias + * @return bool|string + */ + public function getChildName($parentName, $alias); + + /** + * Add element to parent group + * + * @param string $blockName + * @param string $parentGroupName + * @return bool + */ + public function addToParentGroup($blockName, $parentGroupName); + + /** + * Get element names for specified group + * + * @param string $blockName + * @param string $groupName + * @return array + */ + public function getGroupChildNames($blockName, $groupName); + + /** + * Gets parent name of an element with specified name + * + * @param string $childName + * @return bool|string + */ + public function getParentName($childName); + + /** + * Block Factory + * + * @param string $type + * @param string $name + * @param array $attributes + * @return Element\BlockInterface + */ + public function createBlock($type, $name = '', array $attributes = array()); + + /** + * Add a block to registry, create new object if needed + * + * @param string|Element\BlockInterface $block + * @param string $name + * @param string $parent + * @param string $alias + * @return Element\BlockInterface + */ + public function addBlock($block, $name = '', $parent = '', $alias = ''); + + /** + * Insert container into layout structure + * + * @param string $name + * @param string $label + * @param array $options + * @param string $parent + * @param string $alias + */ + public function addContainer($name, $label, array $options = array(), $parent = '', $alias = ''); + + /** + * Rename element in layout and layout structure + * + * @param string $oldName + * @param string $newName + * @return bool + */ + public function renameElement($oldName, $newName); + + /** + * Get element alias by name + * + * @param string $name + * @return bool|string + */ + public function getElementAlias($name); + + /** + * Remove an element from output + * + * @param string $name + * @return LayoutInterface + */ + public function removeOutputElement($name); + + /** + * Retrieve messages block + * + * @return \Magento\Core\Block\Messages + */ + public function getMessagesBlock(); + + /** + * Get block singleton + * + * @param string $type + * @return Element\BlockInterface + */ + public function getBlockSingleton($type); + + /** + * Retrieve block factory + * + * @return \Magento\Core\Model\BlockFactory + */ + public function getBlockFactory(); + + /** + * Retrieve layout area + * + * @return string + */ + public function getArea(); + + /** + * Set layout area + * + * @param $area + * @return LayoutInterface + */ + public function setArea($area); + + /** + * Get property value of an element + * + * @param string $name + * @param string $attribute + * @return mixed + */ + public function getElementProperty($name, $attribute); + + /** + * Whether specified element is a block + * + * @param string $name + * @return bool + */ + public function isBlock($name); + + /** + * Checks if element with specified name is container + * + * @param string $name + * @return bool + */ + public function isContainer($name); + + /** + * Whether the specified element may be manipulated externally + * + * @param string $name + * @return bool + */ + public function isManipulationAllowed($name); + + /** + * Save block in blocks registry + * + * @param string $name + * @param Element\BlockInterface $block + * @return LayoutInterface + */ + public function setBlock($name, $block); +} diff --git a/lib/Twig/AUTHORS b/lib/Twig/AUTHORS deleted file mode 100644 index eb5db0516b3..00000000000 --- a/lib/Twig/AUTHORS +++ /dev/null @@ -1,9 +0,0 @@ -Twig is written and maintained by the Twig Team: - -Lead Developer: - -- Fabien Potencier <fabien.potencier@symfony-project.org> - -Project Founder: - -- Armin Ronacher <armin.ronacher@active-4.com> diff --git a/lib/Twig/Autoloader.php b/lib/Twig/Autoloader.php deleted file mode 100644 index 7007d3157c5..00000000000 --- a/lib/Twig/Autoloader.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Autoloads Twig classes. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Autoloader -{ - /** - * Registers Twig_Autoloader as an SPL autoloader. - * - * @param Boolean $prepend Whether to prepend the autoloader or not. - */ - public static function register($prepend = false) - { - if (version_compare(phpversion(), '5.3.0', '>=')) { - spl_autoload_register(array(new self, 'autoload'), true, $prepend); - } else { - spl_autoload_register(array(new self, 'autoload')); - } - } - - /** - * Handles autoloading of classes. - * - * @param string $class A class name. - */ - public static function autoload($class) - { - if (0 !== strpos($class, 'Twig')) { - return; - } - - if (is_file($file = dirname(__FILE__).'/../'.str_replace(array('_', "\0"), array('/', ''), $class).'.php')) { - require $file; - } - } -} diff --git a/lib/Twig/Compiler.php b/lib/Twig/Compiler.php deleted file mode 100644 index 99aecbcca57..00000000000 --- a/lib/Twig/Compiler.php +++ /dev/null @@ -1,267 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Compiles a node to PHP code. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Compiler implements Twig_CompilerInterface -{ - protected $lastLine; - protected $source; - protected $indentation; - protected $env; - protected $debugInfo; - protected $sourceOffset; - protected $sourceLine; - protected $filename; - - /** - * Constructor. - * - * @param Twig_Environment $env The twig environment instance - */ - public function __construct(Twig_Environment $env) - { - $this->env = $env; - $this->debugInfo = array(); - } - - public function getFilename() - { - return $this->filename; - } - - /** - * Returns the environment instance related to this compiler. - * - * @return Twig_Environment The environment instance - */ - public function getEnvironment() - { - return $this->env; - } - - /** - * Gets the current PHP code after compilation. - * - * @return string The PHP code - */ - public function getSource() - { - return $this->source; - } - - /** - * Compiles a node. - * - * @param Twig_NodeInterface $node The node to compile - * @param integer $indentation The current indentation - * - * @return Twig_Compiler The current compiler instance - */ - public function compile(Twig_NodeInterface $node, $indentation = 0) - { - $this->lastLine = null; - $this->source = ''; - $this->sourceOffset = 0; - // source code starts at 1 (as we then increment it when we encounter new lines) - $this->sourceLine = 1; - $this->indentation = $indentation; - - if ($node instanceof Twig_Node_Module) { - $this->filename = $node->getAttribute('filename'); - } - - $node->compile($this); - - return $this; - } - - public function subcompile(Twig_NodeInterface $node, $raw = true) - { - if (false === $raw) { - $this->addIndentation(); - } - - $node->compile($this); - - return $this; - } - - /** - * Adds a raw string to the compiled code. - * - * @param string $string The string - * - * @return Twig_Compiler The current compiler instance - */ - public function raw($string) - { - $this->source .= $string; - - return $this; - } - - /** - * Writes a string to the compiled code by adding indentation. - * - * @return Twig_Compiler The current compiler instance - */ - public function write() - { - $strings = func_get_args(); - foreach ($strings as $string) { - $this->addIndentation(); - $this->source .= $string; - } - - return $this; - } - - /** - * Appends an indentation to the current PHP code after compilation. - * - * @return Twig_Compiler The current compiler instance - */ - public function addIndentation() - { - $this->source .= str_repeat(' ', $this->indentation * 4); - - return $this; - } - - /** - * Adds a quoted string to the compiled code. - * - * @param string $value The string - * - * @return Twig_Compiler The current compiler instance - */ - public function string($value) - { - $this->source .= sprintf('"%s"', addcslashes($value, "\0\t\"\$\\")); - - return $this; - } - - /** - * Returns a PHP representation of a given value. - * - * @param mixed $value The value to convert - * - * @return Twig_Compiler The current compiler instance - */ - public function repr($value) - { - if (is_int($value) || is_float($value)) { - if (false !== $locale = setlocale(LC_NUMERIC, 0)) { - setlocale(LC_NUMERIC, 'C'); - } - - $this->raw($value); - - if (false !== $locale) { - setlocale(LC_NUMERIC, $locale); - } - } elseif (null === $value) { - $this->raw('null'); - } elseif (is_bool($value)) { - $this->raw($value ? 'true' : 'false'); - } elseif (is_array($value)) { - $this->raw('array('); - $i = 0; - foreach ($value as $key => $value) { - if ($i++) { - $this->raw(', '); - } - $this->repr($key); - $this->raw(' => '); - $this->repr($value); - } - $this->raw(')'); - } else { - $this->string($value); - } - - return $this; - } - - /** - * Adds debugging information. - * - * @param Twig_NodeInterface $node The related twig node - * - * @return Twig_Compiler The current compiler instance - */ - public function addDebugInfo(Twig_NodeInterface $node) - { - if ($node->getLine() != $this->lastLine) { - $this->write("// line {$node->getLine()}\n"); - - // when mbstring.func_overload is set to 2 - // mb_substr_count() replaces substr_count() - // but they have different signatures! - if (((int) ini_get('mbstring.func_overload')) & 2) { - // this is much slower than the "right" version - $this->sourceLine += mb_substr_count(mb_substr($this->source, $this->sourceOffset), "\n"); - } else { - $this->sourceLine += substr_count($this->source, "\n", $this->sourceOffset); - } - $this->sourceOffset = strlen($this->source); - $this->debugInfo[$this->sourceLine] = $node->getLine(); - - $this->lastLine = $node->getLine(); - } - - return $this; - } - - public function getDebugInfo() - { - return $this->debugInfo; - } - - /** - * Indents the generated code. - * - * @param integer $step The number of indentation to add - * - * @return Twig_Compiler The current compiler instance - */ - public function indent($step = 1) - { - $this->indentation += $step; - - return $this; - } - - /** - * Outdents the generated code. - * - * @param integer $step The number of indentation to remove - * - * @return Twig_Compiler The current compiler instance - */ - public function outdent($step = 1) - { - // can't outdent by more steps than the current indentation level - if ($this->indentation < $step) { - throw new LogicException('Unable to call outdent() as the indentation would become negative'); - } - - $this->indentation -= $step; - - return $this; - } -} diff --git a/lib/Twig/CompilerInterface.php b/lib/Twig/CompilerInterface.php deleted file mode 100644 index e293ec9113b..00000000000 --- a/lib/Twig/CompilerInterface.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Interface implemented by compiler classes. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -interface Twig_CompilerInterface -{ - /** - * Compiles a node. - * - * @param Twig_NodeInterface $node The node to compile - * - * @return Twig_CompilerInterface The current compiler instance - */ - public function compile(Twig_NodeInterface $node); - - /** - * Gets the current PHP code after compilation. - * - * @return string The PHP code - */ - public function getSource(); -} diff --git a/lib/Twig/Environment.php b/lib/Twig/Environment.php deleted file mode 100644 index 47e00740bf0..00000000000 --- a/lib/Twig/Environment.php +++ /dev/null @@ -1,1224 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Stores the Twig configuration. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Environment -{ - const VERSION = '1.13.0'; - - protected $charset; - protected $loader; - protected $debug; - protected $autoReload; - protected $cache; - protected $lexer; - protected $parser; - protected $compiler; - protected $baseTemplateClass; - protected $extensions; - protected $parsers; - protected $visitors; - protected $filters; - protected $tests; - protected $functions; - protected $globals; - protected $runtimeInitialized; - protected $extensionInitialized; - protected $loadedTemplates; - protected $strictVariables; - protected $unaryOperators; - protected $binaryOperators; - protected $templateClassPrefix = '__TwigTemplate_'; - protected $functionCallbacks; - protected $filterCallbacks; - protected $staging; - - /** - * Constructor. - * - * Available options: - * - * * debug: When set to true, it automatically set "auto_reload" to true as - * well (default to false). - * - * * charset: The charset used by the templates (default to UTF-8). - * - * * base_template_class: The base template class to use for generated - * templates (default to Twig_Template). - * - * * cache: An absolute path where to store the compiled templates, or - * false to disable compilation cache (default). - * - * * auto_reload: Whether to reload the template is the original source changed. - * If you don't provide the auto_reload option, it will be - * determined automatically base on the debug value. - * - * * strict_variables: Whether to ignore invalid variables in templates - * (default to false). - * - * * autoescape: Whether to enable auto-escaping (default to html): - * * false: disable auto-escaping - * * true: equivalent to html - * * html, js: set the autoescaping to one of the supported strategies - * * PHP callback: a PHP callback that returns an escaping strategy based on the template "filename" - * - * * optimizations: A flag that indicates which optimizations to apply - * (default to -1 which means that all optimizations are enabled; - * set it to 0 to disable). - * - * @param Twig_LoaderInterface $loader A Twig_LoaderInterface instance - * @param array $options An array of options - */ - public function __construct(Twig_LoaderInterface $loader = null, $options = array()) - { - if (null !== $loader) { - $this->setLoader($loader); - } - - $options = array_merge(array( - 'debug' => false, - 'charset' => 'UTF-8', - 'base_template_class' => 'Twig_Template', - 'strict_variables' => false, - 'autoescape' => 'html', - 'cache' => false, - 'auto_reload' => null, - 'optimizations' => -1, - ), $options); - - $this->debug = (bool) $options['debug']; - $this->charset = strtoupper($options['charset']); - $this->baseTemplateClass = $options['base_template_class']; - $this->autoReload = null === $options['auto_reload'] ? $this->debug : (bool) $options['auto_reload']; - $this->strictVariables = (bool) $options['strict_variables']; - $this->runtimeInitialized = false; - $this->setCache($options['cache']); - $this->functionCallbacks = array(); - $this->filterCallbacks = array(); - - $this->addExtension(new Twig_Extension_Core()); - $this->addExtension(new Twig_Extension_Escaper($options['autoescape'])); - $this->addExtension(new Twig_Extension_Optimizer($options['optimizations'])); - $this->extensionInitialized = false; - $this->staging = new Twig_Extension_Staging(); - } - - /** - * Gets the base template class for compiled templates. - * - * @return string The base template class name - */ - public function getBaseTemplateClass() - { - return $this->baseTemplateClass; - } - - /** - * Sets the base template class for compiled templates. - * - * @param string $class The base template class name - */ - public function setBaseTemplateClass($class) - { - $this->baseTemplateClass = $class; - } - - /** - * Enables debugging mode. - */ - public function enableDebug() - { - $this->debug = true; - } - - /** - * Disables debugging mode. - */ - public function disableDebug() - { - $this->debug = false; - } - - /** - * Checks if debug mode is enabled. - * - * @return Boolean true if debug mode is enabled, false otherwise - */ - public function isDebug() - { - return $this->debug; - } - - /** - * Enables the auto_reload option. - */ - public function enableAutoReload() - { - $this->autoReload = true; - } - - /** - * Disables the auto_reload option. - */ - public function disableAutoReload() - { - $this->autoReload = false; - } - - /** - * Checks if the auto_reload option is enabled. - * - * @return Boolean true if auto_reload is enabled, false otherwise - */ - public function isAutoReload() - { - return $this->autoReload; - } - - /** - * Enables the strict_variables option. - */ - public function enableStrictVariables() - { - $this->strictVariables = true; - } - - /** - * Disables the strict_variables option. - */ - public function disableStrictVariables() - { - $this->strictVariables = false; - } - - /** - * Checks if the strict_variables option is enabled. - * - * @return Boolean true if strict_variables is enabled, false otherwise - */ - public function isStrictVariables() - { - return $this->strictVariables; - } - - /** - * Gets the cache directory or false if cache is disabled. - * - * @return string|false - */ - public function getCache() - { - return $this->cache; - } - - /** - * Sets the cache directory or false if cache is disabled. - * - * @param string|false $cache The absolute path to the compiled templates, - * or false to disable cache - */ - public function setCache($cache) - { - $this->cache = $cache ? $cache : false; - } - - /** - * Gets the cache filename for a given template. - * - * @param string $name The template name - * - * @return string The cache file name - */ - public function getCacheFilename($name) - { - if (false === $this->cache) { - return false; - } - - $class = substr($this->getTemplateClass($name), strlen($this->templateClassPrefix)); - - return $this->getCache().'/'.substr($class, 0, 2).'/'.substr($class, 2, 2).'/'.substr($class, 4).'.php'; - } - - /** - * Gets the template class associated with the given string. - * - * @param string $name The name for which to calculate the template class name - * @param integer $index The index if it is an embedded template - * - * @return string The template class name - */ - public function getTemplateClass($name, $index = null) - { - return $this->templateClassPrefix.md5($this->getLoader()->getCacheKey($name)).(null === $index ? '' : '_'.$index); - } - - /** - * Gets the template class prefix. - * - * @return string The template class prefix - */ - public function getTemplateClassPrefix() - { - return $this->templateClassPrefix; - } - - /** - * Renders a template. - * - * @param string $name The template name - * @param array $context An array of parameters to pass to the template - * - * @return string The rendered template - */ - public function render($name, array $context = array()) - { - return $this->loadTemplate($name)->render($context); - } - - /** - * Displays a template. - * - * @param string $name The template name - * @param array $context An array of parameters to pass to the template - */ - public function display($name, array $context = array()) - { - $this->loadTemplate($name)->display($context); - } - - /** - * Loads a template by name. - * - * @param string $name The template name - * @param integer $index The index if it is an embedded template - * - * @return Twig_TemplateInterface A template instance representing the given template name - */ - public function loadTemplate($name, $index = null) - { - $cls = $this->getTemplateClass($name, $index); - - if (isset($this->loadedTemplates[$cls])) { - return $this->loadedTemplates[$cls]; - } - - if (!class_exists($cls, false)) { - if (false === $cache = $this->getCacheFilename($name)) { - eval('?>'.$this->compileSource($this->getLoader()->getSource($name), $name)); - } else { - if (!is_file($cache) || ($this->isAutoReload() && !$this->isTemplateFresh($name, filemtime($cache)))) { - $this->writeCacheFile($cache, $this->compileSource($this->getLoader()->getSource($name), $name)); - } - - require_once $cache; - } - } - - if (!$this->runtimeInitialized) { - $this->initRuntime(); - } - - return $this->loadedTemplates[$cls] = new $cls($this); - } - - /** - * Returns true if the template is still fresh. - * - * Besides checking the loader for freshness information, - * this method also checks if the enabled extensions have - * not changed. - * - * @param string $name The template name - * @param timestamp $time The last modification time of the cached template - * - * @return Boolean true if the template is fresh, false otherwise - */ - public function isTemplateFresh($name, $time) - { - foreach ($this->extensions as $extension) { - $r = new ReflectionObject($extension); - if (filemtime($r->getFileName()) > $time) { - return false; - } - } - - return $this->getLoader()->isFresh($name, $time); - } - - public function resolveTemplate($names) - { - if (!is_array($names)) { - $names = array($names); - } - - foreach ($names as $name) { - if ($name instanceof Twig_Template) { - return $name; - } - - try { - return $this->loadTemplate($name); - } catch (Twig_Error_Loader $e) { - } - } - - if (1 === count($names)) { - throw $e; - } - - throw new Twig_Error_Loader(sprintf('Unable to find one of the following templates: "%s".', implode('", "', $names))); - } - - /** - * Clears the internal template cache. - */ - public function clearTemplateCache() - { - $this->loadedTemplates = array(); - } - - /** - * Clears the template cache files on the filesystem. - */ - public function clearCacheFiles() - { - if (false === $this->cache) { - return; - } - - foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->cache), RecursiveIteratorIterator::LEAVES_ONLY) as $file) { - if ($file->isFile()) { - @unlink($file->getPathname()); - } - } - } - - /** - * Gets the Lexer instance. - * - * @return Twig_LexerInterface A Twig_LexerInterface instance - */ - public function getLexer() - { - if (null === $this->lexer) { - $this->lexer = new Twig_Lexer($this); - } - - return $this->lexer; - } - - /** - * Sets the Lexer instance. - * - * @param Twig_LexerInterface A Twig_LexerInterface instance - */ - public function setLexer(Twig_LexerInterface $lexer) - { - $this->lexer = $lexer; - } - - /** - * Tokenizes a source code. - * - * @param string $source The template source code - * @param string $name The template name - * - * @return Twig_TokenStream A Twig_TokenStream instance - */ - public function tokenize($source, $name = null) - { - return $this->getLexer()->tokenize($source, $name); - } - - /** - * Gets the Parser instance. - * - * @return Twig_ParserInterface A Twig_ParserInterface instance - */ - public function getParser() - { - if (null === $this->parser) { - $this->parser = new Twig_Parser($this); - } - - return $this->parser; - } - - /** - * Sets the Parser instance. - * - * @param Twig_ParserInterface A Twig_ParserInterface instance - */ - public function setParser(Twig_ParserInterface $parser) - { - $this->parser = $parser; - } - - /** - * Parses a token stream. - * - * @param Twig_TokenStream $tokens A Twig_TokenStream instance - * - * @return Twig_Node_Module A Node tree - */ - public function parse(Twig_TokenStream $tokens) - { - return $this->getParser()->parse($tokens); - } - - /** - * Gets the Compiler instance. - * - * @return Twig_CompilerInterface A Twig_CompilerInterface instance - */ - public function getCompiler() - { - if (null === $this->compiler) { - $this->compiler = new Twig_Compiler($this); - } - - return $this->compiler; - } - - /** - * Sets the Compiler instance. - * - * @param Twig_CompilerInterface $compiler A Twig_CompilerInterface instance - */ - public function setCompiler(Twig_CompilerInterface $compiler) - { - $this->compiler = $compiler; - } - - /** - * Compiles a Node. - * - * @param Twig_NodeInterface $node A Twig_NodeInterface instance - * - * @return string The compiled PHP source code - */ - public function compile(Twig_NodeInterface $node) - { - return $this->getCompiler()->compile($node)->getSource(); - } - - /** - * Compiles a template source code. - * - * @param string $source The template source code - * @param string $name The template name - * - * @return string The compiled PHP source code - */ - public function compileSource($source, $name = null) - { - try { - return $this->compile($this->parse($this->tokenize($source, $name))); - } catch (Twig_Error $e) { - $e->setTemplateFile($name); - throw $e; - } catch (Exception $e) { - throw new Twig_Error_Runtime(sprintf('An exception has been thrown during the compilation of a template ("%s").', $e->getMessage()), -1, $name, $e); - } - } - - /** - * Sets the Loader instance. - * - * @param Twig_LoaderInterface $loader A Twig_LoaderInterface instance - */ - public function setLoader(Twig_LoaderInterface $loader) - { - $this->loader = $loader; - } - - /** - * Gets the Loader instance. - * - * @return Twig_LoaderInterface A Twig_LoaderInterface instance - */ - public function getLoader() - { - if (null === $this->loader) { - throw new LogicException('You must set a loader first.'); - } - - return $this->loader; - } - - /** - * Sets the default template charset. - * - * @param string $charset The default charset - */ - public function setCharset($charset) - { - $this->charset = strtoupper($charset); - } - - /** - * Gets the default template charset. - * - * @return string The default charset - */ - public function getCharset() - { - return $this->charset; - } - - /** - * Initializes the runtime environment. - */ - public function initRuntime() - { - $this->runtimeInitialized = true; - - foreach ($this->getExtensions() as $extension) { - $extension->initRuntime($this); - } - } - - /** - * Returns true if the given extension is registered. - * - * @param string $name The extension name - * - * @return Boolean Whether the extension is registered or not - */ - public function hasExtension($name) - { - return isset($this->extensions[$name]); - } - - /** - * Gets an extension by name. - * - * @param string $name The extension name - * - * @return Twig_ExtensionInterface A Twig_ExtensionInterface instance - */ - public function getExtension($name) - { - if (!isset($this->extensions[$name])) { - throw new Twig_Error_Runtime(sprintf('The "%s" extension is not enabled.', $name)); - } - - return $this->extensions[$name]; - } - - /** - * Registers an extension. - * - * @param Twig_ExtensionInterface $extension A Twig_ExtensionInterface instance - */ - public function addExtension(Twig_ExtensionInterface $extension) - { - if ($this->extensionInitialized) { - throw new LogicException(sprintf('Unable to register extension "%s" as extensions have already been initialized.', $extension->getName())); - } - - $this->extensions[$extension->getName()] = $extension; - } - - /** - * Removes an extension by name. - * - * This method is deprecated and you should not use it. - * - * @param string $name The extension name - * - * @deprecated since 1.12 (to be removed in 2.0) - */ - public function removeExtension($name) - { - if ($this->extensionInitialized) { - throw new LogicException(sprintf('Unable to remove extension "%s" as extensions have already been initialized.', $name)); - } - - unset($this->extensions[$name]); - } - - /** - * Registers an array of extensions. - * - * @param array $extensions An array of extensions - */ - public function setExtensions(array $extensions) - { - foreach ($extensions as $extension) { - $this->addExtension($extension); - } - } - - /** - * Returns all registered extensions. - * - * @return array An array of extensions - */ - public function getExtensions() - { - return $this->extensions; - } - - /** - * Registers a Token Parser. - * - * @param Twig_TokenParserInterface $parser A Twig_TokenParserInterface instance - */ - public function addTokenParser(Twig_TokenParserInterface $parser) - { - if ($this->extensionInitialized) { - throw new LogicException('Unable to add a token parser as extensions have already been initialized.'); - } - - $this->staging->addTokenParser($parser); - } - - /** - * Gets the registered Token Parsers. - * - * @return Twig_TokenParserBrokerInterface A broker containing token parsers - */ - public function getTokenParsers() - { - if (!$this->extensionInitialized) { - $this->initExtensions(); - } - - return $this->parsers; - } - - /** - * Gets registered tags. - * - * Be warned that this method cannot return tags defined by Twig_TokenParserBrokerInterface classes. - * - * @return Twig_TokenParserInterface[] An array of Twig_TokenParserInterface instances - */ - public function getTags() - { - $tags = array(); - foreach ($this->getTokenParsers()->getParsers() as $parser) { - if ($parser instanceof Twig_TokenParserInterface) { - $tags[$parser->getTag()] = $parser; - } - } - - return $tags; - } - - /** - * Registers a Node Visitor. - * - * @param Twig_NodeVisitorInterface $visitor A Twig_NodeVisitorInterface instance - */ - public function addNodeVisitor(Twig_NodeVisitorInterface $visitor) - { - if ($this->extensionInitialized) { - throw new LogicException('Unable to add a node visitor as extensions have already been initialized.', $extension->getName()); - } - - $this->staging->addNodeVisitor($visitor); - } - - /** - * Gets the registered Node Visitors. - * - * @return Twig_NodeVisitorInterface[] An array of Twig_NodeVisitorInterface instances - */ - public function getNodeVisitors() - { - if (!$this->extensionInitialized) { - $this->initExtensions(); - } - - return $this->visitors; - } - - /** - * Registers a Filter. - * - * @param string|Twig_SimpleFilter $name The filter name or a Twig_SimpleFilter instance - * @param Twig_FilterInterface|Twig_SimpleFilter $filter A Twig_FilterInterface instance or a Twig_SimpleFilter instance - */ - public function addFilter($name, $filter = null) - { - if (!$name instanceof Twig_SimpleFilter && !($filter instanceof Twig_SimpleFilter || $filter instanceof Twig_FilterInterface)) { - throw new LogicException('A filter must be an instance of Twig_FilterInterface or Twig_SimpleFilter'); - } - - if ($name instanceof Twig_SimpleFilter) { - $filter = $name; - $name = $filter->getName(); - } - - if ($this->extensionInitialized) { - throw new LogicException(sprintf('Unable to add filter "%s" as extensions have already been initialized.', $name)); - } - - $this->staging->addFilter($name, $filter); - } - - /** - * Get a filter by name. - * - * Subclasses may override this method and load filters differently; - * so no list of filters is available. - * - * @param string $name The filter name - * - * @return Twig_Filter|false A Twig_Filter instance or false if the filter does not exist - */ - public function getFilter($name) - { - if (!$this->extensionInitialized) { - $this->initExtensions(); - } - - if (isset($this->filters[$name])) { - return $this->filters[$name]; - } - - foreach ($this->filters as $pattern => $filter) { - $pattern = str_replace('\\*', '(.*?)', preg_quote($pattern, '#'), $count); - - if ($count) { - if (preg_match('#^'.$pattern.'$#', $name, $matches)) { - array_shift($matches); - $filter->setArguments($matches); - - return $filter; - } - } - } - - foreach ($this->filterCallbacks as $callback) { - if (false !== $filter = call_user_func($callback, $name)) { - return $filter; - } - } - - return false; - } - - public function registerUndefinedFilterCallback($callable) - { - $this->filterCallbacks[] = $callable; - } - - /** - * Gets the registered Filters. - * - * Be warned that this method cannot return filters defined with registerUndefinedFunctionCallback. - * - * @return Twig_FilterInterface[] An array of Twig_FilterInterface instances - * - * @see registerUndefinedFilterCallback - */ - public function getFilters() - { - if (!$this->extensionInitialized) { - $this->initExtensions(); - } - - return $this->filters; - } - - /** - * Registers a Test. - * - * @param string|Twig_SimpleTest $name The test name or a Twig_SimpleTest instance - * @param Twig_TestInterface|Twig_SimpleTest $test A Twig_TestInterface instance or a Twig_SimpleTest instance - */ - public function addTest($name, $test = null) - { - if (!$name instanceof Twig_SimpleTest && !($test instanceof Twig_SimpleTest || $test instanceof Twig_TestInterface)) { - throw new LogicException('A test must be an instance of Twig_TestInterface or Twig_SimpleTest'); - } - - if ($name instanceof Twig_SimpleTest) { - $test = $name; - $name = $test->getName(); - } - - if ($this->extensionInitialized) { - throw new LogicException(sprintf('Unable to add test "%s" as extensions have already been initialized.', $name)); - } - - $this->staging->addTest($name, $test); - } - - /** - * Gets the registered Tests. - * - * @return Twig_TestInterface[] An array of Twig_TestInterface instances - */ - public function getTests() - { - if (!$this->extensionInitialized) { - $this->initExtensions(); - } - - return $this->tests; - } - - /** - * Gets a test by name. - * - * @param string $name The test name - * - * @return Twig_Test|false A Twig_Test instance or false if the test does not exist - */ - public function getTest($name) - { - if (!$this->extensionInitialized) { - $this->initExtensions(); - } - - if (isset($this->tests[$name])) { - return $this->tests[$name]; - } - - return false; - } - - /** - * Registers a Function. - * - * @param string|Twig_SimpleFunction $name The function name or a Twig_SimpleFunction instance - * @param Twig_FunctionInterface|Twig_SimpleFunction $function A Twig_FunctionInterface instance or a Twig_SimpleFunction instance - */ - public function addFunction($name, $function = null) - { - if (!$name instanceof Twig_SimpleFunction && !($function instanceof Twig_SimpleFunction || $function instanceof Twig_FunctionInterface)) { - throw new LogicException('A function must be an instance of Twig_FunctionInterface or Twig_SimpleFunction'); - } - - if ($name instanceof Twig_SimpleFunction) { - $function = $name; - $name = $function->getName(); - } - - if ($this->extensionInitialized) { - throw new LogicException(sprintf('Unable to add function "%s" as extensions have already been initialized.', $name)); - } - - $this->staging->addFunction($name, $function); - } - - /** - * Get a function by name. - * - * Subclasses may override this method and load functions differently; - * so no list of functions is available. - * - * @param string $name function name - * - * @return Twig_Function|false A Twig_Function instance or false if the function does not exist - */ - public function getFunction($name) - { - if (!$this->extensionInitialized) { - $this->initExtensions(); - } - - if (isset($this->functions[$name])) { - return $this->functions[$name]; - } - - foreach ($this->functions as $pattern => $function) { - $pattern = str_replace('\\*', '(.*?)', preg_quote($pattern, '#'), $count); - - if ($count) { - if (preg_match('#^'.$pattern.'$#', $name, $matches)) { - array_shift($matches); - $function->setArguments($matches); - - return $function; - } - } - } - - foreach ($this->functionCallbacks as $callback) { - if (false !== $function = call_user_func($callback, $name)) { - return $function; - } - } - - return false; - } - - public function registerUndefinedFunctionCallback($callable) - { - $this->functionCallbacks[] = $callable; - } - - /** - * Gets registered functions. - * - * Be warned that this method cannot return functions defined with registerUndefinedFunctionCallback. - * - * @return Twig_FunctionInterface[] An array of Twig_FunctionInterface instances - * - * @see registerUndefinedFunctionCallback - */ - public function getFunctions() - { - if (!$this->extensionInitialized) { - $this->initExtensions(); - } - - return $this->functions; - } - - /** - * Registers a Global. - * - * New globals can be added before compiling or rendering a template; - * but after, you can only update existing globals. - * - * @param string $name The global name - * @param mixed $value The global value - */ - public function addGlobal($name, $value) - { - if ($this->extensionInitialized || $this->runtimeInitialized) { - if (null === $this->globals) { - $this->globals = $this->initGlobals(); - } - - /* This condition must be uncommented in Twig 2.0 - if (!array_key_exists($name, $this->globals)) { - throw new LogicException(sprintf('Unable to add global "%s" as the runtime or the extensions have already been initialized.', $name)); - } - */ - } - - if ($this->extensionInitialized || $this->runtimeInitialized) { - // update the value - $this->globals[$name] = $value; - } else { - $this->staging->addGlobal($name, $value); - } - } - - /** - * Gets the registered Globals. - * - * @return array An array of globals - */ - public function getGlobals() - { - if (!$this->runtimeInitialized && !$this->extensionInitialized) { - return $this->initGlobals(); - } - - if (null === $this->globals) { - $this->globals = $this->initGlobals(); - } - - return $this->globals; - } - - /** - * Merges a context with the defined globals. - * - * @param array $context An array representing the context - * - * @return array The context merged with the globals - */ - public function mergeGlobals(array $context) - { - // we don't use array_merge as the context being generally - // bigger than globals, this code is faster. - foreach ($this->getGlobals() as $key => $value) { - if (!array_key_exists($key, $context)) { - $context[$key] = $value; - } - } - - return $context; - } - - /** - * Gets the registered unary Operators. - * - * @return array An array of unary operators - */ - public function getUnaryOperators() - { - if (!$this->extensionInitialized) { - $this->initExtensions(); - } - - return $this->unaryOperators; - } - - /** - * Gets the registered binary Operators. - * - * @return array An array of binary operators - */ - public function getBinaryOperators() - { - if (!$this->extensionInitialized) { - $this->initExtensions(); - } - - return $this->binaryOperators; - } - - public function computeAlternatives($name, $items) - { - $alternatives = array(); - foreach ($items as $item) { - $lev = levenshtein($name, $item); - if ($lev <= strlen($name) / 3 || false !== strpos($item, $name)) { - $alternatives[$item] = $lev; - } - } - asort($alternatives); - - return array_keys($alternatives); - } - - protected function initGlobals() - { - $globals = array(); - foreach ($this->extensions as $extension) { - $extGlob = $extension->getGlobals(); - if (!is_array($extGlob)) { - throw new UnexpectedValueException(sprintf('"%s::getGlobals()" must return an array of globals.', get_class($extension))); - } - - $globals[] = $extGlob; - } - - $globals[] = $this->staging->getGlobals(); - - return call_user_func_array('array_merge', $globals); - } - - protected function initExtensions() - { - if ($this->extensionInitialized) { - return; - } - - $this->extensionInitialized = true; - $this->parsers = new Twig_TokenParserBroker(); - $this->filters = array(); - $this->functions = array(); - $this->tests = array(); - $this->visitors = array(); - $this->unaryOperators = array(); - $this->binaryOperators = array(); - - foreach ($this->extensions as $extension) { - $this->initExtension($extension); - } - $this->initExtension($this->staging); - } - - protected function initExtension(Twig_ExtensionInterface $extension) - { - // filters - foreach ($extension->getFilters() as $name => $filter) { - if ($name instanceof Twig_SimpleFilter) { - $filter = $name; - $name = $filter->getName(); - } elseif ($filter instanceof Twig_SimpleFilter) { - $name = $filter->getName(); - } - - $this->filters[$name] = $filter; - } - - // functions - foreach ($extension->getFunctions() as $name => $function) { - if ($name instanceof Twig_SimpleFunction) { - $function = $name; - $name = $function->getName(); - } elseif ($function instanceof Twig_SimpleFunction) { - $name = $function->getName(); - } - - $this->functions[$name] = $function; - } - - // tests - foreach ($extension->getTests() as $name => $test) { - if ($name instanceof Twig_SimpleTest) { - $test = $name; - $name = $test->getName(); - } elseif ($test instanceof Twig_SimpleTest) { - $name = $test->getName(); - } - - $this->tests[$name] = $test; - } - - // token parsers - foreach ($extension->getTokenParsers() as $parser) { - if ($parser instanceof Twig_TokenParserInterface) { - $this->parsers->addTokenParser($parser); - } elseif ($parser instanceof Twig_TokenParserBrokerInterface) { - $this->parsers->addTokenParserBroker($parser); - } else { - throw new LogicException('getTokenParsers() must return an array of Twig_TokenParserInterface or Twig_TokenParserBrokerInterface instances'); - } - } - - // node visitors - foreach ($extension->getNodeVisitors() as $visitor) { - $this->visitors[] = $visitor; - } - - // operators - if ($operators = $extension->getOperators()) { - if (2 !== count($operators)) { - throw new InvalidArgumentException(sprintf('"%s::getOperators()" does not return a valid operators array.', get_class($extension))); - } - - $this->unaryOperators = array_merge($this->unaryOperators, $operators[0]); - $this->binaryOperators = array_merge($this->binaryOperators, $operators[1]); - } - } - - protected function writeCacheFile($file, $content) - { - $dir = dirname($file); - if (!is_dir($dir)) { - if (false === @mkdir($dir, 0777, true) && !is_dir($dir)) { - throw new RuntimeException(sprintf("Unable to create the cache directory (%s).", $dir)); - } - } elseif (!is_writable($dir)) { - throw new RuntimeException(sprintf("Unable to write in the cache directory (%s).", $dir)); - } - - $tmpFile = tempnam(dirname($file), basename($file)); - if (false !== @file_put_contents($tmpFile, $content)) { - // rename does not work on Win32 before 5.2.6 - if (@rename($tmpFile, $file) || (@copy($tmpFile, $file) && unlink($tmpFile))) { - @chmod($file, 0666 & ~umask()); - - return; - } - } - - throw new RuntimeException(sprintf('Failed to write cache file "%s".', $file)); - } -} diff --git a/lib/Twig/Error.php b/lib/Twig/Error.php deleted file mode 100644 index e77ec98d75d..00000000000 --- a/lib/Twig/Error.php +++ /dev/null @@ -1,232 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Twig base exception. - * - * This exception class and its children must only be used when - * an error occurs during the loading of a template, when a syntax error - * is detected in a template, or when rendering a template. Other - * errors must use regular PHP exception classes (like when the template - * cache directory is not writable for instance). - * - * To help debugging template issues, this class tracks the original template - * name and line where the error occurred. - * - * Whenever possible, you must set these information (original template name - * and line number) yourself by passing them to the constructor. If some or all - * these information are not available from where you throw the exception, then - * this class will guess them automatically (when the line number is set to -1 - * and/or the filename is set to null). As this is a costly operation, this - * can be disabled by passing false for both the filename and the line number - * when creating a new instance of this class. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Error extends Exception -{ - protected $lineno; - protected $filename; - protected $rawMessage; - protected $previous; - - /** - * Constructor. - * - * Set both the line number and the filename to false to - * disable automatic guessing of the original template name - * and line number. - * - * Set the line number to -1 to enable its automatic guessing. - * Set the filename to null to enable its automatic guessing. - * - * By default, automatic guessing is enabled. - * - * @param string $message The error message - * @param integer $lineno The template line where the error occurred - * @param string $filename The template file name where the error occurred - * @param Exception $previous The previous exception - */ - public function __construct($message, $lineno = -1, $filename = null, Exception $previous = null) - { - if (version_compare(PHP_VERSION, '5.3.0', '<')) { - $this->previous = $previous; - parent::__construct(''); - } else { - parent::__construct('', 0, $previous); - } - - $this->lineno = $lineno; - $this->filename = $filename; - - if (-1 === $this->lineno || null === $this->filename) { - $this->guessTemplateInfo(); - } - - $this->rawMessage = $message; - - $this->updateRepr(); - } - - /** - * Gets the raw message. - * - * @return string The raw message - */ - public function getRawMessage() - { - return $this->rawMessage; - } - - /** - * Gets the filename where the error occurred. - * - * @return string The filename - */ - public function getTemplateFile() - { - return $this->filename; - } - - /** - * Sets the filename where the error occurred. - * - * @param string $filename The filename - */ - public function setTemplateFile($filename) - { - $this->filename = $filename; - - $this->updateRepr(); - } - - /** - * Gets the template line where the error occurred. - * - * @return integer The template line - */ - public function getTemplateLine() - { - return $this->lineno; - } - - /** - * Sets the template line where the error occurred. - * - * @param integer $lineno The template line - */ - public function setTemplateLine($lineno) - { - $this->lineno = $lineno; - - $this->updateRepr(); - } - - public function guess() - { - $this->guessTemplateInfo(); - $this->updateRepr(); - } - - /** - * For PHP < 5.3.0, provides access to the getPrevious() method. - * - * @param string $method The method name - * @param array $arguments The parameters to be passed to the method - * - * @return Exception The previous exception or null - * - * @throws BadMethodCallException - */ - public function __call($method, $arguments) - { - if ('getprevious' == strtolower($method)) { - return $this->previous; - } - - throw new BadMethodCallException(sprintf('Method "Twig_Error::%s()" does not exist.', $method)); - } - - protected function updateRepr() - { - $this->message = $this->rawMessage; - - $dot = false; - if ('.' === substr($this->message, -1)) { - $this->message = substr($this->message, 0, -1); - $dot = true; - } - - if ($this->filename) { - if (is_string($this->filename) || (is_object($this->filename) && method_exists($this->filename, '__toString'))) { - $filename = sprintf('"%s"', $this->filename); - } else { - $filename = json_encode($this->filename); - } - $this->message .= sprintf(' in %s', $filename); - } - - if ($this->lineno && $this->lineno >= 0) { - $this->message .= sprintf(' at line %d', $this->lineno); - } - - if ($dot) { - $this->message .= '.'; - } - } - - protected function guessTemplateInfo() - { - $template = null; - foreach (debug_backtrace() as $trace) { - if (isset($trace['object']) && $trace['object'] instanceof Twig_Template && 'Twig_Template' !== get_class($trace['object'])) { - if (null === $this->filename || $this->filename == $trace['object']->getTemplateName()) { - $template = $trace['object']; - } - } - } - - // update template filename - if (null !== $template && null === $this->filename) { - $this->filename = $template->getTemplateName(); - } - - if (null === $template || $this->lineno > -1) { - return; - } - - $r = new ReflectionObject($template); - $file = $r->getFileName(); - - $exceptions = array($e = $this); - while (($e instanceof self || method_exists($e, 'getPrevious')) && $e = $e->getPrevious()) { - $exceptions[] = $e; - } - - while ($e = array_pop($exceptions)) { - $traces = $e->getTrace(); - while ($trace = array_shift($traces)) { - if (!isset($trace['file']) || !isset($trace['line']) || $file != $trace['file']) { - continue; - } - - foreach ($template->getDebugInfo() as $codeLine => $templateLine) { - if ($codeLine <= $trace['line']) { - // update template line - $this->lineno = $templateLine; - - return; - } - } - } - } - } -} diff --git a/lib/Twig/Error/Loader.php b/lib/Twig/Error/Loader.php deleted file mode 100644 index 68efb574a1e..00000000000 --- a/lib/Twig/Error/Loader.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Exception thrown when an error occurs during template loading. - * - * Automatic template information guessing is always turned off as - * if a template cannot be loaded, there is nothing to guess. - * However, when a template is loaded from another one, then, we need - * to find the current context and this is automatically done by - * Twig_Template::displayWithErrorHandling(). - * - * This strategy makes Twig_Environment::resolveTemplate() much faster. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Error_Loader extends Twig_Error -{ - public function __construct($message, $lineno = -1, $filename = null, Exception $previous = null) - { - parent::__construct($message, false, false, $previous); - } -} diff --git a/lib/Twig/Error/Runtime.php b/lib/Twig/Error/Runtime.php deleted file mode 100644 index 8b6ceddb9d8..00000000000 --- a/lib/Twig/Error/Runtime.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Exception thrown when an error occurs at runtime. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Error_Runtime extends Twig_Error -{ -} diff --git a/lib/Twig/Error/Syntax.php b/lib/Twig/Error/Syntax.php deleted file mode 100644 index 0f5c5792883..00000000000 --- a/lib/Twig/Error/Syntax.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Exception thrown when a syntax error occurs during lexing or parsing of a template. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Error_Syntax extends Twig_Error -{ -} diff --git a/lib/Twig/ExistsLoaderInterface.php b/lib/Twig/ExistsLoaderInterface.php deleted file mode 100644 index ce434765507..00000000000 --- a/lib/Twig/ExistsLoaderInterface.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Adds an exists() method for loaders. - * - * @author Florin Patan <florinpatan@gmail.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -interface Twig_ExistsLoaderInterface -{ - /** - * Check if we have the source code of a template, given its name. - * - * @param string $name The name of the template to check if we can load - * - * @return boolean If the template source code is handled by this loader or not - */ - public function exists($name); -} diff --git a/lib/Twig/ExpressionParser.php b/lib/Twig/ExpressionParser.php deleted file mode 100644 index 9cf193449f6..00000000000 --- a/lib/Twig/ExpressionParser.php +++ /dev/null @@ -1,600 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Parses expressions. - * - * This parser implements a "Precedence climbing" algorithm. - * - * @see http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm - * @see http://en.wikipedia.org/wiki/Operator-precedence_parser - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_ExpressionParser -{ - const OPERATOR_LEFT = 1; - const OPERATOR_RIGHT = 2; - - protected $parser; - protected $unaryOperators; - protected $binaryOperators; - - public function __construct(Twig_Parser $parser, array $unaryOperators, array $binaryOperators) - { - $this->parser = $parser; - $this->unaryOperators = $unaryOperators; - $this->binaryOperators = $binaryOperators; - } - - public function parseExpression($precedence = 0) - { - $expr = $this->getPrimary(); - $token = $this->parser->getCurrentToken(); - while ($this->isBinary($token) && $this->binaryOperators[$token->getValue()]['precedence'] >= $precedence) { - $op = $this->binaryOperators[$token->getValue()]; - $this->parser->getStream()->next(); - - if (isset($op['callable'])) { - $expr = call_user_func($op['callable'], $this->parser, $expr); - } else { - $expr1 = $this->parseExpression(self::OPERATOR_LEFT === $op['associativity'] ? $op['precedence'] + 1 : $op['precedence']); - $class = $op['class']; - $expr = new $class($expr, $expr1, $token->getLine()); - } - - $token = $this->parser->getCurrentToken(); - } - - if (0 === $precedence) { - return $this->parseConditionalExpression($expr); - } - - return $expr; - } - - protected function getPrimary() - { - $token = $this->parser->getCurrentToken(); - - if ($this->isUnary($token)) { - $operator = $this->unaryOperators[$token->getValue()]; - $this->parser->getStream()->next(); - $expr = $this->parseExpression($operator['precedence']); - $class = $operator['class']; - - return $this->parsePostfixExpression(new $class($expr, $token->getLine())); - } elseif ($token->test(Twig_Token::PUNCTUATION_TYPE, '(')) { - $this->parser->getStream()->next(); - $expr = $this->parseExpression(); - $this->parser->getStream()->expect(Twig_Token::PUNCTUATION_TYPE, ')', 'An opened parenthesis is not properly closed'); - - return $this->parsePostfixExpression($expr); - } - - return $this->parsePrimaryExpression(); - } - - protected function parseConditionalExpression($expr) - { - while ($this->parser->getStream()->test(Twig_Token::PUNCTUATION_TYPE, '?')) { - $this->parser->getStream()->next(); - if (!$this->parser->getStream()->test(Twig_Token::PUNCTUATION_TYPE, ':')) { - $expr2 = $this->parseExpression(); - if ($this->parser->getStream()->test(Twig_Token::PUNCTUATION_TYPE, ':')) { - $this->parser->getStream()->next(); - $expr3 = $this->parseExpression(); - } else { - $expr3 = new Twig_Node_Expression_Constant('', $this->parser->getCurrentToken()->getLine()); - } - } else { - $this->parser->getStream()->next(); - $expr2 = $expr; - $expr3 = $this->parseExpression(); - } - - $expr = new Twig_Node_Expression_Conditional($expr, $expr2, $expr3, $this->parser->getCurrentToken()->getLine()); - } - - return $expr; - } - - protected function isUnary(Twig_Token $token) - { - return $token->test(Twig_Token::OPERATOR_TYPE) && isset($this->unaryOperators[$token->getValue()]); - } - - protected function isBinary(Twig_Token $token) - { - return $token->test(Twig_Token::OPERATOR_TYPE) && isset($this->binaryOperators[$token->getValue()]); - } - - public function parsePrimaryExpression() - { - $token = $this->parser->getCurrentToken(); - switch ($token->getType()) { - case Twig_Token::NAME_TYPE: - $this->parser->getStream()->next(); - switch ($token->getValue()) { - case 'true': - case 'TRUE': - $node = new Twig_Node_Expression_Constant(true, $token->getLine()); - break; - - case 'false': - case 'FALSE': - $node = new Twig_Node_Expression_Constant(false, $token->getLine()); - break; - - case 'none': - case 'NONE': - case 'null': - case 'NULL': - $node = new Twig_Node_Expression_Constant(null, $token->getLine()); - break; - - default: - if ('(' === $this->parser->getCurrentToken()->getValue()) { - $node = $this->getFunctionNode($token->getValue(), $token->getLine()); - } else { - $node = new Twig_Node_Expression_Name($token->getValue(), $token->getLine()); - } - } - break; - - case Twig_Token::NUMBER_TYPE: - $this->parser->getStream()->next(); - $node = new Twig_Node_Expression_Constant($token->getValue(), $token->getLine()); - break; - - case Twig_Token::STRING_TYPE: - case Twig_Token::INTERPOLATION_START_TYPE: - $node = $this->parseStringExpression(); - break; - - default: - if ($token->test(Twig_Token::PUNCTUATION_TYPE, '[')) { - $node = $this->parseArrayExpression(); - } elseif ($token->test(Twig_Token::PUNCTUATION_TYPE, '{')) { - $node = $this->parseHashExpression(); - } else { - throw new Twig_Error_Syntax(sprintf('Unexpected token "%s" of value "%s"', Twig_Token::typeToEnglish($token->getType(), $token->getLine()), $token->getValue()), $token->getLine(), $this->parser->getFilename()); - } - } - - return $this->parsePostfixExpression($node); - } - - public function parseStringExpression() - { - $stream = $this->parser->getStream(); - - $nodes = array(); - // a string cannot be followed by another string in a single expression - $nextCanBeString = true; - while (true) { - if ($stream->test(Twig_Token::STRING_TYPE) && $nextCanBeString) { - $token = $stream->next(); - $nodes[] = new Twig_Node_Expression_Constant($token->getValue(), $token->getLine()); - $nextCanBeString = false; - } elseif ($stream->test(Twig_Token::INTERPOLATION_START_TYPE)) { - $stream->next(); - $nodes[] = $this->parseExpression(); - $stream->expect(Twig_Token::INTERPOLATION_END_TYPE); - $nextCanBeString = true; - } else { - break; - } - } - - $expr = array_shift($nodes); - foreach ($nodes as $node) { - $expr = new Twig_Node_Expression_Binary_Concat($expr, $node, $node->getLine()); - } - - return $expr; - } - - public function parseArrayExpression() - { - $stream = $this->parser->getStream(); - $stream->expect(Twig_Token::PUNCTUATION_TYPE, '[', 'An array element was expected'); - - $node = new Twig_Node_Expression_Array(array(), $stream->getCurrent()->getLine()); - $first = true; - while (!$stream->test(Twig_Token::PUNCTUATION_TYPE, ']')) { - if (!$first) { - $stream->expect(Twig_Token::PUNCTUATION_TYPE, ',', 'An array element must be followed by a comma'); - - // trailing ,? - if ($stream->test(Twig_Token::PUNCTUATION_TYPE, ']')) { - break; - } - } - $first = false; - - $node->addElement($this->parseExpression()); - } - $stream->expect(Twig_Token::PUNCTUATION_TYPE, ']', 'An opened array is not properly closed'); - - return $node; - } - - public function parseHashExpression() - { - $stream = $this->parser->getStream(); - $stream->expect(Twig_Token::PUNCTUATION_TYPE, '{', 'A hash element was expected'); - - $node = new Twig_Node_Expression_Array(array(), $stream->getCurrent()->getLine()); - $first = true; - while (!$stream->test(Twig_Token::PUNCTUATION_TYPE, '}')) { - if (!$first) { - $stream->expect(Twig_Token::PUNCTUATION_TYPE, ',', 'A hash value must be followed by a comma'); - - // trailing ,? - if ($stream->test(Twig_Token::PUNCTUATION_TYPE, '}')) { - break; - } - } - $first = false; - - // a hash key can be: - // - // * a number -- 12 - // * a string -- 'a' - // * a name, which is equivalent to a string -- a - // * an expression, which must be enclosed in parentheses -- (1 + 2) - if ($stream->test(Twig_Token::STRING_TYPE) || $stream->test(Twig_Token::NAME_TYPE) || $stream->test(Twig_Token::NUMBER_TYPE)) { - $token = $stream->next(); - $key = new Twig_Node_Expression_Constant($token->getValue(), $token->getLine()); - } elseif ($stream->test(Twig_Token::PUNCTUATION_TYPE, '(')) { - $key = $this->parseExpression(); - } else { - $current = $stream->getCurrent(); - - throw new Twig_Error_Syntax(sprintf('A hash key must be a quoted string, a number, a name, or an expression enclosed in parentheses (unexpected token "%s" of value "%s"', Twig_Token::typeToEnglish($current->getType(), $current->getLine()), $current->getValue()), $current->getLine(), $this->parser->getFilename()); - } - - $stream->expect(Twig_Token::PUNCTUATION_TYPE, ':', 'A hash key must be followed by a colon (:)'); - $value = $this->parseExpression(); - - $node->addElement($value, $key); - } - $stream->expect(Twig_Token::PUNCTUATION_TYPE, '}', 'An opened hash is not properly closed'); - - return $node; - } - - public function parsePostfixExpression($node) - { - while (true) { - $token = $this->parser->getCurrentToken(); - if ($token->getType() == Twig_Token::PUNCTUATION_TYPE) { - if ('.' == $token->getValue() || '[' == $token->getValue()) { - $node = $this->parseSubscriptExpression($node); - } elseif ('|' == $token->getValue()) { - $node = $this->parseFilterExpression($node); - } else { - break; - } - } else { - break; - } - } - - return $node; - } - - public function getFunctionNode($name, $line) - { - switch ($name) { - case 'parent': - $args = $this->parseArguments(); - if (!count($this->parser->getBlockStack())) { - throw new Twig_Error_Syntax('Calling "parent" outside a block is forbidden', $line, $this->parser->getFilename()); - } - - if (!$this->parser->getParent() && !$this->parser->hasTraits()) { - throw new Twig_Error_Syntax('Calling "parent" on a template that does not extend nor "use" another template is forbidden', $line, $this->parser->getFilename()); - } - - return new Twig_Node_Expression_Parent($this->parser->peekBlockStack(), $line); - case 'block': - return new Twig_Node_Expression_BlockReference($this->parseArguments()->getNode(0), false, $line); - case 'attribute': - $args = $this->parseArguments(); - if (count($args) < 2) { - throw new Twig_Error_Syntax('The "attribute" function takes at least two arguments (the variable and the attributes)', $line, $this->parser->getFilename()); - } - - return new Twig_Node_Expression_GetAttr($args->getNode(0), $args->getNode(1), count($args) > 2 ? $args->getNode(2) : new Twig_Node_Expression_Array(array(), $line), Twig_TemplateInterface::ANY_CALL, $line); - default: - if (null !== $alias = $this->parser->getImportedSymbol('function', $name)) { - $arguments = new Twig_Node_Expression_Array(array(), $line); - foreach ($this->parseArguments() as $n) { - $arguments->addElement($n); - } - - $node = new Twig_Node_Expression_MethodCall($alias['node'], $alias['name'], $arguments, $line); - $node->setAttribute('safe', true); - - return $node; - } - - $args = $this->parseArguments(true); - $class = $this->getFunctionNodeClass($name, $line); - - return new $class($name, $args, $line); - } - } - - public function parseSubscriptExpression($node) - { - $stream = $this->parser->getStream(); - $token = $stream->next(); - $lineno = $token->getLine(); - $arguments = new Twig_Node_Expression_Array(array(), $lineno); - $type = Twig_TemplateInterface::ANY_CALL; - if ($token->getValue() == '.') { - $token = $stream->next(); - if ( - $token->getType() == Twig_Token::NAME_TYPE - || - $token->getType() == Twig_Token::NUMBER_TYPE - || - ($token->getType() == Twig_Token::OPERATOR_TYPE && preg_match(Twig_Lexer::REGEX_NAME, $token->getValue())) - ) { - $arg = new Twig_Node_Expression_Constant($token->getValue(), $lineno); - - if ($stream->test(Twig_Token::PUNCTUATION_TYPE, '(')) { - $type = Twig_TemplateInterface::METHOD_CALL; - foreach ($this->parseArguments() as $n) { - $arguments->addElement($n); - } - } - } else { - throw new Twig_Error_Syntax('Expected name or number', $lineno, $this->parser->getFilename()); - } - - if ($node instanceof Twig_Node_Expression_Name && null !== $this->parser->getImportedSymbol('template', $node->getAttribute('name'))) { - if (!$arg instanceof Twig_Node_Expression_Constant) { - throw new Twig_Error_Syntax(sprintf('Dynamic macro names are not supported (called on "%s")', $node->getAttribute('name')), $token->getLine(), $this->parser->getFilename()); - } - - $node = new Twig_Node_Expression_MethodCall($node, 'get'.$arg->getAttribute('value'), $arguments, $lineno); - $node->setAttribute('safe', true); - - return $node; - } - } else { - $type = Twig_TemplateInterface::ARRAY_CALL; - - // slice? - $slice = false; - if ($stream->test(Twig_Token::PUNCTUATION_TYPE, ':')) { - $slice = true; - $arg = new Twig_Node_Expression_Constant(0, $token->getLine()); - } else { - $arg = $this->parseExpression(); - } - - if ($stream->test(Twig_Token::PUNCTUATION_TYPE, ':')) { - $slice = true; - $stream->next(); - } - - if ($slice) { - if ($stream->test(Twig_Token::PUNCTUATION_TYPE, ']')) { - $length = new Twig_Node_Expression_Constant(null, $token->getLine()); - } else { - $length = $this->parseExpression(); - } - - $class = $this->getFilterNodeClass('slice', $token->getLine()); - $arguments = new Twig_Node(array($arg, $length)); - $filter = new $class($node, new Twig_Node_Expression_Constant('slice', $token->getLine()), $arguments, $token->getLine()); - - $stream->expect(Twig_Token::PUNCTUATION_TYPE, ']'); - - return $filter; - } - - $stream->expect(Twig_Token::PUNCTUATION_TYPE, ']'); - } - - return new Twig_Node_Expression_GetAttr($node, $arg, $arguments, $type, $lineno); - } - - public function parseFilterExpression($node) - { - $this->parser->getStream()->next(); - - return $this->parseFilterExpressionRaw($node); - } - - public function parseFilterExpressionRaw($node, $tag = null) - { - while (true) { - $token = $this->parser->getStream()->expect(Twig_Token::NAME_TYPE); - - $name = new Twig_Node_Expression_Constant($token->getValue(), $token->getLine()); - if (!$this->parser->getStream()->test(Twig_Token::PUNCTUATION_TYPE, '(')) { - $arguments = new Twig_Node(); - } else { - $arguments = $this->parseArguments(true); - } - - $class = $this->getFilterNodeClass($name->getAttribute('value'), $token->getLine()); - - $node = new $class($node, $name, $arguments, $token->getLine(), $tag); - - if (!$this->parser->getStream()->test(Twig_Token::PUNCTUATION_TYPE, '|')) { - break; - } - - $this->parser->getStream()->next(); - } - - return $node; - } - - /** - * Parses arguments. - * - * @param Boolean $namedArguments Whether to allow named arguments or not - * @param Boolean $definition Whether we are parsing arguments for a function definition - */ - public function parseArguments($namedArguments = false, $definition = false) - { - $args = array(); - $stream = $this->parser->getStream(); - - $stream->expect(Twig_Token::PUNCTUATION_TYPE, '(', 'A list of arguments must begin with an opening parenthesis'); - while (!$stream->test(Twig_Token::PUNCTUATION_TYPE, ')')) { - if (!empty($args)) { - $stream->expect(Twig_Token::PUNCTUATION_TYPE, ',', 'Arguments must be separated by a comma'); - } - - if ($definition) { - $token = $stream->expect(Twig_Token::NAME_TYPE, null, 'An argument must be a name'); - $value = new Twig_Node_Expression_Name($token->getValue(), $this->parser->getCurrentToken()->getLine()); - } else { - $value = $this->parseExpression(); - } - - $name = null; - if ($namedArguments && $stream->test(Twig_Token::OPERATOR_TYPE, '=')) { - $token = $stream->next(); - if (!$value instanceof Twig_Node_Expression_Name) { - throw new Twig_Error_Syntax(sprintf('A parameter name must be a string, "%s" given', get_class($value)), $token->getLine(), $this->parser->getFilename()); - } - $name = $value->getAttribute('name'); - - if ($definition) { - $value = $this->parsePrimaryExpression(); - - if (!$this->checkConstantExpression($value)) { - throw new Twig_Error_Syntax(sprintf('A default value for an argument must be a constant (a boolean, a string, a number, or an array).'), $token->getLine(), $this->parser->getFilename()); - } - } else { - $value = $this->parseExpression(); - } - } - - if ($definition) { - if (null === $name) { - $name = $value->getAttribute('name'); - $value = new Twig_Node_Expression_Constant(null, $this->parser->getCurrentToken()->getLine()); - } - $args[$name] = $value; - } else { - if (null === $name) { - $args[] = $value; - } else { - $args[$name] = $value; - } - } - } - $stream->expect(Twig_Token::PUNCTUATION_TYPE, ')', 'A list of arguments must be closed by a parenthesis'); - - return new Twig_Node($args); - } - - public function parseAssignmentExpression() - { - $targets = array(); - while (true) { - $token = $this->parser->getStream()->expect(Twig_Token::NAME_TYPE, null, 'Only variables can be assigned to'); - if (in_array($token->getValue(), array('true', 'false', 'none'))) { - throw new Twig_Error_Syntax(sprintf('You cannot assign a value to "%s"', $token->getValue()), $token->getLine(), $this->parser->getFilename()); - } - $targets[] = new Twig_Node_Expression_AssignName($token->getValue(), $token->getLine()); - - if (!$this->parser->getStream()->test(Twig_Token::PUNCTUATION_TYPE, ',')) { - break; - } - $this->parser->getStream()->next(); - } - - return new Twig_Node($targets); - } - - public function parseMultitargetExpression() - { - $targets = array(); - while (true) { - $targets[] = $this->parseExpression(); - if (!$this->parser->getStream()->test(Twig_Token::PUNCTUATION_TYPE, ',')) { - break; - } - $this->parser->getStream()->next(); - } - - return new Twig_Node($targets); - } - - protected function getFunctionNodeClass($name, $line) - { - $env = $this->parser->getEnvironment(); - - if (false === $function = $env->getFunction($name)) { - $message = sprintf('The function "%s" does not exist', $name); - if ($alternatives = $env->computeAlternatives($name, array_keys($env->getFunctions()))) { - $message = sprintf('%s. Did you mean "%s"', $message, implode('", "', $alternatives)); - } - - throw new Twig_Error_Syntax($message, $line, $this->parser->getFilename()); - } - - if ($function instanceof Twig_SimpleFunction) { - return $function->getNodeClass(); - } - - return $function instanceof Twig_Function_Node ? $function->getClass() : 'Twig_Node_Expression_Function'; - } - - protected function getFilterNodeClass($name, $line) - { - $env = $this->parser->getEnvironment(); - - if (false === $filter = $env->getFilter($name)) { - $message = sprintf('The filter "%s" does not exist', $name); - if ($alternatives = $env->computeAlternatives($name, array_keys($env->getFilters()))) { - $message = sprintf('%s. Did you mean "%s"', $message, implode('", "', $alternatives)); - } - - throw new Twig_Error_Syntax($message, $line, $this->parser->getFilename()); - } - - if ($filter instanceof Twig_SimpleFilter) { - return $filter->getNodeClass(); - } - - return $filter instanceof Twig_Filter_Node ? $filter->getClass() : 'Twig_Node_Expression_Filter'; - } - - // checks that the node only contains "constant" elements - protected function checkConstantExpression(Twig_NodeInterface $node) - { - if (!($node instanceof Twig_Node_Expression_Constant || $node instanceof Twig_Node_Expression_Array)) { - return false; - } - - foreach ($node as $n) { - if (!$this->checkConstantExpression($n)) { - return false; - } - } - - return true; - } -} diff --git a/lib/Twig/Extension.php b/lib/Twig/Extension.php deleted file mode 100644 index 931fc0338ca..00000000000 --- a/lib/Twig/Extension.php +++ /dev/null @@ -1,93 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -abstract class Twig_Extension implements Twig_ExtensionInterface -{ - /** - * Initializes the runtime environment. - * - * This is where you can load some file that contains filter functions for instance. - * - * @param Twig_Environment $environment The current Twig_Environment instance - */ - public function initRuntime(Twig_Environment $environment) - { - } - - /** - * Returns the token parser instances to add to the existing list. - * - * @return array An array of Twig_TokenParserInterface or Twig_TokenParserBrokerInterface instances - */ - public function getTokenParsers() - { - return array(); - } - - /** - * Returns the node visitor instances to add to the existing list. - * - * @return array An array of Twig_NodeVisitorInterface instances - */ - public function getNodeVisitors() - { - return array(); - } - - /** - * Returns a list of filters to add to the existing list. - * - * @return array An array of filters - */ - public function getFilters() - { - return array(); - } - - /** - * Returns a list of tests to add to the existing list. - * - * @return array An array of tests - */ - public function getTests() - { - return array(); - } - - /** - * Returns a list of functions to add to the existing list. - * - * @return array An array of functions - */ - public function getFunctions() - { - return array(); - } - - /** - * Returns a list of operators to add to the existing list. - * - * @return array An array of operators - */ - public function getOperators() - { - return array(); - } - - /** - * Returns a list of global variables to add to the existing list. - * - * @return array An array of global variables - */ - public function getGlobals() - { - return array(); - } -} diff --git a/lib/Twig/Extension/Core.php b/lib/Twig/Extension/Core.php deleted file mode 100644 index c3ca51a1ec7..00000000000 --- a/lib/Twig/Extension/Core.php +++ /dev/null @@ -1,1355 +0,0 @@ -<?php - -if (!defined('ENT_SUBSTITUTE')) { - define('ENT_SUBSTITUTE', 8); -} - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Extension_Core extends Twig_Extension -{ - protected $dateFormats = array('F j, Y H:i', '%d days'); - protected $numberFormat = array(0, '.', ','); - protected $timezone = null; - - /** - * Sets the default format to be used by the date filter. - * - * @param string $format The default date format string - * @param string $dateIntervalFormat The default date interval format string - */ - public function setDateFormat($format = null, $dateIntervalFormat = null) - { - if (null !== $format) { - $this->dateFormats[0] = $format; - } - - if (null !== $dateIntervalFormat) { - $this->dateFormats[1] = $dateIntervalFormat; - } - } - - /** - * Gets the default format to be used by the date filter. - * - * @return array The default date format string and the default date interval format string - */ - public function getDateFormat() - { - return $this->dateFormats; - } - - /** - * Sets the default timezone to be used by the date filter. - * - * @param DateTimeZone|string $timezone The default timezone string or a DateTimeZone object - */ - public function setTimezone($timezone) - { - $this->timezone = $timezone instanceof DateTimeZone ? $timezone : new DateTimeZone($timezone); - } - - /** - * Gets the default timezone to be used by the date filter. - * - * @return DateTimeZone The default timezone currently in use - */ - public function getTimezone() - { - if (null === $this->timezone) { - $this->timezone = new DateTimeZone(date_default_timezone_get()); - } - - return $this->timezone; - } - - /** - * Sets the default format to be used by the number_format filter. - * - * @param integer $decimal The number of decimal places to use. - * @param string $decimalPoint The character(s) to use for the decimal point. - * @param string $thousandSep The character(s) to use for the thousands separator. - */ - public function setNumberFormat($decimal, $decimalPoint, $thousandSep) - { - $this->numberFormat = array($decimal, $decimalPoint, $thousandSep); - } - - /** - * Get the default format used by the number_format filter. - * - * @return array The arguments for number_format() - */ - public function getNumberFormat() - { - return $this->numberFormat; - } - - /** - * Returns the token parser instance to add to the existing list. - * - * @return array An array of Twig_TokenParser instances - */ - public function getTokenParsers() - { - return array( - new Twig_TokenParser_For(), - new Twig_TokenParser_If(), - new Twig_TokenParser_Extends(), - new Twig_TokenParser_Include(), - new Twig_TokenParser_Block(), - new Twig_TokenParser_Use(), - new Twig_TokenParser_Filter(), - new Twig_TokenParser_Macro(), - new Twig_TokenParser_Import(), - new Twig_TokenParser_From(), - new Twig_TokenParser_Set(), - new Twig_TokenParser_Spaceless(), - new Twig_TokenParser_Flush(), - new Twig_TokenParser_Do(), - new Twig_TokenParser_Embed(), - ); - } - - /** - * Returns a list of filters to add to the existing list. - * - * @return array An array of filters - */ - public function getFilters() - { - $filters = array( - // formatting filters - new Twig_SimpleFilter('date', 'twig_date_format_filter', array('needs_environment' => true)), - new Twig_SimpleFilter('date_modify', 'twig_date_modify_filter', array('needs_environment' => true)), - new Twig_SimpleFilter('format', 'sprintf'), - new Twig_SimpleFilter('replace', 'strtr'), - new Twig_SimpleFilter('number_format', 'twig_number_format_filter', array('needs_environment' => true)), - new Twig_SimpleFilter('abs', 'abs'), - - // encoding - new Twig_SimpleFilter('url_encode', 'twig_urlencode_filter'), - new Twig_SimpleFilter('json_encode', 'twig_jsonencode_filter'), - new Twig_SimpleFilter('convert_encoding', 'twig_convert_encoding'), - - // string filters - new Twig_SimpleFilter('title', 'twig_title_string_filter', array('needs_environment' => true)), - new Twig_SimpleFilter('capitalize', 'twig_capitalize_string_filter', array('needs_environment' => true)), - new Twig_SimpleFilter('upper', 'strtoupper'), - new Twig_SimpleFilter('lower', 'strtolower'), - new Twig_SimpleFilter('striptags', 'strip_tags'), - new Twig_SimpleFilter('trim', 'trim'), - new Twig_SimpleFilter('nl2br', 'nl2br', array('pre_escape' => 'html', 'is_safe' => array('html'))), - - // array helpers - new Twig_SimpleFilter('join', 'twig_join_filter'), - new Twig_SimpleFilter('split', 'twig_split_filter'), - new Twig_SimpleFilter('sort', 'twig_sort_filter'), - new Twig_SimpleFilter('merge', 'twig_array_merge'), - new Twig_SimpleFilter('batch', 'twig_array_batch'), - - // string/array filters - new Twig_SimpleFilter('reverse', 'twig_reverse_filter', array('needs_environment' => true)), - new Twig_SimpleFilter('length', 'twig_length_filter', array('needs_environment' => true)), - new Twig_SimpleFilter('slice', 'twig_slice', array('needs_environment' => true)), - new Twig_SimpleFilter('first', 'twig_first', array('needs_environment' => true)), - new Twig_SimpleFilter('last', 'twig_last', array('needs_environment' => true)), - - // iteration and runtime - new Twig_SimpleFilter('default', '_twig_default_filter', array('node_class' => 'Twig_Node_Expression_Filter_Default')), - new Twig_SimpleFilter('keys', 'twig_get_array_keys_filter'), - - // escaping - new Twig_SimpleFilter('escape', 'twig_escape_filter', array('needs_environment' => true, 'is_safe_callback' => 'twig_escape_filter_is_safe')), - new Twig_SimpleFilter('e', 'twig_escape_filter', array('needs_environment' => true, 'is_safe_callback' => 'twig_escape_filter_is_safe')), - ); - - if (function_exists('mb_get_info')) { - $filters[] = new Twig_SimpleFilter('upper', 'twig_upper_filter', array('needs_environment' => true)); - $filters[] = new Twig_SimpleFilter('lower', 'twig_lower_filter', array('needs_environment' => true)); - } - - return $filters; - } - - /** - * Returns a list of global functions to add to the existing list. - * - * @return array An array of global functions - */ - public function getFunctions() - { - return array( - new Twig_SimpleFunction('range', 'range'), - new Twig_SimpleFunction('constant', 'twig_constant'), - new Twig_SimpleFunction('cycle', 'twig_cycle'), - new Twig_SimpleFunction('random', 'twig_random', array('needs_environment' => true)), - new Twig_SimpleFunction('date', 'twig_date_converter', array('needs_environment' => true)), - new Twig_SimpleFunction('include', 'twig_include', array('needs_environment' => true, 'needs_context' => true)), - ); - } - - /** - * Returns a list of tests to add to the existing list. - * - * @return array An array of tests - */ - public function getTests() - { - return array( - new Twig_SimpleTest('even', null, array('node_class' => 'Twig_Node_Expression_Test_Even')), - new Twig_SimpleTest('odd', null, array('node_class' => 'Twig_Node_Expression_Test_Odd')), - new Twig_SimpleTest('defined', null, array('node_class' => 'Twig_Node_Expression_Test_Defined')), - new Twig_SimpleTest('sameas', null, array('node_class' => 'Twig_Node_Expression_Test_Sameas')), - new Twig_SimpleTest('none', null, array('node_class' => 'Twig_Node_Expression_Test_Null')), - new Twig_SimpleTest('null', null, array('node_class' => 'Twig_Node_Expression_Test_Null')), - new Twig_SimpleTest('divisibleby', null, array('node_class' => 'Twig_Node_Expression_Test_Divisibleby')), - new Twig_SimpleTest('constant', null, array('node_class' => 'Twig_Node_Expression_Test_Constant')), - new Twig_SimpleTest('empty', 'twig_test_empty'), - new Twig_SimpleTest('iterable', 'twig_test_iterable'), - ); - } - - /** - * Returns a list of operators to add to the existing list. - * - * @return array An array of operators - */ - public function getOperators() - { - return array( - array( - 'not' => array('precedence' => 50, 'class' => 'Twig_Node_Expression_Unary_Not'), - '-' => array('precedence' => 500, 'class' => 'Twig_Node_Expression_Unary_Neg'), - '+' => array('precedence' => 500, 'class' => 'Twig_Node_Expression_Unary_Pos'), - ), - array( - 'or' => array('precedence' => 10, 'class' => 'Twig_Node_Expression_Binary_Or', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - 'and' => array('precedence' => 15, 'class' => 'Twig_Node_Expression_Binary_And', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - 'b-or' => array('precedence' => 16, 'class' => 'Twig_Node_Expression_Binary_BitwiseOr', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - 'b-xor' => array('precedence' => 17, 'class' => 'Twig_Node_Expression_Binary_BitwiseXor', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - 'b-and' => array('precedence' => 18, 'class' => 'Twig_Node_Expression_Binary_BitwiseAnd', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '==' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Equal', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '!=' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_NotEqual', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '<' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Less', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '>' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Greater', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '>=' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_GreaterEqual', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '<=' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_LessEqual', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - 'not in' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_NotIn', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - 'in' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_In', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '..' => array('precedence' => 25, 'class' => 'Twig_Node_Expression_Binary_Range', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '+' => array('precedence' => 30, 'class' => 'Twig_Node_Expression_Binary_Add', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '-' => array('precedence' => 30, 'class' => 'Twig_Node_Expression_Binary_Sub', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '~' => array('precedence' => 40, 'class' => 'Twig_Node_Expression_Binary_Concat', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '*' => array('precedence' => 60, 'class' => 'Twig_Node_Expression_Binary_Mul', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '/' => array('precedence' => 60, 'class' => 'Twig_Node_Expression_Binary_Div', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '//' => array('precedence' => 60, 'class' => 'Twig_Node_Expression_Binary_FloorDiv', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '%' => array('precedence' => 60, 'class' => 'Twig_Node_Expression_Binary_Mod', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - 'is' => array('precedence' => 100, 'callable' => array($this, 'parseTestExpression'), 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - 'is not' => array('precedence' => 100, 'callable' => array($this, 'parseNotTestExpression'), 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), - '**' => array('precedence' => 200, 'class' => 'Twig_Node_Expression_Binary_Power', 'associativity' => Twig_ExpressionParser::OPERATOR_RIGHT), - ), - ); - } - - public function parseNotTestExpression(Twig_Parser $parser, $node) - { - return new Twig_Node_Expression_Unary_Not($this->parseTestExpression($parser, $node), $parser->getCurrentToken()->getLine()); - } - - public function parseTestExpression(Twig_Parser $parser, $node) - { - $stream = $parser->getStream(); - $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); - $arguments = null; - if ($stream->test(Twig_Token::PUNCTUATION_TYPE, '(')) { - $arguments = $parser->getExpressionParser()->parseArguments(true); - } - - $class = $this->getTestNodeClass($parser, $name, $node->getLine()); - - return new $class($node, $name, $arguments, $parser->getCurrentToken()->getLine()); - } - - protected function getTestNodeClass(Twig_Parser $parser, $name, $line) - { - $env = $parser->getEnvironment(); - $testMap = $env->getTests(); - if (!isset($testMap[$name])) { - $message = sprintf('The test "%s" does not exist', $name); - if ($alternatives = $env->computeAlternatives($name, array_keys($env->getTests()))) { - $message = sprintf('%s. Did you mean "%s"', $message, implode('", "', $alternatives)); - } - - throw new Twig_Error_Syntax($message, $line, $parser->getFilename()); - } - - if ($testMap[$name] instanceof Twig_SimpleTest) { - return $testMap[$name]->getNodeClass(); - } - - return $testMap[$name] instanceof Twig_Test_Node ? $testMap[$name]->getClass() : 'Twig_Node_Expression_Test'; - } - - /** - * Returns the name of the extension. - * - * @return string The extension name - */ - public function getName() - { - return 'core'; - } -} - -/** - * Cycles over a value. - * - * @param ArrayAccess|array $values An array or an ArrayAccess instance - * @param integer $position The cycle position - * - * @return string The next value in the cycle - */ -function twig_cycle($values, $position) -{ - if (!is_array($values) && !$values instanceof ArrayAccess) { - return $values; - } - - return $values[$position % count($values)]; -} - -/** - * Returns a random value depending on the supplied parameter type: - * - a random item from a Traversable or array - * - a random character from a string - * - a random integer between 0 and the integer parameter - * - * @param Twig_Environment $env A Twig_Environment instance - * @param Traversable|array|integer|string $values The values to pick a random item from - * - * @throws Twig_Error_Runtime When $values is an empty array (does not apply to an empty string which is returned as is). - * - * @return mixed A random value from the given sequence - */ -function twig_random(Twig_Environment $env, $values = null) -{ - if (null === $values) { - return mt_rand(); - } - - if (is_int($values) || is_float($values)) { - return $values < 0 ? mt_rand($values, 0) : mt_rand(0, $values); - } - - if ($values instanceof Traversable) { - $values = iterator_to_array($values); - } elseif (is_string($values)) { - if ('' === $values) { - return ''; - } - if (null !== $charset = $env->getCharset()) { - if ('UTF-8' != $charset) { - $values = twig_convert_encoding($values, 'UTF-8', $charset); - } - - // unicode version of str_split() - // split at all positions, but not after the start and not before the end - $values = preg_split('/(?<!^)(?!$)/u', $values); - - if ('UTF-8' != $charset) { - foreach ($values as $i => $value) { - $values[$i] = twig_convert_encoding($value, $charset, 'UTF-8'); - } - } - } else { - return $values[mt_rand(0, strlen($values) - 1)]; - } - } - - if (!is_array($values)) { - return $values; - } - - if (0 === count($values)) { - throw new Twig_Error_Runtime('The random function cannot pick from an empty array.'); - } - - return $values[array_rand($values, 1)]; -} - -/** - * Converts a date to the given format. - * - * <pre> - * {{ post.published_at|date("m/d/Y") }} - * </pre> - * - * @param Twig_Environment $env A Twig_Environment instance - * @param DateTime|DateInterval|string $date A date - * @param string $format A format - * @param DateTimeZone|string $timezone A timezone - * - * @return string The formatted date - */ -function twig_date_format_filter(Twig_Environment $env, $date, $format = null, $timezone = null) -{ - if (null === $format) { - $formats = $env->getExtension('core')->getDateFormat(); - $format = $date instanceof DateInterval ? $formats[1] : $formats[0]; - } - - if ($date instanceof DateInterval) { - return $date->format($format); - } - - return twig_date_converter($env, $date, $timezone)->format($format); -} - -/** - * Returns a new date object modified - * - * <pre> - * {{ post.published_at|date_modify("-1day")|date("m/d/Y") }} - * </pre> - * - * @param Twig_Environment $env A Twig_Environment instance - * @param DateTime|string $date A date - * @param string $modifier A modifier string - * - * @return DateTime A new date object - */ -function twig_date_modify_filter(Twig_Environment $env, $date, $modifier) -{ - $date = twig_date_converter($env, $date, false); - $date->modify($modifier); - - return $date; -} - -/** - * Converts an input to a DateTime instance. - * - * <pre> - * {% if date(user.created_at) < date('+2days') %} - * {# do something #} - * {% endif %} - * </pre> - * - * @param Twig_Environment $env A Twig_Environment instance - * @param DateTime|string $date A date - * @param DateTimeZone|string $timezone A timezone - * - * @return DateTime A DateTime instance - */ -function twig_date_converter(Twig_Environment $env, $date = null, $timezone = null) -{ - // determine the timezone - if (!$timezone) { - $defaultTimezone = $env->getExtension('core')->getTimezone(); - } elseif (!$timezone instanceof DateTimeZone) { - $defaultTimezone = new DateTimeZone($timezone); - } else { - $defaultTimezone = $timezone; - } - - if ($date instanceof DateTime) { - $date = clone $date; - if (false !== $timezone) { - $date->setTimezone($defaultTimezone); - } - - return $date; - } - - $asString = (string) $date; - if (ctype_digit($asString) || (!empty($asString) && '-' === $asString[0] && ctype_digit(substr($asString, 1)))) { - $date = '@'.$date; - } - - $date = new DateTime($date, $defaultTimezone); - if (false !== $timezone) { - $date->setTimezone($defaultTimezone); - } - - return $date; -} - -/** - * Number format filter. - * - * All of the formatting options can be left null, in that case the defaults will - * be used. Supplying any of the parameters will override the defaults set in the - * environment object. - * - * @param Twig_Environment $env A Twig_Environment instance - * @param mixed $number A float/int/string of the number to format - * @param integer $decimal The number of decimal points to display. - * @param string $decimalPoint The character(s) to use for the decimal point. - * @param string $thousandSep The character(s) to use for the thousands separator. - * - * @return string The formatted number - */ -function twig_number_format_filter(Twig_Environment $env, $number, $decimal = null, $decimalPoint = null, $thousandSep = null) -{ - $defaults = $env->getExtension('core')->getNumberFormat(); - if (null === $decimal) { - $decimal = $defaults[0]; - } - - if (null === $decimalPoint) { - $decimalPoint = $defaults[1]; - } - - if (null === $thousandSep) { - $thousandSep = $defaults[2]; - } - - return number_format((float) $number, $decimal, $decimalPoint, $thousandSep); -} - -/** - * URL encodes a string as a path segment or an array as a query string. - * - * @param string|array $url A URL or an array of query parameters - * @param bool $raw true to use rawurlencode() instead of urlencode - * - * @return string The URL encoded value - */ -function twig_urlencode_filter($url, $raw = false) -{ - if (is_array($url)) { - return http_build_query($url, '', '&'); - } - - if ($raw) { - return rawurlencode($url); - } - - return urlencode($url); -} - -if (version_compare(PHP_VERSION, '5.3.0', '<')) { - /** - * JSON encodes a variable. - * - * @param mixed $value The value to encode. - * @param integer $options Not used on PHP 5.2.x - * - * @return mixed The JSON encoded value - */ - function twig_jsonencode_filter($value, $options = 0) - { - if ($value instanceof Twig_Markup) { - $value = (string) $value; - } elseif (is_array($value)) { - array_walk_recursive($value, '_twig_markup2string'); - } - - return json_encode($value); - } -} else { - /** - * JSON encodes a variable. - * - * @param mixed $value The value to encode. - * @param integer $options Bitmask consisting of JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT - * - * @return mixed The JSON encoded value - */ - function twig_jsonencode_filter($value, $options = 0) - { - if ($value instanceof Twig_Markup) { - $value = (string) $value; - } elseif (is_array($value)) { - array_walk_recursive($value, '_twig_markup2string'); - } - - return json_encode($value, $options); - } -} - -function _twig_markup2string(&$value) -{ - if ($value instanceof Twig_Markup) { - $value = (string) $value; - } -} - -/** - * Merges an array with another one. - * - * <pre> - * {% set items = { 'apple': 'fruit', 'orange': 'fruit' } %} - * - * {% set items = items|merge({ 'peugeot': 'car' }) %} - * - * {# items now contains { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'car' } #} - * </pre> - * - * @param array $arr1 An array - * @param array $arr2 An array - * - * @return array The merged array - */ -function twig_array_merge($arr1, $arr2) -{ - if (!is_array($arr1) || !is_array($arr2)) { - throw new Twig_Error_Runtime('The merge filter only works with arrays or hashes.'); - } - - return array_merge($arr1, $arr2); -} - -/** - * Slices a variable. - * - * @param Twig_Environment $env A Twig_Environment instance - * @param mixed $item A variable - * @param integer $start Start of the slice - * @param integer $length Size of the slice - * @param Boolean $preserveKeys Whether to preserve key or not (when the input is an array) - * - * @return mixed The sliced variable - */ -function twig_slice(Twig_Environment $env, $item, $start, $length = null, $preserveKeys = false) -{ - if ($item instanceof Traversable) { - $item = iterator_to_array($item, false); - } - - if (is_array($item)) { - return array_slice($item, $start, $length, $preserveKeys); - } - - $item = (string) $item; - - if (function_exists('mb_get_info') && null !== $charset = $env->getCharset()) { - return mb_substr($item, $start, null === $length ? mb_strlen($item, $charset) - $start : $length, $charset); - } - - return null === $length ? substr($item, $start) : substr($item, $start, $length); -} - -/** - * Returns the first element of the item. - * - * @param Twig_Environment $env A Twig_Environment instance - * @param mixed $item A variable - * - * @return mixed The first element of the item - */ -function twig_first(Twig_Environment $env, $item) -{ - $elements = twig_slice($env, $item, 0, 1, false); - - return is_string($elements) ? $elements[0] : current($elements); -} - -/** - * Returns the last element of the item. - * - * @param Twig_Environment $env A Twig_Environment instance - * @param mixed $item A variable - * - * @return mixed The last element of the item - */ -function twig_last(Twig_Environment $env, $item) -{ - $elements = twig_slice($env, $item, -1, 1, false); - - return is_string($elements) ? $elements[0] : current($elements); -} - -/** - * Joins the values to a string. - * - * The separator between elements is an empty string per default, you can define it with the optional parameter. - * - * <pre> - * {{ [1, 2, 3]|join('|') }} - * {# returns 1|2|3 #} - * - * {{ [1, 2, 3]|join }} - * {# returns 123 #} - * </pre> - * - * @param array $value An array - * @param string $glue The separator - * - * @return string The concatenated string - */ -function twig_join_filter($value, $glue = '') -{ - if ($value instanceof Traversable) { - $value = iterator_to_array($value, false); - } - - return implode($glue, (array) $value); -} - -/** - * Splits the string into an array. - * - * <pre> - * {{ "one,two,three"|split(',') }} - * {# returns [one, two, three] #} - * - * {{ "one,two,three,four,five"|split(',', 3) }} - * {# returns [one, two, "three,four,five"] #} - * - * {{ "123"|split('') }} - * {# returns [1, 2, 3] #} - * - * {{ "aabbcc"|split('', 2) }} - * {# returns [aa, bb, cc] #} - * </pre> - * - * @param string $value A string - * @param string $delimiter The delimiter - * @param integer $limit The limit - * - * @return array The split string as an array - */ -function twig_split_filter($value, $delimiter, $limit = null) -{ - if (empty($delimiter)) { - return str_split($value, null === $limit ? 1 : $limit); - } - - return null === $limit ? explode($delimiter, $value) : explode($delimiter, $value, $limit); -} - -// The '_default' filter is used internally to avoid using the ternary operator -// which costs a lot for big contexts (before PHP 5.4). So, on average, -// a function call is cheaper. -function _twig_default_filter($value, $default = '') -{ - if (twig_test_empty($value)) { - return $default; - } - - return $value; -} - -/** - * Returns the keys for the given array. - * - * It is useful when you want to iterate over the keys of an array: - * - * <pre> - * {% for key in array|keys %} - * {# ... #} - * {% endfor %} - * </pre> - * - * @param array $array An array - * - * @return array The keys - */ -function twig_get_array_keys_filter($array) -{ - if (is_object($array) && $array instanceof Traversable) { - return array_keys(iterator_to_array($array)); - } - - if (!is_array($array)) { - return array(); - } - - return array_keys($array); -} - -/** - * Reverses a variable. - * - * @param Twig_Environment $env A Twig_Environment instance - * @param array|Traversable|string $item An array, a Traversable instance, or a string - * @param Boolean $preserveKeys Whether to preserve key or not - * - * @return mixed The reversed input - */ -function twig_reverse_filter(Twig_Environment $env, $item, $preserveKeys = false) -{ - if (is_object($item) && $item instanceof Traversable) { - return array_reverse(iterator_to_array($item), $preserveKeys); - } - - if (is_array($item)) { - return array_reverse($item, $preserveKeys); - } - - if (null !== $charset = $env->getCharset()) { - $string = (string) $item; - - if ('UTF-8' != $charset) { - $item = twig_convert_encoding($string, 'UTF-8', $charset); - } - - preg_match_all('/./us', $item, $matches); - - $string = implode('', array_reverse($matches[0])); - - if ('UTF-8' != $charset) { - $string = twig_convert_encoding($string, $charset, 'UTF-8'); - } - - return $string; - } - - return strrev((string) $item); -} - -/** - * Sorts an array. - * - * @param array $array An array - */ -function twig_sort_filter($array) -{ - asort($array); - - return $array; -} - -/* used internally */ -function twig_in_filter($value, $compare) -{ - if (is_array($compare)) { - return in_array($value, $compare, is_object($value)); - } elseif (is_string($compare)) { - if (!strlen($value)) { - return empty($compare); - } - - return false !== strpos($compare, (string) $value); - } elseif ($compare instanceof Traversable) { - return in_array($value, iterator_to_array($compare, false), is_object($value)); - } - - return false; -} - -/** - * Escapes a string. - * - * @param Twig_Environment $env A Twig_Environment instance - * @param string $string The value to be escaped - * @param string $strategy The escaping strategy - * @param string $charset The charset - * @param Boolean $autoescape Whether the function is called by the auto-escaping feature (true) or by the developer (false) - */ -function twig_escape_filter(Twig_Environment $env, $string, $strategy = 'html', $charset = null, $autoescape = false) -{ - if ($autoescape && $string instanceof Twig_Markup) { - return $string; - } - - if (!is_string($string)) { - if (is_object($string) && method_exists($string, '__toString')) { - $string = (string) $string; - } else { - return $string; - } - } - - if (null === $charset) { - $charset = $env->getCharset(); - } - - switch ($strategy) { - case 'html': - // see http://php.net/htmlspecialchars - - // Using a static variable to avoid initializing the array - // each time the function is called. Moving the declaration on the - // top of the function slow downs other escaping strategies. - static $htmlspecialcharsCharsets = array( - 'ISO-8859-1' => true, 'ISO8859-1' => true, - 'ISO-8859-15' => true, 'ISO8859-15' => true, - 'utf-8' => true, 'UTF-8' => true, - 'CP866' => true, 'IBM866' => true, '866' => true, - 'CP1251' => true, 'WINDOWS-1251' => true, 'WIN-1251' => true, - '1251' => true, - 'CP1252' => true, 'WINDOWS-1252' => true, '1252' => true, - 'KOI8-R' => true, 'KOI8-RU' => true, 'KOI8R' => true, - 'BIG5' => true, '950' => true, - 'GB2312' => true, '936' => true, - 'BIG5-HKSCS' => true, - 'SHIFT_JIS' => true, 'SJIS' => true, '932' => true, - 'EUC-JP' => true, 'EUCJP' => true, - 'ISO8859-5' => true, 'ISO-8859-5' => true, 'MACROMAN' => true, - ); - - if (isset($htmlspecialcharsCharsets[$charset])) { - return htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, $charset); - } - - if (isset($htmlspecialcharsCharsets[strtoupper($charset)])) { - // cache the lowercase variant for future iterations - $htmlspecialcharsCharsets[$charset] = true; - - return htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, $charset); - } - - $string = twig_convert_encoding($string, 'UTF-8', $charset); - $string = htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); - - return twig_convert_encoding($string, $charset, 'UTF-8'); - - case 'js': - // escape all non-alphanumeric characters - // into their \xHH or \uHHHH representations - if ('UTF-8' != $charset) { - $string = twig_convert_encoding($string, 'UTF-8', $charset); - } - - if (0 == strlen($string) ? false : (1 == preg_match('/^./su', $string) ? false : true)) { - throw new Twig_Error_Runtime('The string to escape is not a valid UTF-8 string.'); - } - - $string = preg_replace_callback('#[^a-zA-Z0-9,\._]#Su', '_twig_escape_js_callback', $string); - - if ('UTF-8' != $charset) { - $string = twig_convert_encoding($string, $charset, 'UTF-8'); - } - - return $string; - - case 'css': - if ('UTF-8' != $charset) { - $string = twig_convert_encoding($string, 'UTF-8', $charset); - } - - if (0 == strlen($string) ? false : (1 == preg_match('/^./su', $string) ? false : true)) { - throw new Twig_Error_Runtime('The string to escape is not a valid UTF-8 string.'); - } - - $string = preg_replace_callback('#[^a-zA-Z0-9]#Su', '_twig_escape_css_callback', $string); - - if ('UTF-8' != $charset) { - $string = twig_convert_encoding($string, $charset, 'UTF-8'); - } - - return $string; - - case 'html_attr': - if ('UTF-8' != $charset) { - $string = twig_convert_encoding($string, 'UTF-8', $charset); - } - - if (0 == strlen($string) ? false : (1 == preg_match('/^./su', $string) ? false : true)) { - throw new Twig_Error_Runtime('The string to escape is not a valid UTF-8 string.'); - } - - $string = preg_replace_callback('#[^a-zA-Z0-9,\.\-_]#Su', '_twig_escape_html_attr_callback', $string); - - if ('UTF-8' != $charset) { - $string = twig_convert_encoding($string, $charset, 'UTF-8'); - } - - return $string; - - case 'url': - // hackish test to avoid version_compare that is much slower, this works unless PHP releases a 5.10.* - // at that point however PHP 5.2.* support can be removed - if (PHP_VERSION < '5.3.0') { - return str_replace('%7E', '~', rawurlencode($string)); - } - - return rawurlencode($string); - - default: - throw new Twig_Error_Runtime(sprintf('Invalid escaping strategy "%s" (valid ones: html, js, url, css, and html_attr).', $strategy)); - } -} - -/* used internally */ -function twig_escape_filter_is_safe(Twig_Node $filterArgs) -{ - foreach ($filterArgs as $arg) { - if ($arg instanceof Twig_Node_Expression_Constant) { - return array($arg->getAttribute('value')); - } - - return array(); - } - - return array('html'); -} - -if (function_exists('mb_convert_encoding')) { - function twig_convert_encoding($string, $to, $from) - { - return mb_convert_encoding($string, $to, $from); - } -} elseif (function_exists('iconv')) { - function twig_convert_encoding($string, $to, $from) - { - return iconv($from, $to, $string); - } -} else { - function twig_convert_encoding($string, $to, $from) - { - throw new Twig_Error_Runtime('No suitable convert encoding function (use UTF-8 as your encoding or install the iconv or mbstring extension).'); - } -} - -function _twig_escape_js_callback($matches) -{ - $char = $matches[0]; - - // \xHH - if (!isset($char[1])) { - return '\\x'.strtoupper(substr('00'.bin2hex($char), -2)); - } - - // \uHHHH - $char = twig_convert_encoding($char, 'UTF-16BE', 'UTF-8'); - - return '\\u'.strtoupper(substr('0000'.bin2hex($char), -4)); -} - -function _twig_escape_css_callback($matches) -{ - $char = $matches[0]; - - // \xHH - if (!isset($char[1])) { - $hex = ltrim(strtoupper(bin2hex($char)), '0'); - if (0 === strlen($hex)) { - $hex = '0'; - } - - return '\\'.$hex.' '; - } - - // \uHHHH - $char = twig_convert_encoding($char, 'UTF-16BE', 'UTF-8'); - - return '\\'.ltrim(strtoupper(bin2hex($char)), '0').' '; -} - -/** - * This function is adapted from code coming from Zend Framework. - * - * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ -function _twig_escape_html_attr_callback($matches) -{ - /* - * While HTML supports far more named entities, the lowest common denominator - * has become HTML5's XML Serialisation which is restricted to the those named - * entities that XML supports. Using HTML entities would result in this error: - * XML Parsing Error: undefined entity - */ - static $entityMap = array( - 34 => 'quot', /* quotation mark */ - 38 => 'amp', /* ampersand */ - 60 => 'lt', /* less-than sign */ - 62 => 'gt', /* greater-than sign */ - ); - - $chr = $matches[0]; - $ord = ord($chr); - - /** - * The following replaces characters undefined in HTML with the - * hex entity for the Unicode replacement character. - */ - if (($ord <= 0x1f && $chr != "\t" && $chr != "\n" && $chr != "\r") || ($ord >= 0x7f && $ord <= 0x9f)) { - return '�'; - } - - /** - * Check if the current character to escape has a name entity we should - * replace it with while grabbing the hex value of the character. - */ - if (strlen($chr) == 1) { - $hex = strtoupper(substr('00'.bin2hex($chr), -2)); - } else { - $chr = twig_convert_encoding($chr, 'UTF-16BE', 'UTF-8'); - $hex = strtoupper(substr('0000'.bin2hex($chr), -4)); - } - - $int = hexdec($hex); - if (array_key_exists($int, $entityMap)) { - return sprintf('&%s;', $entityMap[$int]); - } - - /** - * Per OWASP recommendations, we'll use hex entities for any other - * characters where a named entity does not exist. - */ - - return sprintf('&#x%s;', $hex); -} - -// add multibyte extensions if possible -if (function_exists('mb_get_info')) { - /** - * Returns the length of a variable. - * - * @param Twig_Environment $env A Twig_Environment instance - * @param mixed $thing A variable - * - * @return integer The length of the value - */ - function twig_length_filter(Twig_Environment $env, $thing) - { - return is_scalar($thing) ? mb_strlen($thing, $env->getCharset()) : count($thing); - } - - /** - * Converts a string to uppercase. - * - * @param Twig_Environment $env A Twig_Environment instance - * @param string $string A string - * - * @return string The uppercased string - */ - function twig_upper_filter(Twig_Environment $env, $string) - { - if (null !== ($charset = $env->getCharset())) { - return mb_strtoupper($string, $charset); - } - - return strtoupper($string); - } - - /** - * Converts a string to lowercase. - * - * @param Twig_Environment $env A Twig_Environment instance - * @param string $string A string - * - * @return string The lowercased string - */ - function twig_lower_filter(Twig_Environment $env, $string) - { - if (null !== ($charset = $env->getCharset())) { - return mb_strtolower($string, $charset); - } - - return strtolower($string); - } - - /** - * Returns a titlecased string. - * - * @param Twig_Environment $env A Twig_Environment instance - * @param string $string A string - * - * @return string The titlecased string - */ - function twig_title_string_filter(Twig_Environment $env, $string) - { - if (null !== ($charset = $env->getCharset())) { - return mb_convert_case($string, MB_CASE_TITLE, $charset); - } - - return ucwords(strtolower($string)); - } - - /** - * Returns a capitalized string. - * - * @param Twig_Environment $env A Twig_Environment instance - * @param string $string A string - * - * @return string The capitalized string - */ - function twig_capitalize_string_filter(Twig_Environment $env, $string) - { - if (null !== ($charset = $env->getCharset())) { - return mb_strtoupper(mb_substr($string, 0, 1, $charset), $charset). - mb_strtolower(mb_substr($string, 1, mb_strlen($string, $charset), $charset), $charset); - } - - return ucfirst(strtolower($string)); - } -} -// and byte fallback -else { - /** - * Returns the length of a variable. - * - * @param Twig_Environment $env A Twig_Environment instance - * @param mixed $thing A variable - * - * @return integer The length of the value - */ - function twig_length_filter(Twig_Environment $env, $thing) - { - return is_scalar($thing) ? strlen($thing) : count($thing); - } - - /** - * Returns a titlecased string. - * - * @param Twig_Environment $env A Twig_Environment instance - * @param string $string A string - * - * @return string The titlecased string - */ - function twig_title_string_filter(Twig_Environment $env, $string) - { - return ucwords(strtolower($string)); - } - - /** - * Returns a capitalized string. - * - * @param Twig_Environment $env A Twig_Environment instance - * @param string $string A string - * - * @return string The capitalized string - */ - function twig_capitalize_string_filter(Twig_Environment $env, $string) - { - return ucfirst(strtolower($string)); - } -} - -/* used internally */ -function twig_ensure_traversable($seq) -{ - if ($seq instanceof Traversable || is_array($seq)) { - return $seq; - } - - return array(); -} - -/** - * Checks if a variable is empty. - * - * <pre> - * {# evaluates to true if the foo variable is null, false, or the empty string #} - * {% if foo is empty %} - * {# ... #} - * {% endif %} - * </pre> - * - * @param mixed $value A variable - * - * @return Boolean true if the value is empty, false otherwise - */ -function twig_test_empty($value) -{ - if ($value instanceof Countable) { - return 0 == count($value); - } - - return '' === $value || false === $value || null === $value || array() === $value; -} - -/** - * Checks if a variable is traversable. - * - * <pre> - * {# evaluates to true if the foo variable is an array or a traversable object #} - * {% if foo is traversable %} - * {# ... #} - * {% endif %} - * </pre> - * - * @param mixed $value A variable - * - * @return Boolean true if the value is traversable - */ -function twig_test_iterable($value) -{ - return $value instanceof Traversable || is_array($value); -} - -/** - * Renders a template. - * - * @param string template The template to render - * @param array variables The variables to pass to the template - * @param Boolean with_context Whether to pass the current context variables or not - * @param Boolean ignore_missing Whether to ignore missing templates or not - * @param Boolean sandboxed Whether to sandbox the template or not - * - * @return string The rendered template - */ -function twig_include(Twig_Environment $env, $context, $template, $variables = array(), $withContext = true, $ignoreMissing = false, $sandboxed = false) -{ - if ($withContext) { - $variables = array_merge($context, $variables); - } - - if ($isSandboxed = $sandboxed && $env->hasExtension('sandbox')) { - $sandbox = $env->getExtension('sandbox'); - if (!$alreadySandboxed = $sandbox->isSandboxed()) { - $sandbox->enableSandbox(); - } - } - - try { - return $env->resolveTemplate($template)->display($variables); - } catch (Twig_Error_Loader $e) { - if (!$ignoreMissing) { - throw $e; - } - } - - if ($isSandboxed && !$alreadySandboxed) { - $sandbox->disableSandbox(); - } -} - -/** - * Provides the ability to get constants from instances as well as class/global constants. - * - * @param string $constant The name of the constant - * @param null|object $object The object to get the constant from - * - * @return string - */ -function twig_constant($constant, $object = null) -{ - if (null !== $object) { - $constant = get_class($object).'::'.$constant; - } - - return constant($constant); -} - -/** - * Batches item. - * - * @param array $items An array of items - * @param integer $size The size of the batch - * @param string $fill A string to fill missing items - * - * @return array - */ -function twig_array_batch($items, $size, $fill = null) -{ - if ($items instanceof Traversable) { - $items = iterator_to_array($items, false); - } - - $size = ceil($size); - - $result = array_chunk($items, $size, true); - - if (null !== $fill) { - $last = count($result) - 1; - $result[$last] = array_merge( - $result[$last], - array_fill(0, $size - count($result[$last]), $fill) - ); - } - - return $result; -} diff --git a/lib/Twig/Extension/Debug.php b/lib/Twig/Extension/Debug.php deleted file mode 100644 index e3a85bfe8e2..00000000000 --- a/lib/Twig/Extension/Debug.php +++ /dev/null @@ -1,71 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Extension_Debug extends Twig_Extension -{ - /** - * Returns a list of global functions to add to the existing list. - * - * @return array An array of global functions - */ - public function getFunctions() - { - // dump is safe if var_dump is overridden by xdebug - $isDumpOutputHtmlSafe = extension_loaded('xdebug') - // false means that it was not set (and the default is on) or it explicitly enabled - && (false === ini_get('xdebug.overload_var_dump') || ini_get('xdebug.overload_var_dump')) - // false means that it was not set (and the default is on) or it explicitly enabled - // xdebug.overload_var_dump produces HTML only when html_errors is also enabled - && (false === ini_get('html_errors') || ini_get('html_errors')) - || 'cli' === php_sapi_name() - ; - - return array( - new Twig_SimpleFunction('dump', 'twig_var_dump', array('is_safe' => $isDumpOutputHtmlSafe ? array('html') : array(), 'needs_context' => true, 'needs_environment' => true)), - ); - } - - /** - * Returns the name of the extension. - * - * @return string The extension name - */ - public function getName() - { - return 'debug'; - } -} - -function twig_var_dump(Twig_Environment $env, $context) -{ - if (!$env->isDebug()) { - return; - } - - ob_start(); - - $count = func_num_args(); - if (2 === $count) { - $vars = array(); - foreach ($context as $key => $value) { - if (!$value instanceof Twig_Template) { - $vars[$key] = $value; - } - } - - var_dump($vars); - } else { - for ($i = 2; $i < $count; $i++) { - var_dump(func_get_arg($i)); - } - } - - return ob_get_clean(); -} diff --git a/lib/Twig/Extension/Escaper.php b/lib/Twig/Extension/Escaper.php deleted file mode 100644 index c9a7f68e783..00000000000 --- a/lib/Twig/Extension/Escaper.php +++ /dev/null @@ -1,107 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Extension_Escaper extends Twig_Extension -{ - protected $defaultStrategy; - - public function __construct($defaultStrategy = 'html') - { - $this->setDefaultStrategy($defaultStrategy); - } - - /** - * Returns the token parser instances to add to the existing list. - * - * @return array An array of Twig_TokenParserInterface or Twig_TokenParserBrokerInterface instances - */ - public function getTokenParsers() - { - return array(new Twig_TokenParser_AutoEscape()); - } - - /** - * Returns the node visitor instances to add to the existing list. - * - * @return array An array of Twig_NodeVisitorInterface instances - */ - public function getNodeVisitors() - { - return array(new Twig_NodeVisitor_Escaper()); - } - - /** - * Returns a list of filters to add to the existing list. - * - * @return array An array of filters - */ - public function getFilters() - { - return array( - new Twig_SimpleFilter('raw', 'twig_raw_filter', array('is_safe' => array('all'))), - ); - } - - /** - * Sets the default strategy to use when not defined by the user. - * - * The strategy can be a valid PHP callback that takes the template - * "filename" as an argument and returns the strategy to use. - * - * @param mixed $defaultStrategy An escaping strategy - */ - public function setDefaultStrategy($defaultStrategy) - { - // for BC - if (true === $defaultStrategy) { - $defaultStrategy = 'html'; - } - - $this->defaultStrategy = $defaultStrategy; - } - - /** - * Gets the default strategy to use when not defined by the user. - * - * @param string $filename The template "filename" - * - * @return string The default strategy to use for the template - */ - public function getDefaultStrategy($filename) - { - // disable string callables to avoid calling a function named html or js, - // or any other upcoming escaping strategy - if (!is_string($this->defaultStrategy) && is_callable($this->defaultStrategy)) { - return call_user_func($this->defaultStrategy, $filename); - } - - return $this->defaultStrategy; - } - - /** - * Returns the name of the extension. - * - * @return string The extension name - */ - public function getName() - { - return 'escaper'; - } -} - -/** - * Marks a variable as being safe. - * - * @param string $string A PHP variable - */ -function twig_raw_filter($string) -{ - return $string; -} diff --git a/lib/Twig/Extension/Optimizer.php b/lib/Twig/Extension/Optimizer.php deleted file mode 100644 index 013fcb62584..00000000000 --- a/lib/Twig/Extension/Optimizer.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Extension_Optimizer extends Twig_Extension -{ - protected $optimizers; - - public function __construct($optimizers = -1) - { - $this->optimizers = $optimizers; - } - - /** - * {@inheritdoc} - */ - public function getNodeVisitors() - { - return array(new Twig_NodeVisitor_Optimizer($this->optimizers)); - } - - /** - * {@inheritdoc} - */ - public function getName() - { - return 'optimizer'; - } -} diff --git a/lib/Twig/Extension/Sandbox.php b/lib/Twig/Extension/Sandbox.php deleted file mode 100644 index bf76c11a985..00000000000 --- a/lib/Twig/Extension/Sandbox.php +++ /dev/null @@ -1,112 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Extension_Sandbox extends Twig_Extension -{ - protected $sandboxedGlobally; - protected $sandboxed; - protected $policy; - - public function __construct(Twig_Sandbox_SecurityPolicyInterface $policy, $sandboxed = false) - { - $this->policy = $policy; - $this->sandboxedGlobally = $sandboxed; - } - - /** - * Returns the token parser instances to add to the existing list. - * - * @return array An array of Twig_TokenParserInterface or Twig_TokenParserBrokerInterface instances - */ - public function getTokenParsers() - { - return array(new Twig_TokenParser_Sandbox()); - } - - /** - * Returns the node visitor instances to add to the existing list. - * - * @return array An array of Twig_NodeVisitorInterface instances - */ - public function getNodeVisitors() - { - return array(new Twig_NodeVisitor_Sandbox()); - } - - public function enableSandbox() - { - $this->sandboxed = true; - } - - public function disableSandbox() - { - $this->sandboxed = false; - } - - public function isSandboxed() - { - return $this->sandboxedGlobally || $this->sandboxed; - } - - public function isSandboxedGlobally() - { - return $this->sandboxedGlobally; - } - - public function setSecurityPolicy(Twig_Sandbox_SecurityPolicyInterface $policy) - { - $this->policy = $policy; - } - - public function getSecurityPolicy() - { - return $this->policy; - } - - public function checkSecurity($tags, $filters, $functions) - { - if ($this->isSandboxed()) { - $this->policy->checkSecurity($tags, $filters, $functions); - } - } - - public function checkMethodAllowed($obj, $method) - { - if ($this->isSandboxed()) { - $this->policy->checkMethodAllowed($obj, $method); - } - } - - public function checkPropertyAllowed($obj, $method) - { - if ($this->isSandboxed()) { - $this->policy->checkPropertyAllowed($obj, $method); - } - } - - public function ensureToStringAllowed($obj) - { - if (is_object($obj)) { - $this->policy->checkMethodAllowed($obj, '__toString'); - } - - return $obj; - } - - /** - * Returns the name of the extension. - * - * @return string The extension name - */ - public function getName() - { - return 'sandbox'; - } -} diff --git a/lib/Twig/Extension/Staging.php b/lib/Twig/Extension/Staging.php deleted file mode 100644 index 8ab0f459608..00000000000 --- a/lib/Twig/Extension/Staging.php +++ /dev/null @@ -1,113 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2012 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Internal class. - * - * This class is used by Twig_Environment as a staging area and must not be used directly. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Extension_Staging extends Twig_Extension -{ - protected $functions = array(); - protected $filters = array(); - protected $visitors = array(); - protected $tokenParsers = array(); - protected $globals = array(); - protected $tests = array(); - - public function addFunction($name, $function) - { - $this->functions[$name] = $function; - } - - /** - * {@inheritdoc} - */ - public function getFunctions() - { - return $this->functions; - } - - public function addFilter($name, $filter) - { - $this->filters[$name] = $filter; - } - - /** - * {@inheritdoc} - */ - public function getFilters() - { - return $this->filters; - } - - public function addNodeVisitor(Twig_NodeVisitorInterface $visitor) - { - $this->visitors[] = $visitor; - } - - /** - * {@inheritdoc} - */ - public function getNodeVisitors() - { - return $this->visitors; - } - - public function addTokenParser(Twig_TokenParserInterface $parser) - { - $this->tokenParsers[] = $parser; - } - - /** - * {@inheritdoc} - */ - public function getTokenParsers() - { - return $this->tokenParsers; - } - - public function addGlobal($name, $value) - { - $this->globals[$name] = $value; - } - - /** - * {@inheritdoc} - */ - public function getGlobals() - { - return $this->globals; - } - - public function addTest($name, $test) - { - $this->tests[$name] = $test; - } - - /** - * {@inheritdoc} - */ - public function getTests() - { - return $this->tests; - } - - /** - * {@inheritdoc} - */ - public function getName() - { - return 'staging'; - } -} diff --git a/lib/Twig/Extension/StringLoader.php b/lib/Twig/Extension/StringLoader.php deleted file mode 100644 index 20f3f9948c3..00000000000 --- a/lib/Twig/Extension/StringLoader.php +++ /dev/null @@ -1,64 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2012 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Extension_StringLoader extends Twig_Extension -{ - /** - * {@inheritdoc} - */ - public function getFunctions() - { - return array( - new Twig_SimpleFunction('template_from_string', 'twig_template_from_string', array('needs_environment' => true)), - ); - } - - /** - * {@inheritdoc} - */ - public function getName() - { - return 'string_loader'; - } -} - -/** - * Loads a template from a string. - * - * <pre> - * {{ include(template_from_string("Hello {{ name }}")) }} - * </pre> - * - * @param Twig_Environment $env A Twig_Environment instance - * @param string $template A template as a string - * - * @return Twig_Template A Twig_Template instance - */ -function twig_template_from_string(Twig_Environment $env, $template) -{ - static $loader; - - if (null === $loader) { - $loader = new Twig_Loader_String(); - } - - $current = $env->getLoader(); - $env->setLoader($loader); - try { - $template = $env->loadTemplate($template); - } catch (Exception $e) { - $env->setLoader($current); - - throw $e; - } - $env->setLoader($current); - - return $template; -} diff --git a/lib/Twig/ExtensionInterface.php b/lib/Twig/ExtensionInterface.php deleted file mode 100644 index f189e9d9d09..00000000000 --- a/lib/Twig/ExtensionInterface.php +++ /dev/null @@ -1,83 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Interface implemented by extension classes. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -interface Twig_ExtensionInterface -{ - /** - * Initializes the runtime environment. - * - * This is where you can load some file that contains filter functions for instance. - * - * @param Twig_Environment $environment The current Twig_Environment instance - */ - public function initRuntime(Twig_Environment $environment); - - /** - * Returns the token parser instances to add to the existing list. - * - * @return array An array of Twig_TokenParserInterface or Twig_TokenParserBrokerInterface instances - */ - public function getTokenParsers(); - - /** - * Returns the node visitor instances to add to the existing list. - * - * @return array An array of Twig_NodeVisitorInterface instances - */ - public function getNodeVisitors(); - - /** - * Returns a list of filters to add to the existing list. - * - * @return array An array of filters - */ - public function getFilters(); - - /** - * Returns a list of tests to add to the existing list. - * - * @return array An array of tests - */ - public function getTests(); - - /** - * Returns a list of functions to add to the existing list. - * - * @return array An array of functions - */ - public function getFunctions(); - - /** - * Returns a list of operators to add to the existing list. - * - * @return array An array of operators - */ - public function getOperators(); - - /** - * Returns a list of global variables to add to the existing list. - * - * @return array An array of global variables - */ - public function getGlobals(); - - /** - * Returns the name of the extension. - * - * @return string The extension name - */ - public function getName(); -} diff --git a/lib/Twig/Filter.php b/lib/Twig/Filter.php deleted file mode 100644 index 189178851bb..00000000000 --- a/lib/Twig/Filter.php +++ /dev/null @@ -1,83 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a template filter. - * - * Use Twig_SimpleFilter instead. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -abstract class Twig_Filter implements Twig_FilterInterface, Twig_FilterCallableInterface -{ - protected $options; - protected $arguments = array(); - - public function __construct(array $options = array()) - { - $this->options = array_merge(array( - 'needs_environment' => false, - 'needs_context' => false, - 'pre_escape' => null, - 'preserves_safety' => null, - 'callable' => null, - ), $options); - } - - public function setArguments($arguments) - { - $this->arguments = $arguments; - } - - public function getArguments() - { - return $this->arguments; - } - - public function needsEnvironment() - { - return $this->options['needs_environment']; - } - - public function needsContext() - { - return $this->options['needs_context']; - } - - public function getSafe(Twig_Node $filterArgs) - { - if (isset($this->options['is_safe'])) { - return $this->options['is_safe']; - } - - if (isset($this->options['is_safe_callback'])) { - return call_user_func($this->options['is_safe_callback'], $filterArgs); - } - - return null; - } - - public function getPreservesSafety() - { - return $this->options['preserves_safety']; - } - - public function getPreEscape() - { - return $this->options['pre_escape']; - } - - public function getCallable() - { - return $this->options['callable']; - } -} diff --git a/lib/Twig/Filter/Function.php b/lib/Twig/Filter/Function.php deleted file mode 100644 index ad374a551fe..00000000000 --- a/lib/Twig/Filter/Function.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a function template filter. - * - * Use Twig_SimpleFilter instead. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -class Twig_Filter_Function extends Twig_Filter -{ - protected $function; - - public function __construct($function, array $options = array()) - { - $options['callable'] = $function; - - parent::__construct($options); - - $this->function = $function; - } - - public function compile() - { - return $this->function; - } -} diff --git a/lib/Twig/Filter/Method.php b/lib/Twig/Filter/Method.php deleted file mode 100644 index 63c8c3be4a5..00000000000 --- a/lib/Twig/Filter/Method.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a method template filter. - * - * Use Twig_SimpleFilter instead. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -class Twig_Filter_Method extends Twig_Filter -{ - protected $extension; - protected $method; - - public function __construct(Twig_ExtensionInterface $extension, $method, array $options = array()) - { - $options['callable'] = array($extension, $method); - - parent::__construct($options); - - $this->extension = $extension; - $this->method = $method; - } - - public function compile() - { - return sprintf('$this->env->getExtension(\'%s\')->%s', $this->extension->getName(), $this->method); - } -} diff --git a/lib/Twig/Filter/Node.php b/lib/Twig/Filter/Node.php deleted file mode 100644 index 8744c5e00de..00000000000 --- a/lib/Twig/Filter/Node.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a template filter as a node. - * - * Use Twig_SimpleFilter instead. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -class Twig_Filter_Node extends Twig_Filter -{ - protected $class; - - public function __construct($class, array $options = array()) - { - parent::__construct($options); - - $this->class = $class; - } - - public function getClass() - { - return $this->class; - } - - public function compile() - { - } -} diff --git a/lib/Twig/FilterCallableInterface.php b/lib/Twig/FilterCallableInterface.php deleted file mode 100644 index 145534dfdd6..00000000000 --- a/lib/Twig/FilterCallableInterface.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2012 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a callable template filter. - * - * Use Twig_SimpleFilter instead. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -interface Twig_FilterCallableInterface -{ - public function getCallable(); -} diff --git a/lib/Twig/FilterInterface.php b/lib/Twig/FilterInterface.php deleted file mode 100644 index 5319ecc9fc3..00000000000 --- a/lib/Twig/FilterInterface.php +++ /dev/null @@ -1,42 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a template filter. - * - * Use Twig_SimpleFilter instead. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -interface Twig_FilterInterface -{ - /** - * Compiles a filter. - * - * @return string The PHP code for the filter - */ - public function compile(); - - public function needsEnvironment(); - - public function needsContext(); - - public function getSafe(Twig_Node $filterArgs); - - public function getPreservesSafety(); - - public function getPreEscape(); - - public function setArguments($arguments); - - public function getArguments(); -} diff --git a/lib/Twig/Function.php b/lib/Twig/Function.php deleted file mode 100644 index b5ffb2b0475..00000000000 --- a/lib/Twig/Function.php +++ /dev/null @@ -1,71 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a template function. - * - * Use Twig_SimpleFunction instead. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -abstract class Twig_Function implements Twig_FunctionInterface, Twig_FunctionCallableInterface -{ - protected $options; - protected $arguments = array(); - - public function __construct(array $options = array()) - { - $this->options = array_merge(array( - 'needs_environment' => false, - 'needs_context' => false, - 'callable' => null, - ), $options); - } - - public function setArguments($arguments) - { - $this->arguments = $arguments; - } - - public function getArguments() - { - return $this->arguments; - } - - public function needsEnvironment() - { - return $this->options['needs_environment']; - } - - public function needsContext() - { - return $this->options['needs_context']; - } - - public function getSafe(Twig_Node $functionArgs) - { - if (isset($this->options['is_safe'])) { - return $this->options['is_safe']; - } - - if (isset($this->options['is_safe_callback'])) { - return call_user_func($this->options['is_safe_callback'], $functionArgs); - } - - return array(); - } - - public function getCallable() - { - return $this->options['callable']; - } -} diff --git a/lib/Twig/Function/Function.php b/lib/Twig/Function/Function.php deleted file mode 100644 index d1e1b96a204..00000000000 --- a/lib/Twig/Function/Function.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2010 Arnaud Le Blanc - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a function template function. - * - * Use Twig_SimpleFunction instead. - * - * @author Arnaud Le Blanc <arnaud.lb@gmail.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -class Twig_Function_Function extends Twig_Function -{ - protected $function; - - public function __construct($function, array $options = array()) - { - $options['callable'] = $function; - - parent::__construct($options); - - $this->function = $function; - } - - public function compile() - { - return $this->function; - } -} diff --git a/lib/Twig/Function/Method.php b/lib/Twig/Function/Method.php deleted file mode 100644 index 67039a956a8..00000000000 --- a/lib/Twig/Function/Method.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2010 Arnaud Le Blanc - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a method template function. - * - * Use Twig_SimpleFunction instead. - * - * @author Arnaud Le Blanc <arnaud.lb@gmail.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -class Twig_Function_Method extends Twig_Function -{ - protected $extension; - protected $method; - - public function __construct(Twig_ExtensionInterface $extension, $method, array $options = array()) - { - $options['callable'] = array($extension, $method); - - parent::__construct($options); - - $this->extension = $extension; - $this->method = $method; - } - - public function compile() - { - return sprintf('$this->env->getExtension(\'%s\')->%s', $this->extension->getName(), $this->method); - } -} diff --git a/lib/Twig/Function/Node.php b/lib/Twig/Function/Node.php deleted file mode 100644 index 06a0d0dbebf..00000000000 --- a/lib/Twig/Function/Node.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a template function as a node. - * - * Use Twig_SimpleFunction instead. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -class Twig_Function_Node extends Twig_Function -{ - protected $class; - - public function __construct($class, array $options = array()) - { - parent::__construct($options); - - $this->class = $class; - } - - public function getClass() - { - return $this->class; - } - - public function compile() - { - } -} diff --git a/lib/Twig/FunctionCallableInterface.php b/lib/Twig/FunctionCallableInterface.php deleted file mode 100644 index 0aab4f5ecf5..00000000000 --- a/lib/Twig/FunctionCallableInterface.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2012 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a callable template function. - * - * Use Twig_SimpleFunction instead. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -interface Twig_FunctionCallableInterface -{ - public function getCallable(); -} diff --git a/lib/Twig/FunctionInterface.php b/lib/Twig/FunctionInterface.php deleted file mode 100644 index 67f4f89c06a..00000000000 --- a/lib/Twig/FunctionInterface.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * (c) 2010 Arnaud Le Blanc - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a template function. - * - * Use Twig_SimpleFunction instead. - * - * @author Arnaud Le Blanc <arnaud.lb@gmail.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -interface Twig_FunctionInterface -{ - /** - * Compiles a function. - * - * @return string The PHP code for the function - */ - public function compile(); - - public function needsEnvironment(); - - public function needsContext(); - - public function getSafe(Twig_Node $filterArgs); - - public function setArguments($arguments); - - public function getArguments(); -} diff --git a/lib/Twig/LICENSE b/lib/Twig/LICENSE deleted file mode 100644 index 3384cc5589d..00000000000 --- a/lib/Twig/LICENSE +++ /dev/null @@ -1,31 +0,0 @@ -Copyright (c) 2009-2013 by the Twig Team, see AUTHORS for more details. - -Some rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/Twig/Lexer.php b/lib/Twig/Lexer.php deleted file mode 100644 index 000b038e60e..00000000000 --- a/lib/Twig/Lexer.php +++ /dev/null @@ -1,408 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Lexes a template string. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Lexer implements Twig_LexerInterface -{ - protected $tokens; - protected $code; - protected $cursor; - protected $lineno; - protected $end; - protected $state; - protected $states; - protected $brackets; - protected $env; - protected $filename; - protected $options; - protected $regexes; - protected $position; - protected $positions; - protected $currentVarBlockLine; - - const STATE_DATA = 0; - const STATE_BLOCK = 1; - const STATE_VAR = 2; - const STATE_STRING = 3; - const STATE_INTERPOLATION = 4; - - const REGEX_NAME = '/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/A'; - const REGEX_NUMBER = '/[0-9]+(?:\.[0-9]+)?/A'; - const REGEX_STRING = '/"([^#"\\\\]*(?:\\\\.[^#"\\\\]*)*)"|\'([^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'/As'; - const REGEX_DQ_STRING_DELIM = '/"/A'; - const REGEX_DQ_STRING_PART = '/[^#"\\\\]*(?:(?:\\\\.|#(?!\{))[^#"\\\\]*)*/As'; - const PUNCTUATION = '()[]{}?:.,|'; - - public function __construct(Twig_Environment $env, array $options = array()) - { - $this->env = $env; - - $this->options = array_merge(array( - 'tag_comment' => array('{#', '#}'), - 'tag_block' => array('{%', '%}'), - 'tag_variable' => array('{{', '}}'), - 'whitespace_trim' => '-', - 'interpolation' => array('#{', '}'), - ), $options); - - $this->regexes = array( - 'lex_var' => '/\s*'.preg_quote($this->options['whitespace_trim'].$this->options['tag_variable'][1], '/').'\s*|\s*'.preg_quote($this->options['tag_variable'][1], '/').'/A', - 'lex_block' => '/\s*(?:'.preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '/').'\s*|\s*'.preg_quote($this->options['tag_block'][1], '/').')\n?/A', - 'lex_raw_data' => '/('.preg_quote($this->options['tag_block'][0].$this->options['whitespace_trim'], '/').'|'.preg_quote($this->options['tag_block'][0], '/').')\s*(?:end%s)\s*(?:'.preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '/').'\s*|\s*'.preg_quote($this->options['tag_block'][1], '/').')/s', - 'operator' => $this->getOperatorRegex(), - 'lex_comment' => '/(?:'.preg_quote($this->options['whitespace_trim'], '/').preg_quote($this->options['tag_comment'][1], '/').'\s*|'.preg_quote($this->options['tag_comment'][1], '/').')\n?/s', - 'lex_block_raw' => '/\s*(raw|verbatim)\s*(?:'.preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '/').'\s*|\s*'.preg_quote($this->options['tag_block'][1], '/').')/As', - 'lex_block_line' => '/\s*line\s+(\d+)\s*'.preg_quote($this->options['tag_block'][1], '/').'/As', - 'lex_tokens_start' => '/('.preg_quote($this->options['tag_variable'][0], '/').'|'.preg_quote($this->options['tag_block'][0], '/').'|'.preg_quote($this->options['tag_comment'][0], '/').')('.preg_quote($this->options['whitespace_trim'], '/').')?/s', - 'interpolation_start' => '/'.preg_quote($this->options['interpolation'][0], '/').'\s*/A', - 'interpolation_end' => '/\s*'.preg_quote($this->options['interpolation'][1], '/').'/A', - ); - } - - /** - * Tokenizes a source code. - * - * @param string $code The source code - * @param string $filename A unique identifier for the source code - * - * @return Twig_TokenStream A token stream instance - */ - public function tokenize($code, $filename = null) - { - if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) { - $mbEncoding = mb_internal_encoding(); - mb_internal_encoding('ASCII'); - } - - $this->code = str_replace(array("\r\n", "\r"), "\n", $code); - $this->filename = $filename; - $this->cursor = 0; - $this->lineno = 1; - $this->end = strlen($this->code); - $this->tokens = array(); - $this->state = self::STATE_DATA; - $this->states = array(); - $this->brackets = array(); - $this->position = -1; - - // find all token starts in one go - preg_match_all($this->regexes['lex_tokens_start'], $this->code, $matches, PREG_OFFSET_CAPTURE); - $this->positions = $matches; - - while ($this->cursor < $this->end) { - // dispatch to the lexing functions depending - // on the current state - switch ($this->state) { - case self::STATE_DATA: - $this->lexData(); - break; - - case self::STATE_BLOCK: - $this->lexBlock(); - break; - - case self::STATE_VAR: - $this->lexVar(); - break; - - case self::STATE_STRING: - $this->lexString(); - break; - - case self::STATE_INTERPOLATION: - $this->lexInterpolation(); - break; - } - } - - $this->pushToken(Twig_Token::EOF_TYPE); - - if (!empty($this->brackets)) { - list($expect, $lineno) = array_pop($this->brackets); - throw new Twig_Error_Syntax(sprintf('Unclosed "%s"', $expect), $lineno, $this->filename); - } - - if (isset($mbEncoding)) { - mb_internal_encoding($mbEncoding); - } - - return new Twig_TokenStream($this->tokens, $this->filename); - } - - protected function lexData() - { - // if no matches are left we return the rest of the template as simple text token - if ($this->position == count($this->positions[0]) - 1) { - $this->pushToken(Twig_Token::TEXT_TYPE, substr($this->code, $this->cursor)); - $this->cursor = $this->end; - - return; - } - - // Find the first token after the current cursor - $position = $this->positions[0][++$this->position]; - while ($position[1] < $this->cursor) { - if ($this->position == count($this->positions[0]) - 1) { - return; - } - $position = $this->positions[0][++$this->position]; - } - - // push the template text first - $text = $textContent = substr($this->code, $this->cursor, $position[1] - $this->cursor); - if (isset($this->positions[2][$this->position][0])) { - $text = rtrim($text); - } - $this->pushToken(Twig_Token::TEXT_TYPE, $text); - $this->moveCursor($textContent.$position[0]); - - switch ($this->positions[1][$this->position][0]) { - case $this->options['tag_comment'][0]: - $this->lexComment(); - break; - - case $this->options['tag_block'][0]: - // raw data? - if (preg_match($this->regexes['lex_block_raw'], $this->code, $match, null, $this->cursor)) { - $this->moveCursor($match[0]); - $this->lexRawData($match[1]); - // {% line \d+ %} - } elseif (preg_match($this->regexes['lex_block_line'], $this->code, $match, null, $this->cursor)) { - $this->moveCursor($match[0]); - $this->lineno = (int) $match[1]; - } else { - $this->pushToken(Twig_Token::BLOCK_START_TYPE); - $this->pushState(self::STATE_BLOCK); - $this->currentVarBlockLine = $this->lineno; - } - break; - - case $this->options['tag_variable'][0]: - $this->pushToken(Twig_Token::VAR_START_TYPE); - $this->pushState(self::STATE_VAR); - $this->currentVarBlockLine = $this->lineno; - break; - } - } - - protected function lexBlock() - { - if (empty($this->brackets) && preg_match($this->regexes['lex_block'], $this->code, $match, null, $this->cursor)) { - $this->pushToken(Twig_Token::BLOCK_END_TYPE); - $this->moveCursor($match[0]); - $this->popState(); - } else { - $this->lexExpression(); - } - } - - protected function lexVar() - { - if (empty($this->brackets) && preg_match($this->regexes['lex_var'], $this->code, $match, null, $this->cursor)) { - $this->pushToken(Twig_Token::VAR_END_TYPE); - $this->moveCursor($match[0]); - $this->popState(); - } else { - $this->lexExpression(); - } - } - - protected function lexExpression() - { - // whitespace - if (preg_match('/\s+/A', $this->code, $match, null, $this->cursor)) { - $this->moveCursor($match[0]); - - if ($this->cursor >= $this->end) { - throw new Twig_Error_Syntax(sprintf('Unclosed "%s"', $this->state === self::STATE_BLOCK ? 'block' : 'variable'), $this->currentVarBlockLine, $this->filename); - } - } - - // operators - if (preg_match($this->regexes['operator'], $this->code, $match, null, $this->cursor)) { - $this->pushToken(Twig_Token::OPERATOR_TYPE, $match[0]); - $this->moveCursor($match[0]); - } - // names - elseif (preg_match(self::REGEX_NAME, $this->code, $match, null, $this->cursor)) { - $this->pushToken(Twig_Token::NAME_TYPE, $match[0]); - $this->moveCursor($match[0]); - } - // numbers - elseif (preg_match(self::REGEX_NUMBER, $this->code, $match, null, $this->cursor)) { - $number = (float) $match[0]; // floats - if (ctype_digit($match[0]) && $number <= PHP_INT_MAX) { - $number = (int) $match[0]; // integers lower than the maximum - } - $this->pushToken(Twig_Token::NUMBER_TYPE, $number); - $this->moveCursor($match[0]); - } - // punctuation - elseif (false !== strpos(self::PUNCTUATION, $this->code[$this->cursor])) { - // opening bracket - if (false !== strpos('([{', $this->code[$this->cursor])) { - $this->brackets[] = array($this->code[$this->cursor], $this->lineno); - } - // closing bracket - elseif (false !== strpos(')]}', $this->code[$this->cursor])) { - if (empty($this->brackets)) { - throw new Twig_Error_Syntax(sprintf('Unexpected "%s"', $this->code[$this->cursor]), $this->lineno, $this->filename); - } - - list($expect, $lineno) = array_pop($this->brackets); - if ($this->code[$this->cursor] != strtr($expect, '([{', ')]}')) { - throw new Twig_Error_Syntax(sprintf('Unclosed "%s"', $expect), $lineno, $this->filename); - } - } - - $this->pushToken(Twig_Token::PUNCTUATION_TYPE, $this->code[$this->cursor]); - ++$this->cursor; - } - // strings - elseif (preg_match(self::REGEX_STRING, $this->code, $match, null, $this->cursor)) { - $this->pushToken(Twig_Token::STRING_TYPE, stripcslashes(substr($match[0], 1, -1))); - $this->moveCursor($match[0]); - } - // opening double quoted string - elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, null, $this->cursor)) { - $this->brackets[] = array('"', $this->lineno); - $this->pushState(self::STATE_STRING); - $this->moveCursor($match[0]); - } - // unlexable - else { - throw new Twig_Error_Syntax(sprintf('Unexpected character "%s"', $this->code[$this->cursor]), $this->lineno, $this->filename); - } - } - - protected function lexRawData($tag) - { - if (!preg_match(str_replace('%s', $tag, $this->regexes['lex_raw_data']), $this->code, $match, PREG_OFFSET_CAPTURE, $this->cursor)) { - throw new Twig_Error_Syntax(sprintf('Unexpected end of file: Unclosed "%s" block', $tag), $this->lineno, $this->filename); - } - - $text = substr($this->code, $this->cursor, $match[0][1] - $this->cursor); - $this->moveCursor($text.$match[0][0]); - - if (false !== strpos($match[1][0], $this->options['whitespace_trim'])) { - $text = rtrim($text); - } - - $this->pushToken(Twig_Token::TEXT_TYPE, $text); - } - - protected function lexComment() - { - if (!preg_match($this->regexes['lex_comment'], $this->code, $match, PREG_OFFSET_CAPTURE, $this->cursor)) { - throw new Twig_Error_Syntax('Unclosed comment', $this->lineno, $this->filename); - } - - $this->moveCursor(substr($this->code, $this->cursor, $match[0][1] - $this->cursor).$match[0][0]); - } - - protected function lexString() - { - if (preg_match($this->regexes['interpolation_start'], $this->code, $match, null, $this->cursor)) { - $this->brackets[] = array($this->options['interpolation'][0], $this->lineno); - $this->pushToken(Twig_Token::INTERPOLATION_START_TYPE); - $this->moveCursor($match[0]); - $this->pushState(self::STATE_INTERPOLATION); - - } elseif (preg_match(self::REGEX_DQ_STRING_PART, $this->code, $match, null, $this->cursor) && strlen($match[0]) > 0) { - $this->pushToken(Twig_Token::STRING_TYPE, stripcslashes($match[0])); - $this->moveCursor($match[0]); - - } elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, null, $this->cursor)) { - - list($expect, $lineno) = array_pop($this->brackets); - if ($this->code[$this->cursor] != '"') { - throw new Twig_Error_Syntax(sprintf('Unclosed "%s"', $expect), $lineno, $this->filename); - } - - $this->popState(); - ++$this->cursor; - } - } - - protected function lexInterpolation() - { - $bracket = end($this->brackets); - if ($this->options['interpolation'][0] === $bracket[0] && preg_match($this->regexes['interpolation_end'], $this->code, $match, null, $this->cursor)) { - array_pop($this->brackets); - $this->pushToken(Twig_Token::INTERPOLATION_END_TYPE); - $this->moveCursor($match[0]); - $this->popState(); - } else { - $this->lexExpression(); - } - } - - protected function pushToken($type, $value = '') - { - // do not push empty text tokens - if (Twig_Token::TEXT_TYPE === $type && '' === $value) { - return; - } - - $this->tokens[] = new Twig_Token($type, $value, $this->lineno); - } - - protected function moveCursor($text) - { - $this->cursor += strlen($text); - $this->lineno += substr_count($text, "\n"); - } - - protected function getOperatorRegex() - { - $operators = array_merge( - array('='), - array_keys($this->env->getUnaryOperators()), - array_keys($this->env->getBinaryOperators()) - ); - - $operators = array_combine($operators, array_map('strlen', $operators)); - arsort($operators); - - $regex = array(); - foreach ($operators as $operator => $length) { - // an operator that ends with a character must be followed by - // a whitespace or a parenthesis - if (ctype_alpha($operator[$length - 1])) { - $regex[] = preg_quote($operator, '/').'(?=[\s()])'; - } else { - $regex[] = preg_quote($operator, '/'); - } - } - - return '/'.implode('|', $regex).'/A'; - } - - protected function pushState($state) - { - $this->states[] = $this->state; - $this->state = $state; - } - - protected function popState() - { - if (0 === count($this->states)) { - throw new Exception('Cannot pop state without a previous state'); - } - - $this->state = array_pop($this->states); - } -} diff --git a/lib/Twig/LexerInterface.php b/lib/Twig/LexerInterface.php deleted file mode 100644 index 4b83f81b0f9..00000000000 --- a/lib/Twig/LexerInterface.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Interface implemented by lexer classes. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -interface Twig_LexerInterface -{ - /** - * Tokenizes a source code. - * - * @param string $code The source code - * @param string $filename A unique identifier for the source code - * - * @return Twig_TokenStream A token stream instance - */ - public function tokenize($code, $filename = null); -} diff --git a/lib/Twig/Loader/Array.php b/lib/Twig/Loader/Array.php deleted file mode 100644 index 89087aeabf7..00000000000 --- a/lib/Twig/Loader/Array.php +++ /dev/null @@ -1,98 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Loads a template from an array. - * - * When using this loader with a cache mechanism, you should know that a new cache - * key is generated each time a template content "changes" (the cache key being the - * source code of the template). If you don't want to see your cache grows out of - * control, you need to take care of clearing the old cache file by yourself. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Loader_Array implements Twig_LoaderInterface, Twig_ExistsLoaderInterface -{ - protected $templates; - - /** - * Constructor. - * - * @param array $templates An array of templates (keys are the names, and values are the source code) - * - * @see Twig_Loader - */ - public function __construct(array $templates) - { - $this->templates = array(); - foreach ($templates as $name => $template) { - $this->templates[$name] = $template; - } - } - - /** - * Adds or overrides a template. - * - * @param string $name The template name - * @param string $template The template source - */ - public function setTemplate($name, $template) - { - $this->templates[(string) $name] = $template; - } - - /** - * {@inheritdoc} - */ - public function getSource($name) - { - $name = (string) $name; - if (!isset($this->templates[$name])) { - throw new Twig_Error_Loader(sprintf('Template "%s" is not defined.', $name)); - } - - return $this->templates[$name]; - } - - /** - * {@inheritdoc} - */ - public function exists($name) - { - return isset($this->templates[(string) $name]); - } - - /** - * {@inheritdoc} - */ - public function getCacheKey($name) - { - $name = (string) $name; - if (!isset($this->templates[$name])) { - throw new Twig_Error_Loader(sprintf('Template "%s" is not defined.', $name)); - } - - return $this->templates[$name]; - } - - /** - * {@inheritdoc} - */ - public function isFresh($name, $time) - { - $name = (string) $name; - if (!isset($this->templates[$name])) { - throw new Twig_Error_Loader(sprintf('Template "%s" is not defined.', $name)); - } - - return true; - } -} diff --git a/lib/Twig/Loader/Chain.php b/lib/Twig/Loader/Chain.php deleted file mode 100644 index cd64b051da7..00000000000 --- a/lib/Twig/Loader/Chain.php +++ /dev/null @@ -1,135 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Loads templates from other loaders. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Loader_Chain implements Twig_LoaderInterface, Twig_ExistsLoaderInterface -{ - private $hasSourceCache = array(); - protected $loaders; - - /** - * Constructor. - * - * @param Twig_LoaderInterface[] $loaders An array of loader instances - */ - public function __construct(array $loaders = array()) - { - $this->loaders = array(); - foreach ($loaders as $loader) { - $this->addLoader($loader); - } - } - - /** - * Adds a loader instance. - * - * @param Twig_LoaderInterface $loader A Loader instance - */ - public function addLoader(Twig_LoaderInterface $loader) - { - $this->loaders[] = $loader; - $this->hasSourceCache = array(); - } - - /** - * {@inheritdoc} - */ - public function getSource($name) - { - $exceptions = array(); - foreach ($this->loaders as $loader) { - if ($loader instanceof Twig_ExistsLoaderInterface && !$loader->exists($name)) { - continue; - } - - try { - return $loader->getSource($name); - } catch (Twig_Error_Loader $e) { - $exceptions[] = $e->getMessage(); - } - } - - throw new Twig_Error_Loader(sprintf('Template "%s" is not defined (%s).', $name, implode(', ', $exceptions))); - } - - /** - * {@inheritdoc} - */ - public function exists($name) - { - $name = (string) $name; - - if (isset($this->hasSourceCache[$name])) { - return $this->hasSourceCache[$name]; - } - - foreach ($this->loaders as $loader) { - if ($loader instanceof Twig_ExistsLoaderInterface && $loader->exists($name)) { - return $this->hasSourceCache[$name] = true; - } - - try { - $loader->getSource($name); - - return $this->hasSourceCache[$name] = true; - } catch (Twig_Error_Loader $e) { - } - } - - return $this->hasSourceCache[$name] = false; - } - - /** - * {@inheritdoc} - */ - public function getCacheKey($name) - { - $exceptions = array(); - foreach ($this->loaders as $loader) { - if ($loader instanceof Twig_ExistsLoaderInterface && !$loader->exists($name)) { - continue; - } - - try { - return $loader->getCacheKey($name); - } catch (Twig_Error_Loader $e) { - $exceptions[] = get_class($loader).': '.$e->getMessage(); - } - } - - throw new Twig_Error_Loader(sprintf('Template "%s" is not defined (%s).', $name, implode(' ', $exceptions))); - } - - /** - * {@inheritdoc} - */ - public function isFresh($name, $time) - { - $exceptions = array(); - foreach ($this->loaders as $loader) { - if ($loader instanceof Twig_ExistsLoaderInterface && !$loader->exists($name)) { - continue; - } - - try { - return $loader->isFresh($name, $time); - } catch (Twig_Error_Loader $e) { - $exceptions[] = get_class($loader).': '.$e->getMessage(); - } - } - - throw new Twig_Error_Loader(sprintf('Template "%s" is not defined (%s).', $name, implode(' ', $exceptions))); - } -} diff --git a/lib/Twig/Loader/Filesystem.php b/lib/Twig/Loader/Filesystem.php deleted file mode 100644 index 84a5e03aef5..00000000000 --- a/lib/Twig/Loader/Filesystem.php +++ /dev/null @@ -1,221 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Loads template from the filesystem. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Loader_Filesystem implements Twig_LoaderInterface, Twig_ExistsLoaderInterface -{ - protected $paths; - protected $cache; - - /** - * Constructor. - * - * @param string|array $paths A path or an array of paths where to look for templates - */ - public function __construct($paths) - { - $this->setPaths($paths); - } - - /** - * Returns the paths to the templates. - * - * @param string $namespace A path namespace - * - * @return array The array of paths where to look for templates - */ - public function getPaths($namespace = '__main__') - { - return isset($this->paths[$namespace]) ? $this->paths[$namespace] : array(); - } - - /** - * Returns the path namespaces. - * - * The "__main__" namespace is always defined. - * - * @return array The array of defined namespaces - */ - public function getNamespaces() - { - return array_keys($this->paths); - } - - /** - * Sets the paths where templates are stored. - * - * @param string|array $paths A path or an array of paths where to look for templates - * @param string $namespace A path namespace - */ - public function setPaths($paths, $namespace = '__main__') - { - if (!is_array($paths)) { - $paths = array($paths); - } - - $this->paths[$namespace] = array(); - foreach ($paths as $path) { - $this->addPath($path, $namespace); - } - } - - /** - * Adds a path where templates are stored. - * - * @param string $path A path where to look for templates - * @param string $namespace A path name - * - * @throws Twig_Error_Loader - */ - public function addPath($path, $namespace = '__main__') - { - // invalidate the cache - $this->cache = array(); - - if (!is_dir($path)) { - throw new Twig_Error_Loader(sprintf('The "%s" directory does not exist.', $path)); - } - - $this->paths[$namespace][] = rtrim($path, '/\\'); - } - - /** - * Prepends a path where templates are stored. - * - * @param string $path A path where to look for templates - * @param string $namespace A path name - * - * @throws Twig_Error_Loader - */ - public function prependPath($path, $namespace = '__main__') - { - // invalidate the cache - $this->cache = array(); - - if (!is_dir($path)) { - throw new Twig_Error_Loader(sprintf('The "%s" directory does not exist.', $path)); - } - - $path = rtrim($path, '/\\'); - - if (!isset($this->paths[$namespace])) { - $this->paths[$namespace][] = $path; - } else { - array_unshift($this->paths[$namespace], $path); - } - } - - /** - * {@inheritdoc} - */ - public function getSource($name) - { - return file_get_contents($this->findTemplate($name)); - } - - /** - * {@inheritdoc} - */ - public function getCacheKey($name) - { - return $this->findTemplate($name); - } - - /** - * {@inheritdoc} - */ - public function exists($name) - { - $name = (string) $name; - if (isset($this->cache[$name])) { - return true; - } - - try { - $this->findTemplate($name); - - return true; - } catch (Twig_Error_Loader $exception) { - return false; - } - } - - /** - * {@inheritdoc} - */ - public function isFresh($name, $time) - { - return filemtime($this->findTemplate($name)) <= $time; - } - - protected function findTemplate($name) - { - $name = (string) $name; - - // normalize name - $name = preg_replace('#/{2,}#', '/', strtr($name, '\\', '/')); - - if (isset($this->cache[$name])) { - return $this->cache[$name]; - } - - $this->validateName($name); - - $namespace = '__main__'; - if (isset($name[0]) && '@' == $name[0]) { - if (false === $pos = strpos($name, '/')) { - throw new Twig_Error_Loader(sprintf('Malformed namespaced template name "%s" (expecting "@namespace/template_name").', $name)); - } - - $namespace = substr($name, 1, $pos - 1); - - $name = substr($name, $pos + 1); - } - - if (!isset($this->paths[$namespace])) { - throw new Twig_Error_Loader(sprintf('There are no registered paths for namespace "%s".', $namespace)); - } - - foreach ($this->paths[$namespace] as $path) { - if (is_file($path.'/'.$name)) { - return $this->cache[$name] = $path.'/'.$name; - } - } - - throw new Twig_Error_Loader(sprintf('Unable to find template "%s" (looked into: %s).', $name, implode(', ', $this->paths[$namespace]))); - } - - protected function validateName($name) - { - if (false !== strpos($name, "\0")) { - throw new Twig_Error_Loader('A template name cannot contain NUL bytes.'); - } - - $name = ltrim($name, '/'); - $parts = explode('/', $name); - $level = 0; - foreach ($parts as $part) { - if ('..' === $part) { - --$level; - } elseif ('.' !== $part) { - ++$level; - } - - if ($level < 0) { - throw new Twig_Error_Loader(sprintf('Looks like you try to load a template outside configured directories (%s).', $name)); - } - } - } -} diff --git a/lib/Twig/Loader/String.php b/lib/Twig/Loader/String.php deleted file mode 100644 index 8ad9856cc08..00000000000 --- a/lib/Twig/Loader/String.php +++ /dev/null @@ -1,59 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Loads a template from a string. - * - * This loader should only be used for unit testing as it has many limitations - * (for instance, the include or extends tag does not make any sense for a string - * loader). - * - * When using this loader with a cache mechanism, you should know that a new cache - * key is generated each time a template content "changes" (the cache key being the - * source code of the template). If you don't want to see your cache grows out of - * control, you need to take care of clearing the old cache file by yourself. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Loader_String implements Twig_LoaderInterface, Twig_ExistsLoaderInterface -{ - /** - * {@inheritdoc} - */ - public function getSource($name) - { - return $name; - } - - /** - * {@inheritdoc} - */ - public function exists($name) - { - return true; - } - - /** - * {@inheritdoc} - */ - public function getCacheKey($name) - { - return $name; - } - - /** - * {@inheritdoc} - */ - public function isFresh($name, $time) - { - return true; - } -} diff --git a/lib/Twig/LoaderInterface.php b/lib/Twig/LoaderInterface.php deleted file mode 100644 index 927786d1af4..00000000000 --- a/lib/Twig/LoaderInterface.php +++ /dev/null @@ -1,52 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Interface all loaders must implement. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -interface Twig_LoaderInterface -{ - /** - * Gets the source code of a template, given its name. - * - * @param string $name The name of the template to load - * - * @return string The template source code - * - * @throws Twig_Error_Loader When $name is not found - */ - public function getSource($name); - - /** - * Gets the cache key to use for the cache for a given template name. - * - * @param string $name The name of the template to load - * - * @return string The cache key - * - * @throws Twig_Error_Loader When $name is not found - */ - public function getCacheKey($name); - - /** - * Returns true if the template is still fresh. - * - * @param string $name The template name - * @param timestamp $time The last modification time of the cached template - * - * @return Boolean true if the template is fresh, false otherwise - * - * @throws Twig_Error_Loader When $name is not found - */ - public function isFresh($name, $time); -} diff --git a/lib/Twig/Markup.php b/lib/Twig/Markup.php deleted file mode 100644 index 69871fcbd04..00000000000 --- a/lib/Twig/Markup.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Marks a content as safe. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Markup implements Countable -{ - protected $content; - protected $charset; - - public function __construct($content, $charset) - { - $this->content = (string) $content; - $this->charset = $charset; - } - - public function __toString() - { - return $this->content; - } - - public function count() - { - return function_exists('mb_get_info') ? mb_strlen($this->content, $this->charset) : strlen($this->content); - } -} diff --git a/lib/Twig/Node.php b/lib/Twig/Node.php deleted file mode 100644 index 931b4635a94..00000000000 --- a/lib/Twig/Node.php +++ /dev/null @@ -1,226 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a node in the AST. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node implements Twig_NodeInterface -{ - protected $nodes; - protected $attributes; - protected $lineno; - protected $tag; - - /** - * Constructor. - * - * The nodes are automatically made available as properties ($this->node). - * The attributes are automatically made available as array items ($this['name']). - * - * @param array $nodes An array of named nodes - * @param array $attributes An array of attributes (should not be nodes) - * @param integer $lineno The line number - * @param string $tag The tag name associated with the Node - */ - public function __construct(array $nodes = array(), array $attributes = array(), $lineno = 0, $tag = null) - { - $this->nodes = $nodes; - $this->attributes = $attributes; - $this->lineno = $lineno; - $this->tag = $tag; - } - - public function __toString() - { - $attributes = array(); - foreach ($this->attributes as $name => $value) { - $attributes[] = sprintf('%s: %s', $name, str_replace("\n", '', var_export($value, true))); - } - - $repr = array(get_class($this).'('.implode(', ', $attributes)); - - if (count($this->nodes)) { - foreach ($this->nodes as $name => $node) { - $len = strlen($name) + 4; - $noderepr = array(); - foreach (explode("\n", (string) $node) as $line) { - $noderepr[] = str_repeat(' ', $len).$line; - } - - $repr[] = sprintf(' %s: %s', $name, ltrim(implode("\n", $noderepr))); - } - - $repr[] = ')'; - } else { - $repr[0] .= ')'; - } - - return implode("\n", $repr); - } - - public function toXml($asDom = false) - { - $dom = new DOMDocument('1.0', 'UTF-8'); - $dom->formatOutput = true; - $dom->appendChild($xml = $dom->createElement('twig')); - - $xml->appendChild($node = $dom->createElement('node')); - $node->setAttribute('class', get_class($this)); - - foreach ($this->attributes as $name => $value) { - $node->appendChild($attribute = $dom->createElement('attribute')); - $attribute->setAttribute('name', $name); - $attribute->appendChild($dom->createTextNode($value)); - } - - foreach ($this->nodes as $name => $n) { - if (null === $n) { - continue; - } - - $child = $n->toXml(true)->getElementsByTagName('node')->item(0); - $child = $dom->importNode($child, true); - $child->setAttribute('name', $name); - - $node->appendChild($child); - } - - return $asDom ? $dom : $dom->saveXml(); - } - - public function compile(Twig_Compiler $compiler) - { - foreach ($this->nodes as $node) { - $node->compile($compiler); - } - } - - public function getLine() - { - return $this->lineno; - } - - public function getNodeTag() - { - return $this->tag; - } - - /** - * Returns true if the attribute is defined. - * - * @param string The attribute name - * - * @return Boolean true if the attribute is defined, false otherwise - */ - public function hasAttribute($name) - { - return array_key_exists($name, $this->attributes); - } - - /** - * Gets an attribute. - * - * @param string The attribute name - * - * @return mixed The attribute value - */ - public function getAttribute($name) - { - if (!array_key_exists($name, $this->attributes)) { - throw new LogicException(sprintf('Attribute "%s" does not exist for Node "%s".', $name, get_class($this))); - } - - return $this->attributes[$name]; - } - - /** - * Sets an attribute. - * - * @param string The attribute name - * @param mixed The attribute value - */ - public function setAttribute($name, $value) - { - $this->attributes[$name] = $value; - } - - /** - * Removes an attribute. - * - * @param string The attribute name - */ - public function removeAttribute($name) - { - unset($this->attributes[$name]); - } - - /** - * Returns true if the node with the given identifier exists. - * - * @param string The node name - * - * @return Boolean true if the node with the given name exists, false otherwise - */ - public function hasNode($name) - { - return array_key_exists($name, $this->nodes); - } - - /** - * Gets a node by name. - * - * @param string The node name - * - * @return Twig_Node A Twig_Node instance - */ - public function getNode($name) - { - if (!array_key_exists($name, $this->nodes)) { - throw new LogicException(sprintf('Node "%s" does not exist for Node "%s".', $name, get_class($this))); - } - - return $this->nodes[$name]; - } - - /** - * Sets a node. - * - * @param string The node name - * @param Twig_Node A Twig_Node instance - */ - public function setNode($name, $node = null) - { - $this->nodes[$name] = $node; - } - - /** - * Removes a node by name. - * - * @param string The node name - */ - public function removeNode($name) - { - unset($this->nodes[$name]); - } - - public function count() - { - return count($this->nodes); - } - - public function getIterator() - { - return new ArrayIterator($this->nodes); - } -} diff --git a/lib/Twig/Node/AutoEscape.php b/lib/Twig/Node/AutoEscape.php deleted file mode 100644 index 8f190e0bd85..00000000000 --- a/lib/Twig/Node/AutoEscape.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents an autoescape node. - * - * The value is the escaping strategy (can be html, js, ...) - * - * The true value is equivalent to html. - * - * If autoescaping is disabled, then the value is false. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_AutoEscape extends Twig_Node -{ - public function __construct($value, Twig_NodeInterface $body, $lineno, $tag = 'autoescape') - { - parent::__construct(array('body' => $body), array('value' => $value), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler->subcompile($this->getNode('body')); - } -} diff --git a/lib/Twig/Node/Block.php b/lib/Twig/Node/Block.php deleted file mode 100644 index 50eb67ed8c5..00000000000 --- a/lib/Twig/Node/Block.php +++ /dev/null @@ -1,44 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a block node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Block extends Twig_Node -{ - public function __construct($name, Twig_NodeInterface $body, $lineno, $tag = null) - { - parent::__construct(array('body' => $body), array('name' => $name), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->addDebugInfo($this) - ->write(sprintf("public function block_%s(\$context, array \$blocks = array())\n", $this->getAttribute('name')), "{\n") - ->indent() - ; - - $compiler - ->subcompile($this->getNode('body')) - ->outdent() - ->write("}\n\n") - ; - } -} diff --git a/lib/Twig/Node/BlockReference.php b/lib/Twig/Node/BlockReference.php deleted file mode 100644 index 013e369ebe8..00000000000 --- a/lib/Twig/Node/BlockReference.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a block call node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_BlockReference extends Twig_Node implements Twig_NodeOutputInterface -{ - public function __construct($name, $lineno, $tag = null) - { - parent::__construct(array(), array('name' => $name), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->addDebugInfo($this) - ->write(sprintf("\$this->displayBlock('%s', \$context, \$blocks);\n", $this->getAttribute('name'))) - ; - } -} diff --git a/lib/Twig/Node/Body.php b/lib/Twig/Node/Body.php deleted file mode 100644 index 3ffb1342b74..00000000000 --- a/lib/Twig/Node/Body.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a body node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Body extends Twig_Node -{ -} diff --git a/lib/Twig/Node/Do.php b/lib/Twig/Node/Do.php deleted file mode 100644 index c528066b29f..00000000000 --- a/lib/Twig/Node/Do.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a do node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Do extends Twig_Node -{ - public function __construct(Twig_Node_Expression $expr, $lineno, $tag = null) - { - parent::__construct(array('expr' => $expr), array(), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->addDebugInfo($this) - ->write('') - ->subcompile($this->getNode('expr')) - ->raw(";\n") - ; - } -} diff --git a/lib/Twig/Node/Embed.php b/lib/Twig/Node/Embed.php deleted file mode 100644 index 4c9456dc059..00000000000 --- a/lib/Twig/Node/Embed.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2012 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents an embed node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Embed extends Twig_Node_Include -{ - // we don't inject the module to avoid node visitors to traverse it twice (as it will be already visited in the main module) - public function __construct($filename, $index, Twig_Node_Expression $variables = null, $only = false, $ignoreMissing = false, $lineno, $tag = null) - { - parent::__construct(new Twig_Node_Expression_Constant('not_used', $lineno), $variables, $only, $ignoreMissing, $lineno, $tag); - - $this->setAttribute('filename', $filename); - $this->setAttribute('index', $index); - } - - protected function addGetTemplate(Twig_Compiler $compiler) - { - $compiler - ->write("\$this->env->loadTemplate(") - ->string($this->getAttribute('filename')) - ->raw(', ') - ->string($this->getAttribute('index')) - ->raw(")") - ; - } -} diff --git a/lib/Twig/Node/Expression.php b/lib/Twig/Node/Expression.php deleted file mode 100644 index a7382e7d6ec..00000000000 --- a/lib/Twig/Node/Expression.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Abstract class for all nodes that represents an expression. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -abstract class Twig_Node_Expression extends Twig_Node -{ -} diff --git a/lib/Twig/Node/Expression/Array.php b/lib/Twig/Node/Expression/Array.php deleted file mode 100644 index 1da785fe427..00000000000 --- a/lib/Twig/Node/Expression/Array.php +++ /dev/null @@ -1,86 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Array extends Twig_Node_Expression -{ - protected $index; - - public function __construct(array $elements, $lineno) - { - parent::__construct($elements, array(), $lineno); - - $this->index = -1; - foreach ($this->getKeyValuePairs() as $pair) { - if ($pair['key'] instanceof Twig_Node_Expression_Constant && ctype_digit((string) $pair['key']->getAttribute('value')) && $pair['key']->getAttribute('value') > $this->index) { - $this->index = $pair['key']->getAttribute('value'); - } - } - } - - public function getKeyValuePairs() - { - $pairs = array(); - - foreach (array_chunk($this->nodes, 2) as $pair) { - $pairs[] = array( - 'key' => $pair[0], - 'value' => $pair[1], - ); - } - - return $pairs; - } - - public function hasElement(Twig_Node_Expression $key) - { - foreach ($this->getKeyValuePairs() as $pair) { - // we compare the string representation of the keys - // to avoid comparing the line numbers which are not relevant here. - if ((string) $key == (string) $pair['key']) { - return true; - } - } - - return false; - } - - public function addElement(Twig_Node_Expression $value, Twig_Node_Expression $key = null) - { - if (null === $key) { - $key = new Twig_Node_Expression_Constant(++$this->index, $value->getLine()); - } - - array_push($this->nodes, $key, $value); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler->raw('array('); - $first = true; - foreach ($this->getKeyValuePairs() as $pair) { - if (!$first) { - $compiler->raw(', '); - } - $first = false; - - $compiler - ->subcompile($pair['key']) - ->raw(' => ') - ->subcompile($pair['value']) - ; - } - $compiler->raw(')'); - } -} diff --git a/lib/Twig/Node/Expression/AssignName.php b/lib/Twig/Node/Expression/AssignName.php deleted file mode 100644 index 2ddea78cf05..00000000000 --- a/lib/Twig/Node/Expression/AssignName.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -class Twig_Node_Expression_AssignName extends Twig_Node_Expression_Name -{ - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->raw('$context[') - ->string($this->getAttribute('name')) - ->raw(']') - ; - } -} diff --git a/lib/Twig/Node/Expression/Binary.php b/lib/Twig/Node/Expression/Binary.php deleted file mode 100644 index 9dd5de2c83a..00000000000 --- a/lib/Twig/Node/Expression/Binary.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -abstract class Twig_Node_Expression_Binary extends Twig_Node_Expression -{ - public function __construct(Twig_NodeInterface $left, Twig_NodeInterface $right, $lineno) - { - parent::__construct(array('left' => $left, 'right' => $right), array(), $lineno); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->raw('(') - ->subcompile($this->getNode('left')) - ->raw(' ') - ; - $this->operator($compiler); - $compiler - ->raw(' ') - ->subcompile($this->getNode('right')) - ->raw(')') - ; - } - - abstract public function operator(Twig_Compiler $compiler); -} diff --git a/lib/Twig/Node/Expression/Binary/Add.php b/lib/Twig/Node/Expression/Binary/Add.php deleted file mode 100644 index 0ef8e11723c..00000000000 --- a/lib/Twig/Node/Expression/Binary/Add.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_Add extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('+'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/And.php b/lib/Twig/Node/Expression/Binary/And.php deleted file mode 100644 index d5752ebba0e..00000000000 --- a/lib/Twig/Node/Expression/Binary/And.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_And extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('&&'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/BitwiseAnd.php b/lib/Twig/Node/Expression/Binary/BitwiseAnd.php deleted file mode 100644 index 9a46d845550..00000000000 --- a/lib/Twig/Node/Expression/Binary/BitwiseAnd.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_BitwiseAnd extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('&'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/BitwiseOr.php b/lib/Twig/Node/Expression/Binary/BitwiseOr.php deleted file mode 100644 index 058a20bf637..00000000000 --- a/lib/Twig/Node/Expression/Binary/BitwiseOr.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_BitwiseOr extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('|'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/BitwiseXor.php b/lib/Twig/Node/Expression/Binary/BitwiseXor.php deleted file mode 100644 index f4da73d4451..00000000000 --- a/lib/Twig/Node/Expression/Binary/BitwiseXor.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_BitwiseXor extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('^'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/Concat.php b/lib/Twig/Node/Expression/Binary/Concat.php deleted file mode 100644 index f9a6462701c..00000000000 --- a/lib/Twig/Node/Expression/Binary/Concat.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_Concat extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('.'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/Div.php b/lib/Twig/Node/Expression/Binary/Div.php deleted file mode 100644 index e0797a61254..00000000000 --- a/lib/Twig/Node/Expression/Binary/Div.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_Div extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('/'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/Equal.php b/lib/Twig/Node/Expression/Binary/Equal.php deleted file mode 100644 index 7b1236d0ad9..00000000000 --- a/lib/Twig/Node/Expression/Binary/Equal.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_Equal extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('=='); - } -} diff --git a/lib/Twig/Node/Expression/Binary/FloorDiv.php b/lib/Twig/Node/Expression/Binary/FloorDiv.php deleted file mode 100644 index 7fbd0556fca..00000000000 --- a/lib/Twig/Node/Expression/Binary/FloorDiv.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_FloorDiv extends Twig_Node_Expression_Binary -{ - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler->raw('intval(floor('); - parent::compile($compiler); - $compiler->raw('))'); - } - - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('/'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/Greater.php b/lib/Twig/Node/Expression/Binary/Greater.php deleted file mode 100644 index a110bd92dcf..00000000000 --- a/lib/Twig/Node/Expression/Binary/Greater.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_Greater extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('>'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/GreaterEqual.php b/lib/Twig/Node/Expression/Binary/GreaterEqual.php deleted file mode 100644 index 3754fed216b..00000000000 --- a/lib/Twig/Node/Expression/Binary/GreaterEqual.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_GreaterEqual extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('>='); - } -} diff --git a/lib/Twig/Node/Expression/Binary/In.php b/lib/Twig/Node/Expression/Binary/In.php deleted file mode 100644 index 788f9377aea..00000000000 --- a/lib/Twig/Node/Expression/Binary/In.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_In extends Twig_Node_Expression_Binary -{ - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->raw('twig_in_filter(') - ->subcompile($this->getNode('left')) - ->raw(', ') - ->subcompile($this->getNode('right')) - ->raw(')') - ; - } - - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('in'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/Less.php b/lib/Twig/Node/Expression/Binary/Less.php deleted file mode 100644 index 45fd3004960..00000000000 --- a/lib/Twig/Node/Expression/Binary/Less.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_Less extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('<'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/LessEqual.php b/lib/Twig/Node/Expression/Binary/LessEqual.php deleted file mode 100644 index e38e257c354..00000000000 --- a/lib/Twig/Node/Expression/Binary/LessEqual.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_LessEqual extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('<='); - } -} diff --git a/lib/Twig/Node/Expression/Binary/Mod.php b/lib/Twig/Node/Expression/Binary/Mod.php deleted file mode 100644 index 9924114fbd3..00000000000 --- a/lib/Twig/Node/Expression/Binary/Mod.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_Mod extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('%'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/Mul.php b/lib/Twig/Node/Expression/Binary/Mul.php deleted file mode 100644 index c91529ca669..00000000000 --- a/lib/Twig/Node/Expression/Binary/Mul.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_Mul extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('*'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/NotEqual.php b/lib/Twig/Node/Expression/Binary/NotEqual.php deleted file mode 100644 index 26867ba207c..00000000000 --- a/lib/Twig/Node/Expression/Binary/NotEqual.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_NotEqual extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('!='); - } -} diff --git a/lib/Twig/Node/Expression/Binary/NotIn.php b/lib/Twig/Node/Expression/Binary/NotIn.php deleted file mode 100644 index f347b7b6e82..00000000000 --- a/lib/Twig/Node/Expression/Binary/NotIn.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_NotIn extends Twig_Node_Expression_Binary -{ - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->raw('!twig_in_filter(') - ->subcompile($this->getNode('left')) - ->raw(', ') - ->subcompile($this->getNode('right')) - ->raw(')') - ; - } - - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('not in'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/Or.php b/lib/Twig/Node/Expression/Binary/Or.php deleted file mode 100644 index adba49c6f4f..00000000000 --- a/lib/Twig/Node/Expression/Binary/Or.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_Or extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('||'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/Power.php b/lib/Twig/Node/Expression/Binary/Power.php deleted file mode 100644 index b2c59040500..00000000000 --- a/lib/Twig/Node/Expression/Binary/Power.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_Power extends Twig_Node_Expression_Binary -{ - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->raw('pow(') - ->subcompile($this->getNode('left')) - ->raw(', ') - ->subcompile($this->getNode('right')) - ->raw(')') - ; - } - - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('**'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/Range.php b/lib/Twig/Node/Expression/Binary/Range.php deleted file mode 100644 index bea4f2a6070..00000000000 --- a/lib/Twig/Node/Expression/Binary/Range.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_Range extends Twig_Node_Expression_Binary -{ - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->raw('range(') - ->subcompile($this->getNode('left')) - ->raw(', ') - ->subcompile($this->getNode('right')) - ->raw(')') - ; - } - - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('..'); - } -} diff --git a/lib/Twig/Node/Expression/Binary/Sub.php b/lib/Twig/Node/Expression/Binary/Sub.php deleted file mode 100644 index d4463991572..00000000000 --- a/lib/Twig/Node/Expression/Binary/Sub.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Binary_Sub extends Twig_Node_Expression_Binary -{ - public function operator(Twig_Compiler $compiler) - { - return $compiler->raw('-'); - } -} diff --git a/lib/Twig/Node/Expression/BlockReference.php b/lib/Twig/Node/Expression/BlockReference.php deleted file mode 100644 index 647196eb5b8..00000000000 --- a/lib/Twig/Node/Expression/BlockReference.php +++ /dev/null @@ -1,51 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a block call node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Expression_BlockReference extends Twig_Node_Expression -{ - public function __construct(Twig_NodeInterface $name, $asString = false, $lineno, $tag = null) - { - parent::__construct(array('name' => $name), array('as_string' => $asString, 'output' => false), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - if ($this->getAttribute('as_string')) { - $compiler->raw('(string) '); - } - - if ($this->getAttribute('output')) { - $compiler - ->addDebugInfo($this) - ->write("\$this->displayBlock(") - ->subcompile($this->getNode('name')) - ->raw(", \$context, \$blocks);\n") - ; - } else { - $compiler - ->raw("\$this->renderBlock(") - ->subcompile($this->getNode('name')) - ->raw(", \$context, \$blocks)") - ; - } - } -} diff --git a/lib/Twig/Node/Expression/Call.php b/lib/Twig/Node/Expression/Call.php deleted file mode 100644 index 87b62deb09e..00000000000 --- a/lib/Twig/Node/Expression/Call.php +++ /dev/null @@ -1,178 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2012 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -abstract class Twig_Node_Expression_Call extends Twig_Node_Expression -{ - protected function compileCallable(Twig_Compiler $compiler) - { - $callable = $this->getAttribute('callable'); - - $closingParenthesis = false; - if ($callable) { - if (is_string($callable)) { - $compiler->raw($callable); - } elseif (is_array($callable) && $callable[0] instanceof Twig_ExtensionInterface) { - $compiler->raw(sprintf('$this->env->getExtension(\'%s\')->%s', $callable[0]->getName(), $callable[1])); - } else { - $type = ucfirst($this->getAttribute('type')); - $compiler->raw(sprintf('call_user_func_array($this->env->get%s(\'%s\')->getCallable(), array', $type, $this->getAttribute('name'))); - $closingParenthesis = true; - } - } else { - $compiler->raw($this->getAttribute('thing')->compile()); - } - - $this->compileArguments($compiler); - - if ($closingParenthesis) { - $compiler->raw(')'); - } - } - - protected function compileArguments(Twig_Compiler $compiler) - { - $compiler->raw('('); - - $first = true; - - if ($this->hasAttribute('needs_environment') && $this->getAttribute('needs_environment')) { - $compiler->raw('$this->env'); - $first = false; - } - - if ($this->hasAttribute('needs_context') && $this->getAttribute('needs_context')) { - if (!$first) { - $compiler->raw(', '); - } - $compiler->raw('$context'); - $first = false; - } - - if ($this->hasAttribute('arguments')) { - foreach ($this->getAttribute('arguments') as $argument) { - if (!$first) { - $compiler->raw(', '); - } - $compiler->string($argument); - $first = false; - } - } - - if ($this->hasNode('node')) { - if (!$first) { - $compiler->raw(', '); - } - $compiler->subcompile($this->getNode('node')); - $first = false; - } - - if ($this->hasNode('arguments') && null !== $this->getNode('arguments')) { - $callable = $this->hasAttribute('callable') ? $this->getAttribute('callable') : null; - - $arguments = $this->getArguments($callable, $this->getNode('arguments')); - - foreach ($arguments as $node) { - if (!$first) { - $compiler->raw(', '); - } - $compiler->subcompile($node); - $first = false; - } - } - - $compiler->raw(')'); - } - - protected function getArguments($callable, $arguments) - { - $parameters = array(); - $named = false; - foreach ($arguments as $name => $node) { - if (!is_int($name)) { - $named = true; - $name = $this->normalizeName($name); - } elseif ($named) { - throw new Twig_Error_Syntax(sprintf('Positional arguments cannot be used after named arguments for %s "%s".', $this->getAttribute('type'), $this->getAttribute('name'))); - } - - $parameters[$name] = $node; - } - - if (!$named) { - return $parameters; - } - - if (!$callable) { - throw new LogicException(sprintf('Named arguments are not supported for %s "%s".', $this->getAttribute('type'), $this->getAttribute('name'))); - } - - // manage named arguments - if (is_array($callable)) { - $r = new ReflectionMethod($callable[0], $callable[1]); - } elseif (is_object($callable) && !$callable instanceof Closure) { - $r = new ReflectionObject($callable); - $r = $r->getMethod('__invoke'); - } else { - $r = new ReflectionFunction($callable); - } - - $definition = $r->getParameters(); - if ($this->hasNode('node')) { - array_shift($definition); - } - if ($this->hasAttribute('needs_environment') && $this->getAttribute('needs_environment')) { - array_shift($definition); - } - if ($this->hasAttribute('needs_context') && $this->getAttribute('needs_context')) { - array_shift($definition); - } - if ($this->hasAttribute('arguments') && null !== $this->getAttribute('arguments')) { - foreach ($this->getAttribute('arguments') as $argument) { - array_shift($definition); - } - } - - $arguments = array(); - $pos = 0; - foreach ($definition as $param) { - $name = $this->normalizeName($param->name); - - if (array_key_exists($name, $parameters)) { - if (array_key_exists($pos, $parameters)) { - throw new Twig_Error_Syntax(sprintf('Arguments "%s" is defined twice for %s "%s".', $name, $this->getAttribute('type'), $this->getAttribute('name'))); - } - - $arguments[] = $parameters[$name]; - unset($parameters[$name]); - } elseif (array_key_exists($pos, $parameters)) { - $arguments[] = $parameters[$pos]; - unset($parameters[$pos]); - ++$pos; - } elseif ($param->isDefaultValueAvailable()) { - $arguments[] = new Twig_Node_Expression_Constant($param->getDefaultValue(), -1); - } elseif ($param->isOptional()) { - break; - } else { - throw new Twig_Error_Syntax(sprintf('Value for argument "%s" is required for %s "%s".', $name, $this->getAttribute('type'), $this->getAttribute('name'))); - } - } - - foreach (array_keys($parameters) as $name) { - throw new Twig_Error_Syntax(sprintf('Unknown argument "%s" for %s "%s".', $name, $this->getAttribute('type'), $this->getAttribute('name'))); - } - - return $arguments; - } - - protected function normalizeName($name) - { - return strtolower(preg_replace(array('/([A-Z]+)([A-Z][a-z])/', '/([a-z\d])([A-Z])/'), array('\\1_\\2', '\\1_\\2'), $name)); - } -} diff --git a/lib/Twig/Node/Expression/Conditional.php b/lib/Twig/Node/Expression/Conditional.php deleted file mode 100644 index edcb1e2d21b..00000000000 --- a/lib/Twig/Node/Expression/Conditional.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Conditional extends Twig_Node_Expression -{ - public function __construct(Twig_Node_Expression $expr1, Twig_Node_Expression $expr2, Twig_Node_Expression $expr3, $lineno) - { - parent::__construct(array('expr1' => $expr1, 'expr2' => $expr2, 'expr3' => $expr3), array(), $lineno); - } - - public function compile(Twig_Compiler $compiler) - { - $compiler - ->raw('((') - ->subcompile($this->getNode('expr1')) - ->raw(') ? (') - ->subcompile($this->getNode('expr2')) - ->raw(') : (') - ->subcompile($this->getNode('expr3')) - ->raw('))') - ; - } -} diff --git a/lib/Twig/Node/Expression/Constant.php b/lib/Twig/Node/Expression/Constant.php deleted file mode 100644 index a91dc6985ce..00000000000 --- a/lib/Twig/Node/Expression/Constant.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Constant extends Twig_Node_Expression -{ - public function __construct($value, $lineno) - { - parent::__construct(array(), array('value' => $value), $lineno); - } - - public function compile(Twig_Compiler $compiler) - { - $compiler->repr($this->getAttribute('value')); - } -} diff --git a/lib/Twig/Node/Expression/ExtensionReference.php b/lib/Twig/Node/Expression/ExtensionReference.php deleted file mode 100644 index 00ac6701f41..00000000000 --- a/lib/Twig/Node/Expression/ExtensionReference.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents an extension call node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Expression_ExtensionReference extends Twig_Node_Expression -{ - public function __construct($name, $lineno, $tag = null) - { - parent::__construct(array(), array('name' => $name), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler->raw(sprintf("\$this->env->getExtension('%s')", $this->getAttribute('name'))); - } -} diff --git a/lib/Twig/Node/Expression/Filter.php b/lib/Twig/Node/Expression/Filter.php deleted file mode 100644 index 207b062a3af..00000000000 --- a/lib/Twig/Node/Expression/Filter.php +++ /dev/null @@ -1,36 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Filter extends Twig_Node_Expression_Call -{ - public function __construct(Twig_NodeInterface $node, Twig_Node_Expression_Constant $filterName, Twig_NodeInterface $arguments, $lineno, $tag = null) - { - parent::__construct(array('node' => $node, 'filter' => $filterName, 'arguments' => $arguments), array(), $lineno, $tag); - } - - public function compile(Twig_Compiler $compiler) - { - $name = $this->getNode('filter')->getAttribute('value'); - $filter = $compiler->getEnvironment()->getFilter($name); - - $this->setAttribute('name', $name); - $this->setAttribute('type', 'filter'); - $this->setAttribute('thing', $filter); - $this->setAttribute('needs_environment', $filter->needsEnvironment()); - $this->setAttribute('needs_context', $filter->needsContext()); - $this->setAttribute('arguments', $filter->getArguments()); - if ($filter instanceof Twig_FilterCallableInterface || $filter instanceof Twig_SimpleFilter) { - $this->setAttribute('callable', $filter->getCallable()); - } - - $this->compileCallable($compiler); - } -} diff --git a/lib/Twig/Node/Expression/Filter/Default.php b/lib/Twig/Node/Expression/Filter/Default.php deleted file mode 100644 index 1827c888643..00000000000 --- a/lib/Twig/Node/Expression/Filter/Default.php +++ /dev/null @@ -1,43 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Returns the value or the default value when it is undefined or empty. - * - * <pre> - * {{ var.foo|default('foo item on var is not defined') }} - * </pre> - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Expression_Filter_Default extends Twig_Node_Expression_Filter -{ - public function __construct(Twig_NodeInterface $node, Twig_Node_Expression_Constant $filterName, Twig_NodeInterface $arguments, $lineno, $tag = null) - { - $default = new Twig_Node_Expression_Filter($node, new Twig_Node_Expression_Constant('default', $node->getLine()), $arguments, $node->getLine()); - - if ('default' === $filterName->getAttribute('value') && ($node instanceof Twig_Node_Expression_Name || $node instanceof Twig_Node_Expression_GetAttr)) { - $test = new Twig_Node_Expression_Test_Defined(clone $node, 'defined', new Twig_Node(), $node->getLine()); - $false = count($arguments) ? $arguments->getNode(0) : new Twig_Node_Expression_Constant('', $node->getLine()); - - $node = new Twig_Node_Expression_Conditional($test, $default, $false, $node->getLine()); - } else { - $node = $default; - } - - parent::__construct($node, $filterName, $arguments, $lineno, $tag); - } - - public function compile(Twig_Compiler $compiler) - { - $compiler->subcompile($this->getNode('node')); - } -} diff --git a/lib/Twig/Node/Expression/Function.php b/lib/Twig/Node/Expression/Function.php deleted file mode 100644 index 3e1f6b55909..00000000000 --- a/lib/Twig/Node/Expression/Function.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Function extends Twig_Node_Expression_Call -{ - public function __construct($name, Twig_NodeInterface $arguments, $lineno) - { - parent::__construct(array('arguments' => $arguments), array('name' => $name), $lineno); - } - - public function compile(Twig_Compiler $compiler) - { - $name = $this->getAttribute('name'); - $function = $compiler->getEnvironment()->getFunction($name); - - $this->setAttribute('name', $name); - $this->setAttribute('type', 'function'); - $this->setAttribute('thing', $function); - $this->setAttribute('needs_environment', $function->needsEnvironment()); - $this->setAttribute('needs_context', $function->needsContext()); - $this->setAttribute('arguments', $function->getArguments()); - if ($function instanceof Twig_FunctionCallableInterface || $function instanceof Twig_SimpleFunction) { - $this->setAttribute('callable', $function->getCallable()); - } - - $this->compileCallable($compiler); - } -} diff --git a/lib/Twig/Node/Expression/GetAttr.php b/lib/Twig/Node/Expression/GetAttr.php deleted file mode 100644 index 81a9b137abd..00000000000 --- a/lib/Twig/Node/Expression/GetAttr.php +++ /dev/null @@ -1,53 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_GetAttr extends Twig_Node_Expression -{ - public function __construct(Twig_Node_Expression $node, Twig_Node_Expression $attribute, Twig_Node_Expression_Array $arguments, $type, $lineno) - { - parent::__construct(array('node' => $node, 'attribute' => $attribute, 'arguments' => $arguments), array('type' => $type, 'is_defined_test' => false, 'ignore_strict_check' => false, 'disable_c_ext' => false), $lineno); - } - - public function compile(Twig_Compiler $compiler) - { - if (function_exists('twig_template_get_attributes') && !$this->getAttribute('disable_c_ext')) { - $compiler->raw('twig_template_get_attributes($this, '); - } else { - $compiler->raw('$this->getAttribute('); - } - - if ($this->getAttribute('ignore_strict_check')) { - $this->getNode('node')->setAttribute('ignore_strict_check', true); - } - - $compiler->subcompile($this->getNode('node')); - - $compiler->raw(', ')->subcompile($this->getNode('attribute')); - - if (count($this->getNode('arguments')) || Twig_TemplateInterface::ANY_CALL !== $this->getAttribute('type') || $this->getAttribute('is_defined_test') || $this->getAttribute('ignore_strict_check')) { - $compiler->raw(', ')->subcompile($this->getNode('arguments')); - - if (Twig_TemplateInterface::ANY_CALL !== $this->getAttribute('type') || $this->getAttribute('is_defined_test') || $this->getAttribute('ignore_strict_check')) { - $compiler->raw(', ')->repr($this->getAttribute('type')); - } - - if ($this->getAttribute('is_defined_test') || $this->getAttribute('ignore_strict_check')) { - $compiler->raw(', '.($this->getAttribute('is_defined_test') ? 'true' : 'false')); - } - - if ($this->getAttribute('ignore_strict_check')) { - $compiler->raw(', '.($this->getAttribute('ignore_strict_check') ? 'true' : 'false')); - } - } - - $compiler->raw(')'); - } -} diff --git a/lib/Twig/Node/Expression/MethodCall.php b/lib/Twig/Node/Expression/MethodCall.php deleted file mode 100644 index 620b02bf471..00000000000 --- a/lib/Twig/Node/Expression/MethodCall.php +++ /dev/null @@ -1,41 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2012 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_MethodCall extends Twig_Node_Expression -{ - public function __construct(Twig_Node_Expression $node, $method, Twig_Node_Expression_Array $arguments, $lineno) - { - parent::__construct(array('node' => $node, 'arguments' => $arguments), array('method' => $method, 'safe' => false), $lineno); - - if ($node instanceof Twig_Node_Expression_Name) { - $node->setAttribute('always_defined', true); - } - } - - public function compile(Twig_Compiler $compiler) - { - $compiler - ->subcompile($this->getNode('node')) - ->raw('->') - ->raw($this->getAttribute('method')) - ->raw('(') - ; - $first = true; - foreach ($this->getNode('arguments')->getKeyValuePairs() as $pair) { - if (!$first) { - $compiler->raw(', '); - } - $first = false; - - $compiler->subcompile($pair['value']); - } - $compiler->raw(')'); - } -} diff --git a/lib/Twig/Node/Expression/Name.php b/lib/Twig/Node/Expression/Name.php deleted file mode 100644 index 3b8fae01dc6..00000000000 --- a/lib/Twig/Node/Expression/Name.php +++ /dev/null @@ -1,88 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Name extends Twig_Node_Expression -{ - protected $specialVars = array( - '_self' => '$this', - '_context' => '$context', - '_charset' => '$this->env->getCharset()', - ); - - public function __construct($name, $lineno) - { - parent::__construct(array(), array('name' => $name, 'is_defined_test' => false, 'ignore_strict_check' => false, 'always_defined' => false), $lineno); - } - - public function compile(Twig_Compiler $compiler) - { - $name = $this->getAttribute('name'); - - if ($this->getAttribute('is_defined_test')) { - if ($this->isSpecial()) { - $compiler->repr(true); - } else { - $compiler->raw('array_key_exists(')->repr($name)->raw(', $context)'); - } - } elseif ($this->isSpecial()) { - $compiler->raw($this->specialVars[$name]); - } elseif ($this->getAttribute('always_defined')) { - $compiler - ->raw('$context[') - ->string($name) - ->raw(']') - ; - } else { - // remove the non-PHP 5.4 version when PHP 5.3 support is dropped - // as the non-optimized version is just a workaround for slow ternary operator - // when the context has a lot of variables - if (version_compare(phpversion(), '5.4.0RC1', '>=')) { - // PHP 5.4 ternary operator performance was optimized - $compiler - ->raw('(isset($context[') - ->string($name) - ->raw(']) ? $context[') - ->string($name) - ->raw('] : ') - ; - - if ($this->getAttribute('ignore_strict_check') || !$compiler->getEnvironment()->isStrictVariables()) { - $compiler->raw('null)'); - } else { - $compiler->raw('$this->getContext($context, ')->string($name)->raw('))'); - } - } else { - $compiler - ->raw('$this->getContext($context, ') - ->string($name) - ; - - if ($this->getAttribute('ignore_strict_check')) { - $compiler->raw(', true'); - } - - $compiler - ->raw(')') - ; - } - } - } - - public function isSpecial() - { - return isset($this->specialVars[$this->getAttribute('name')]); - } - - public function isSimple() - { - return !$this->isSpecial() && !$this->getAttribute('is_defined_test'); - } -} diff --git a/lib/Twig/Node/Expression/Parent.php b/lib/Twig/Node/Expression/Parent.php deleted file mode 100644 index dcf618c04a6..00000000000 --- a/lib/Twig/Node/Expression/Parent.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a parent node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Expression_Parent extends Twig_Node_Expression -{ - public function __construct($name, $lineno, $tag = null) - { - parent::__construct(array(), array('output' => false, 'name' => $name), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - if ($this->getAttribute('output')) { - $compiler - ->addDebugInfo($this) - ->write("\$this->displayParentBlock(") - ->string($this->getAttribute('name')) - ->raw(", \$context, \$blocks);\n") - ; - } else { - $compiler - ->raw("\$this->renderParentBlock(") - ->string($this->getAttribute('name')) - ->raw(", \$context, \$blocks)") - ; - } - } -} diff --git a/lib/Twig/Node/Expression/TempName.php b/lib/Twig/Node/Expression/TempName.php deleted file mode 100644 index e6b058e85ce..00000000000 --- a/lib/Twig/Node/Expression/TempName.php +++ /dev/null @@ -1,26 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_TempName extends Twig_Node_Expression -{ - public function __construct($name, $lineno) - { - parent::__construct(array(), array('name' => $name), $lineno); - } - - public function compile(Twig_Compiler $compiler) - { - $compiler - ->raw('$_') - ->raw($this->getAttribute('name')) - ->raw('_') - ; - } -} diff --git a/lib/Twig/Node/Expression/Test.php b/lib/Twig/Node/Expression/Test.php deleted file mode 100644 index 639f501a186..00000000000 --- a/lib/Twig/Node/Expression/Test.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Test extends Twig_Node_Expression_Call -{ - public function __construct(Twig_NodeInterface $node, $name, Twig_NodeInterface $arguments = null, $lineno) - { - parent::__construct(array('node' => $node, 'arguments' => $arguments), array('name' => $name), $lineno); - } - - public function compile(Twig_Compiler $compiler) - { - $name = $this->getAttribute('name'); - $test = $compiler->getEnvironment()->getTest($name); - - $this->setAttribute('name', $name); - $this->setAttribute('type', 'test'); - $this->setAttribute('thing', $test); - if ($test instanceof Twig_TestCallableInterface || $test instanceof Twig_SimpleTest) { - $this->setAttribute('callable', $test->getCallable()); - } - - $this->compileCallable($compiler); - } -} diff --git a/lib/Twig/Node/Expression/Test/Constant.php b/lib/Twig/Node/Expression/Test/Constant.php deleted file mode 100644 index 45b1e5da5aa..00000000000 --- a/lib/Twig/Node/Expression/Test/Constant.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Checks if a variable is the exact same value as a constant. - * - * <pre> - * {% if post.status is constant('Post::PUBLISHED') %} - * the status attribute is exactly the same as Post::PUBLISHED - * {% endif %} - * </pre> - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Expression_Test_Constant extends Twig_Node_Expression_Test -{ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->raw('(') - ->subcompile($this->getNode('node')) - ->raw(' === constant(') - ->subcompile($this->getNode('arguments')->getNode(0)) - ->raw('))') - ; - } -} diff --git a/lib/Twig/Node/Expression/Test/Defined.php b/lib/Twig/Node/Expression/Test/Defined.php deleted file mode 100644 index 247b2e23a53..00000000000 --- a/lib/Twig/Node/Expression/Test/Defined.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Checks if a variable is defined in the current context. - * - * <pre> - * {# defined works with variable names and variable attributes #} - * {% if foo is defined %} - * {# ... #} - * {% endif %} - * </pre> - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Expression_Test_Defined extends Twig_Node_Expression_Test -{ - public function __construct(Twig_NodeInterface $node, $name, Twig_NodeInterface $arguments = null, $lineno) - { - parent::__construct($node, $name, $arguments, $lineno); - - if ($node instanceof Twig_Node_Expression_Name) { - $node->setAttribute('is_defined_test', true); - } elseif ($node instanceof Twig_Node_Expression_GetAttr) { - $node->setAttribute('is_defined_test', true); - - $this->changeIgnoreStrictCheck($node); - } else { - throw new Twig_Error_Syntax('The "defined" test only works with simple variables', $this->getLine()); - } - } - - protected function changeIgnoreStrictCheck(Twig_Node_Expression_GetAttr $node) - { - $node->setAttribute('ignore_strict_check', true); - - if ($node->getNode('node') instanceof Twig_Node_Expression_GetAttr) { - $this->changeIgnoreStrictCheck($node->getNode('node')); - } - } - - public function compile(Twig_Compiler $compiler) - { - $compiler->subcompile($this->getNode('node')); - } -} diff --git a/lib/Twig/Node/Expression/Test/Divisibleby.php b/lib/Twig/Node/Expression/Test/Divisibleby.php deleted file mode 100644 index 0aceb5302cb..00000000000 --- a/lib/Twig/Node/Expression/Test/Divisibleby.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Checks if a variable is divisible by a number. - * - * <pre> - * {% if loop.index is divisibleby(3) %} - * </pre> - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Expression_Test_Divisibleby extends Twig_Node_Expression_Test -{ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->raw('(0 == ') - ->subcompile($this->getNode('node')) - ->raw(' % ') - ->subcompile($this->getNode('arguments')->getNode(0)) - ->raw(')') - ; - } -} diff --git a/lib/Twig/Node/Expression/Test/Even.php b/lib/Twig/Node/Expression/Test/Even.php deleted file mode 100644 index d7853e89c68..00000000000 --- a/lib/Twig/Node/Expression/Test/Even.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Checks if a number is even. - * - * <pre> - * {{ var is even }} - * </pre> - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Expression_Test_Even extends Twig_Node_Expression_Test -{ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->raw('(') - ->subcompile($this->getNode('node')) - ->raw(' % 2 == 0') - ->raw(')') - ; - } -} diff --git a/lib/Twig/Node/Expression/Test/Null.php b/lib/Twig/Node/Expression/Test/Null.php deleted file mode 100644 index 1c83825a005..00000000000 --- a/lib/Twig/Node/Expression/Test/Null.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Checks that a variable is null. - * - * <pre> - * {{ var is none }} - * </pre> - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Expression_Test_Null extends Twig_Node_Expression_Test -{ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->raw('(null === ') - ->subcompile($this->getNode('node')) - ->raw(')') - ; - } -} diff --git a/lib/Twig/Node/Expression/Test/Odd.php b/lib/Twig/Node/Expression/Test/Odd.php deleted file mode 100644 index 421c19e841e..00000000000 --- a/lib/Twig/Node/Expression/Test/Odd.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Checks if a number is odd. - * - * <pre> - * {{ var is odd }} - * </pre> - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Expression_Test_Odd extends Twig_Node_Expression_Test -{ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->raw('(') - ->subcompile($this->getNode('node')) - ->raw(' % 2 == 1') - ->raw(')') - ; - } -} diff --git a/lib/Twig/Node/Expression/Test/Sameas.php b/lib/Twig/Node/Expression/Test/Sameas.php deleted file mode 100644 index b48905ee417..00000000000 --- a/lib/Twig/Node/Expression/Test/Sameas.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Checks if a variable is the same as another one (=== in PHP). - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Expression_Test_Sameas extends Twig_Node_Expression_Test -{ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->raw('(') - ->subcompile($this->getNode('node')) - ->raw(' === ') - ->subcompile($this->getNode('arguments')->getNode(0)) - ->raw(')') - ; - } -} diff --git a/lib/Twig/Node/Expression/Unary.php b/lib/Twig/Node/Expression/Unary.php deleted file mode 100644 index c514388eb6c..00000000000 --- a/lib/Twig/Node/Expression/Unary.php +++ /dev/null @@ -1,30 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -abstract class Twig_Node_Expression_Unary extends Twig_Node_Expression -{ - public function __construct(Twig_NodeInterface $node, $lineno) - { - parent::__construct(array('node' => $node), array(), $lineno); - } - - public function compile(Twig_Compiler $compiler) - { - $compiler->raw('('); - $this->operator($compiler); - $compiler - ->subcompile($this->getNode('node')) - ->raw(')') - ; - } - - abstract public function operator(Twig_Compiler $compiler); -} diff --git a/lib/Twig/Node/Expression/Unary/Neg.php b/lib/Twig/Node/Expression/Unary/Neg.php deleted file mode 100644 index 2a3937ec3fb..00000000000 --- a/lib/Twig/Node/Expression/Unary/Neg.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Unary_Neg extends Twig_Node_Expression_Unary -{ - public function operator(Twig_Compiler $compiler) - { - $compiler->raw('-'); - } -} diff --git a/lib/Twig/Node/Expression/Unary/Not.php b/lib/Twig/Node/Expression/Unary/Not.php deleted file mode 100644 index f94073cfaa2..00000000000 --- a/lib/Twig/Node/Expression/Unary/Not.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Unary_Not extends Twig_Node_Expression_Unary -{ - public function operator(Twig_Compiler $compiler) - { - $compiler->raw('!'); - } -} diff --git a/lib/Twig/Node/Expression/Unary/Pos.php b/lib/Twig/Node/Expression/Unary/Pos.php deleted file mode 100644 index 04edb52a6bc..00000000000 --- a/lib/Twig/Node/Expression/Unary/Pos.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -class Twig_Node_Expression_Unary_Pos extends Twig_Node_Expression_Unary -{ - public function operator(Twig_Compiler $compiler) - { - $compiler->raw('+'); - } -} diff --git a/lib/Twig/Node/Flush.php b/lib/Twig/Node/Flush.php deleted file mode 100644 index 0467ddcefc5..00000000000 --- a/lib/Twig/Node/Flush.php +++ /dev/null @@ -1,36 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a flush node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Flush extends Twig_Node -{ - public function __construct($lineno, $tag) - { - parent::__construct(array(), array(), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->addDebugInfo($this) - ->write("flush();\n") - ; - } -} diff --git a/lib/Twig/Node/For.php b/lib/Twig/Node/For.php deleted file mode 100644 index d1ff371da1b..00000000000 --- a/lib/Twig/Node/For.php +++ /dev/null @@ -1,112 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a for node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_For extends Twig_Node -{ - protected $loop; - - public function __construct(Twig_Node_Expression_AssignName $keyTarget, Twig_Node_Expression_AssignName $valueTarget, Twig_Node_Expression $seq, Twig_Node_Expression $ifexpr = null, Twig_NodeInterface $body, Twig_NodeInterface $else = null, $lineno, $tag = null) - { - $body = new Twig_Node(array($body, $this->loop = new Twig_Node_ForLoop($lineno, $tag))); - - if (null !== $ifexpr) { - $body = new Twig_Node_If(new Twig_Node(array($ifexpr, $body)), null, $lineno, $tag); - } - - parent::__construct(array('key_target' => $keyTarget, 'value_target' => $valueTarget, 'seq' => $seq, 'body' => $body, 'else' => $else), array('with_loop' => true, 'ifexpr' => null !== $ifexpr), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->addDebugInfo($this) - // the (array) cast bypasses a PHP 5.2.6 bug - ->write("\$context['_parent'] = (array) \$context;\n") - ->write("\$context['_seq'] = twig_ensure_traversable(") - ->subcompile($this->getNode('seq')) - ->raw(");\n") - ; - - if (null !== $this->getNode('else')) { - $compiler->write("\$context['_iterated'] = false;\n"); - } - - if ($this->getAttribute('with_loop')) { - $compiler - ->write("\$context['loop'] = array(\n") - ->write(" 'parent' => \$context['_parent'],\n") - ->write(" 'index0' => 0,\n") - ->write(" 'index' => 1,\n") - ->write(" 'first' => true,\n") - ->write(");\n") - ; - - if (!$this->getAttribute('ifexpr')) { - $compiler - ->write("if (is_array(\$context['_seq']) || (is_object(\$context['_seq']) && \$context['_seq'] instanceof Countable)) {\n") - ->indent() - ->write("\$length = count(\$context['_seq']);\n") - ->write("\$context['loop']['revindex0'] = \$length - 1;\n") - ->write("\$context['loop']['revindex'] = \$length;\n") - ->write("\$context['loop']['length'] = \$length;\n") - ->write("\$context['loop']['last'] = 1 === \$length;\n") - ->outdent() - ->write("}\n") - ; - } - } - - $this->loop->setAttribute('else', null !== $this->getNode('else')); - $this->loop->setAttribute('with_loop', $this->getAttribute('with_loop')); - $this->loop->setAttribute('ifexpr', $this->getAttribute('ifexpr')); - - $compiler - ->write("foreach (\$context['_seq'] as ") - ->subcompile($this->getNode('key_target')) - ->raw(" => ") - ->subcompile($this->getNode('value_target')) - ->raw(") {\n") - ->indent() - ->subcompile($this->getNode('body')) - ->outdent() - ->write("}\n") - ; - - if (null !== $this->getNode('else')) { - $compiler - ->write("if (!\$context['_iterated']) {\n") - ->indent() - ->subcompile($this->getNode('else')) - ->outdent() - ->write("}\n") - ; - } - - $compiler->write("\$_parent = \$context['_parent'];\n"); - - // remove some "private" loop variables (needed for nested loops) - $compiler->write('unset($context[\'_seq\'], $context[\'_iterated\'], $context[\''.$this->getNode('key_target')->getAttribute('name').'\'], $context[\''.$this->getNode('value_target')->getAttribute('name').'\'], $context[\'_parent\'], $context[\'loop\']);'."\n"); - - // keep the values set in the inner context for variables defined in the outer context - $compiler->write("\$context = array_intersect_key(\$context, \$_parent) + \$_parent;\n"); - } -} diff --git a/lib/Twig/Node/ForLoop.php b/lib/Twig/Node/ForLoop.php deleted file mode 100644 index b8841583d97..00000000000 --- a/lib/Twig/Node/ForLoop.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Internal node used by the for node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_ForLoop extends Twig_Node -{ - public function __construct($lineno, $tag = null) - { - parent::__construct(array(), array('with_loop' => false, 'ifexpr' => false, 'else' => false), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - if ($this->getAttribute('else')) { - $compiler->write("\$context['_iterated'] = true;\n"); - } - - if ($this->getAttribute('with_loop')) { - $compiler - ->write("++\$context['loop']['index0'];\n") - ->write("++\$context['loop']['index'];\n") - ->write("\$context['loop']['first'] = false;\n") - ; - - if (!$this->getAttribute('ifexpr')) { - $compiler - ->write("if (isset(\$context['loop']['length'])) {\n") - ->indent() - ->write("--\$context['loop']['revindex0'];\n") - ->write("--\$context['loop']['revindex'];\n") - ->write("\$context['loop']['last'] = 0 === \$context['loop']['revindex0'];\n") - ->outdent() - ->write("}\n") - ; - } - } - } -} diff --git a/lib/Twig/Node/If.php b/lib/Twig/Node/If.php deleted file mode 100644 index 4296a8d678f..00000000000 --- a/lib/Twig/Node/If.php +++ /dev/null @@ -1,66 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents an if node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_If extends Twig_Node -{ - public function __construct(Twig_NodeInterface $tests, Twig_NodeInterface $else = null, $lineno, $tag = null) - { - parent::__construct(array('tests' => $tests, 'else' => $else), array(), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler->addDebugInfo($this); - for ($i = 0; $i < count($this->getNode('tests')); $i += 2) { - if ($i > 0) { - $compiler - ->outdent() - ->write("} elseif (") - ; - } else { - $compiler - ->write('if (') - ; - } - - $compiler - ->subcompile($this->getNode('tests')->getNode($i)) - ->raw(") {\n") - ->indent() - ->subcompile($this->getNode('tests')->getNode($i + 1)) - ; - } - - if ($this->hasNode('else') && null !== $this->getNode('else')) { - $compiler - ->outdent() - ->write("} else {\n") - ->indent() - ->subcompile($this->getNode('else')) - ; - } - - $compiler - ->outdent() - ->write("}\n"); - } -} diff --git a/lib/Twig/Node/Import.php b/lib/Twig/Node/Import.php deleted file mode 100644 index 99efc0911c3..00000000000 --- a/lib/Twig/Node/Import.php +++ /dev/null @@ -1,50 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents an import node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Import extends Twig_Node -{ - public function __construct(Twig_Node_Expression $expr, Twig_Node_Expression $var, $lineno, $tag = null) - { - parent::__construct(array('expr' => $expr, 'var' => $var), array(), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->addDebugInfo($this) - ->write('') - ->subcompile($this->getNode('var')) - ->raw(' = ') - ; - - if ($this->getNode('expr') instanceof Twig_Node_Expression_Name && '_self' === $this->getNode('expr')->getAttribute('name')) { - $compiler->raw("\$this"); - } else { - $compiler - ->raw('$this->env->loadTemplate(') - ->subcompile($this->getNode('expr')) - ->raw(")") - ; - } - - $compiler->raw(";\n"); - } -} diff --git a/lib/Twig/Node/Include.php b/lib/Twig/Node/Include.php deleted file mode 100644 index ed4a3751250..00000000000 --- a/lib/Twig/Node/Include.php +++ /dev/null @@ -1,99 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents an include node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Include extends Twig_Node implements Twig_NodeOutputInterface -{ - public function __construct(Twig_Node_Expression $expr, Twig_Node_Expression $variables = null, $only = false, $ignoreMissing = false, $lineno, $tag = null) - { - parent::__construct(array('expr' => $expr, 'variables' => $variables), array('only' => (Boolean) $only, 'ignore_missing' => (Boolean) $ignoreMissing), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler->addDebugInfo($this); - - if ($this->getAttribute('ignore_missing')) { - $compiler - ->write("try {\n") - ->indent() - ; - } - - $this->addGetTemplate($compiler); - - $compiler->raw('->display('); - - $this->addTemplateArguments($compiler); - - $compiler->raw(");\n"); - - if ($this->getAttribute('ignore_missing')) { - $compiler - ->outdent() - ->write("} catch (Twig_Error_Loader \$e) {\n") - ->indent() - ->write("// ignore missing template\n") - ->outdent() - ->write("}\n\n") - ; - } - } - - protected function addGetTemplate(Twig_Compiler $compiler) - { - if ($this->getNode('expr') instanceof Twig_Node_Expression_Constant) { - $compiler - ->write("\$this->env->loadTemplate(") - ->subcompile($this->getNode('expr')) - ->raw(")") - ; - } else { - $compiler - ->write("\$template = \$this->env->resolveTemplate(") - ->subcompile($this->getNode('expr')) - ->raw(");\n") - ->write('$template') - ; - } - } - - protected function addTemplateArguments(Twig_Compiler $compiler) - { - if (false === $this->getAttribute('only')) { - if (null === $this->getNode('variables')) { - $compiler->raw('$context'); - } else { - $compiler - ->raw('array_merge($context, ') - ->subcompile($this->getNode('variables')) - ->raw(')') - ; - } - } else { - if (null === $this->getNode('variables')) { - $compiler->raw('array()'); - } else { - $compiler->subcompile($this->getNode('variables')); - } - } - } -} diff --git a/lib/Twig/Node/Macro.php b/lib/Twig/Node/Macro.php deleted file mode 100644 index 89910618b87..00000000000 --- a/lib/Twig/Node/Macro.php +++ /dev/null @@ -1,96 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a macro node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Macro extends Twig_Node -{ - public function __construct($name, Twig_NodeInterface $body, Twig_NodeInterface $arguments, $lineno, $tag = null) - { - parent::__construct(array('body' => $body, 'arguments' => $arguments), array('name' => $name), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->addDebugInfo($this) - ->write(sprintf("public function get%s(", $this->getAttribute('name'))) - ; - - $count = count($this->getNode('arguments')); - $pos = 0; - foreach ($this->getNode('arguments') as $name => $default) { - $compiler - ->raw('$_'.$name.' = ') - ->subcompile($default) - ; - - if (++$pos < $count) { - $compiler->raw(', '); - } - } - - $compiler - ->raw(")\n") - ->write("{\n") - ->indent() - ; - - if (!count($this->getNode('arguments'))) { - $compiler->write("\$context = \$this->env->getGlobals();\n\n"); - } else { - $compiler - ->write("\$context = \$this->env->mergeGlobals(array(\n") - ->indent() - ; - - foreach ($this->getNode('arguments') as $name => $default) { - $compiler - ->write('') - ->string($name) - ->raw(' => $_'.$name) - ->raw(",\n") - ; - } - - $compiler - ->outdent() - ->write("));\n\n") - ; - } - - $compiler - ->write("\$blocks = array();\n\n") - ->write("ob_start();\n") - ->write("try {\n") - ->indent() - ->subcompile($this->getNode('body')) - ->outdent() - ->write("} catch (Exception \$e) {\n") - ->indent() - ->write("ob_end_clean();\n\n") - ->write("throw \$e;\n") - ->outdent() - ->write("}\n\n") - ->write("return ('' === \$tmp = ob_get_clean()) ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset());\n") - ->outdent() - ->write("}\n\n") - ; - } -} diff --git a/lib/Twig/Node/Module.php b/lib/Twig/Node/Module.php deleted file mode 100644 index 585048b8a6f..00000000000 --- a/lib/Twig/Node/Module.php +++ /dev/null @@ -1,371 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a module node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Module extends Twig_Node -{ - public function __construct(Twig_NodeInterface $body, Twig_Node_Expression $parent = null, Twig_NodeInterface $blocks, Twig_NodeInterface $macros, Twig_NodeInterface $traits, $embeddedTemplates, $filename) - { - // embedded templates are set as attributes so that they are only visited once by the visitors - parent::__construct(array('parent' => $parent, 'body' => $body, 'blocks' => $blocks, 'macros' => $macros, 'traits' => $traits), array('filename' => $filename, 'index' => null, 'embedded_templates' => $embeddedTemplates), 1); - } - - public function setIndex($index) - { - $this->setAttribute('index', $index); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $this->compileTemplate($compiler); - - foreach ($this->getAttribute('embedded_templates') as $template) { - $compiler->subcompile($template); - } - } - - protected function compileTemplate(Twig_Compiler $compiler) - { - if (!$this->getAttribute('index')) { - $compiler->write('<?php'); - } - - $this->compileClassHeader($compiler); - - if (count($this->getNode('blocks')) || count($this->getNode('traits')) || null === $this->getNode('parent') || $this->getNode('parent') instanceof Twig_Node_Expression_Constant) { - $this->compileConstructor($compiler); - } - - $this->compileGetParent($compiler); - - $this->compileDisplayHeader($compiler); - - $this->compileDisplayBody($compiler); - - $this->compileDisplayFooter($compiler); - - $compiler->subcompile($this->getNode('blocks')); - - $this->compileMacros($compiler); - - $this->compileGetTemplateName($compiler); - - $this->compileIsTraitable($compiler); - - $this->compileDebugInfo($compiler); - - $this->compileClassFooter($compiler); - } - - protected function compileGetParent(Twig_Compiler $compiler) - { - if (null === $this->getNode('parent')) { - return; - } - - $compiler - ->write("protected function doGetParent(array \$context)\n", "{\n") - ->indent() - ->write("return ") - ; - - if ($this->getNode('parent') instanceof Twig_Node_Expression_Constant) { - $compiler->subcompile($this->getNode('parent')); - } else { - $compiler - ->raw("\$this->env->resolveTemplate(") - ->subcompile($this->getNode('parent')) - ->raw(")") - ; - } - - $compiler - ->raw(";\n") - ->outdent() - ->write("}\n\n") - ; - } - - protected function compileDisplayBody(Twig_Compiler $compiler) - { - $compiler->subcompile($this->getNode('body')); - - if (null !== $this->getNode('parent')) { - if ($this->getNode('parent') instanceof Twig_Node_Expression_Constant) { - $compiler->write("\$this->parent"); - } else { - $compiler->write("\$this->getParent(\$context)"); - } - $compiler->raw("->display(\$context, array_merge(\$this->blocks, \$blocks));\n"); - } - } - - protected function compileClassHeader(Twig_Compiler $compiler) - { - $compiler - ->write("\n\n") - // if the filename contains */, add a blank to avoid a PHP parse error - ->write("/* ".str_replace('*/', '* /', $this->getAttribute('filename'))." */\n") - ->write('class '.$compiler->getEnvironment()->getTemplateClass($this->getAttribute('filename'), $this->getAttribute('index'))) - ->raw(sprintf(" extends %s\n", $compiler->getEnvironment()->getBaseTemplateClass())) - ->write("{\n") - ->indent() - ; - } - - protected function compileConstructor(Twig_Compiler $compiler) - { - $compiler - ->write("public function __construct(Twig_Environment \$env)\n", "{\n") - ->indent() - ->write("parent::__construct(\$env);\n\n") - ; - - // parent - if (null === $this->getNode('parent')) { - $compiler->write("\$this->parent = false;\n\n"); - } elseif ($this->getNode('parent') instanceof Twig_Node_Expression_Constant) { - $compiler - ->write("\$this->parent = \$this->env->loadTemplate(") - ->subcompile($this->getNode('parent')) - ->raw(");\n\n") - ; - } - - $countTraits = count($this->getNode('traits')); - if ($countTraits) { - // traits - foreach ($this->getNode('traits') as $i => $trait) { - $this->compileLoadTemplate($compiler, $trait->getNode('template'), sprintf('$_trait_%s', $i)); - - $compiler - ->addDebugInfo($trait->getNode('template')) - ->write(sprintf("if (!\$_trait_%s->isTraitable()) {\n", $i)) - ->indent() - ->write("throw new Twig_Error_Runtime('Template \"'.") - ->subcompile($trait->getNode('template')) - ->raw(".'\" cannot be used as a trait.');\n") - ->outdent() - ->write("}\n") - ->write(sprintf("\$_trait_%s_blocks = \$_trait_%s->getBlocks();\n\n", $i, $i)) - ; - - foreach ($trait->getNode('targets') as $key => $value) { - $compiler - ->write(sprintf("\$_trait_%s_blocks[", $i)) - ->subcompile($value) - ->raw(sprintf("] = \$_trait_%s_blocks[", $i)) - ->string($key) - ->raw(sprintf("]; unset(\$_trait_%s_blocks[", $i)) - ->string($key) - ->raw("]);\n\n") - ; - } - } - - if ($countTraits > 1) { - $compiler - ->write("\$this->traits = array_merge(\n") - ->indent() - ; - - for ($i = 0; $i < $countTraits; $i++) { - $compiler - ->write(sprintf("\$_trait_%s_blocks".($i == $countTraits - 1 ? '' : ',')."\n", $i)) - ; - } - - $compiler - ->outdent() - ->write(");\n\n") - ; - } else { - $compiler - ->write("\$this->traits = \$_trait_0_blocks;\n\n") - ; - } - - $compiler - ->write("\$this->blocks = array_merge(\n") - ->indent() - ->write("\$this->traits,\n") - ->write("array(\n") - ; - } else { - $compiler - ->write("\$this->blocks = array(\n") - ; - } - - // blocks - $compiler - ->indent() - ; - - foreach ($this->getNode('blocks') as $name => $node) { - $compiler - ->write(sprintf("'%s' => array(\$this, 'block_%s'),\n", $name, $name)) - ; - } - - if ($countTraits) { - $compiler - ->outdent() - ->write(")\n") - ; - } - - $compiler - ->outdent() - ->write(");\n") - ->outdent() - ->write("}\n\n"); - ; - } - - protected function compileDisplayHeader(Twig_Compiler $compiler) - { - $compiler - ->write("protected function doDisplay(array \$context, array \$blocks = array())\n", "{\n") - ->indent() - ; - } - - protected function compileDisplayFooter(Twig_Compiler $compiler) - { - $compiler - ->outdent() - ->write("}\n\n") - ; - } - - protected function compileClassFooter(Twig_Compiler $compiler) - { - $compiler - ->outdent() - ->write("}\n") - ; - } - - protected function compileMacros(Twig_Compiler $compiler) - { - $compiler->subcompile($this->getNode('macros')); - } - - protected function compileGetTemplateName(Twig_Compiler $compiler) - { - $compiler - ->write("public function getTemplateName()\n", "{\n") - ->indent() - ->write('return ') - ->repr($this->getAttribute('filename')) - ->raw(";\n") - ->outdent() - ->write("}\n\n") - ; - } - - protected function compileIsTraitable(Twig_Compiler $compiler) - { - // A template can be used as a trait if: - // * it has no parent - // * it has no macros - // * it has no body - // - // Put another way, a template can be used as a trait if it - // only contains blocks and use statements. - $traitable = null === $this->getNode('parent') && 0 === count($this->getNode('macros')); - if ($traitable) { - if ($this->getNode('body') instanceof Twig_Node_Body) { - $nodes = $this->getNode('body')->getNode(0); - } else { - $nodes = $this->getNode('body'); - } - - if (!count($nodes)) { - $nodes = new Twig_Node(array($nodes)); - } - - foreach ($nodes as $node) { - if (!count($node)) { - continue; - } - - if ($node instanceof Twig_Node_Text && ctype_space($node->getAttribute('data'))) { - continue; - } - - if ($node instanceof Twig_Node_BlockReference) { - continue; - } - - $traitable = false; - break; - } - } - - if ($traitable) { - return; - } - - $compiler - ->write("public function isTraitable()\n", "{\n") - ->indent() - ->write(sprintf("return %s;\n", $traitable ? 'true' : 'false')) - ->outdent() - ->write("}\n\n") - ; - } - - protected function compileDebugInfo(Twig_Compiler $compiler) - { - $compiler - ->write("public function getDebugInfo()\n", "{\n") - ->indent() - ->write(sprintf("return %s;\n", str_replace("\n", '', var_export(array_reverse($compiler->getDebugInfo(), true), true)))) - ->outdent() - ->write("}\n") - ; - } - - protected function compileLoadTemplate(Twig_Compiler $compiler, $node, $var) - { - if ($node instanceof Twig_Node_Expression_Constant) { - $compiler - ->write(sprintf("%s = \$this->env->loadTemplate(", $var)) - ->subcompile($node) - ->raw(");\n") - ; - } else { - $compiler - ->write(sprintf("%s = ", $var)) - ->subcompile($node) - ->raw(";\n") - ->write(sprintf("if (!%s", $var)) - ->raw(" instanceof Twig_Template) {\n") - ->indent() - ->write(sprintf("%s = \$this->env->loadTemplate(%s);\n", $var, $var)) - ->outdent() - ->write("}\n") - ; - } - } -} diff --git a/lib/Twig/Node/Print.php b/lib/Twig/Node/Print.php deleted file mode 100644 index b0c41d1d921..00000000000 --- a/lib/Twig/Node/Print.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a node that outputs an expression. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Print extends Twig_Node implements Twig_NodeOutputInterface -{ - public function __construct(Twig_Node_Expression $expr, $lineno, $tag = null) - { - parent::__construct(array('expr' => $expr), array(), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->addDebugInfo($this) - ->write('echo ') - ->subcompile($this->getNode('expr')) - ->raw(";\n") - ; - } -} diff --git a/lib/Twig/Node/Sandbox.php b/lib/Twig/Node/Sandbox.php deleted file mode 100644 index 8cf3ed44f76..00000000000 --- a/lib/Twig/Node/Sandbox.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a sandbox node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Sandbox extends Twig_Node -{ - public function __construct(Twig_NodeInterface $body, $lineno, $tag = null) - { - parent::__construct(array('body' => $body), array(), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->addDebugInfo($this) - ->write("\$sandbox = \$this->env->getExtension('sandbox');\n") - ->write("if (!\$alreadySandboxed = \$sandbox->isSandboxed()) {\n") - ->indent() - ->write("\$sandbox->enableSandbox();\n") - ->outdent() - ->write("}\n") - ->subcompile($this->getNode('body')) - ->write("if (!\$alreadySandboxed) {\n") - ->indent() - ->write("\$sandbox->disableSandbox();\n") - ->outdent() - ->write("}\n") - ; - } -} diff --git a/lib/Twig/Node/SandboxedModule.php b/lib/Twig/Node/SandboxedModule.php deleted file mode 100644 index be1f5daa732..00000000000 --- a/lib/Twig/Node/SandboxedModule.php +++ /dev/null @@ -1,60 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a module node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_SandboxedModule extends Twig_Node_Module -{ - protected $usedFilters; - protected $usedTags; - protected $usedFunctions; - - public function __construct(Twig_Node_Module $node, array $usedFilters, array $usedTags, array $usedFunctions) - { - parent::__construct($node->getNode('body'), $node->getNode('parent'), $node->getNode('blocks'), $node->getNode('macros'), $node->getNode('traits'), $node->getAttribute('embedded_templates'), $node->getAttribute('filename'), $node->getLine(), $node->getNodeTag()); - - $this->setAttribute('index', $node->getAttribute('index')); - - $this->usedFilters = $usedFilters; - $this->usedTags = $usedTags; - $this->usedFunctions = $usedFunctions; - } - - protected function compileDisplayBody(Twig_Compiler $compiler) - { - $compiler->write("\$this->checkSecurity();\n"); - - parent::compileDisplayBody($compiler); - } - - protected function compileDisplayFooter(Twig_Compiler $compiler) - { - parent::compileDisplayFooter($compiler); - - $compiler - ->write("protected function checkSecurity()\n", "{\n") - ->indent() - ->write("\$this->env->getExtension('sandbox')->checkSecurity(\n") - ->indent() - ->write(!$this->usedTags ? "array(),\n" : "array('".implode('\', \'', $this->usedTags)."'),\n") - ->write(!$this->usedFilters ? "array(),\n" : "array('".implode('\', \'', $this->usedFilters)."'),\n") - ->write(!$this->usedFunctions ? "array()\n" : "array('".implode('\', \'', $this->usedFunctions)."')\n") - ->outdent() - ->write(");\n") - ->outdent() - ->write("}\n\n") - ; - } -} diff --git a/lib/Twig/Node/SandboxedPrint.php b/lib/Twig/Node/SandboxedPrint.php deleted file mode 100644 index 73dfaa9639a..00000000000 --- a/lib/Twig/Node/SandboxedPrint.php +++ /dev/null @@ -1,59 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Twig_Node_SandboxedPrint adds a check for the __toString() method - * when the variable is an object and the sandbox is activated. - * - * When there is a simple Print statement, like {{ article }}, - * and if the sandbox is enabled, we need to check that the __toString() - * method is allowed if 'article' is an object. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_SandboxedPrint extends Twig_Node_Print -{ - public function __construct(Twig_Node_Expression $expr, $lineno, $tag = null) - { - parent::__construct($expr, $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->addDebugInfo($this) - ->write('echo $this->env->getExtension(\'sandbox\')->ensureToStringAllowed(') - ->subcompile($this->getNode('expr')) - ->raw(");\n") - ; - } - - /** - * Removes node filters. - * - * This is mostly needed when another visitor adds filters (like the escaper one). - * - * @param Twig_Node $node A Node - */ - protected function removeNodeFilter($node) - { - if ($node instanceof Twig_Node_Expression_Filter) { - return $this->removeNodeFilter($node->getNode('node')); - } - - return $node; - } -} diff --git a/lib/Twig/Node/Set.php b/lib/Twig/Node/Set.php deleted file mode 100644 index 4c9c16ce2fb..00000000000 --- a/lib/Twig/Node/Set.php +++ /dev/null @@ -1,101 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a set node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Set extends Twig_Node -{ - public function __construct($capture, Twig_NodeInterface $names, Twig_NodeInterface $values, $lineno, $tag = null) - { - parent::__construct(array('names' => $names, 'values' => $values), array('capture' => $capture, 'safe' => false), $lineno, $tag); - - /* - * Optimizes the node when capture is used for a large block of text. - * - * {% set foo %}foo{% endset %} is compiled to $context['foo'] = new Twig_Markup("foo"); - */ - if ($this->getAttribute('capture')) { - $this->setAttribute('safe', true); - - $values = $this->getNode('values'); - if ($values instanceof Twig_Node_Text) { - $this->setNode('values', new Twig_Node_Expression_Constant($values->getAttribute('data'), $values->getLine())); - $this->setAttribute('capture', false); - } - } - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler->addDebugInfo($this); - - if (count($this->getNode('names')) > 1) { - $compiler->write('list('); - foreach ($this->getNode('names') as $idx => $node) { - if ($idx) { - $compiler->raw(', '); - } - - $compiler->subcompile($node); - } - $compiler->raw(')'); - } else { - if ($this->getAttribute('capture')) { - $compiler - ->write("ob_start();\n") - ->subcompile($this->getNode('values')) - ; - } - - $compiler->subcompile($this->getNode('names'), false); - - if ($this->getAttribute('capture')) { - $compiler->raw(" = ('' === \$tmp = ob_get_clean()) ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset())"); - } - } - - if (!$this->getAttribute('capture')) { - $compiler->raw(' = '); - - if (count($this->getNode('names')) > 1) { - $compiler->write('array('); - foreach ($this->getNode('values') as $idx => $value) { - if ($idx) { - $compiler->raw(', '); - } - - $compiler->subcompile($value); - } - $compiler->raw(')'); - } else { - if ($this->getAttribute('safe')) { - $compiler - ->raw("('' === \$tmp = ") - ->subcompile($this->getNode('values')) - ->raw(") ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset())") - ; - } else { - $compiler->subcompile($this->getNode('values')); - } - } - } - - $compiler->raw(";\n"); - } -} diff --git a/lib/Twig/Node/SetTemp.php b/lib/Twig/Node/SetTemp.php deleted file mode 100644 index 3bdd1cb74e7..00000000000 --- a/lib/Twig/Node/SetTemp.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -class Twig_Node_SetTemp extends Twig_Node -{ - public function __construct($name, $lineno) - { - parent::__construct(array(), array('name' => $name), $lineno); - } - - public function compile(Twig_Compiler $compiler) - { - $name = $this->getAttribute('name'); - $compiler - ->addDebugInfo($this) - ->write('if (isset($context[') - ->string($name) - ->raw('])) { $_') - ->raw($name) - ->raw('_ = $context[') - ->repr($name) - ->raw(']; } else { $_') - ->raw($name) - ->raw("_ = null; }\n") - ; - } -} diff --git a/lib/Twig/Node/Spaceless.php b/lib/Twig/Node/Spaceless.php deleted file mode 100644 index 7555fa0f182..00000000000 --- a/lib/Twig/Node/Spaceless.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a spaceless node. - * - * It removes spaces between HTML tags. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Spaceless extends Twig_Node -{ - public function __construct(Twig_NodeInterface $body, $lineno, $tag = 'spaceless') - { - parent::__construct(array('body' => $body), array(), $lineno, $tag); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->addDebugInfo($this) - ->write("ob_start();\n") - ->subcompile($this->getNode('body')) - ->write("echo trim(preg_replace('/>\s+</', '><', ob_get_clean()));\n") - ; - } -} diff --git a/lib/Twig/Node/Text.php b/lib/Twig/Node/Text.php deleted file mode 100644 index 21bdcea1485..00000000000 --- a/lib/Twig/Node/Text.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a text node. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Node_Text extends Twig_Node implements Twig_NodeOutputInterface -{ - public function __construct($data, $lineno) - { - parent::__construct(array(), array('data' => $data), $lineno); - } - - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler) - { - $compiler - ->addDebugInfo($this) - ->write('echo ') - ->string($this->getAttribute('data')) - ->raw(";\n") - ; - } -} diff --git a/lib/Twig/NodeInterface.php b/lib/Twig/NodeInterface.php deleted file mode 100644 index f0ef725825c..00000000000 --- a/lib/Twig/NodeInterface.php +++ /dev/null @@ -1,30 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a node in the AST. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -interface Twig_NodeInterface extends Countable, IteratorAggregate -{ - /** - * Compiles the node to PHP. - * - * @param Twig_Compiler A Twig_Compiler instance - */ - public function compile(Twig_Compiler $compiler); - - public function getLine(); - - public function getNodeTag(); -} diff --git a/lib/Twig/NodeOutputInterface.php b/lib/Twig/NodeOutputInterface.php deleted file mode 100644 index 22172c09db1..00000000000 --- a/lib/Twig/NodeOutputInterface.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a displayable node in the AST. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -interface Twig_NodeOutputInterface -{ -} diff --git a/lib/Twig/NodeTraverser.php b/lib/Twig/NodeTraverser.php deleted file mode 100644 index 28cba1ad57b..00000000000 --- a/lib/Twig/NodeTraverser.php +++ /dev/null @@ -1,88 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Twig_NodeTraverser is a node traverser. - * - * It visits all nodes and their children and call the given visitor for each. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_NodeTraverser -{ - protected $env; - protected $visitors; - - /** - * Constructor. - * - * @param Twig_Environment $env A Twig_Environment instance - * @param array $visitors An array of Twig_NodeVisitorInterface instances - */ - public function __construct(Twig_Environment $env, array $visitors = array()) - { - $this->env = $env; - $this->visitors = array(); - foreach ($visitors as $visitor) { - $this->addVisitor($visitor); - } - } - - /** - * Adds a visitor. - * - * @param Twig_NodeVisitorInterface $visitor A Twig_NodeVisitorInterface instance - */ - public function addVisitor(Twig_NodeVisitorInterface $visitor) - { - if (!isset($this->visitors[$visitor->getPriority()])) { - $this->visitors[$visitor->getPriority()] = array(); - } - - $this->visitors[$visitor->getPriority()][] = $visitor; - } - - /** - * Traverses a node and calls the registered visitors. - * - * @param Twig_NodeInterface $node A Twig_NodeInterface instance - */ - public function traverse(Twig_NodeInterface $node) - { - ksort($this->visitors); - foreach ($this->visitors as $visitors) { - foreach ($visitors as $visitor) { - $node = $this->traverseForVisitor($visitor, $node); - } - } - - return $node; - } - - protected function traverseForVisitor(Twig_NodeVisitorInterface $visitor, Twig_NodeInterface $node = null) - { - if (null === $node) { - return null; - } - - $node = $visitor->enterNode($node, $this->env); - - foreach ($node as $k => $n) { - if (false !== $n = $this->traverseForVisitor($visitor, $n)) { - $node->setNode($k, $n); - } else { - $node->removeNode($k); - } - } - - return $visitor->leaveNode($node, $this->env); - } -} diff --git a/lib/Twig/NodeVisitor/Escaper.php b/lib/Twig/NodeVisitor/Escaper.php deleted file mode 100644 index cc4b3d717ad..00000000000 --- a/lib/Twig/NodeVisitor/Escaper.php +++ /dev/null @@ -1,167 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Twig_NodeVisitor_Escaper implements output escaping. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_NodeVisitor_Escaper implements Twig_NodeVisitorInterface -{ - protected $statusStack = array(); - protected $blocks = array(); - protected $safeAnalysis; - protected $traverser; - protected $defaultStrategy = false; - protected $safeVars = array(); - - public function __construct() - { - $this->safeAnalysis = new Twig_NodeVisitor_SafeAnalysis(); - } - - /** - * Called before child nodes are visited. - * - * @param Twig_NodeInterface $node The node to visit - * @param Twig_Environment $env The Twig environment instance - * - * @return Twig_NodeInterface The modified node - */ - public function enterNode(Twig_NodeInterface $node, Twig_Environment $env) - { - if ($node instanceof Twig_Node_Module) { - if ($env->hasExtension('escaper') && $defaultStrategy = $env->getExtension('escaper')->getDefaultStrategy($node->getAttribute('filename'))) { - $this->defaultStrategy = $defaultStrategy; - } - $this->safeVars = array(); - } elseif ($node instanceof Twig_Node_AutoEscape) { - $this->statusStack[] = $node->getAttribute('value'); - } elseif ($node instanceof Twig_Node_Block) { - $this->statusStack[] = isset($this->blocks[$node->getAttribute('name')]) ? $this->blocks[$node->getAttribute('name')] : $this->needEscaping($env); - } elseif ($node instanceof Twig_Node_Import) { - $this->safeVars[] = $node->getNode('var')->getAttribute('name'); - } - - return $node; - } - - /** - * Called after child nodes are visited. - * - * @param Twig_NodeInterface $node The node to visit - * @param Twig_Environment $env The Twig environment instance - * - * @return Twig_NodeInterface The modified node - */ - public function leaveNode(Twig_NodeInterface $node, Twig_Environment $env) - { - if ($node instanceof Twig_Node_Module) { - $this->defaultStrategy = false; - $this->safeVars = array(); - } elseif ($node instanceof Twig_Node_Expression_Filter) { - return $this->preEscapeFilterNode($node, $env); - } elseif ($node instanceof Twig_Node_Print) { - return $this->escapePrintNode($node, $env, $this->needEscaping($env)); - } - - if ($node instanceof Twig_Node_AutoEscape || $node instanceof Twig_Node_Block) { - array_pop($this->statusStack); - } elseif ($node instanceof Twig_Node_BlockReference) { - $this->blocks[$node->getAttribute('name')] = $this->needEscaping($env); - } - - return $node; - } - - protected function escapePrintNode(Twig_Node_Print $node, Twig_Environment $env, $type) - { - if (false === $type) { - return $node; - } - - $expression = $node->getNode('expr'); - - if ($this->isSafeFor($type, $expression, $env)) { - return $node; - } - - $class = get_class($node); - - return new $class( - $this->getEscaperFilter($type, $expression), - $node->getLine() - ); - } - - protected function preEscapeFilterNode(Twig_Node_Expression_Filter $filter, Twig_Environment $env) - { - $name = $filter->getNode('filter')->getAttribute('value'); - - $type = $env->getFilter($name)->getPreEscape(); - if (null === $type) { - return $filter; - } - - $node = $filter->getNode('node'); - if ($this->isSafeFor($type, $node, $env)) { - return $filter; - } - - $filter->setNode('node', $this->getEscaperFilter($type, $node)); - - return $filter; - } - - protected function isSafeFor($type, Twig_NodeInterface $expression, $env) - { - $safe = $this->safeAnalysis->getSafe($expression); - - if (null === $safe) { - if (null === $this->traverser) { - $this->traverser = new Twig_NodeTraverser($env, array($this->safeAnalysis)); - } - - $this->safeAnalysis->setSafeVars($this->safeVars); - - $this->traverser->traverse($expression); - $safe = $this->safeAnalysis->getSafe($expression); - } - - return in_array($type, $safe) || in_array('all', $safe); - } - - protected function needEscaping(Twig_Environment $env) - { - if (count($this->statusStack)) { - return $this->statusStack[count($this->statusStack) - 1]; - } - - return $this->defaultStrategy ? $this->defaultStrategy : false; - } - - protected function getEscaperFilter($type, Twig_NodeInterface $node) - { - $line = $node->getLine(); - $name = new Twig_Node_Expression_Constant('escape', $line); - $args = new Twig_Node(array(new Twig_Node_Expression_Constant((string) $type, $line), new Twig_Node_Expression_Constant(null, $line), new Twig_Node_Expression_Constant(true, $line))); - - return new Twig_Node_Expression_Filter($node, $name, $args, $line); - } - - /** - * {@inheritdoc} - */ - public function getPriority() - { - return 0; - } -} diff --git a/lib/Twig/NodeVisitor/Optimizer.php b/lib/Twig/NodeVisitor/Optimizer.php deleted file mode 100644 index a254def75be..00000000000 --- a/lib/Twig/NodeVisitor/Optimizer.php +++ /dev/null @@ -1,246 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Twig_NodeVisitor_Optimizer tries to optimizes the AST. - * - * This visitor is always the last registered one. - * - * You can configure which optimizations you want to activate via the - * optimizer mode. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_NodeVisitor_Optimizer implements Twig_NodeVisitorInterface -{ - const OPTIMIZE_ALL = -1; - const OPTIMIZE_NONE = 0; - const OPTIMIZE_FOR = 2; - const OPTIMIZE_RAW_FILTER = 4; - const OPTIMIZE_VAR_ACCESS = 8; - - protected $loops = array(); - protected $optimizers; - protected $prependedNodes = array(); - protected $inABody = false; - - /** - * Constructor. - * - * @param integer $optimizers The optimizer mode - */ - public function __construct($optimizers = -1) - { - if (!is_int($optimizers) || $optimizers > 2) { - throw new InvalidArgumentException(sprintf('Optimizer mode "%s" is not valid.', $optimizers)); - } - - $this->optimizers = $optimizers; - } - - /** - * {@inheritdoc} - */ - public function enterNode(Twig_NodeInterface $node, Twig_Environment $env) - { - if (self::OPTIMIZE_FOR === (self::OPTIMIZE_FOR & $this->optimizers)) { - $this->enterOptimizeFor($node, $env); - } - - if (!version_compare(phpversion(), '5.4.0RC1', '>=') && self::OPTIMIZE_VAR_ACCESS === (self::OPTIMIZE_VAR_ACCESS & $this->optimizers) && !$env->isStrictVariables() && !$env->hasExtension('sandbox')) { - if ($this->inABody) { - if (!$node instanceof Twig_Node_Expression) { - if (get_class($node) !== 'Twig_Node') { - array_unshift($this->prependedNodes, array()); - } - } else { - $node = $this->optimizeVariables($node, $env); - } - } elseif ($node instanceof Twig_Node_Body) { - $this->inABody = true; - } - } - - return $node; - } - - /** - * {@inheritdoc} - */ - public function leaveNode(Twig_NodeInterface $node, Twig_Environment $env) - { - $expression = $node instanceof Twig_Node_Expression; - - if (self::OPTIMIZE_FOR === (self::OPTIMIZE_FOR & $this->optimizers)) { - $this->leaveOptimizeFor($node, $env); - } - - if (self::OPTIMIZE_RAW_FILTER === (self::OPTIMIZE_RAW_FILTER & $this->optimizers)) { - $node = $this->optimizeRawFilter($node, $env); - } - - $node = $this->optimizePrintNode($node, $env); - - if (self::OPTIMIZE_VAR_ACCESS === (self::OPTIMIZE_VAR_ACCESS & $this->optimizers) && !$env->isStrictVariables() && !$env->hasExtension('sandbox')) { - if ($node instanceof Twig_Node_Body) { - $this->inABody = false; - } elseif ($this->inABody) { - if (!$expression && get_class($node) !== 'Twig_Node' && $prependedNodes = array_shift($this->prependedNodes)) { - $nodes = array(); - foreach (array_unique($prependedNodes) as $name) { - $nodes[] = new Twig_Node_SetTemp($name, $node->getLine()); - } - - $nodes[] = $node; - $node = new Twig_Node($nodes); - } - } - } - - return $node; - } - - protected function optimizeVariables($node, $env) - { - if ('Twig_Node_Expression_Name' === get_class($node) && $node->isSimple()) { - $this->prependedNodes[0][] = $node->getAttribute('name'); - - return new Twig_Node_Expression_TempName($node->getAttribute('name'), $node->getLine()); - } - - return $node; - } - - /** - * Optimizes print nodes. - * - * It replaces: - * - * * "echo $this->render(Parent)Block()" with "$this->display(Parent)Block()" - * - * @param Twig_NodeInterface $node A Node - * @param Twig_Environment $env The current Twig environment - */ - protected function optimizePrintNode($node, $env) - { - if (!$node instanceof Twig_Node_Print) { - return $node; - } - - if ( - $node->getNode('expr') instanceof Twig_Node_Expression_BlockReference || - $node->getNode('expr') instanceof Twig_Node_Expression_Parent - ) { - $node->getNode('expr')->setAttribute('output', true); - - return $node->getNode('expr'); - } - - return $node; - } - - /** - * Removes "raw" filters. - * - * @param Twig_NodeInterface $node A Node - * @param Twig_Environment $env The current Twig environment - */ - protected function optimizeRawFilter($node, $env) - { - if ($node instanceof Twig_Node_Expression_Filter && 'raw' == $node->getNode('filter')->getAttribute('value')) { - return $node->getNode('node'); - } - - return $node; - } - - /** - * Optimizes "for" tag by removing the "loop" variable creation whenever possible. - * - * @param Twig_NodeInterface $node A Node - * @param Twig_Environment $env The current Twig environment - */ - protected function enterOptimizeFor($node, $env) - { - if ($node instanceof Twig_Node_For) { - // disable the loop variable by default - $node->setAttribute('with_loop', false); - array_unshift($this->loops, $node); - } elseif (!$this->loops) { - // we are outside a loop - return; - } - - // when do we need to add the loop variable back? - - // the loop variable is referenced for the current loop - elseif ($node instanceof Twig_Node_Expression_Name && 'loop' === $node->getAttribute('name')) { - $this->addLoopToCurrent(); - } - - // block reference - elseif ($node instanceof Twig_Node_BlockReference || $node instanceof Twig_Node_Expression_BlockReference) { - $this->addLoopToCurrent(); - } - - // include without the only attribute - elseif ($node instanceof Twig_Node_Include && !$node->getAttribute('only')) { - $this->addLoopToAll(); - } - - // the loop variable is referenced via an attribute - elseif ($node instanceof Twig_Node_Expression_GetAttr - && (!$node->getNode('attribute') instanceof Twig_Node_Expression_Constant - || 'parent' === $node->getNode('attribute')->getAttribute('value') - ) - && (true === $this->loops[0]->getAttribute('with_loop') - || ($node->getNode('node') instanceof Twig_Node_Expression_Name - && 'loop' === $node->getNode('node')->getAttribute('name') - ) - ) - ) { - $this->addLoopToAll(); - } - } - - /** - * Optimizes "for" tag by removing the "loop" variable creation whenever possible. - * - * @param Twig_NodeInterface $node A Node - * @param Twig_Environment $env The current Twig environment - */ - protected function leaveOptimizeFor($node, $env) - { - if ($node instanceof Twig_Node_For) { - array_shift($this->loops); - } - } - - protected function addLoopToCurrent() - { - $this->loops[0]->setAttribute('with_loop', true); - } - - protected function addLoopToAll() - { - foreach ($this->loops as $loop) { - $loop->setAttribute('with_loop', true); - } - } - - /** - * {@inheritdoc} - */ - public function getPriority() - { - return 255; - } -} diff --git a/lib/Twig/NodeVisitor/SafeAnalysis.php b/lib/Twig/NodeVisitor/SafeAnalysis.php deleted file mode 100644 index 7dc65c0e688..00000000000 --- a/lib/Twig/NodeVisitor/SafeAnalysis.php +++ /dev/null @@ -1,133 +0,0 @@ -<?php - -class Twig_NodeVisitor_SafeAnalysis implements Twig_NodeVisitorInterface -{ - protected $data = array(); - protected $safeVars = array(); - - public function setSafeVars($safeVars) - { - $this->safeVars = $safeVars; - } - - public function getSafe(Twig_NodeInterface $node) - { - $hash = spl_object_hash($node); - if (isset($this->data[$hash])) { - foreach ($this->data[$hash] as $bucket) { - if ($bucket['key'] === $node) { - return $bucket['value']; - } - } - } - - return null; - } - - protected function setSafe(Twig_NodeInterface $node, array $safe) - { - $hash = spl_object_hash($node); - if (isset($this->data[$hash])) { - foreach ($this->data[$hash] as &$bucket) { - if ($bucket['key'] === $node) { - $bucket['value'] = $safe; - - return; - } - } - } - $this->data[$hash][] = array( - 'key' => $node, - 'value' => $safe, - ); - } - - public function enterNode(Twig_NodeInterface $node, Twig_Environment $env) - { - return $node; - } - - public function leaveNode(Twig_NodeInterface $node, Twig_Environment $env) - { - if ($node instanceof Twig_Node_Expression_Constant) { - // constants are marked safe for all - $this->setSafe($node, array('all')); - } elseif ($node instanceof Twig_Node_Expression_BlockReference) { - // blocks are safe by definition - $this->setSafe($node, array('all')); - } elseif ($node instanceof Twig_Node_Expression_Parent) { - // parent block is safe by definition - $this->setSafe($node, array('all')); - } elseif ($node instanceof Twig_Node_Expression_Conditional) { - // intersect safeness of both operands - $safe = $this->intersectSafe($this->getSafe($node->getNode('expr2')), $this->getSafe($node->getNode('expr3'))); - $this->setSafe($node, $safe); - } elseif ($node instanceof Twig_Node_Expression_Filter) { - // filter expression is safe when the filter is safe - $name = $node->getNode('filter')->getAttribute('value'); - $args = $node->getNode('arguments'); - if (false !== $filter = $env->getFilter($name)) { - $safe = $filter->getSafe($args); - if (null === $safe) { - $safe = $this->intersectSafe($this->getSafe($node->getNode('node')), $filter->getPreservesSafety()); - } - $this->setSafe($node, $safe); - } else { - $this->setSafe($node, array()); - } - } elseif ($node instanceof Twig_Node_Expression_Function) { - // function expression is safe when the function is safe - $name = $node->getAttribute('name'); - $args = $node->getNode('arguments'); - $function = $env->getFunction($name); - if (false !== $function) { - $this->setSafe($node, $function->getSafe($args)); - } else { - $this->setSafe($node, array()); - } - } elseif ($node instanceof Twig_Node_Expression_MethodCall) { - if ($node->getAttribute('safe')) { - $this->setSafe($node, array('all')); - } else { - $this->setSafe($node, array()); - } - } elseif ($node instanceof Twig_Node_Expression_GetAttr && $node->getNode('node') instanceof Twig_Node_Expression_Name) { - $name = $node->getNode('node')->getAttribute('name'); - // attributes on template instances are safe - if ('_self' == $name || in_array($name, $this->safeVars)) { - $this->setSafe($node, array('all')); - } else { - $this->setSafe($node, array()); - } - } else { - $this->setSafe($node, array()); - } - - return $node; - } - - protected function intersectSafe(array $a = null, array $b = null) - { - if (null === $a || null === $b) { - return array(); - } - - if (in_array('all', $a)) { - return $b; - } - - if (in_array('all', $b)) { - return $a; - } - - return array_intersect($a, $b); - } - - /** - * {@inheritdoc} - */ - public function getPriority() - { - return 0; - } -} diff --git a/lib/Twig/NodeVisitor/Sandbox.php b/lib/Twig/NodeVisitor/Sandbox.php deleted file mode 100644 index fb27045baaf..00000000000 --- a/lib/Twig/NodeVisitor/Sandbox.php +++ /dev/null @@ -1,92 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Twig_NodeVisitor_Sandbox implements sandboxing. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_NodeVisitor_Sandbox implements Twig_NodeVisitorInterface -{ - protected $inAModule = false; - protected $tags; - protected $filters; - protected $functions; - - /** - * Called before child nodes are visited. - * - * @param Twig_NodeInterface $node The node to visit - * @param Twig_Environment $env The Twig environment instance - * - * @return Twig_NodeInterface The modified node - */ - public function enterNode(Twig_NodeInterface $node, Twig_Environment $env) - { - if ($node instanceof Twig_Node_Module) { - $this->inAModule = true; - $this->tags = array(); - $this->filters = array(); - $this->functions = array(); - - return $node; - } elseif ($this->inAModule) { - // look for tags - if ($node->getNodeTag()) { - $this->tags[] = $node->getNodeTag(); - } - - // look for filters - if ($node instanceof Twig_Node_Expression_Filter) { - $this->filters[] = $node->getNode('filter')->getAttribute('value'); - } - - // look for functions - if ($node instanceof Twig_Node_Expression_Function) { - $this->functions[] = $node->getAttribute('name'); - } - - // wrap print to check __toString() calls - if ($node instanceof Twig_Node_Print) { - return new Twig_Node_SandboxedPrint($node->getNode('expr'), $node->getLine(), $node->getNodeTag()); - } - } - - return $node; - } - - /** - * Called after child nodes are visited. - * - * @param Twig_NodeInterface $node The node to visit - * @param Twig_Environment $env The Twig environment instance - * - * @return Twig_NodeInterface The modified node - */ - public function leaveNode(Twig_NodeInterface $node, Twig_Environment $env) - { - if ($node instanceof Twig_Node_Module) { - $this->inAModule = false; - - return new Twig_Node_SandboxedModule($node, array_unique($this->filters), array_unique($this->tags), array_unique($this->functions)); - } - - return $node; - } - - /** - * {@inheritdoc} - */ - public function getPriority() - { - return 0; - } -} diff --git a/lib/Twig/NodeVisitorInterface.php b/lib/Twig/NodeVisitorInterface.php deleted file mode 100644 index f33c13fc226..00000000000 --- a/lib/Twig/NodeVisitorInterface.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Twig_NodeVisitorInterface is the interface the all node visitor classes must implement. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -interface Twig_NodeVisitorInterface -{ - /** - * Called before child nodes are visited. - * - * @param Twig_NodeInterface $node The node to visit - * @param Twig_Environment $env The Twig environment instance - * - * @return Twig_NodeInterface The modified node - */ - public function enterNode(Twig_NodeInterface $node, Twig_Environment $env); - - /** - * Called after child nodes are visited. - * - * @param Twig_NodeInterface $node The node to visit - * @param Twig_Environment $env The Twig environment instance - * - * @return Twig_NodeInterface|false The modified node or false if the node must be removed - */ - public function leaveNode(Twig_NodeInterface $node, Twig_Environment $env); - - /** - * Returns the priority for this visitor. - * - * Priority should be between -10 and 10 (0 is the default). - * - * @return integer The priority level - */ - public function getPriority(); -} diff --git a/lib/Twig/Parser.php b/lib/Twig/Parser.php deleted file mode 100644 index 958e46b3dfa..00000000000 --- a/lib/Twig/Parser.php +++ /dev/null @@ -1,394 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Default parser implementation. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Parser implements Twig_ParserInterface -{ - protected $stack = array(); - protected $stream; - protected $parent; - protected $handlers; - protected $visitors; - protected $expressionParser; - protected $blocks; - protected $blockStack; - protected $macros; - protected $env; - protected $reservedMacroNames; - protected $importedSymbols; - protected $traits; - protected $embeddedTemplates = array(); - - /** - * Constructor. - * - * @param Twig_Environment $env A Twig_Environment instance - */ - public function __construct(Twig_Environment $env) - { - $this->env = $env; - } - - public function getEnvironment() - { - return $this->env; - } - - public function getVarName() - { - return sprintf('__internal_%s', hash('sha1', uniqid(mt_rand(), true), false)); - } - - public function getFilename() - { - return $this->stream->getFilename(); - } - - /** - * Converts a token stream to a node tree. - * - * @param Twig_TokenStream $stream A token stream instance - * - * @return Twig_Node_Module A node tree - */ - public function parse(Twig_TokenStream $stream, $test = null, $dropNeedle = false) - { - // push all variables into the stack to keep the current state of the parser - $vars = get_object_vars($this); - unset($vars['stack'], $vars['env'], $vars['handlers'], $vars['visitors'], $vars['expressionParser']); - $this->stack[] = $vars; - - // tag handlers - if (null === $this->handlers) { - $this->handlers = $this->env->getTokenParsers(); - $this->handlers->setParser($this); - } - - // node visitors - if (null === $this->visitors) { - $this->visitors = $this->env->getNodeVisitors(); - } - - if (null === $this->expressionParser) { - $this->expressionParser = new Twig_ExpressionParser($this, $this->env->getUnaryOperators(), $this->env->getBinaryOperators()); - } - - $this->stream = $stream; - $this->parent = null; - $this->blocks = array(); - $this->macros = array(); - $this->traits = array(); - $this->blockStack = array(); - $this->importedSymbols = array(array()); - $this->embeddedTemplates = array(); - - try { - $body = $this->subparse($test, $dropNeedle); - - if (null !== $this->parent) { - if (null === $body = $this->filterBodyNodes($body)) { - $body = new Twig_Node(); - } - } - } catch (Twig_Error_Syntax $e) { - if (!$e->getTemplateFile()) { - $e->setTemplateFile($this->getFilename()); - } - - if (!$e->getTemplateLine()) { - $e->setTemplateLine($this->stream->getCurrent()->getLine()); - } - - throw $e; - } - - $node = new Twig_Node_Module(new Twig_Node_Body(array($body)), $this->parent, new Twig_Node($this->blocks), new Twig_Node($this->macros), new Twig_Node($this->traits), $this->embeddedTemplates, $this->getFilename()); - - $traverser = new Twig_NodeTraverser($this->env, $this->visitors); - - $node = $traverser->traverse($node); - - // restore previous stack so previous parse() call can resume working - foreach (array_pop($this->stack) as $key => $val) { - $this->$key = $val; - } - - return $node; - } - - public function subparse($test, $dropNeedle = false) - { - $lineno = $this->getCurrentToken()->getLine(); - $rv = array(); - while (!$this->stream->isEOF()) { - switch ($this->getCurrentToken()->getType()) { - case Twig_Token::TEXT_TYPE: - $token = $this->stream->next(); - $rv[] = new Twig_Node_Text($token->getValue(), $token->getLine()); - break; - - case Twig_Token::VAR_START_TYPE: - $token = $this->stream->next(); - $expr = $this->expressionParser->parseExpression(); - $this->stream->expect(Twig_Token::VAR_END_TYPE); - $rv[] = new Twig_Node_Print($expr, $token->getLine()); - break; - - case Twig_Token::BLOCK_START_TYPE: - $this->stream->next(); - $token = $this->getCurrentToken(); - - if ($token->getType() !== Twig_Token::NAME_TYPE) { - throw new Twig_Error_Syntax('A block must start with a tag name', $token->getLine(), $this->getFilename()); - } - - if (null !== $test && call_user_func($test, $token)) { - if ($dropNeedle) { - $this->stream->next(); - } - - if (1 === count($rv)) { - return $rv[0]; - } - - return new Twig_Node($rv, array(), $lineno); - } - - $subparser = $this->handlers->getTokenParser($token->getValue()); - if (null === $subparser) { - if (null !== $test) { - $error = sprintf('Unexpected tag name "%s"', $token->getValue()); - if (is_array($test) && isset($test[0]) && $test[0] instanceof Twig_TokenParserInterface) { - $error .= sprintf(' (expecting closing tag for the "%s" tag defined near line %s)', $test[0]->getTag(), $lineno); - } - - throw new Twig_Error_Syntax($error, $token->getLine(), $this->getFilename()); - } - - $message = sprintf('Unknown tag name "%s"', $token->getValue()); - if ($alternatives = $this->env->computeAlternatives($token->getValue(), array_keys($this->env->getTags()))) { - $message = sprintf('%s. Did you mean "%s"', $message, implode('", "', $alternatives)); - } - - throw new Twig_Error_Syntax($message, $token->getLine(), $this->getFilename()); - } - - $this->stream->next(); - - $node = $subparser->parse($token); - if (null !== $node) { - $rv[] = $node; - } - break; - - default: - throw new Twig_Error_Syntax('Lexer or parser ended up in unsupported state.', 0, $this->getFilename()); - } - } - - if (1 === count($rv)) { - return $rv[0]; - } - - return new Twig_Node($rv, array(), $lineno); - } - - public function addHandler($name, $class) - { - $this->handlers[$name] = $class; - } - - public function addNodeVisitor(Twig_NodeVisitorInterface $visitor) - { - $this->visitors[] = $visitor; - } - - public function getBlockStack() - { - return $this->blockStack; - } - - public function peekBlockStack() - { - return $this->blockStack[count($this->blockStack) - 1]; - } - - public function popBlockStack() - { - array_pop($this->blockStack); - } - - public function pushBlockStack($name) - { - $this->blockStack[] = $name; - } - - public function hasBlock($name) - { - return isset($this->blocks[$name]); - } - - public function getBlock($name) - { - return $this->blocks[$name]; - } - - public function setBlock($name, $value) - { - $this->blocks[$name] = new Twig_Node_Body(array($value), array(), $value->getLine()); - } - - public function hasMacro($name) - { - return isset($this->macros[$name]); - } - - public function setMacro($name, Twig_Node_Macro $node) - { - if (null === $this->reservedMacroNames) { - $this->reservedMacroNames = array(); - $r = new ReflectionClass($this->env->getBaseTemplateClass()); - foreach ($r->getMethods() as $method) { - $this->reservedMacroNames[] = $method->getName(); - } - } - - if (in_array($name, $this->reservedMacroNames)) { - throw new Twig_Error_Syntax(sprintf('"%s" cannot be used as a macro name as it is a reserved keyword', $name), $node->getLine(), $this->getFilename()); - } - - $this->macros[$name] = $node; - } - - public function addTrait($trait) - { - $this->traits[] = $trait; - } - - public function hasTraits() - { - return count($this->traits) > 0; - } - - public function embedTemplate(Twig_Node_Module $template) - { - $template->setIndex(mt_rand()); - - $this->embeddedTemplates[] = $template; - } - - public function addImportedSymbol($type, $alias, $name = null, Twig_Node_Expression $node = null) - { - $this->importedSymbols[0][$type][$alias] = array('name' => $name, 'node' => $node); - } - - public function getImportedSymbol($type, $alias) - { - foreach ($this->importedSymbols as $functions) { - if (isset($functions[$type][$alias])) { - return $functions[$type][$alias]; - } - } - } - - public function isMainScope() - { - return 1 === count($this->importedSymbols); - } - - public function pushLocalScope() - { - array_unshift($this->importedSymbols, array()); - } - - public function popLocalScope() - { - array_shift($this->importedSymbols); - } - - /** - * Gets the expression parser. - * - * @return Twig_ExpressionParser The expression parser - */ - public function getExpressionParser() - { - return $this->expressionParser; - } - - public function getParent() - { - return $this->parent; - } - - public function setParent($parent) - { - $this->parent = $parent; - } - - /** - * Gets the token stream. - * - * @return Twig_TokenStream The token stream - */ - public function getStream() - { - return $this->stream; - } - - /** - * Gets the current token. - * - * @return Twig_Token The current token - */ - public function getCurrentToken() - { - return $this->stream->getCurrent(); - } - - protected function filterBodyNodes(Twig_NodeInterface $node) - { - // check that the body does not contain non-empty output nodes - if ( - ($node instanceof Twig_Node_Text && !ctype_space($node->getAttribute('data'))) - || - (!$node instanceof Twig_Node_Text && !$node instanceof Twig_Node_BlockReference && $node instanceof Twig_NodeOutputInterface) - ) { - if (false !== strpos((string) $node, chr(0xEF).chr(0xBB).chr(0xBF))) { - throw new Twig_Error_Syntax('A template that extends another one cannot have a body but a byte order mark (BOM) has been detected; it must be removed.', $node->getLine(), $this->getFilename()); - } - - throw new Twig_Error_Syntax('A template that extends another one cannot have a body.', $node->getLine(), $this->getFilename()); - } - - // bypass "set" nodes as they "capture" the output - if ($node instanceof Twig_Node_Set) { - return $node; - } - - if ($node instanceof Twig_NodeOutputInterface) { - return; - } - - foreach ($node as $k => $n) { - if (null !== $n && null === $n = $this->filterBodyNodes($n)) { - $node->removeNode($k); - } - } - - return $node; - } -} diff --git a/lib/Twig/ParserInterface.php b/lib/Twig/ParserInterface.php deleted file mode 100644 index f0d790097ec..00000000000 --- a/lib/Twig/ParserInterface.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Interface implemented by parser classes. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -interface Twig_ParserInterface -{ - /** - * Converts a token stream to a node tree. - * - * @param Twig_TokenStream $stream A token stream instance - * - * @return Twig_Node_Module A node tree - */ - public function parse(Twig_TokenStream $stream); -} diff --git a/lib/Twig/Sandbox/SecurityError.php b/lib/Twig/Sandbox/SecurityError.php deleted file mode 100644 index 015bfaea22b..00000000000 --- a/lib/Twig/Sandbox/SecurityError.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Exception thrown when a security error occurs at runtime. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Sandbox_SecurityError extends Twig_Error -{ -} diff --git a/lib/Twig/Sandbox/SecurityPolicy.php b/lib/Twig/Sandbox/SecurityPolicy.php deleted file mode 100644 index 66ee233200b..00000000000 --- a/lib/Twig/Sandbox/SecurityPolicy.php +++ /dev/null @@ -1,119 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a security policy which need to be enforced when sandbox mode is enabled. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Sandbox_SecurityPolicy implements Twig_Sandbox_SecurityPolicyInterface -{ - protected $allowedTags; - protected $allowedFilters; - protected $allowedMethods; - protected $allowedProperties; - protected $allowedFunctions; - - public function __construct(array $allowedTags = array(), array $allowedFilters = array(), array $allowedMethods = array(), array $allowedProperties = array(), array $allowedFunctions = array()) - { - $this->allowedTags = $allowedTags; - $this->allowedFilters = $allowedFilters; - $this->setAllowedMethods($allowedMethods); - $this->allowedProperties = $allowedProperties; - $this->allowedFunctions = $allowedFunctions; - } - - public function setAllowedTags(array $tags) - { - $this->allowedTags = $tags; - } - - public function setAllowedFilters(array $filters) - { - $this->allowedFilters = $filters; - } - - public function setAllowedMethods(array $methods) - { - $this->allowedMethods = array(); - foreach ($methods as $class => $m) { - $this->allowedMethods[$class] = array_map('strtolower', is_array($m) ? $m : array($m)); - } - } - - public function setAllowedProperties(array $properties) - { - $this->allowedProperties = $properties; - } - - public function setAllowedFunctions(array $functions) - { - $this->allowedFunctions = $functions; - } - - public function checkSecurity($tags, $filters, $functions) - { - foreach ($tags as $tag) { - if (!in_array($tag, $this->allowedTags)) { - throw new Twig_Sandbox_SecurityError(sprintf('Tag "%s" is not allowed.', $tag)); - } - } - - foreach ($filters as $filter) { - if (!in_array($filter, $this->allowedFilters)) { - throw new Twig_Sandbox_SecurityError(sprintf('Filter "%s" is not allowed.', $filter)); - } - } - - foreach ($functions as $function) { - if (!in_array($function, $this->allowedFunctions)) { - throw new Twig_Sandbox_SecurityError(sprintf('Function "%s" is not allowed.', $function)); - } - } - } - - public function checkMethodAllowed($obj, $method) - { - if ($obj instanceof Twig_TemplateInterface || $obj instanceof Twig_Markup) { - return true; - } - - $allowed = false; - $method = strtolower($method); - foreach ($this->allowedMethods as $class => $methods) { - if ($obj instanceof $class) { - $allowed = in_array($method, $methods); - - break; - } - } - - if (!$allowed) { - throw new Twig_Sandbox_SecurityError(sprintf('Calling "%s" method on a "%s" object is not allowed.', $method, get_class($obj))); - } - } - - public function checkPropertyAllowed($obj, $property) - { - $allowed = false; - foreach ($this->allowedProperties as $class => $properties) { - if ($obj instanceof $class) { - $allowed = in_array($property, is_array($properties) ? $properties : array($properties)); - - break; - } - } - - if (!$allowed) { - throw new Twig_Sandbox_SecurityError(sprintf('Calling "%s" property on a "%s" object is not allowed.', $property, get_class($obj))); - } - } -} diff --git a/lib/Twig/Sandbox/SecurityPolicyInterface.php b/lib/Twig/Sandbox/SecurityPolicyInterface.php deleted file mode 100644 index 6ab48e3cc98..00000000000 --- a/lib/Twig/Sandbox/SecurityPolicyInterface.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Interfaces that all security policy classes must implements. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -interface Twig_Sandbox_SecurityPolicyInterface -{ - public function checkSecurity($tags, $filters, $functions); - - public function checkMethodAllowed($obj, $method); - - public function checkPropertyAllowed($obj, $method); -} diff --git a/lib/Twig/SimpleFilter.php b/lib/Twig/SimpleFilter.php deleted file mode 100644 index a6bf60f80c5..00000000000 --- a/lib/Twig/SimpleFilter.php +++ /dev/null @@ -1,96 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009-2012 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a template filter. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_SimpleFilter -{ - protected $name; - protected $callable; - protected $options; - protected $arguments = array(); - - public function __construct($name, $callable, array $options = array()) - { - $this->name = $name; - $this->callable = $callable; - $this->options = array_merge(array( - 'needs_environment' => false, - 'needs_context' => false, - 'is_safe' => null, - 'is_safe_callback' => null, - 'pre_escape' => null, - 'preserves_safety' => null, - 'node_class' => 'Twig_Node_Expression_Filter', - ), $options); - } - - public function getName() - { - return $this->name; - } - - public function getCallable() - { - return $this->callable; - } - - public function getNodeClass() - { - return $this->options['node_class']; - } - - public function setArguments($arguments) - { - $this->arguments = $arguments; - } - - public function getArguments() - { - return $this->arguments; - } - - public function needsEnvironment() - { - return $this->options['needs_environment']; - } - - public function needsContext() - { - return $this->options['needs_context']; - } - - public function getSafe(Twig_Node $filterArgs) - { - if (null !== $this->options['is_safe']) { - return $this->options['is_safe']; - } - - if (null !== $this->options['is_safe_callback']) { - return call_user_func($this->options['is_safe_callback'], $filterArgs); - } - - return null; - } - - public function getPreservesSafety() - { - return $this->options['preserves_safety']; - } - - public function getPreEscape() - { - return $this->options['pre_escape']; - } -} diff --git a/lib/Twig/SimpleFunction.php b/lib/Twig/SimpleFunction.php deleted file mode 100644 index 8ef6aca2ff5..00000000000 --- a/lib/Twig/SimpleFunction.php +++ /dev/null @@ -1,84 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010-2012 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a template function. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_SimpleFunction -{ - protected $name; - protected $callable; - protected $options; - protected $arguments = array(); - - public function __construct($name, $callable, array $options = array()) - { - $this->name = $name; - $this->callable = $callable; - $this->options = array_merge(array( - 'needs_environment' => false, - 'needs_context' => false, - 'is_safe' => null, - 'is_safe_callback' => null, - 'node_class' => 'Twig_Node_Expression_Function', - ), $options); - } - - public function getName() - { - return $this->name; - } - - public function getCallable() - { - return $this->callable; - } - - public function getNodeClass() - { - return $this->options['node_class']; - } - - public function setArguments($arguments) - { - $this->arguments = $arguments; - } - - public function getArguments() - { - return $this->arguments; - } - - public function needsEnvironment() - { - return $this->options['needs_environment']; - } - - public function needsContext() - { - return $this->options['needs_context']; - } - - public function getSafe(Twig_Node $functionArgs) - { - if (null !== $this->options['is_safe']) { - return $this->options['is_safe']; - } - - if (null !== $this->options['is_safe_callback']) { - return call_user_func($this->options['is_safe_callback'], $functionArgs); - } - - return array(); - } -} diff --git a/lib/Twig/SimpleTest.php b/lib/Twig/SimpleTest.php deleted file mode 100644 index 225459c9f12..00000000000 --- a/lib/Twig/SimpleTest.php +++ /dev/null @@ -1,46 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010-2012 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a template test. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_SimpleTest -{ - protected $name; - protected $callable; - protected $options; - - public function __construct($name, $callable, array $options = array()) - { - $this->name = $name; - $this->callable = $callable; - $this->options = array_merge(array( - 'node_class' => 'Twig_Node_Expression_Test', - ), $options); - } - - public function getName() - { - return $this->name; - } - - public function getCallable() - { - return $this->callable; - } - - public function getNodeClass() - { - return $this->options['node_class']; - } -} diff --git a/lib/Twig/Template.php b/lib/Twig/Template.php deleted file mode 100644 index a001ca03706..00000000000 --- a/lib/Twig/Template.php +++ /dev/null @@ -1,455 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Default base class for compiled templates. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -abstract class Twig_Template implements Twig_TemplateInterface -{ - protected static $cache = array(); - - protected $parent; - protected $parents; - protected $env; - protected $blocks; - protected $traits; - - /** - * Constructor. - * - * @param Twig_Environment $env A Twig_Environment instance - */ - public function __construct(Twig_Environment $env) - { - $this->env = $env; - $this->blocks = array(); - $this->traits = array(); - } - - /** - * Returns the template name. - * - * @return string The template name - */ - abstract public function getTemplateName(); - - /** - * {@inheritdoc} - */ - public function getEnvironment() - { - return $this->env; - } - - /** - * Returns the parent template. - * - * This method is for internal use only and should never be called - * directly. - * - * @return Twig_TemplateInterface|false The parent template or false if there is no parent - */ - public function getParent(array $context) - { - if (null !== $this->parent) { - return $this->parent; - } - - $parent = $this->doGetParent($context); - if (false === $parent) { - return false; - } elseif ($parent instanceof Twig_Template) { - $name = $parent->getTemplateName(); - $this->parents[$name] = $parent; - $parent = $name; - } elseif (!isset($this->parents[$parent])) { - $this->parents[$parent] = $this->env->loadTemplate($parent); - } - - return $this->parents[$parent]; - } - - protected function doGetParent(array $context) - { - return false; - } - - public function isTraitable() - { - return true; - } - - /** - * Displays a parent block. - * - * This method is for internal use only and should never be called - * directly. - * - * @param string $name The block name to display from the parent - * @param array $context The context - * @param array $blocks The current set of blocks - */ - public function displayParentBlock($name, array $context, array $blocks = array()) - { - $name = (string) $name; - - if (isset($this->traits[$name])) { - $this->traits[$name][0]->displayBlock($name, $context, $blocks); - } elseif (false !== $parent = $this->getParent($context)) { - $parent->displayBlock($name, $context, $blocks); - } else { - throw new Twig_Error_Runtime(sprintf('The template has no parent and no traits defining the "%s" block', $name), -1, $this->getTemplateName()); - } - } - - /** - * Displays a block. - * - * This method is for internal use only and should never be called - * directly. - * - * @param string $name The block name to display - * @param array $context The context - * @param array $blocks The current set of blocks - */ - public function displayBlock($name, array $context, array $blocks = array()) - { - $name = (string) $name; - - if (isset($blocks[$name])) { - $b = $blocks; - unset($b[$name]); - call_user_func($blocks[$name], $context, $b); - } elseif (isset($this->blocks[$name])) { - call_user_func($this->blocks[$name], $context, $blocks); - } elseif (false !== $parent = $this->getParent($context)) { - $parent->displayBlock($name, $context, array_merge($this->blocks, $blocks)); - } - } - - /** - * Renders a parent block. - * - * This method is for internal use only and should never be called - * directly. - * - * @param string $name The block name to render from the parent - * @param array $context The context - * @param array $blocks The current set of blocks - * - * @return string The rendered block - */ - public function renderParentBlock($name, array $context, array $blocks = array()) - { - ob_start(); - $this->displayParentBlock($name, $context, $blocks); - - return ob_get_clean(); - } - - /** - * Renders a block. - * - * This method is for internal use only and should never be called - * directly. - * - * @param string $name The block name to render - * @param array $context The context - * @param array $blocks The current set of blocks - * - * @return string The rendered block - */ - public function renderBlock($name, array $context, array $blocks = array()) - { - ob_start(); - $this->displayBlock($name, $context, $blocks); - - return ob_get_clean(); - } - - /** - * Returns whether a block exists or not. - * - * This method is for internal use only and should never be called - * directly. - * - * This method does only return blocks defined in the current template - * or defined in "used" traits. - * - * It does not return blocks from parent templates as the parent - * template name can be dynamic, which is only known based on the - * current context. - * - * @param string $name The block name - * - * @return Boolean true if the block exists, false otherwise - */ - public function hasBlock($name) - { - return isset($this->blocks[(string) $name]); - } - - /** - * Returns all block names. - * - * This method is for internal use only and should never be called - * directly. - * - * @return array An array of block names - * - * @see hasBlock - */ - public function getBlockNames() - { - return array_keys($this->blocks); - } - - /** - * Returns all blocks. - * - * This method is for internal use only and should never be called - * directly. - * - * @return array An array of blocks - * - * @see hasBlock - */ - public function getBlocks() - { - return $this->blocks; - } - - /** - * {@inheritdoc} - */ - public function display(array $context, array $blocks = array()) - { - $this->displayWithErrorHandling($this->env->mergeGlobals($context), $blocks); - } - - /** - * {@inheritdoc} - */ - public function render(array $context) - { - $level = ob_get_level(); - ob_start(); - try { - $this->display($context); - } catch (Exception $e) { - while (ob_get_level() > $level) { - ob_end_clean(); - } - - throw $e; - } - - return ob_get_clean(); - } - - protected function displayWithErrorHandling(array $context, array $blocks = array()) - { - try { - $this->doDisplay($context, $blocks); - } catch (Twig_Error $e) { - if (!$e->getTemplateFile()) { - $e->setTemplateFile($this->getTemplateName()); - } - - // this is mostly useful for Twig_Error_Loader exceptions - // see Twig_Error_Loader - if (false === $e->getTemplateLine()) { - $e->setTemplateLine(-1); - $e->guess(); - } - - throw $e; - } catch (Exception $e) { - throw new Twig_Error_Runtime(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, null, $e); - } - } - - /** - * Auto-generated method to display the template with the given context. - * - * @param array $context An array of parameters to pass to the template - * @param array $blocks An array of blocks to pass to the template - */ - abstract protected function doDisplay(array $context, array $blocks = array()); - - /** - * Returns a variable from the context. - * - * This method is for internal use only and should never be called - * directly. - * - * This method should not be overridden in a sub-class as this is an - * implementation detail that has been introduced to optimize variable - * access for versions of PHP before 5.4. This is not a way to override - * the way to get a variable value. - * - * @param array $context The context - * @param string $item The variable to return from the context - * @param Boolean $ignoreStrictCheck Whether to ignore the strict variable check or not - * - * @return The content of the context variable - * - * @throws Twig_Error_Runtime if the variable does not exist and Twig is running in strict mode - */ - final protected function getContext($context, $item, $ignoreStrictCheck = false) - { - if (!array_key_exists($item, $context)) { - if ($ignoreStrictCheck || !$this->env->isStrictVariables()) { - return null; - } - - throw new Twig_Error_Runtime(sprintf('Variable "%s" does not exist', $item), -1, $this->getTemplateName()); - } - - return $context[$item]; - } - - /** - * Returns the attribute value for a given array/object. - * - * @param mixed $object The object or array from where to get the item - * @param mixed $item The item to get from the array or object - * @param array $arguments An array of arguments to pass if the item is an object method - * @param string $type The type of attribute (@see Twig_TemplateInterface) - * @param Boolean $isDefinedTest Whether this is only a defined check - * @param Boolean $ignoreStrictCheck Whether to ignore the strict attribute check or not - * - * @return mixed The attribute value, or a Boolean when $isDefinedTest is true, or null when the attribute is not set and $ignoreStrictCheck is true - * - * @throws Twig_Error_Runtime if the attribute does not exist and Twig is running in strict mode and $isDefinedTest is false - */ - protected function getAttribute($object, $item, array $arguments = array(), $type = Twig_TemplateInterface::ANY_CALL, $isDefinedTest = false, $ignoreStrictCheck = false) - { - // array - if (Twig_TemplateInterface::METHOD_CALL !== $type) { - $arrayItem = is_bool($item) || is_float($item) ? (int) $item : $item; - - if ((is_array($object) && array_key_exists($arrayItem, $object)) - || ($object instanceof ArrayAccess && isset($object[$arrayItem])) - ) { - if ($isDefinedTest) { - return true; - } - - return $object[$arrayItem]; - } - - if (Twig_TemplateInterface::ARRAY_CALL === $type || !is_object($object)) { - if ($isDefinedTest) { - return false; - } - - if ($ignoreStrictCheck || !$this->env->isStrictVariables()) { - return null; - } - - if (is_object($object)) { - throw new Twig_Error_Runtime(sprintf('Key "%s" in object (with ArrayAccess) of type "%s" does not exist', $arrayItem, get_class($object)), -1, $this->getTemplateName()); - } elseif (is_array($object)) { - throw new Twig_Error_Runtime(sprintf('Key "%s" for array with keys "%s" does not exist', $arrayItem, implode(', ', array_keys($object))), -1, $this->getTemplateName()); - } elseif (Twig_TemplateInterface::ARRAY_CALL === $type) { - throw new Twig_Error_Runtime(sprintf('Impossible to access a key ("%s") on a %s variable ("%s")', $item, gettype($object), $object), -1, $this->getTemplateName()); - } else { - throw new Twig_Error_Runtime(sprintf('Impossible to access an attribute ("%s") on a %s variable ("%s")', $item, gettype($object), $object), -1, $this->getTemplateName()); - } - } - } - - if (!is_object($object)) { - if ($isDefinedTest) { - return false; - } - - if ($ignoreStrictCheck || !$this->env->isStrictVariables()) { - return null; - } - - throw new Twig_Error_Runtime(sprintf('Impossible to invoke a method ("%s") on a %s variable ("%s")', $item, gettype($object), $object), -1, $this->getTemplateName()); - } - - $class = get_class($object); - - // object property - if (Twig_TemplateInterface::METHOD_CALL !== $type) { - if (isset($object->$item) || array_key_exists((string) $item, $object)) { - if ($isDefinedTest) { - return true; - } - - if ($this->env->hasExtension('sandbox')) { - $this->env->getExtension('sandbox')->checkPropertyAllowed($object, $item); - } - - return $object->$item; - } - } - - // object method - if (!isset(self::$cache[$class]['methods'])) { - self::$cache[$class]['methods'] = array_change_key_case(array_flip(get_class_methods($object))); - } - - $lcItem = strtolower($item); - if (isset(self::$cache[$class]['methods'][$lcItem])) { - $method = (string) $item; - } elseif (isset(self::$cache[$class]['methods']['get'.$lcItem])) { - $method = 'get'.$item; - } elseif (isset(self::$cache[$class]['methods']['is'.$lcItem])) { - $method = 'is'.$item; - } elseif (isset(self::$cache[$class]['methods']['__call'])) { - $method = (string) $item; - } else { - if ($isDefinedTest) { - return false; - } - - if ($ignoreStrictCheck || !$this->env->isStrictVariables()) { - return null; - } - - throw new Twig_Error_Runtime(sprintf('Method "%s" for object "%s" does not exist', $item, get_class($object)), -1, $this->getTemplateName()); - } - - if ($isDefinedTest) { - return true; - } - - if ($this->env->hasExtension('sandbox')) { - $this->env->getExtension('sandbox')->checkMethodAllowed($object, $method); - } - - $ret = call_user_func_array(array($object, $method), $arguments); - - // useful when calling a template method from a template - // this is not supported but unfortunately heavily used in the Symfony profiler - if ($object instanceof Twig_TemplateInterface) { - return $ret === '' ? '' : new Twig_Markup($ret, $this->env->getCharset()); - } - - return $ret; - } - - /** - * This method is only useful when testing Twig. Do not use it. - */ - public static function clearCache() - { - self::$cache = array(); - } -} diff --git a/lib/Twig/TemplateInterface.php b/lib/Twig/TemplateInterface.php deleted file mode 100644 index 879f503ec1d..00000000000 --- a/lib/Twig/TemplateInterface.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Interface implemented by all compiled templates. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -interface Twig_TemplateInterface -{ - const ANY_CALL = 'any'; - const ARRAY_CALL = 'array'; - const METHOD_CALL = 'method'; - - /** - * Renders the template with the given context and returns it as string. - * - * @param array $context An array of parameters to pass to the template - * - * @return string The rendered template - */ - public function render(array $context); - - /** - * Displays the template with the given context. - * - * @param array $context An array of parameters to pass to the template - * @param array $blocks An array of blocks to pass to the template - */ - public function display(array $context, array $blocks = array()); - - /** - * Returns the bound environment for this template. - * - * @return Twig_Environment The current environment - */ - public function getEnvironment(); -} diff --git a/lib/Twig/Test.php b/lib/Twig/Test.php deleted file mode 100644 index 3baff88560f..00000000000 --- a/lib/Twig/Test.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2012 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a template test. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -abstract class Twig_Test implements Twig_TestInterface, Twig_TestCallableInterface -{ - protected $options; - protected $arguments = array(); - - public function __construct(array $options = array()) - { - $this->options = array_merge(array( - 'callable' => null, - ), $options); - } - - public function getCallable() - { - return $this->options['callable']; - } -} diff --git a/lib/Twig/Test/Function.php b/lib/Twig/Test/Function.php deleted file mode 100644 index 4be6b9b9242..00000000000 --- a/lib/Twig/Test/Function.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a function template test. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -class Twig_Test_Function extends Twig_Test -{ - protected $function; - - public function __construct($function, array $options = array()) - { - $options['callable'] = $function; - - parent::__construct($options); - - $this->function = $function; - } - - public function compile() - { - return $this->function; - } -} diff --git a/lib/Twig/Test/IntegrationTestCase.php b/lib/Twig/Test/IntegrationTestCase.php deleted file mode 100644 index 724f0941780..00000000000 --- a/lib/Twig/Test/IntegrationTestCase.php +++ /dev/null @@ -1,154 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Integration test helper - * - * @author Fabien Potencier <fabien@symfony.com> - * @author Karma Dordrak <drak@zikula.org> - */ -abstract class Twig_Test_IntegrationTestCase extends PHPUnit_Framework_TestCase -{ - abstract protected function getExtensions(); - abstract protected function getFixturesDir(); - - /** - * @dataProvider getTests - */ - public function testIntegration($file, $message, $condition, $templates, $exception, $outputs) - { - $this->doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs); - } - - public function getTests() - { - $fixturesDir = realpath($this->getFixturesDir()); - $tests = array(); - - foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($fixturesDir), RecursiveIteratorIterator::LEAVES_ONLY) as $file) { - if (!preg_match('/\.test$/', $file)) { - continue; - } - - $test = file_get_contents($file->getRealpath()); - - if (preg_match('/ - --TEST--\s*(.*?)\s*(?:--CONDITION--\s*(.*))?\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)\s*(?:--DATA--\s*(.*))?\s*--EXCEPTION--\s*(.*)/sx', $test, $match)) { - $message = $match[1]; - $condition = $match[2]; - $templates = $this->parseTemplates($match[3]); - $exception = $match[5]; - $outputs = array(array(null, $match[4], null, '')); - } elseif (preg_match('/--TEST--\s*(.*?)\s*(?:--CONDITION--\s*(.*))?\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)--DATA--.*?--EXPECT--.*/s', $test, $match)) { - $message = $match[1]; - $condition = $match[2]; - $templates = $this->parseTemplates($match[3]); - $exception = false; - preg_match_all('/--DATA--(.*?)(?:--CONFIG--(.*?))?--EXPECT--(.*?)(?=\-\-DATA\-\-|$)/s', $test, $outputs, PREG_SET_ORDER); - } else { - throw new InvalidArgumentException(sprintf('Test "%s" is not valid.', str_replace($fixturesDir.'/', '', $file))); - } - - $tests[] = array(str_replace($fixturesDir.'/', '', $file), $message, $condition, $templates, $exception, $outputs); - } - - return $tests; - } - - protected function doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs) - { - if ($condition) { - eval('$ret = '.$condition.';'); - if (!$ret) { - $this->markTestSkipped($condition); - } - } - - $loader = new Twig_Loader_Array($templates); - - foreach ($outputs as $match) { - $config = array_merge(array( - 'cache' => false, - 'strict_variables' => true, - ), $match[2] ? eval($match[2].';') : array()); - $twig = new Twig_Environment($loader, $config); - $twig->addGlobal('global', 'global'); - foreach ($this->getExtensions() as $extension) { - $twig->addExtension($extension); - } - - try { - $template = $twig->loadTemplate('index.twig'); - } catch (Exception $e) { - if (false !== $exception) { - $this->assertEquals(trim($exception), trim(sprintf('%s: %s', get_class($e), $e->getMessage()))); - - return; - } - - if ($e instanceof Twig_Error_Syntax) { - $e->setTemplateFile($file); - - throw $e; - } - - throw new Twig_Error(sprintf('%s: %s', get_class($e), $e->getMessage()), -1, $file, $e); - } - - try { - $output = trim($template->render(eval($match[1].';')), "\n "); - } catch (Exception $e) { - if (false !== $exception) { - $this->assertEquals(trim($exception), trim(sprintf('%s: %s', get_class($e), $e->getMessage()))); - - return; - } - - if ($e instanceof Twig_Error_Syntax) { - $e->setTemplateFile($file); - } else { - $e = new Twig_Error(sprintf('%s: %s', get_class($e), $e->getMessage()), -1, $file, $e); - } - - $output = trim(sprintf('%s: %s', get_class($e), $e->getMessage())); - } - - if (false !== $exception) { - list($class, ) = explode(':', $exception); - $this->assertThat(NULL, new PHPUnit_Framework_Constraint_Exception($class)); - } - - $expected = trim($match[3], "\n "); - - if ($expected != $output) { - echo 'Compiled template that failed:'; - - foreach (array_keys($templates) as $name) { - echo "Template: $name\n"; - $source = $loader->getSource($name); - echo $twig->compile($twig->parse($twig->tokenize($source, $name))); - } - } - $this->assertEquals($expected, $output, $message.' (in '.$file.')'); - } - } - - protected static function parseTemplates($test) - { - $templates = array(); - preg_match_all('/--TEMPLATE(?:\((.*?)\))?--(.*?)(?=\-\-TEMPLATE|$)/s', $test, $matches, PREG_SET_ORDER); - foreach ($matches as $match) { - $templates[($match[1] ? $match[1] : 'index.twig')] = $match[2]; - } - - return $templates; - } -} diff --git a/lib/Twig/Test/Method.php b/lib/Twig/Test/Method.php deleted file mode 100644 index 17c6c041d62..00000000000 --- a/lib/Twig/Test/Method.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a method template test. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -class Twig_Test_Method extends Twig_Test -{ - protected $extension; - protected $method; - - public function __construct(Twig_ExtensionInterface $extension, $method, array $options = array()) - { - $options['callable'] = array($extension, $method); - - parent::__construct($options); - - $this->extension = $extension; - $this->method = $method; - } - - public function compile() - { - return sprintf('$this->env->getExtension(\'%s\')->%s', $this->extension->getName(), $this->method); - } -} diff --git a/lib/Twig/Test/Node.php b/lib/Twig/Test/Node.php deleted file mode 100644 index c832a57bf42..00000000000 --- a/lib/Twig/Test/Node.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a template test as a Node. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -class Twig_Test_Node extends Twig_Test -{ - protected $class; - - public function __construct($class, array $options = array()) - { - parent::__construct($options); - - $this->class = $class; - } - - public function getClass() - { - return $this->class; - } - - public function compile() - { - } -} diff --git a/lib/Twig/Test/NodeTestCase.php b/lib/Twig/Test/NodeTestCase.php deleted file mode 100644 index b15c85ffd7d..00000000000 --- a/lib/Twig/Test/NodeTestCase.php +++ /dev/null @@ -1,58 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -abstract class Twig_Test_NodeTestCase extends PHPUnit_Framework_TestCase -{ - abstract public function getTests(); - - /** - * @dataProvider getTests - */ - public function testCompile($node, $source, $environment = null) - { - $this->assertNodeCompilation($source, $node, $environment); - } - - public function assertNodeCompilation($source, Twig_Node $node, Twig_Environment $environment = null) - { - $compiler = $this->getCompiler($environment); - $compiler->compile($node); - - $this->assertEquals($source, trim($compiler->getSource())); - } - - protected function getCompiler(Twig_Environment $environment = null) - { - return new Twig_Compiler(null === $environment ? $this->getEnvironment() : $environment); - } - - protected function getEnvironment() - { - return new Twig_Environment(); - } - - protected function getVariableGetter($name) - { - if (version_compare(phpversion(), '5.4.0RC1', '>=')) { - return sprintf('(isset($context["%s"]) ? $context["%s"] : null)', $name, $name); - } - - return sprintf('$this->getContext($context, "%s")', $name); - } - - protected function getAttributeGetter() - { - if (function_exists('twig_template_get_attributes')) { - return 'twig_template_get_attributes($this, '; - } - - return '$this->getAttribute('; - } -} diff --git a/lib/Twig/TestCallableInterface.php b/lib/Twig/TestCallableInterface.php deleted file mode 100644 index 0db43682d04..00000000000 --- a/lib/Twig/TestCallableInterface.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2012 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a callable template test. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -interface Twig_TestCallableInterface -{ - public function getCallable(); -} diff --git a/lib/Twig/TestInterface.php b/lib/Twig/TestInterface.php deleted file mode 100644 index 30d8a2c4f0a..00000000000 --- a/lib/Twig/TestInterface.php +++ /dev/null @@ -1,26 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a template test. - * - * @author Fabien Potencier <fabien@symfony.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -interface Twig_TestInterface -{ - /** - * Compiles a test. - * - * @return string The PHP code for the test - */ - public function compile(); -} diff --git a/lib/Twig/Token.php b/lib/Twig/Token.php deleted file mode 100644 index bbca90dbbfd..00000000000 --- a/lib/Twig/Token.php +++ /dev/null @@ -1,218 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a Token. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_Token -{ - protected $value; - protected $type; - protected $lineno; - - const EOF_TYPE = -1; - const TEXT_TYPE = 0; - const BLOCK_START_TYPE = 1; - const VAR_START_TYPE = 2; - const BLOCK_END_TYPE = 3; - const VAR_END_TYPE = 4; - const NAME_TYPE = 5; - const NUMBER_TYPE = 6; - const STRING_TYPE = 7; - const OPERATOR_TYPE = 8; - const PUNCTUATION_TYPE = 9; - const INTERPOLATION_START_TYPE = 10; - const INTERPOLATION_END_TYPE = 11; - - /** - * Constructor. - * - * @param integer $type The type of the token - * @param string $value The token value - * @param integer $lineno The line position in the source - */ - public function __construct($type, $value, $lineno) - { - $this->type = $type; - $this->value = $value; - $this->lineno = $lineno; - } - - /** - * Returns a string representation of the token. - * - * @return string A string representation of the token - */ - public function __toString() - { - return sprintf('%s(%s)', self::typeToString($this->type, true, $this->lineno), $this->value); - } - - /** - * Tests the current token for a type and/or a value. - * - * Parameters may be: - * * just type - * * type and value (or array of possible values) - * * just value (or array of possible values) (NAME_TYPE is used as type) - * - * @param array|integer $type The type to test - * @param array|string|null $values The token value - * - * @return Boolean - */ - public function test($type, $values = null) - { - if (null === $values && !is_int($type)) { - $values = $type; - $type = self::NAME_TYPE; - } - - return ($this->type === $type) && ( - null === $values || - (is_array($values) && in_array($this->value, $values)) || - $this->value == $values - ); - } - - /** - * Gets the line. - * - * @return integer The source line - */ - public function getLine() - { - return $this->lineno; - } - - /** - * Gets the token type. - * - * @return integer The token type - */ - public function getType() - { - return $this->type; - } - - /** - * Gets the token value. - * - * @return string The token value - */ - public function getValue() - { - return $this->value; - } - - /** - * Returns the constant representation (internal) of a given type. - * - * @param integer $type The type as an integer - * @param Boolean $short Whether to return a short representation or not - * @param integer $line The code line - * - * @return string The string representation - */ - public static function typeToString($type, $short = false, $line = -1) - { - switch ($type) { - case self::EOF_TYPE: - $name = 'EOF_TYPE'; - break; - case self::TEXT_TYPE: - $name = 'TEXT_TYPE'; - break; - case self::BLOCK_START_TYPE: - $name = 'BLOCK_START_TYPE'; - break; - case self::VAR_START_TYPE: - $name = 'VAR_START_TYPE'; - break; - case self::BLOCK_END_TYPE: - $name = 'BLOCK_END_TYPE'; - break; - case self::VAR_END_TYPE: - $name = 'VAR_END_TYPE'; - break; - case self::NAME_TYPE: - $name = 'NAME_TYPE'; - break; - case self::NUMBER_TYPE: - $name = 'NUMBER_TYPE'; - break; - case self::STRING_TYPE: - $name = 'STRING_TYPE'; - break; - case self::OPERATOR_TYPE: - $name = 'OPERATOR_TYPE'; - break; - case self::PUNCTUATION_TYPE: - $name = 'PUNCTUATION_TYPE'; - break; - case self::INTERPOLATION_START_TYPE: - $name = 'INTERPOLATION_START_TYPE'; - break; - case self::INTERPOLATION_END_TYPE: - $name = 'INTERPOLATION_END_TYPE'; - break; - default: - throw new LogicException(sprintf('Token of type "%s" does not exist.', $type)); - } - - return $short ? $name : 'Twig_Token::'.$name; - } - - /** - * Returns the english representation of a given type. - * - * @param integer $type The type as an integer - * @param integer $line The code line - * - * @return string The string representation - */ - public static function typeToEnglish($type, $line = -1) - { - switch ($type) { - case self::EOF_TYPE: - return 'end of template'; - case self::TEXT_TYPE: - return 'text'; - case self::BLOCK_START_TYPE: - return 'begin of statement block'; - case self::VAR_START_TYPE: - return 'begin of print statement'; - case self::BLOCK_END_TYPE: - return 'end of statement block'; - case self::VAR_END_TYPE: - return 'end of print statement'; - case self::NAME_TYPE: - return 'name'; - case self::NUMBER_TYPE: - return 'number'; - case self::STRING_TYPE: - return 'string'; - case self::OPERATOR_TYPE: - return 'operator'; - case self::PUNCTUATION_TYPE: - return 'punctuation'; - case self::INTERPOLATION_START_TYPE: - return 'begin of string interpolation'; - case self::INTERPOLATION_END_TYPE: - return 'end of string interpolation'; - default: - throw new LogicException(sprintf('Token of type "%s" does not exist.', $type)); - } - } -} diff --git a/lib/Twig/TokenParser.php b/lib/Twig/TokenParser.php deleted file mode 100644 index decebd5eead..00000000000 --- a/lib/Twig/TokenParser.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Base class for all token parsers. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -abstract class Twig_TokenParser implements Twig_TokenParserInterface -{ - /** - * @var Twig_Parser - */ - protected $parser; - - /** - * Sets the parser associated with this token parser - * - * @param $parser A Twig_Parser instance - */ - public function setParser(Twig_Parser $parser) - { - $this->parser = $parser; - } -} diff --git a/lib/Twig/TokenParser/AutoEscape.php b/lib/Twig/TokenParser/AutoEscape.php deleted file mode 100644 index 27560288391..00000000000 --- a/lib/Twig/TokenParser/AutoEscape.php +++ /dev/null @@ -1,89 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Marks a section of a template to be escaped or not. - * - * <pre> - * {% autoescape true %} - * Everything will be automatically escaped in this block - * {% endautoescape %} - * - * {% autoescape false %} - * Everything will be outputed as is in this block - * {% endautoescape %} - * - * {% autoescape true js %} - * Everything will be automatically escaped in this block - * using the js escaping strategy - * {% endautoescape %} - * </pre> - */ -class Twig_TokenParser_AutoEscape extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $lineno = $token->getLine(); - $stream = $this->parser->getStream(); - - if ($stream->test(Twig_Token::BLOCK_END_TYPE)) { - $value = 'html'; - } else { - $expr = $this->parser->getExpressionParser()->parseExpression(); - if (!$expr instanceof Twig_Node_Expression_Constant) { - throw new Twig_Error_Syntax('An escaping strategy must be a string or a Boolean.', $stream->getCurrent()->getLine(), $stream->getFilename()); - } - $value = $expr->getAttribute('value'); - - $compat = true === $value || false === $value; - - if (true === $value) { - $value = 'html'; - } - - if ($compat && $stream->test(Twig_Token::NAME_TYPE)) { - if (false === $value) { - throw new Twig_Error_Syntax('Unexpected escaping strategy as you set autoescaping to false.', $stream->getCurrent()->getLine(), $stream->getFilename()); - } - - $value = $stream->next()->getValue(); - } - } - - $stream->expect(Twig_Token::BLOCK_END_TYPE); - $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true); - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - return new Twig_Node_AutoEscape($value, $body, $lineno, $this->getTag()); - } - - public function decideBlockEnd(Twig_Token $token) - { - return $token->test('endautoescape'); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'autoescape'; - } -} diff --git a/lib/Twig/TokenParser/Block.php b/lib/Twig/TokenParser/Block.php deleted file mode 100644 index a2e017f3e88..00000000000 --- a/lib/Twig/TokenParser/Block.php +++ /dev/null @@ -1,83 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Marks a section of a template as being reusable. - * - * <pre> - * {% block head %} - * <link rel="stylesheet" href="style.css" /> - * <title>{% block title %}{% endblock %} - My Webpage</title> - * {% endblock %} - * </pre> - */ -class Twig_TokenParser_Block extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $lineno = $token->getLine(); - $stream = $this->parser->getStream(); - $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); - if ($this->parser->hasBlock($name)) { - throw new Twig_Error_Syntax(sprintf("The block '$name' has already been defined line %d", $this->parser->getBlock($name)->getLine()), $stream->getCurrent()->getLine(), $stream->getFilename()); - } - $this->parser->setBlock($name, $block = new Twig_Node_Block($name, new Twig_Node(array()), $lineno)); - $this->parser->pushLocalScope(); - $this->parser->pushBlockStack($name); - - if ($stream->test(Twig_Token::BLOCK_END_TYPE)) { - $stream->next(); - - $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true); - if ($stream->test(Twig_Token::NAME_TYPE)) { - $value = $stream->next()->getValue(); - - if ($value != $name) { - throw new Twig_Error_Syntax(sprintf("Expected endblock for block '$name' (but %s given)", $value), $stream->getCurrent()->getLine(), $stream->getFilename()); - } - } - } else { - $body = new Twig_Node(array( - new Twig_Node_Print($this->parser->getExpressionParser()->parseExpression(), $lineno), - )); - } - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - $block->setNode('body', $body); - $this->parser->popBlockStack(); - $this->parser->popLocalScope(); - - return new Twig_Node_BlockReference($name, $lineno, $this->getTag()); - } - - public function decideBlockEnd(Twig_Token $token) - { - return $token->test('endblock'); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'block'; - } -} diff --git a/lib/Twig/TokenParser/Do.php b/lib/Twig/TokenParser/Do.php deleted file mode 100644 index f50939dd214..00000000000 --- a/lib/Twig/TokenParser/Do.php +++ /dev/null @@ -1,42 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Evaluates an expression, discarding the returned value. - */ -class Twig_TokenParser_Do extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $expr = $this->parser->getExpressionParser()->parseExpression(); - - $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); - - return new Twig_Node_Do($expr, $token->getLine(), $this->getTag()); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'do'; - } -} diff --git a/lib/Twig/TokenParser/Embed.php b/lib/Twig/TokenParser/Embed.php deleted file mode 100644 index 69cb5f35ff8..00000000000 --- a/lib/Twig/TokenParser/Embed.php +++ /dev/null @@ -1,66 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2012 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Embeds a template. - */ -class Twig_TokenParser_Embed extends Twig_TokenParser_Include -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $stream = $this->parser->getStream(); - - $parent = $this->parser->getExpressionParser()->parseExpression(); - - list($variables, $only, $ignoreMissing) = $this->parseArguments(); - - // inject a fake parent to make the parent() function work - $stream->injectTokens(array( - new Twig_Token(Twig_Token::BLOCK_START_TYPE, '', $token->getLine()), - new Twig_Token(Twig_Token::NAME_TYPE, 'extends', $token->getLine()), - new Twig_Token(Twig_Token::STRING_TYPE, '__parent__', $token->getLine()), - new Twig_Token(Twig_Token::BLOCK_END_TYPE, '', $token->getLine()), - )); - - $module = $this->parser->parse($stream, array($this, 'decideBlockEnd'), true); - - // override the parent with the correct one - $module->setNode('parent', $parent); - - $this->parser->embedTemplate($module); - - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - return new Twig_Node_Embed($module->getAttribute('filename'), $module->getAttribute('index'), $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag()); - } - - public function decideBlockEnd(Twig_Token $token) - { - return $token->test('endembed'); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'embed'; - } -} diff --git a/lib/Twig/TokenParser/Extends.php b/lib/Twig/TokenParser/Extends.php deleted file mode 100644 index 110bc8b458e..00000000000 --- a/lib/Twig/TokenParser/Extends.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Extends a template by another one. - * - * <pre> - * {% extends "base.html" %} - * </pre> - */ -class Twig_TokenParser_Extends extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - if (!$this->parser->isMainScope()) { - throw new Twig_Error_Syntax('Cannot extend from a block', $token->getLine(), $this->parser->getFilename()); - } - - if (null !== $this->parser->getParent()) { - throw new Twig_Error_Syntax('Multiple extends tags are forbidden', $token->getLine(), $this->parser->getFilename()); - } - $this->parser->setParent($this->parser->getExpressionParser()->parseExpression()); - - $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); - - return null; - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'extends'; - } -} diff --git a/lib/Twig/TokenParser/Filter.php b/lib/Twig/TokenParser/Filter.php deleted file mode 100644 index 2b97475aea1..00000000000 --- a/lib/Twig/TokenParser/Filter.php +++ /dev/null @@ -1,61 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Filters a section of a template by applying filters. - * - * <pre> - * {% filter upper %} - * This text becomes uppercase - * {% endfilter %} - * </pre> - */ -class Twig_TokenParser_Filter extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $name = $this->parser->getVarName(); - $ref = new Twig_Node_Expression_BlockReference(new Twig_Node_Expression_Constant($name, $token->getLine()), true, $token->getLine(), $this->getTag()); - - $filter = $this->parser->getExpressionParser()->parseFilterExpressionRaw($ref, $this->getTag()); - $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); - - $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true); - $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); - - $block = new Twig_Node_Block($name, $body, $token->getLine()); - $this->parser->setBlock($name, $block); - - return new Twig_Node_Print($filter, $token->getLine(), $this->getTag()); - } - - public function decideBlockEnd(Twig_Token $token) - { - return $token->test('endfilter'); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'filter'; - } -} diff --git a/lib/Twig/TokenParser/Flush.php b/lib/Twig/TokenParser/Flush.php deleted file mode 100644 index 4e15e785384..00000000000 --- a/lib/Twig/TokenParser/Flush.php +++ /dev/null @@ -1,42 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Flushes the output to the client. - * - * @see flush() - */ -class Twig_TokenParser_Flush extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); - - return new Twig_Node_Flush($token->getLine(), $this->getTag()); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'flush'; - } -} diff --git a/lib/Twig/TokenParser/For.php b/lib/Twig/TokenParser/For.php deleted file mode 100644 index 98a6d079d16..00000000000 --- a/lib/Twig/TokenParser/For.php +++ /dev/null @@ -1,136 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Loops over each item of a sequence. - * - * <pre> - * <ul> - * {% for user in users %} - * <li>{{ user.username|e }}</li> - * {% endfor %} - * </ul> - * </pre> - */ -class Twig_TokenParser_For extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $lineno = $token->getLine(); - $stream = $this->parser->getStream(); - $targets = $this->parser->getExpressionParser()->parseAssignmentExpression(); - $stream->expect(Twig_Token::OPERATOR_TYPE, 'in'); - $seq = $this->parser->getExpressionParser()->parseExpression(); - - $ifexpr = null; - if ($stream->test(Twig_Token::NAME_TYPE, 'if')) { - $stream->next(); - $ifexpr = $this->parser->getExpressionParser()->parseExpression(); - } - - $stream->expect(Twig_Token::BLOCK_END_TYPE); - $body = $this->parser->subparse(array($this, 'decideForFork')); - if ($stream->next()->getValue() == 'else') { - $stream->expect(Twig_Token::BLOCK_END_TYPE); - $else = $this->parser->subparse(array($this, 'decideForEnd'), true); - } else { - $else = null; - } - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - if (count($targets) > 1) { - $keyTarget = $targets->getNode(0); - $keyTarget = new Twig_Node_Expression_AssignName($keyTarget->getAttribute('name'), $keyTarget->getLine()); - $valueTarget = $targets->getNode(1); - $valueTarget = new Twig_Node_Expression_AssignName($valueTarget->getAttribute('name'), $valueTarget->getLine()); - } else { - $keyTarget = new Twig_Node_Expression_AssignName('_key', $lineno); - $valueTarget = $targets->getNode(0); - $valueTarget = new Twig_Node_Expression_AssignName($valueTarget->getAttribute('name'), $valueTarget->getLine()); - } - - if ($ifexpr) { - $this->checkLoopUsageCondition($stream, $ifexpr); - $this->checkLoopUsageBody($stream, $body); - } - - return new Twig_Node_For($keyTarget, $valueTarget, $seq, $ifexpr, $body, $else, $lineno, $this->getTag()); - } - - public function decideForFork(Twig_Token $token) - { - return $token->test(array('else', 'endfor')); - } - - public function decideForEnd(Twig_Token $token) - { - return $token->test('endfor'); - } - - // the loop variable cannot be used in the condition - protected function checkLoopUsageCondition(Twig_TokenStream $stream, Twig_NodeInterface $node) - { - if ($node instanceof Twig_Node_Expression_GetAttr && $node->getNode('node') instanceof Twig_Node_Expression_Name && 'loop' == $node->getNode('node')->getAttribute('name')) { - throw new Twig_Error_Syntax('The "loop" variable cannot be used in a looping condition', $node->getLine(), $stream->getFilename()); - } - - foreach ($node as $n) { - if (!$n) { - continue; - } - - $this->checkLoopUsageCondition($stream, $n); - } - } - - // check usage of non-defined loop-items - // it does not catch all problems (for instance when a for is included into another or when the variable is used in an include) - protected function checkLoopUsageBody(Twig_TokenStream $stream, Twig_NodeInterface $node) - { - if ($node instanceof Twig_Node_Expression_GetAttr && $node->getNode('node') instanceof Twig_Node_Expression_Name && 'loop' == $node->getNode('node')->getAttribute('name')) { - $attribute = $node->getNode('attribute'); - if ($attribute instanceof Twig_Node_Expression_Constant && in_array($attribute->getAttribute('value'), array('length', 'revindex0', 'revindex', 'last'))) { - throw new Twig_Error_Syntax(sprintf('The "loop.%s" variable is not defined when looping with a condition', $attribute->getAttribute('value')), $node->getLine(), $stream->getFilename()); - } - } - - // should check for parent.loop.XXX usage - if ($node instanceof Twig_Node_For) { - return; - } - - foreach ($node as $n) { - if (!$n) { - continue; - } - - $this->checkLoopUsageBody($stream, $n); - } - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'for'; - } -} diff --git a/lib/Twig/TokenParser/From.php b/lib/Twig/TokenParser/From.php deleted file mode 100644 index a54054dbc94..00000000000 --- a/lib/Twig/TokenParser/From.php +++ /dev/null @@ -1,74 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Imports macros. - * - * <pre> - * {% from 'forms.html' import forms %} - * </pre> - */ -class Twig_TokenParser_From extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $macro = $this->parser->getExpressionParser()->parseExpression(); - $stream = $this->parser->getStream(); - $stream->expect('import'); - - $targets = array(); - do { - $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); - - $alias = $name; - if ($stream->test('as')) { - $stream->next(); - - $alias = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); - } - - $targets[$name] = $alias; - - if (!$stream->test(Twig_Token::PUNCTUATION_TYPE, ',')) { - break; - } - - $stream->next(); - } while (true); - - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - $node = new Twig_Node_Import($macro, new Twig_Node_Expression_AssignName($this->parser->getVarName(), $token->getLine()), $token->getLine(), $this->getTag()); - - foreach ($targets as $name => $alias) { - $this->parser->addImportedSymbol('function', $alias, 'get'.$name, $node->getNode('var')); - } - - return $node; - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'from'; - } -} diff --git a/lib/Twig/TokenParser/If.php b/lib/Twig/TokenParser/If.php deleted file mode 100644 index 3d7d1f517f9..00000000000 --- a/lib/Twig/TokenParser/If.php +++ /dev/null @@ -1,94 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Tests a condition. - * - * <pre> - * {% if users %} - * <ul> - * {% for user in users %} - * <li>{{ user.username|e }}</li> - * {% endfor %} - * </ul> - * {% endif %} - * </pre> - */ -class Twig_TokenParser_If extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $lineno = $token->getLine(); - $expr = $this->parser->getExpressionParser()->parseExpression(); - $stream = $this->parser->getStream(); - $stream->expect(Twig_Token::BLOCK_END_TYPE); - $body = $this->parser->subparse(array($this, 'decideIfFork')); - $tests = array($expr, $body); - $else = null; - - $end = false; - while (!$end) { - switch ($stream->next()->getValue()) { - case 'else': - $stream->expect(Twig_Token::BLOCK_END_TYPE); - $else = $this->parser->subparse(array($this, 'decideIfEnd')); - break; - - case 'elseif': - $expr = $this->parser->getExpressionParser()->parseExpression(); - $stream->expect(Twig_Token::BLOCK_END_TYPE); - $body = $this->parser->subparse(array($this, 'decideIfFork')); - $tests[] = $expr; - $tests[] = $body; - break; - - case 'endif': - $end = true; - break; - - default: - throw new Twig_Error_Syntax(sprintf('Unexpected end of template. Twig was looking for the following tags "else", "elseif", or "endif" to close the "if" block started at line %d)', $lineno), $stream->getCurrent()->getLine(), $stream->getFilename()); - } - } - - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - return new Twig_Node_If(new Twig_Node($tests), $else, $lineno, $this->getTag()); - } - - public function decideIfFork(Twig_Token $token) - { - return $token->test(array('elseif', 'else', 'endif')); - } - - public function decideIfEnd(Twig_Token $token) - { - return $token->test(array('endif')); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'if'; - } -} diff --git a/lib/Twig/TokenParser/Import.php b/lib/Twig/TokenParser/Import.php deleted file mode 100644 index e7050c70c6e..00000000000 --- a/lib/Twig/TokenParser/Import.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Imports macros. - * - * <pre> - * {% import 'forms.html' as forms %} - * </pre> - */ -class Twig_TokenParser_Import extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $macro = $this->parser->getExpressionParser()->parseExpression(); - $this->parser->getStream()->expect('as'); - $var = new Twig_Node_Expression_AssignName($this->parser->getStream()->expect(Twig_Token::NAME_TYPE)->getValue(), $token->getLine()); - $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); - - $this->parser->addImportedSymbol('template', $var->getAttribute('name')); - - return new Twig_Node_Import($macro, $var, $token->getLine(), $this->getTag()); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'import'; - } -} diff --git a/lib/Twig/TokenParser/Include.php b/lib/Twig/TokenParser/Include.php deleted file mode 100644 index 4a317868f3e..00000000000 --- a/lib/Twig/TokenParser/Include.php +++ /dev/null @@ -1,80 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Includes a template. - * - * <pre> - * {% include 'header.html' %} - * Body - * {% include 'footer.html' %} - * </pre> - */ -class Twig_TokenParser_Include extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $expr = $this->parser->getExpressionParser()->parseExpression(); - - list($variables, $only, $ignoreMissing) = $this->parseArguments(); - - return new Twig_Node_Include($expr, $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag()); - } - - protected function parseArguments() - { - $stream = $this->parser->getStream(); - - $ignoreMissing = false; - if ($stream->test(Twig_Token::NAME_TYPE, 'ignore')) { - $stream->next(); - $stream->expect(Twig_Token::NAME_TYPE, 'missing'); - - $ignoreMissing = true; - } - - $variables = null; - if ($stream->test(Twig_Token::NAME_TYPE, 'with')) { - $stream->next(); - - $variables = $this->parser->getExpressionParser()->parseExpression(); - } - - $only = false; - if ($stream->test(Twig_Token::NAME_TYPE, 'only')) { - $stream->next(); - - $only = true; - } - - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - return array($variables, $only, $ignoreMissing); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'include'; - } -} diff --git a/lib/Twig/TokenParser/Macro.php b/lib/Twig/TokenParser/Macro.php deleted file mode 100644 index c2a033608d3..00000000000 --- a/lib/Twig/TokenParser/Macro.php +++ /dev/null @@ -1,70 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Defines a macro. - * - * <pre> - * {% macro input(name, value, type, size) %} - * <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" /> - * {% endmacro %} - * </pre> - */ -class Twig_TokenParser_Macro extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $lineno = $token->getLine(); - $stream = $this->parser->getStream(); - $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); - - $arguments = $this->parser->getExpressionParser()->parseArguments(true, true); - - $stream->expect(Twig_Token::BLOCK_END_TYPE); - $this->parser->pushLocalScope(); - $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true); - if ($stream->test(Twig_Token::NAME_TYPE)) { - $value = $stream->next()->getValue(); - - if ($value != $name) { - throw new Twig_Error_Syntax(sprintf("Expected endmacro for macro '$name' (but %s given)", $value), $stream->getCurrent()->getLine(), $stream->getFilename()); - } - } - $this->parser->popLocalScope(); - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - $this->parser->setMacro($name, new Twig_Node_Macro($name, new Twig_Node_Body(array($body)), $arguments, $lineno, $this->getTag())); - - return null; - } - - public function decideBlockEnd(Twig_Token $token) - { - return $token->test('endmacro'); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'macro'; - } -} diff --git a/lib/Twig/TokenParser/Sandbox.php b/lib/Twig/TokenParser/Sandbox.php deleted file mode 100644 index 9457325ab45..00000000000 --- a/lib/Twig/TokenParser/Sandbox.php +++ /dev/null @@ -1,68 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Marks a section of a template as untrusted code that must be evaluated in the sandbox mode. - * - * <pre> - * {% sandbox %} - * {% include 'user.html' %} - * {% endsandbox %} - * </pre> - * - * @see http://www.twig-project.org/doc/api.html#sandbox-extension for details - */ -class Twig_TokenParser_Sandbox extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); - $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true); - $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); - - // in a sandbox tag, only include tags are allowed - if (!$body instanceof Twig_Node_Include) { - foreach ($body as $node) { - if ($node instanceof Twig_Node_Text && ctype_space($node->getAttribute('data'))) { - continue; - } - - if (!$node instanceof Twig_Node_Include) { - throw new Twig_Error_Syntax('Only "include" tags are allowed within a "sandbox" section', $node->getLine(), $this->parser->getFilename()); - } - } - } - - return new Twig_Node_Sandbox($body, $token->getLine(), $this->getTag()); - } - - public function decideBlockEnd(Twig_Token $token) - { - return $token->test('endsandbox'); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'sandbox'; - } -} diff --git a/lib/Twig/TokenParser/Set.php b/lib/Twig/TokenParser/Set.php deleted file mode 100644 index 70e0b41baee..00000000000 --- a/lib/Twig/TokenParser/Set.php +++ /dev/null @@ -1,84 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Defines a variable. - * - * <pre> - * {% set foo = 'foo' %} - * - * {% set foo = [1, 2] %} - * - * {% set foo = {'foo': 'bar'} %} - * - * {% set foo = 'foo' ~ 'bar' %} - * - * {% set foo, bar = 'foo', 'bar' %} - * - * {% set foo %}Some content{% endset %} - * </pre> - */ -class Twig_TokenParser_Set extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $lineno = $token->getLine(); - $stream = $this->parser->getStream(); - $names = $this->parser->getExpressionParser()->parseAssignmentExpression(); - - $capture = false; - if ($stream->test(Twig_Token::OPERATOR_TYPE, '=')) { - $stream->next(); - $values = $this->parser->getExpressionParser()->parseMultitargetExpression(); - - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - if (count($names) !== count($values)) { - throw new Twig_Error_Syntax("When using set, you must have the same number of variables and assignments.", $stream->getCurrent()->getLine(), $stream->getFilename()); - } - } else { - $capture = true; - - if (count($names) > 1) { - throw new Twig_Error_Syntax("When using set with a block, you cannot have a multi-target.", $stream->getCurrent()->getLine(), $stream->getFilename()); - } - - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - $values = $this->parser->subparse(array($this, 'decideBlockEnd'), true); - $stream->expect(Twig_Token::BLOCK_END_TYPE); - } - - return new Twig_Node_Set($capture, $names, $values, $lineno, $this->getTag()); - } - - public function decideBlockEnd(Twig_Token $token) - { - return $token->test('endset'); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'set'; - } -} diff --git a/lib/Twig/TokenParser/Spaceless.php b/lib/Twig/TokenParser/Spaceless.php deleted file mode 100644 index 1e3fa8f3edd..00000000000 --- a/lib/Twig/TokenParser/Spaceless.php +++ /dev/null @@ -1,59 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Remove whitespaces between HTML tags. - * - * <pre> - * {% spaceless %} - * <div> - * <strong>foo</strong> - * </div> - * {% endspaceless %} - * - * {# output will be <div><strong>foo</strong></div> #} - * </pre> - */ -class Twig_TokenParser_Spaceless extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $lineno = $token->getLine(); - - $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); - $body = $this->parser->subparse(array($this, 'decideSpacelessEnd'), true); - $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); - - return new Twig_Node_Spaceless($body, $lineno, $this->getTag()); - } - - public function decideSpacelessEnd(Twig_Token $token) - { - return $token->test('endspaceless'); - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'spaceless'; - } -} diff --git a/lib/Twig/TokenParser/Use.php b/lib/Twig/TokenParser/Use.php deleted file mode 100644 index 85f084a5283..00000000000 --- a/lib/Twig/TokenParser/Use.php +++ /dev/null @@ -1,84 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2011 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Imports blocks defined in another template into the current template. - * - * <pre> - * {% extends "base.html" %} - * - * {% use "blocks.html" %} - * - * {% block title %}{% endblock %} - * {% block content %}{% endblock %} - * </pre> - * - * @see http://www.twig-project.org/doc/templates.html#horizontal-reuse for details. - */ -class Twig_TokenParser_Use extends Twig_TokenParser -{ - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token) - { - $template = $this->parser->getExpressionParser()->parseExpression(); - $stream = $this->parser->getStream(); - - if (!$template instanceof Twig_Node_Expression_Constant) { - throw new Twig_Error_Syntax('The template references in a "use" statement must be a string.', $stream->getCurrent()->getLine(), $stream->getFilename()); - } - - $targets = array(); - if ($stream->test('with')) { - $stream->next(); - - do { - $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); - - $alias = $name; - if ($stream->test('as')) { - $stream->next(); - - $alias = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); - } - - $targets[$name] = new Twig_Node_Expression_Constant($alias, -1); - - if (!$stream->test(Twig_Token::PUNCTUATION_TYPE, ',')) { - break; - } - - $stream->next(); - } while (true); - } - - $stream->expect(Twig_Token::BLOCK_END_TYPE); - - $this->parser->addTrait(new Twig_Node(array('template' => $template, 'targets' => new Twig_Node($targets)))); - - return null; - } - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag() - { - return 'use'; - } -} diff --git a/lib/Twig/TokenParserBroker.php b/lib/Twig/TokenParserBroker.php deleted file mode 100644 index 9518c7c8a2a..00000000000 --- a/lib/Twig/TokenParserBroker.php +++ /dev/null @@ -1,138 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * (c) 2010 Arnaud Le Blanc - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Default implementation of a token parser broker. - * - * @author Arnaud Le Blanc <arnaud.lb@gmail.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -class Twig_TokenParserBroker implements Twig_TokenParserBrokerInterface -{ - protected $parser; - protected $parsers = array(); - protected $brokers = array(); - - /** - * Constructor. - * - * @param array|Traversable $parsers A Traversable of Twig_TokenParserInterface instances - * @param array|Traversable $brokers A Traversable of Twig_TokenParserBrokerInterface instances - */ - public function __construct($parsers = array(), $brokers = array()) - { - foreach ($parsers as $parser) { - if (!$parser instanceof Twig_TokenParserInterface) { - throw new LogicException('$parsers must a an array of Twig_TokenParserInterface'); - } - $this->parsers[$parser->getTag()] = $parser; - } - foreach ($brokers as $broker) { - if (!$broker instanceof Twig_TokenParserBrokerInterface) { - throw new LogicException('$brokers must a an array of Twig_TokenParserBrokerInterface'); - } - $this->brokers[] = $broker; - } - } - - /** - * Adds a TokenParser. - * - * @param Twig_TokenParserInterface $parser A Twig_TokenParserInterface instance - */ - public function addTokenParser(Twig_TokenParserInterface $parser) - { - $this->parsers[$parser->getTag()] = $parser; - } - - /** - * Removes a TokenParser. - * - * @param Twig_TokenParserInterface $parser A Twig_TokenParserInterface instance - */ - public function removeTokenParser(Twig_TokenParserInterface $parser) - { - $name = $parser->getTag(); - if (isset($this->parsers[$name]) && $parser === $this->parsers[$name]) { - unset($this->parsers[$name]); - } - } - - /** - * Adds a TokenParserBroker. - * - * @param Twig_TokenParserBroker $broker A Twig_TokenParserBroker instance - */ - public function addTokenParserBroker(Twig_TokenParserBroker $broker) - { - $this->brokers[] = $broker; - } - - /** - * Removes a TokenParserBroker. - * - * @param Twig_TokenParserBroker $broker A Twig_TokenParserBroker instance - */ - public function removeTokenParserBroker(Twig_TokenParserBroker $broker) - { - if (false !== $pos = array_search($broker, $this->brokers)) { - unset($this->brokers[$pos]); - } - } - - /** - * Gets a suitable TokenParser for a tag. - * - * First looks in parsers, then in brokers. - * - * @param string $tag A tag name - * - * @return null|Twig_TokenParserInterface A Twig_TokenParserInterface or null if no suitable TokenParser was found - */ - public function getTokenParser($tag) - { - if (isset($this->parsers[$tag])) { - return $this->parsers[$tag]; - } - $broker = end($this->brokers); - while (false !== $broker) { - $parser = $broker->getTokenParser($tag); - if (null !== $parser) { - return $parser; - } - $broker = prev($this->brokers); - } - - return null; - } - - public function getParsers() - { - return $this->parsers; - } - - public function getParser() - { - return $this->parser; - } - - public function setParser(Twig_ParserInterface $parser) - { - $this->parser = $parser; - foreach ($this->parsers as $tokenParser) { - $tokenParser->setParser($parser); - } - foreach ($this->brokers as $broker) { - $broker->setParser($parser); - } - } -} diff --git a/lib/Twig/TokenParserBrokerInterface.php b/lib/Twig/TokenParserBrokerInterface.php deleted file mode 100644 index 3f006e339bf..00000000000 --- a/lib/Twig/TokenParserBrokerInterface.php +++ /dev/null @@ -1,45 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * (c) 2010 Arnaud Le Blanc - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Interface implemented by token parser brokers. - * - * Token parser brokers allows to implement custom logic in the process of resolving a token parser for a given tag name. - * - * @author Arnaud Le Blanc <arnaud.lb@gmail.com> - * @deprecated since 1.12 (to be removed in 2.0) - */ -interface Twig_TokenParserBrokerInterface -{ - /** - * Gets a TokenParser suitable for a tag. - * - * @param string $tag A tag name - * - * @return null|Twig_TokenParserInterface A Twig_TokenParserInterface or null if no suitable TokenParser was found - */ - public function getTokenParser($tag); - - /** - * Calls Twig_TokenParserInterface::setParser on all parsers the implementation knows of. - * - * @param Twig_ParserInterface $parser A Twig_ParserInterface interface - */ - public function setParser(Twig_ParserInterface $parser); - - /** - * Gets the Twig_ParserInterface. - * - * @return null|Twig_ParserInterface A Twig_ParserInterface instance or null - */ - public function getParser(); -} diff --git a/lib/Twig/TokenParserInterface.php b/lib/Twig/TokenParserInterface.php deleted file mode 100644 index bbde7714103..00000000000 --- a/lib/Twig/TokenParserInterface.php +++ /dev/null @@ -1,41 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2010 Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Interface implemented by token parsers. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -interface Twig_TokenParserInterface -{ - /** - * Sets the parser associated with this token parser - * - * @param $parser A Twig_Parser instance - */ - public function setParser(Twig_Parser $parser); - - /** - * Parses a token and returns a node. - * - * @param Twig_Token $token A Twig_Token instance - * - * @return Twig_NodeInterface A Twig_NodeInterface instance - */ - public function parse(Twig_Token $token); - - /** - * Gets the tag name associated with this token parser. - * - * @return string The tag name - */ - public function getTag(); -} diff --git a/lib/Twig/TokenStream.php b/lib/Twig/TokenStream.php deleted file mode 100644 index a78189f667a..00000000000 --- a/lib/Twig/TokenStream.php +++ /dev/null @@ -1,144 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Represents a token stream. - * - * @author Fabien Potencier <fabien@symfony.com> - */ -class Twig_TokenStream -{ - protected $tokens; - protected $current; - protected $filename; - - /** - * Constructor. - * - * @param array $tokens An array of tokens - * @param string $filename The name of the filename which tokens are associated with - */ - public function __construct(array $tokens, $filename = null) - { - $this->tokens = $tokens; - $this->current = 0; - $this->filename = $filename; - } - - /** - * Returns a string representation of the token stream. - * - * @return string - */ - public function __toString() - { - return implode("\n", $this->tokens); - } - - public function injectTokens(array $tokens) - { - $this->tokens = array_merge(array_slice($this->tokens, 0, $this->current), $tokens, array_slice($this->tokens, $this->current)); - } - - /** - * Sets the pointer to the next token and returns the old one. - * - * @return Twig_Token - */ - public function next() - { - if (!isset($this->tokens[++$this->current])) { - throw new Twig_Error_Syntax('Unexpected end of template', $this->tokens[$this->current - 1]->getLine(), $this->filename); - } - - return $this->tokens[$this->current - 1]; - } - - /** - * Tests a token and returns it or throws a syntax error. - * - * @return Twig_Token - */ - public function expect($type, $value = null, $message = null) - { - $token = $this->tokens[$this->current]; - if (!$token->test($type, $value)) { - $line = $token->getLine(); - throw new Twig_Error_Syntax(sprintf('%sUnexpected token "%s" of value "%s" ("%s" expected%s)', - $message ? $message.'. ' : '', - Twig_Token::typeToEnglish($token->getType(), $line), $token->getValue(), - Twig_Token::typeToEnglish($type, $line), $value ? sprintf(' with value "%s"', $value) : ''), - $line, - $this->filename - ); - } - $this->next(); - - return $token; - } - - /** - * Looks at the next token. - * - * @param integer $number - * - * @return Twig_Token - */ - public function look($number = 1) - { - if (!isset($this->tokens[$this->current + $number])) { - throw new Twig_Error_Syntax('Unexpected end of template', $this->tokens[$this->current + $number - 1]->getLine(), $this->filename); - } - - return $this->tokens[$this->current + $number]; - } - - /** - * Tests the current token - * - * @return bool - */ - public function test($primary, $secondary = null) - { - return $this->tokens[$this->current]->test($primary, $secondary); - } - - /** - * Checks if end of stream was reached - * - * @return bool - */ - public function isEOF() - { - return $this->tokens[$this->current]->getType() === Twig_Token::EOF_TYPE; - } - - /** - * Gets the current token - * - * @return Twig_Token - */ - public function getCurrent() - { - return $this->tokens[$this->current]; - } - - /** - * Gets the filename associated with this stream - * - * @return string - */ - public function getFilename() - { - return $this->filename; - } -} diff --git a/pub/index.php b/pub/index.php index 056fd41c018..459fa5dc8f6 100644 --- a/pub/index.php +++ b/pub/index.php @@ -26,7 +26,7 @@ require __DIR__ . '/../app/bootstrap.php'; \Magento\Profiler::start('magento'); $params = $_SERVER; -$params[\Magento\Core\Model\App::PARAM_APP_URIS][\Magento\Core\Model\Dir::PUB] = ''; +$params[\Magento\Core\Model\App::PARAM_APP_URIS][\Magento\App\Dir::PUB] = ''; $entryPoint = new \Magento\Core\Model\EntryPoint\Http(new \Magento\Core\Model\Config\Primary(BP, $params)); $entryPoint->processRequest(); \Magento\Profiler::stop('magento'); diff --git a/pub/lib/mage/adminhtml/varienLoader.js b/pub/lib/mage/adminhtml/varienLoader.js index 2da26219902..f7385cbdd8b 100644 --- a/pub/lib/mage/adminhtml/varienLoader.js +++ b/pub/lib/mage/adminhtml/varienLoader.js @@ -197,10 +197,10 @@ varienLoaderHandler.handler = { request.options.loaderArea = $$('#html-body .wrapper')[0]; // Blocks all page if(request && request.options.loaderArea){ - Element.clonePosition($('loading-mask'), $(request.options.loaderArea), {offsetLeft:-2}) + //Element.clonePosition($('loading-mask'), $(request.options.loaderArea), {offsetLeft:-2}); toggleSelectsUnderBlock($('loading-mask'), false); Element.show('loading-mask'); - setLoaderPosition(); + //setLoaderPosition(); if(request.options.loaderArea=='html-body'){ //Element.show('loading-process'); } diff --git a/pub/lib/mage/calendar.js b/pub/lib/mage/calendar.js index 35ed961d191..f0a0f06dfce 100644 --- a/pub/lib/mage/calendar.js +++ b/pub/lib/mage/calendar.js @@ -196,10 +196,16 @@ to[this._picker()]('option', 'minDate', selectedDate); }, this); $.mage.calendar.prototype._initPicker.call(this, from); + from.on('change', $.proxy(function() { + to[this._picker()]('option', 'minDate', from[this._picker()]('getDate')); + }, this)); this.options.onSelect = $.proxy(function(selectedDate) { from[this._picker()]('option', 'maxDate', selectedDate); }, this); $.mage.calendar.prototype._initPicker.call(this, to); + to.on('change', $.proxy(function() { + from[this._picker()]('option', 'maxDate', to[this._picker()]('getDate')); + }, this)); } }, diff --git a/pub/lib/mage/loader.js b/pub/lib/mage/loader.js index bec394ad7e6..01a59b69141 100644 --- a/pub/lib/mage/loader.js +++ b/pub/lib/mage/loader.js @@ -105,8 +105,7 @@ */ _render: function() { if (this.spinner.length === 0) { - this.spinner = $.tmpl(this.options.template, this.options) - .css(this._getCssObj()); + this.spinner = $.tmpl(this.options.template, this.options)/*.css(this._getCssObj())*/; } this.element.prepend(this.spinner); }, -- GitLab