Full Code of OXID-eSales/oxideshop_ce for AI

b-8.0.x 4463271bd87c cached
2624 files
7.2 MB
2.1M tokens
10543 symbols
1 requests
Download .txt
Showing preview only (8,212K chars total). Download the full file or copy to clipboard to get everything.
Repository: OXID-eSales/oxideshop_ce
Branch: b-8.0.x
Commit: 4463271bd87c
Files: 2624
Total size: 7.2 MB

Directory structure:
gitextract_qqbczboj/

├── .github/
│   ├── oxid-esales/
│   │   ├── install.sh
│   │   └── shop_ce.yaml
│   └── workflows/
│       ├── dispatch-manual.yaml
│       └── trigger.yaml
├── .gitignore
├── CHANGELOG-8.0.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── bin/
│   └── oe-console
├── composer.json
├── phpcs.xml.dist
├── phpunit.xml
├── source/
│   ├── .htaccess
│   ├── Application/
│   │   ├── Component/
│   │   │   ├── BasketComponent.php
│   │   │   ├── CategoriesComponent.php
│   │   │   ├── CurrencyComponent.php
│   │   │   ├── LanguageComponent.php
│   │   │   ├── Locator.php
│   │   │   ├── ShopComponent.php
│   │   │   ├── UserComponent.php
│   │   │   ├── UtilsComponent.php
│   │   │   └── Widget/
│   │   │       ├── Actions.php
│   │   │       ├── ArticleBox.php
│   │   │       ├── ArticleDetails.php
│   │   │       ├── CategoryTree.php
│   │   │       ├── CookieNote.php
│   │   │       ├── CurrencyList.php
│   │   │       ├── Information.php
│   │   │       ├── LanguageList.php
│   │   │       ├── ManufacturerList.php
│   │   │       ├── MiniBasket.php
│   │   │       ├── Rating.php
│   │   │       ├── Recommendation.php
│   │   │       ├── Review.php
│   │   │       ├── ServiceList.php
│   │   │       ├── ServiceMenu.php
│   │   │       ├── VendorList.php
│   │   │       └── WidgetController.php
│   │   ├── Controller/
│   │   │   ├── AccountController.php
│   │   │   ├── AccountDownloadsController.php
│   │   │   ├── AccountNewsletterController.php
│   │   │   ├── AccountNoticeListController.php
│   │   │   ├── AccountOrderController.php
│   │   │   ├── AccountPasswordController.php
│   │   │   ├── AccountRecommlistController.php
│   │   │   ├── AccountReviewController.php
│   │   │   ├── AccountUserController.php
│   │   │   ├── AccountWishlistController.php
│   │   │   ├── Admin/
│   │   │   │   ├── ActionsArticleAjax.php
│   │   │   │   ├── ActionsController.php
│   │   │   │   ├── ActionsGroupsAjax.php
│   │   │   │   ├── ActionsList.php
│   │   │   │   ├── ActionsMain.php
│   │   │   │   ├── ActionsMainAjax.php
│   │   │   │   ├── ActionsOrderAjax.php
│   │   │   │   ├── AdminContent.php
│   │   │   │   ├── AdminController.php
│   │   │   │   ├── AdminDetailsController.php
│   │   │   │   ├── AdminLinks.php
│   │   │   │   ├── AdminListController.php
│   │   │   │   ├── AdminNewsletter.php
│   │   │   │   ├── AdminOrder.php
│   │   │   │   ├── AdminPayment.php
│   │   │   │   ├── AdminPriceAlarm.php
│   │   │   │   ├── AdminStart.php
│   │   │   │   ├── AdminUser.php
│   │   │   │   ├── AdminWrapping.php
│   │   │   │   ├── AdminlinksList.php
│   │   │   │   ├── AdminlinksMain.php
│   │   │   │   ├── ArticleAccessoriesAjax.php
│   │   │   │   ├── ArticleAttribute.php
│   │   │   │   ├── ArticleAttributeAjax.php
│   │   │   │   ├── ArticleBundleAjax.php
│   │   │   │   ├── ArticleController.php
│   │   │   │   ├── ArticleCrossselling.php
│   │   │   │   ├── ArticleCrosssellingAjax.php
│   │   │   │   ├── ArticleExtend.php
│   │   │   │   ├── ArticleExtendAjax.php
│   │   │   │   ├── ArticleFiles.php
│   │   │   │   ├── ArticleList.php
│   │   │   │   ├── ArticleMain.php
│   │   │   │   ├── ArticleOverview.php
│   │   │   │   ├── ArticlePictures.php
│   │   │   │   ├── ArticlePicturesAjax.php
│   │   │   │   ├── ArticleReview.php
│   │   │   │   ├── ArticleSelectionAjax.php
│   │   │   │   ├── ArticleSeo.php
│   │   │   │   ├── ArticleStock.php
│   │   │   │   ├── ArticleUserdef.php
│   │   │   │   ├── ArticleVariant.php
│   │   │   │   ├── AttributeCategory.php
│   │   │   │   ├── AttributeCategoryAjax.php
│   │   │   │   ├── AttributeController.php
│   │   │   │   ├── AttributeList.php
│   │   │   │   ├── AttributeMain.php
│   │   │   │   ├── AttributeMainAjax.php
│   │   │   │   ├── AttributeOrderAjax.php
│   │   │   │   ├── CategoryController.php
│   │   │   │   ├── CategoryList.php
│   │   │   │   ├── CategoryMain.php
│   │   │   │   ├── CategoryMainAjax.php
│   │   │   │   ├── CategoryOrder.php
│   │   │   │   ├── CategoryOrderAjax.php
│   │   │   │   ├── CategoryPictures.php
│   │   │   │   ├── CategorySeo.php
│   │   │   │   ├── CategoryText.php
│   │   │   │   ├── CategoryUpdate.php
│   │   │   │   ├── ContentList.php
│   │   │   │   ├── ContentMain.php
│   │   │   │   ├── ContentSeo.php
│   │   │   │   ├── CountryController.php
│   │   │   │   ├── CountryList.php
│   │   │   │   ├── CountryMain.php
│   │   │   │   ├── DeliveryArticles.php
│   │   │   │   ├── DeliveryArticlesAjax.php
│   │   │   │   ├── DeliveryCategoriesAjax.php
│   │   │   │   ├── DeliveryController.php
│   │   │   │   ├── DeliveryGroupsAjax.php
│   │   │   │   ├── DeliveryList.php
│   │   │   │   ├── DeliveryMain.php
│   │   │   │   ├── DeliveryMainAjax.php
│   │   │   │   ├── DeliverySetController.php
│   │   │   │   ├── DeliverySetCountryAjax.php
│   │   │   │   ├── DeliverySetGroupsAjax.php
│   │   │   │   ├── DeliverySetList.php
│   │   │   │   ├── DeliverySetMain.php
│   │   │   │   ├── DeliverySetMainAjax.php
│   │   │   │   ├── DeliverySetPayment.php
│   │   │   │   ├── DeliverySetPaymentAjax.php
│   │   │   │   ├── DeliverySetRdfa.php
│   │   │   │   ├── DeliverySetUsers.php
│   │   │   │   ├── DeliverySetUsersAjax.php
│   │   │   │   ├── DeliveryUsers.php
│   │   │   │   ├── DeliveryUsersAjax.php
│   │   │   │   ├── DiagnosticsController.php
│   │   │   │   ├── DiagnosticsList.php
│   │   │   │   ├── DiagnosticsMain.php
│   │   │   │   ├── DiscountArticles.php
│   │   │   │   ├── DiscountArticlesAjax.php
│   │   │   │   ├── DiscountCategoriesAjax.php
│   │   │   │   ├── DiscountController.php
│   │   │   │   ├── DiscountGroupsAjax.php
│   │   │   │   ├── DiscountItemAjax.php
│   │   │   │   ├── DiscountList.php
│   │   │   │   ├── DiscountMain.php
│   │   │   │   ├── DiscountMainAjax.php
│   │   │   │   ├── DiscountUsers.php
│   │   │   │   ├── DiscountUsersAjax.php
│   │   │   │   ├── DynamicExportBaseController.php
│   │   │   │   ├── GenericExport.php
│   │   │   │   ├── GenericExportDo.php
│   │   │   │   ├── GenericExportMain.php
│   │   │   │   ├── GenericImport.php
│   │   │   │   ├── GenericImportMain.php
│   │   │   │   ├── LanguageController.php
│   │   │   │   ├── LanguageList.php
│   │   │   │   ├── LanguageMain.php
│   │   │   │   ├── ListComponentAjax.php
│   │   │   │   ├── ListReview.php
│   │   │   │   ├── ListUser.php
│   │   │   │   ├── LoginController.php
│   │   │   │   ├── ManufacturerController.php
│   │   │   │   ├── ManufacturerList.php
│   │   │   │   ├── ManufacturerMain.php
│   │   │   │   ├── ManufacturerMainAjax.php
│   │   │   │   ├── ManufacturerPicture.php
│   │   │   │   ├── ManufacturerSeo.php
│   │   │   │   ├── ModuleConfiguration.php
│   │   │   │   ├── ModuleController.php
│   │   │   │   ├── ModuleList.php
│   │   │   │   ├── ModuleMain.php
│   │   │   │   ├── ModuleSortList.php
│   │   │   │   ├── NavigationController.php
│   │   │   │   ├── NavigationTree.php
│   │   │   │   ├── ObjectSeo.php
│   │   │   │   ├── OrderAddress.php
│   │   │   │   ├── OrderArticle.php
│   │   │   │   ├── OrderDownloads.php
│   │   │   │   ├── OrderList.php
│   │   │   │   ├── OrderMain.php
│   │   │   │   ├── OrderOverview.php
│   │   │   │   ├── OrderRemark.php
│   │   │   │   ├── PaymentCountry.php
│   │   │   │   ├── PaymentCountryAjax.php
│   │   │   │   ├── PaymentList.php
│   │   │   │   ├── PaymentMain.php
│   │   │   │   ├── PaymentMainAjax.php
│   │   │   │   ├── PaymentRdfa.php
│   │   │   │   ├── PriceAlarmList.php
│   │   │   │   ├── PriceAlarmMail.php
│   │   │   │   ├── PriceAlarmMain.php
│   │   │   │   ├── PriceAlarmSend.php
│   │   │   │   ├── SelectListController.php
│   │   │   │   ├── SelectListList.php
│   │   │   │   ├── SelectListMain.php
│   │   │   │   ├── SelectListMainAjax.php
│   │   │   │   ├── SelectListOrderAjax.php
│   │   │   │   ├── ShopConfiguration.php
│   │   │   │   ├── ShopController.php
│   │   │   │   ├── ShopCountries.php
│   │   │   │   ├── ShopDefaultCategoryAjax.php
│   │   │   │   ├── ShopLicense.php
│   │   │   │   ├── ShopList.php
│   │   │   │   ├── ShopMain.php
│   │   │   │   ├── ShopPerformance.php
│   │   │   │   ├── ShopRdfa.php
│   │   │   │   ├── ShopSeo.php
│   │   │   │   ├── ShopSystem.php
│   │   │   │   ├── SystemInfoController.php
│   │   │   │   ├── SystemRequirements.php
│   │   │   │   ├── SystemRequirementsList.php
│   │   │   │   ├── SystemRequirementsMain.php
│   │   │   │   ├── ThemeConfiguration.php
│   │   │   │   ├── ThemeController.php
│   │   │   │   ├── ThemeList.php
│   │   │   │   ├── ThemeMain.php
│   │   │   │   ├── ToolsController.php
│   │   │   │   ├── ToolsList.php
│   │   │   │   ├── ToolsMain.php
│   │   │   │   ├── UserAddress.php
│   │   │   │   ├── UserArticle.php
│   │   │   │   ├── UserExtend.php
│   │   │   │   ├── UserGroupController.php
│   │   │   │   ├── UserGroupList.php
│   │   │   │   ├── UserGroupMain.php
│   │   │   │   ├── UserGroupMainAjax.php
│   │   │   │   ├── UserList.php
│   │   │   │   ├── UserMain.php
│   │   │   │   ├── UserMainAjax.php
│   │   │   │   ├── UserOverview.php
│   │   │   │   ├── UserPayment.php
│   │   │   │   ├── UserRemark.php
│   │   │   │   ├── VendorController.php
│   │   │   │   ├── VendorList.php
│   │   │   │   ├── VendorMain.php
│   │   │   │   ├── VendorMainAjax.php
│   │   │   │   ├── VendorSeo.php
│   │   │   │   ├── VoucherSerieController.php
│   │   │   │   ├── VoucherSerieExport.php
│   │   │   │   ├── VoucherSerieGenerate.php
│   │   │   │   ├── VoucherSerieGroups.php
│   │   │   │   ├── VoucherSerieGroupsAjax.php
│   │   │   │   ├── VoucherSerieList.php
│   │   │   │   ├── VoucherSerieMain.php
│   │   │   │   ├── WrappingList.php
│   │   │   │   └── WrappingMain.php
│   │   │   ├── ArticleDetailsController.php
│   │   │   ├── ArticleListController.php
│   │   │   ├── BasketController.php
│   │   │   ├── ClearCookiesController.php
│   │   │   ├── CompareController.php
│   │   │   ├── ContactController.php
│   │   │   ├── ContentController.php
│   │   │   ├── CreditsController.php
│   │   │   ├── DownloadController.php
│   │   │   ├── ExceptionErrorController.php
│   │   │   ├── ForgotPasswordController.php
│   │   │   ├── FrontendController.php
│   │   │   ├── LinksController.php
│   │   │   ├── ManufacturerListController.php
│   │   │   ├── MoreDetailsController.php
│   │   │   ├── NewsletterController.php
│   │   │   ├── OrderController.php
│   │   │   ├── OxidStartController.php
│   │   │   ├── PaymentController.php
│   │   │   ├── PriceAlarmController.php
│   │   │   ├── RecommListController.php
│   │   │   ├── RecommendationAddController.php
│   │   │   ├── RegisterController.php
│   │   │   ├── ReviewController.php
│   │   │   ├── SearchController.php
│   │   │   ├── StartController.php
│   │   │   ├── TemplateController.php
│   │   │   ├── TextEditorHandler.php
│   │   │   ├── ThankYouController.php
│   │   │   ├── UserController.php
│   │   │   ├── VendorListController.php
│   │   │   ├── WishListController.php
│   │   │   └── WrappingController.php
│   │   ├── Enum/
│   │   │   ├── NewsletterSubscriptionStatus.php
│   │   │   └── SubscriptionOptedInStatus.php
│   │   ├── Model/
│   │   │   ├── ActionList.php
│   │   │   ├── Actions.php
│   │   │   ├── Address.php
│   │   │   ├── AmountPriceList.php
│   │   │   ├── Article.php
│   │   │   ├── ArticleList.php
│   │   │   ├── Attribute.php
│   │   │   ├── AttributeList.php
│   │   │   ├── Basket.php
│   │   │   ├── BasketContentMarkGenerator.php
│   │   │   ├── BasketItem.php
│   │   │   ├── BasketReservation.php
│   │   │   ├── Category.php
│   │   │   ├── CategoryList.php
│   │   │   ├── CompanyVatIn.php
│   │   │   ├── Content.php
│   │   │   ├── ContentList.php
│   │   │   ├── Contract/
│   │   │   │   └── ArticleInterface.php
│   │   │   ├── Country.php
│   │   │   ├── CountryList.php
│   │   │   ├── Delivery.php
│   │   │   ├── DeliveryList.php
│   │   │   ├── DeliverySet.php
│   │   │   ├── DeliverySetList.php
│   │   │   ├── Diagnostics.php
│   │   │   ├── DiagnosticsOutput.php
│   │   │   ├── Discount.php
│   │   │   ├── DiscountList.php
│   │   │   ├── File.php
│   │   │   ├── FileCollector.php
│   │   │   ├── Groups.php
│   │   │   ├── Links.php
│   │   │   ├── ListObject.php
│   │   │   ├── Maintenance.php
│   │   │   ├── Manufacturer.php
│   │   │   ├── ManufacturerList.php
│   │   │   ├── MdVariant.php
│   │   │   ├── MediaUrl.php
│   │   │   ├── NewsSubscribed.php
│   │   │   ├── Object2Category.php
│   │   │   ├── Object2Group.php
│   │   │   ├── Order.php
│   │   │   ├── OrderArticle.php
│   │   │   ├── OrderArticleList.php
│   │   │   ├── OrderFile.php
│   │   │   ├── OrderFileList.php
│   │   │   ├── Payment.php
│   │   │   ├── PaymentGateway.php
│   │   │   ├── PaymentList.php
│   │   │   ├── PriceAlarm.php
│   │   │   ├── Rating.php
│   │   │   ├── RecommendationList.php
│   │   │   ├── Remark.php
│   │   │   ├── RequiredAddressFields.php
│   │   │   ├── RequiredFieldValidator.php
│   │   │   ├── RequiredFieldsValidator.php
│   │   │   ├── Review.php
│   │   │   ├── Search.php
│   │   │   ├── SelectList.php
│   │   │   ├── Selection.php
│   │   │   ├── SeoEncoderArticle.php
│   │   │   ├── SeoEncoderCategory.php
│   │   │   ├── SeoEncoderContent.php
│   │   │   ├── SeoEncoderManufacturer.php
│   │   │   ├── SeoEncoderRecomm.php
│   │   │   ├── SeoEncoderVendor.php
│   │   │   ├── Shop.php
│   │   │   ├── ShopList.php
│   │   │   ├── ShopViewValidator.php
│   │   │   ├── SimpleVariant.php
│   │   │   ├── SimpleVariantList.php
│   │   │   ├── State.php
│   │   │   ├── User/
│   │   │   │   ├── UserShippingAddressUpdatableFields.php
│   │   │   │   └── UserUpdatableFields.php
│   │   │   ├── User.php
│   │   │   ├── UserAddressList.php
│   │   │   ├── UserBasket.php
│   │   │   ├── UserBasketItem.php
│   │   │   ├── UserList.php
│   │   │   ├── UserPayment.php
│   │   │   ├── VariantHandler.php
│   │   │   ├── VariantSelectList.php
│   │   │   ├── VatSelector.php
│   │   │   ├── Vendor.php
│   │   │   ├── VendorList.php
│   │   │   ├── Voucher.php
│   │   │   ├── VoucherList.php
│   │   │   ├── VoucherSerie.php
│   │   │   └── Wrapping.php
│   │   └── translations/
│   │       ├── de/
│   │       │   ├── cust_lang.php.dist
│   │       │   ├── lang.php
│   │       │   └── translit_lang.php
│   │       └── en/
│   │           ├── cust_lang.php.dist
│   │           ├── lang.php
│   │           └── translit_lang.php
│   ├── Core/
│   │   ├── AdminLogSqlDecorator.php
│   │   ├── Autoload/
│   │   │   ├── BackwardsCompatibilityAutoload.php
│   │   │   ├── BackwardsCompatibilityClassMap.php
│   │   │   ├── BackwardsCompatibilityClassMapProvider.php
│   │   │   ├── ModuleAutoload.php
│   │   │   └── UnifiedNameSpaceClassMap.php
│   │   ├── BackwardsCompatibleClassNameProvider.php
│   │   ├── Base.php
│   │   ├── CompanyVatInChecker.php
│   │   ├── CompanyVatInCountryChecker.php
│   │   ├── CompanyVatInValidator.php
│   │   ├── Config.php
│   │   ├── Contract/
│   │   │   ├── AbstractUpdatableFields.php
│   │   │   ├── ClassNameResolverInterface.php
│   │   │   ├── ControllerMapProviderInterface.php
│   │   │   ├── IConfigurable.php
│   │   │   ├── ICountryAware.php
│   │   │   ├── IDisplayError.php
│   │   │   ├── ISelectList.php
│   │   │   └── IUrl.php
│   │   ├── Controller/
│   │   │   └── BaseController.php
│   │   ├── Counter.php
│   │   ├── Curl.php
│   │   ├── Dao/
│   │   │   ├── ApplicationServerDao.php
│   │   │   ├── ApplicationServerDaoInterface.php
│   │   │   └── BaseDaoInterface.php
│   │   ├── DataObject/
│   │   │   └── ApplicationServer.php
│   │   ├── Database/
│   │   │   └── Adapter/
│   │   │       ├── DatabaseInterface.php
│   │   │       ├── Doctrine/
│   │   │       │   ├── Database.php
│   │   │       │   └── ResultSet.php
│   │   │       └── ResultSetInterface.php
│   │   ├── DatabaseProvider.php
│   │   ├── DbMetaDataHandler.php
│   │   ├── DebugInfo.php
│   │   ├── Decryptor.php
│   │   ├── Di/
│   │   │   └── ContainerFacade.php
│   │   ├── DisplayError.php
│   │   ├── DynamicImageGenerator.php
│   │   ├── Email.php
│   │   ├── EmailBuilder.php
│   │   ├── Encryptor.php
│   │   ├── Exception/
│   │   │   ├── ArticleException.php
│   │   │   ├── ArticleInputException.php
│   │   │   ├── ConnectionException.php
│   │   │   ├── CookieException.php
│   │   │   ├── DatabaseConnectionException.php
│   │   │   ├── DatabaseErrorException.php
│   │   │   ├── DatabaseException.php
│   │   │   ├── ExceptionHandler.php
│   │   │   ├── ExceptionToDisplay.php
│   │   │   ├── FileException.php
│   │   │   ├── InputException.php
│   │   │   ├── LanguageNotFoundException.php
│   │   │   ├── ModuleValidationException.php
│   │   │   ├── NoArticleException.php
│   │   │   ├── NoResultException.php
│   │   │   ├── ObjectException.php
│   │   │   ├── OutOfStockException.php
│   │   │   ├── RoutingException.php
│   │   │   ├── ShopException.php
│   │   │   ├── StandardException.php
│   │   │   ├── SystemComponentException.php
│   │   │   ├── UserException.php
│   │   │   └── VoucherException.php
│   │   ├── Field.php
│   │   ├── FileSystem/
│   │   │   └── FileSystem.php
│   │   ├── Form/
│   │   │   ├── FormFields.php
│   │   │   ├── FormFieldsCleaner.php
│   │   │   ├── FormFieldsTrimmer.php
│   │   │   ├── FormFieldsTrimmerInterface.php
│   │   │   └── UpdatableFieldsConstructor.php
│   │   ├── GenericImport/
│   │   │   ├── GenericImport.php
│   │   │   └── ImportObject/
│   │   │       ├── Accessories2Article.php
│   │   │       ├── Article.php
│   │   │       ├── Article2Action.php
│   │   │       ├── Article2Category.php
│   │   │       ├── ArticleExtends.php
│   │   │       ├── Category.php
│   │   │       ├── Country.php
│   │   │       ├── CrossSelling.php
│   │   │       ├── ImportObject.php
│   │   │       ├── Order.php
│   │   │       ├── OrderArticle.php
│   │   │       ├── ScalePrice.php
│   │   │       ├── User.php
│   │   │       └── Vendor.php
│   │   ├── Hasher.php
│   │   ├── Header.php
│   │   ├── InputValidator.php
│   │   ├── Language.php
│   │   ├── Model/
│   │   │   ├── BaseModel.php
│   │   │   ├── FieldNameHelper.php
│   │   │   ├── ListModel.php
│   │   │   └── MultiLanguageModel.php
│   │   ├── Module/
│   │   │   ├── Module.php
│   │   │   ├── ModuleChainsGenerator.php
│   │   │   └── ModuleList.php
│   │   ├── NamespaceInformationProvider.php
│   │   ├── NoJsValidator.php
│   │   ├── OnlineCaller.php
│   │   ├── OnlineLicenseCheck.php
│   │   ├── OnlineLicenseCheckCaller.php
│   │   ├── OnlineLicenseCheckRequest.php
│   │   ├── OnlineLicenseCheckResponse.php
│   │   ├── OnlineModuleVersionNotifier.php
│   │   ├── OnlineModuleVersionNotifierCaller.php
│   │   ├── OnlineModulesNotifierRequest.php
│   │   ├── OnlineRequest.php
│   │   ├── OnlineServerEmailBuilder.php
│   │   ├── OnlineVatIdCheck.php
│   │   ├── OpenSSLFunctionalityChecker.php
│   │   ├── Output.php
│   │   ├── Oxid.php
│   │   ├── PasswordHasher.php
│   │   ├── PictureHandler.php
│   │   ├── Price.php
│   │   ├── PriceList.php
│   │   ├── Registry.php
│   │   ├── Request.php
│   │   ├── Routing/
│   │   │   ├── ControllerClassNameResolver.php
│   │   │   └── ShopControllerMapProvider.php
│   │   ├── SeoDecoder.php
│   │   ├── SeoEncoder.php
│   │   ├── SepaBICValidator.php
│   │   ├── SepaIBANValidator.php
│   │   ├── SepaValidator.php
│   │   ├── Service/
│   │   │   ├── ApplicationServerExporter.php
│   │   │   ├── ApplicationServerExporterInterface.php
│   │   │   ├── ApplicationServerService.php
│   │   │   └── ApplicationServerServiceInterface.php
│   │   ├── Session.php
│   │   ├── SettingsHandler.php
│   │   ├── Sha512Hasher.php
│   │   ├── ShopControl.php
│   │   ├── ShopIdCalculator.php
│   │   ├── ShopVersion.php
│   │   ├── SimpleXml.php
│   │   ├── SortingValidator.php
│   │   ├── Str.php
│   │   ├── StrMb.php
│   │   ├── StrRegular.php
│   │   ├── SystemEventHandler.php
│   │   ├── SystemRequirements.php
│   │   ├── TableViewNameGenerator.php
│   │   ├── Theme.php
│   │   ├── UniversallyUniqueIdGenerator.php
│   │   ├── UserCounter.php
│   │   ├── Utils.php
│   │   ├── UtilsCount.php
│   │   ├── UtilsDate.php
│   │   ├── UtilsFile.php
│   │   ├── UtilsObject.php
│   │   ├── UtilsPic.php
│   │   ├── UtilsServer.php
│   │   ├── UtilsString.php
│   │   ├── UtilsUrl.php
│   │   ├── UtilsView.php
│   │   ├── UtilsXml.php
│   │   ├── ViewConfig.php
│   │   ├── ViewHelper/
│   │   │   ├── BaseRegistrator.php
│   │   │   ├── JavaScriptRegistrator.php
│   │   │   ├── JavaScriptRenderer.php
│   │   │   ├── StyleRegistrator.php
│   │   │   └── StyleRenderer.php
│   │   ├── WidgetControl.php
│   │   └── utils/
│   │       └── oxpicgenerator.php
│   ├── Internal/
│   │   ├── Container/
│   │   │   ├── BootstrapContainerBuilder.php
│   │   │   ├── BootstrapContainerFactory.php
│   │   │   ├── ContainerFactory.php
│   │   │   ├── ContainerProviderInterface.php
│   │   │   ├── Event/
│   │   │   │   └── ConfigurationChangedEventSubscriber.php
│   │   │   ├── bootstrap-services.yaml
│   │   │   └── services.yaml
│   │   ├── Domain/
│   │   │   ├── Admin/
│   │   │   │   ├── Command/
│   │   │   │   │   ├── CreateUserCommand.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Dao/
│   │   │   │   │   ├── AdminDao.php
│   │   │   │   │   ├── AdminDaoInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── DataObject/
│   │   │   │   │   └── Admin.php
│   │   │   │   ├── Event/
│   │   │   │   │   └── AdminModeChangedEvent.php
│   │   │   │   ├── Exception/
│   │   │   │   │   ├── EmailAlreadyTakenException.php
│   │   │   │   │   ├── InvalidEmailException.php
│   │   │   │   │   ├── InvalidRightsException.php
│   │   │   │   │   └── InvalidShopException.php
│   │   │   │   ├── Factory/
│   │   │   │   │   ├── AdminFactory.php
│   │   │   │   │   ├── AdminFactoryInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Service/
│   │   │   │   │   ├── AdminUserService.php
│   │   │   │   │   ├── AdminUserServiceInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   └── services.yaml
│   │   │   ├── Authentication/
│   │   │   │   ├── Bridge/
│   │   │   │   │   ├── PasswordServiceBridge.php
│   │   │   │   │   ├── PasswordServiceBridgeInterface.php
│   │   │   │   │   ├── RandomTokenGeneratorBridge.php
│   │   │   │   │   └── RandomTokenGeneratorBridgeInterface.php
│   │   │   │   ├── Exception/
│   │   │   │   │   └── UnavailableSourceOfRandomnessException.php
│   │   │   │   ├── Generator/
│   │   │   │   │   ├── RandomTokenGenerator.php
│   │   │   │   │   └── RandomTokenGeneratorInterface.php
│   │   │   │   ├── Service/
│   │   │   │   │   ├── PasswordVerificationService.php
│   │   │   │   │   └── PasswordVerificationServiceInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Contact/
│   │   │   │   ├── Form/
│   │   │   │   │   ├── ContactFormBridge.php
│   │   │   │   │   ├── ContactFormBridgeInterface.php
│   │   │   │   │   ├── ContactFormConfigurationFactory.php
│   │   │   │   │   ├── ContactFormEmailValidator.php
│   │   │   │   │   ├── ContactFormFactory.php
│   │   │   │   │   ├── ContactFormFieldsConfigurationDataProvider.php
│   │   │   │   │   ├── ContactFormMessageBuilder.php
│   │   │   │   │   └── ContactFormMessageBuilderInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Media/
│   │   │   │   ├── Dao/
│   │   │   │   │   ├── MediaDao.php
│   │   │   │   │   └── MediaDaoInterface.php
│   │   │   │   ├── DataMapper/
│   │   │   │   │   ├── DataMapper.php
│   │   │   │   │   └── DataMapperInterface.php
│   │   │   │   ├── DataObject/
│   │   │   │   │   ├── Media.php
│   │   │   │   │   ├── MediaPath.php
│   │   │   │   │   └── MediaType.php
│   │   │   │   ├── MediaUploader.php
│   │   │   │   ├── MediaUploaderInterface.php
│   │   │   │   ├── MediaUrlGenerator.php
│   │   │   │   ├── MediaUrlGeneratorInterface.php
│   │   │   │   ├── Validator/
│   │   │   │   │   ├── Exception/
│   │   │   │   │   │   ├── FileExtensionMismatchException.php
│   │   │   │   │   │   ├── FileSizeTooLargeException.php
│   │   │   │   │   │   ├── FileSizeTooSmallException.php
│   │   │   │   │   │   ├── MediaValidationException.php
│   │   │   │   │   │   ├── MimeBaseTypeMismatchException.php
│   │   │   │   │   │   ├── MimeGuessMismatchException.php
│   │   │   │   │   │   ├── MimeTypeGuessFailedException.php
│   │   │   │   │   │   └── UploadInvalidException.php
│   │   │   │   │   ├── FileExtensionConstraintValidator.php
│   │   │   │   │   ├── FileSizeConstraintValidator.php
│   │   │   │   │   ├── MediaConstraintValidatorInterface.php
│   │   │   │   │   ├── MimeTypeConstraintValidator.php
│   │   │   │   │   └── UploadValidityConstraintValidator.php
│   │   │   │   └── services.yaml
│   │   │   ├── Newsletter/
│   │   │   │   ├── Bridge/
│   │   │   │   │   ├── NewsletterRecipientsDaoBridge.php
│   │   │   │   │   └── NewsletterRecipientsDaoBridgeInterface.php
│   │   │   │   ├── Dao/
│   │   │   │   │   ├── NewsletterRecipientsDao.php
│   │   │   │   │   └── NewsletterRecipientsDaoInterface.php
│   │   │   │   ├── DataMapper/
│   │   │   │   │   ├── NewsletterRecipientsDataMapper.php
│   │   │   │   │   └── NewsletterRecipientsDataMapperInterface.php
│   │   │   │   ├── DataObject/
│   │   │   │   │   └── NewsletterRecipient.php
│   │   │   │   └── services.yaml
│   │   │   ├── Product/
│   │   │   │   ├── Media/
│   │   │   │   │   ├── Dao/
│   │   │   │   │   │   ├── ProductMediaDao.php
│   │   │   │   │   │   └── ProductMediaDaoInterface.php
│   │   │   │   │   ├── DataMapper/
│   │   │   │   │   │   ├── DataMapper.php
│   │   │   │   │   │   └── DataMapperInterface.php
│   │   │   │   │   ├── DataObject/
│   │   │   │   │   │   ├── ProductMedia.php
│   │   │   │   │   │   ├── ProductMediaRole.php
│   │   │   │   │   │   ├── ProductMediaRoleSet.php
│   │   │   │   │   │   ├── ProductMediaSorting.php
│   │   │   │   │   │   └── ProductMediaView.php
│   │   │   │   │   ├── Exception/
│   │   │   │   │   │   └── EmptyProductMediaRoleException.php
│   │   │   │   │   ├── Factory/
│   │   │   │   │   │   ├── ProductMediaFactory.php
│   │   │   │   │   │   └── ProductMediaFactoryInterface.php
│   │   │   │   │   ├── Service/
│   │   │   │   │   │   ├── ProductMediaPathResolver.php
│   │   │   │   │   │   ├── ProductMediaPathResolverInterface.php
│   │   │   │   │   │   ├── ProductMediaService.php
│   │   │   │   │   │   ├── ProductMediaServiceInterface.php
│   │   │   │   │   │   ├── ProductMediaUploadProcessor.php
│   │   │   │   │   │   ├── ProductMediaUploadProcessorInterface.php
│   │   │   │   │   │   ├── ProductMediaViewService.php
│   │   │   │   │   │   ├── ProductMediaViewServiceInterface.php
│   │   │   │   │   │   ├── ProductVariantMediaService.php
│   │   │   │   │   │   └── ProductVariantMediaServiceInterface.php
│   │   │   │   │   ├── Validator/
│   │   │   │   │   │   └── ProductMediaValidator.php
│   │   │   │   │   ├── parameters.yaml
│   │   │   │   │   └── services.yaml
│   │   │   │   └── Search/
│   │   │   │       ├── Event/
│   │   │   │       │   ├── AfterProductSearchEvent.php
│   │   │   │       │   └── BeforeProductSearchEvent.php
│   │   │   │       ├── ProductSearchCriteria.php
│   │   │   │       ├── ProductSearchException.php
│   │   │   │       ├── ProductSearchResult.php
│   │   │   │       ├── ProductSearchServiceInterface.php
│   │   │   │       ├── parameters.yaml
│   │   │   │       └── services.yaml
│   │   │   ├── Review/
│   │   │   │   ├── Bridge/
│   │   │   │   │   ├── ProductRatingBridge.php
│   │   │   │   │   ├── ProductRatingBridgeInterface.php
│   │   │   │   │   ├── UserRatingBridge.php
│   │   │   │   │   ├── UserRatingBridgeInterface.php
│   │   │   │   │   ├── UserReviewAndRatingBridge.php
│   │   │   │   │   ├── UserReviewAndRatingBridgeInterface.php
│   │   │   │   │   ├── UserReviewBridge.php
│   │   │   │   │   ├── UserReviewBridgeInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Dao/
│   │   │   │   │   ├── ProductRatingDao.php
│   │   │   │   │   ├── ProductRatingDaoInterface.php
│   │   │   │   │   ├── RatingDao.php
│   │   │   │   │   ├── RatingDaoInterface.php
│   │   │   │   │   ├── ReviewDao.php
│   │   │   │   │   ├── ReviewDaoInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── DataMapper/
│   │   │   │   │   ├── ProductRatingDataMapper.php
│   │   │   │   │   ├── ProductRatingDataMapperInterface.php
│   │   │   │   │   ├── RatingDataMapper.php
│   │   │   │   │   ├── RatingDataMapperInterface.php
│   │   │   │   │   ├── ReviewDataMapper.php
│   │   │   │   │   ├── ReviewDataMapperInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── DataObject/
│   │   │   │   │   ├── ProductRating.php
│   │   │   │   │   ├── Rating.php
│   │   │   │   │   └── Review.php
│   │   │   │   ├── Exception/
│   │   │   │   │   ├── RatingPermissionException.php
│   │   │   │   │   ├── ReviewAndRatingObjectTypeException.php
│   │   │   │   │   └── ReviewPermissionException.php
│   │   │   │   ├── Service/
│   │   │   │   │   ├── ProductRatingService.php
│   │   │   │   │   ├── ProductRatingServiceInterface.php
│   │   │   │   │   ├── RatingCalculatorService.php
│   │   │   │   │   ├── RatingCalculatorServiceInterface.php
│   │   │   │   │   ├── ReviewAndRatingMergingService.php
│   │   │   │   │   ├── ReviewAndRatingMergingServiceInterface.php
│   │   │   │   │   ├── UserRatingService.php
│   │   │   │   │   ├── UserRatingServiceInterface.php
│   │   │   │   │   ├── UserReviewAndRatingService.php
│   │   │   │   │   ├── UserReviewAndRatingServiceInterface.php
│   │   │   │   │   ├── UserReviewService.php
│   │   │   │   │   ├── UserReviewServiceInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── ViewDataObject/
│   │   │   │   │   └── ReviewAndRating.php
│   │   │   │   └── services.yaml
│   │   │   ├── parameter.yaml
│   │   │   └── services.yaml
│   │   ├── Framework/
│   │   │   ├── Api/
│   │   │   │   ├── Api.php
│   │   │   │   ├── AttributeRouteControllerLoader.php
│   │   │   │   ├── ExceptionHandler.php
│   │   │   │   ├── HttpExceptionListener.php
│   │   │   │   └── services.yaml
│   │   │   ├── Cache/
│   │   │   │   ├── Adapter/
│   │   │   │   │   ├── FilesystemTagAwareAdapterFactory.php
│   │   │   │   │   ├── TagAwareAdapterFactoryInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Command/
│   │   │   │   │   ├── ClearCacheCommand.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Event/
│   │   │   │   │   └── ClearShopCacheEvent.php
│   │   │   │   ├── ShopCacheCleanerInterface.php
│   │   │   │   ├── ShopCacheFacade.php
│   │   │   │   └── services.yaml
│   │   │   ├── Config/
│   │   │   │   ├── Dao/
│   │   │   │   │   ├── ShopConfigurationSettingDao.php
│   │   │   │   │   └── ShopConfigurationSettingDaoInterface.php
│   │   │   │   ├── DataObject/
│   │   │   │   │   ├── ShopConfigurationSetting.php
│   │   │   │   │   └── ShopSettingType.php
│   │   │   │   ├── Event/
│   │   │   │   │   └── ShopConfigurationChangedEvent.php
│   │   │   │   ├── Exception/
│   │   │   │   │   └── InvalidShopSettingValueException.php
│   │   │   │   └── Utility/
│   │   │   │       ├── ShopSettingEncoder.php
│   │   │   │       └── ShopSettingEncoderInterface.php
│   │   │   ├── Console/
│   │   │   │   └── services.yaml
│   │   │   ├── Controller/
│   │   │   │   ├── AbstractControllerDecorator.php
│   │   │   │   └── ViewControllerInterface.php
│   │   │   ├── DIContainer/
│   │   │   │   ├── CompilerPass/
│   │   │   │   │   ├── RoutePass.php
│   │   │   │   │   └── ViewControllerPass.php
│   │   │   │   ├── ContainerBuilder.php
│   │   │   │   ├── Dao/
│   │   │   │   │   ├── ContainerAwareProjectYamlDao.php
│   │   │   │   │   ├── ParameterDao.php
│   │   │   │   │   ├── ParameterDaoInterface.php
│   │   │   │   │   ├── ProjectYamlDao.php
│   │   │   │   │   ├── ProjectYamlDaoInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── DataObject/
│   │   │   │   │   └── DIConfigWrapper.php
│   │   │   │   ├── Event/
│   │   │   │   │   └── ProjectYamlChangedEvent.php
│   │   │   │   ├── Exception/
│   │   │   │   │   ├── MissingServiceException.php
│   │   │   │   │   ├── MissingUpdateCallException.php
│   │   │   │   │   ├── NoServiceYamlException.php
│   │   │   │   │   └── SystemServiceOverwriteException.php
│   │   │   │   ├── Service/
│   │   │   │   │   ├── ContainerCacheInterface.php
│   │   │   │   │   ├── FilesystemContainerCache.php
│   │   │   │   │   ├── ProjectYamlImportService.php
│   │   │   │   │   ├── ProjectYamlImportServiceInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   └── services.yaml
│   │   │   ├── Dao/
│   │   │   │   ├── EntryDoesNotExistDaoException.php
│   │   │   │   └── InvalidObjectIdDaoException.php
│   │   │   ├── Database/
│   │   │   │   ├── Configuration/
│   │   │   │   │   ├── DataObject/
│   │   │   │   │   │   └── DatabaseConfiguration.php
│   │   │   │   │   └── InvalidDatabaseConfigurationException.php
│   │   │   │   ├── ConnectionFactory.php
│   │   │   │   ├── ConnectionFactoryInterface.php
│   │   │   │   ├── ConnectionParameterProvider.php
│   │   │   │   ├── ConnectionParameterProviderInterface.php
│   │   │   │   ├── Id.php
│   │   │   │   ├── Logger/
│   │   │   │   │   ├── QueryLogContextExtender.php
│   │   │   │   │   ├── QueryLogContextExtenderInterface.php
│   │   │   │   │   ├── QueryLogFilter.php
│   │   │   │   │   ├── QueryLogFilterInterface.php
│   │   │   │   │   ├── QueryLogger.php
│   │   │   │   │   ├── QueryLoggerFactory.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── QueryBuilderFactory.php
│   │   │   │   ├── QueryBuilderFactoryInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Edition/
│   │   │   │   ├── Edition.php
│   │   │   │   ├── EditionDirectoriesLocator.php
│   │   │   │   ├── EditionPaths.php
│   │   │   │   └── EditionResolver.php
│   │   │   ├── Env/
│   │   │   │   ├── DotenvLoader.php
│   │   │   │   └── EnvUrlFormatter.php
│   │   │   ├── Event/
│   │   │   │   └── services.yaml
│   │   │   ├── FileSystem/
│   │   │   │   ├── Bridge/
│   │   │   │   │   ├── MasterImageHandlerBridge.php
│   │   │   │   │   └── MasterImageHandlerBridgeInterface.php
│   │   │   │   ├── DirectoryNotExistentException.php
│   │   │   │   ├── DirectoryNotReadableException.php
│   │   │   │   ├── FileGenerator/
│   │   │   │   │   ├── Bridge/
│   │   │   │   │   │   ├── CsvFileGeneratorBridge.php
│   │   │   │   │   │   └── FileGeneratorBridgeInterface.php
│   │   │   │   │   ├── CsvFileGenerator.php
│   │   │   │   │   └── FileGeneratorInterface.php
│   │   │   │   ├── ImageHandlerInterface.php
│   │   │   │   ├── MasterImageHandler.php
│   │   │   │   ├── ProjectDirectoriesLocator.php
│   │   │   │   ├── ProjectRootLocator.php
│   │   │   │   ├── Validator/
│   │   │   │   │   ├── FileValidator.php
│   │   │   │   │   ├── FileValidatorBridge.php
│   │   │   │   │   ├── FileValidatorBridgeInterface.php
│   │   │   │   │   ├── FileValidatorInterface.php
│   │   │   │   │   └── ImageValidationException.php
│   │   │   │   ├── bootstrap-services.yaml
│   │   │   │   └── services.yaml
│   │   │   ├── Form/
│   │   │   │   ├── Form.php
│   │   │   │   ├── FormFactoryInterface.php
│   │   │   │   ├── FormField.php
│   │   │   │   ├── FormFieldInterface.php
│   │   │   │   ├── FormInterface.php
│   │   │   │   ├── FormValidatorInterface.php
│   │   │   │   ├── RequiredFieldsValidator.php
│   │   │   │   └── services.yaml
│   │   │   ├── FormConfiguration/
│   │   │   │   ├── FieldConfiguration.php
│   │   │   │   ├── FieldConfigurationInterface.php
│   │   │   │   ├── FormConfiguration.php
│   │   │   │   ├── FormConfigurationFactoryInterface.php
│   │   │   │   ├── FormConfigurationInterface.php
│   │   │   │   └── FormFieldsConfigurationDataProviderInterface.php
│   │   │   ├── Html/
│   │   │   │   ├── AllowAllHtmlSanitizer.php
│   │   │   │   ├── HtmlSanitizer.php
│   │   │   │   ├── HtmlSanitizerConfigFactory.php
│   │   │   │   ├── HtmlSanitizerConfigFactoryInterface.php
│   │   │   │   ├── HtmlSanitizerFactory.php
│   │   │   │   ├── HtmlSanitizerInterface.php
│   │   │   │   ├── parameters.yaml
│   │   │   │   └── services.yaml
│   │   │   ├── Logger/
│   │   │   │   ├── Factory/
│   │   │   │   │   ├── LoggerFactoryInterface.php
│   │   │   │   │   └── MonologLoggerFactory.php
│   │   │   │   ├── LoggerServiceFactory.php
│   │   │   │   └── services.yaml
│   │   │   ├── Mailing/
│   │   │   │   ├── Factory/
│   │   │   │   │   ├── TransportFactory.php
│   │   │   │   │   └── TransportFactoryInterface.php
│   │   │   │   ├── parameters.yaml
│   │   │   │   └── services.yaml
│   │   │   ├── Migration/
│   │   │   │   ├── MigrationExecutor.php
│   │   │   │   ├── MigrationExecutorInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Module/
│   │   │   │   ├── Cache/
│   │   │   │   │   ├── CacheNotFoundException.php
│   │   │   │   │   ├── InvalidateModuleCacheEventSubscriber.php
│   │   │   │   │   ├── ModuleCache.php
│   │   │   │   │   ├── ModuleCacheInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Command/
│   │   │   │   │   ├── InstallModuleAssetsCommand.php
│   │   │   │   │   ├── ModuleActivateCommand.php
│   │   │   │   │   ├── ModuleDeactivateCommand.php
│   │   │   │   │   ├── ModuleInstallCommand.php
│   │   │   │   │   ├── ModuleUninstallCommand.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Configuration/
│   │   │   │   │   ├── Bridge/
│   │   │   │   │   │   ├── ModuleConfigurationDaoBridge.php
│   │   │   │   │   │   ├── ModuleConfigurationDaoBridgeInterface.php
│   │   │   │   │   │   ├── ModuleConfigurationDataMapperBridge.php
│   │   │   │   │   │   ├── ModuleConfigurationDataMapperBridgeInterface.php
│   │   │   │   │   │   ├── ModuleSettingBridge.php
│   │   │   │   │   │   ├── ModuleSettingBridgeInterface.php
│   │   │   │   │   │   ├── ShopConfigurationDaoBridge.php
│   │   │   │   │   │   └── ShopConfigurationDaoBridgeInterface.php
│   │   │   │   │   ├── Cache/
│   │   │   │   │   │   ├── ClassPropertyModuleConfigurationCache.php
│   │   │   │   │   │   └── ModuleConfigurationCacheInterface.php
│   │   │   │   │   ├── Dao/
│   │   │   │   │   │   ├── Chain/
│   │   │   │   │   │   │   ├── ClassExtensionsChainDao.php
│   │   │   │   │   │   │   ├── ClassExtensionsChainDaoInterface.php
│   │   │   │   │   │   │   ├── TemplateExtensionChainDao.php
│   │   │   │   │   │   │   └── TemplateExtensionChainDaoInterface.php
│   │   │   │   │   │   ├── ModuleConfigurationDao.php
│   │   │   │   │   │   ├── ModuleConfigurationDaoInterface.php
│   │   │   │   │   │   ├── ModuleConfigurationExtenderInterface.php
│   │   │   │   │   │   ├── ModuleDependencyDao.php
│   │   │   │   │   │   ├── ModuleDependencyDaoInterface.php
│   │   │   │   │   │   ├── ModuleEnvironmentConfigurationDao.php
│   │   │   │   │   │   ├── ModuleEnvironmentConfigurationDaoInterface.php
│   │   │   │   │   │   ├── ModuleEnvironmentConfigurationExtender.php
│   │   │   │   │   │   ├── ShopConfigurationDao.php
│   │   │   │   │   │   ├── ShopConfigurationDaoInterface.php
│   │   │   │   │   │   ├── ShopEnvironmentMisconfigurationEventSubscriber.php
│   │   │   │   │   │   └── ShopEnvironmentWithOrphanSettingEvent.php
│   │   │   │   │   ├── DataMapper/
│   │   │   │   │   │   ├── ModuleConfiguration/
│   │   │   │   │   │   │   ├── ClassExtensionsDataMapper.php
│   │   │   │   │   │   │   ├── ClassExtensionsExportDataMapper.php
│   │   │   │   │   │   │   ├── ControllersDataMapper.php
│   │   │   │   │   │   │   ├── ControllersExportDataMapper.php
│   │   │   │   │   │   │   ├── EventsDataMapper.php
│   │   │   │   │   │   │   └── ModuleSettingsDataMapper.php
│   │   │   │   │   │   ├── ModuleConfigurationDataMapper.php
│   │   │   │   │   │   ├── ModuleConfigurationDataMapperInterface.php
│   │   │   │   │   │   ├── ModuleConfigurationExportDataMapper.php
│   │   │   │   │   │   └── ModuleConfigurationExportDataMapperInterface.php
│   │   │   │   │   ├── DataObject/
│   │   │   │   │   │   ├── ClassExtensionsChain.php
│   │   │   │   │   │   ├── ModuleConfiguration/
│   │   │   │   │   │   │   ├── ClassExtension.php
│   │   │   │   │   │   │   ├── Controller.php
│   │   │   │   │   │   │   └── Event.php
│   │   │   │   │   │   ├── ModuleConfiguration.php
│   │   │   │   │   │   ├── ModuleDependencies.php
│   │   │   │   │   │   ├── ModuleIdChain.php
│   │   │   │   │   │   ├── ModuleTemplateExtensionChain.php
│   │   │   │   │   │   ├── ShopConfiguration.php
│   │   │   │   │   │   └── UnresolvedModuleDependencies.php
│   │   │   │   │   ├── Definition/
│   │   │   │   │   │   ├── TreeBuilderFactory.php
│   │   │   │   │   │   └── TreeBuilderFactoryInterface.php
│   │   │   │   │   ├── Event/
│   │   │   │   │   │   ├── ModuleClassExtensionChainChangedEvent.php
│   │   │   │   │   │   └── ModuleConfigurationChangedEvent.php
│   │   │   │   │   ├── Exception/
│   │   │   │   │   │   ├── ExtensionNotInChainException.php
│   │   │   │   │   │   ├── InvalidModuleIdException.php
│   │   │   │   │   │   ├── ModuleConfigurationNotFoundException.php
│   │   │   │   │   │   ├── ModuleSettingNotFountException.php
│   │   │   │   │   │   ├── ProjectConfigurationIsEmptyException.php
│   │   │   │   │   │   └── ShopConfigurationNotFoundException.php
│   │   │   │   │   ├── Service/
│   │   │   │   │   │   ├── ModuleClassExtensionsMergingService.php
│   │   │   │   │   │   ├── ModuleClassExtensionsMergingServiceInterface.php
│   │   │   │   │   │   ├── ModuleConfigurationMergingService.php
│   │   │   │   │   │   ├── ModuleConfigurationMergingServiceInterface.php
│   │   │   │   │   │   ├── SettingsMergingService.php
│   │   │   │   │   │   └── SettingsMergingServiceInterface.php
│   │   │   │   │   ├── bootstrap-services.yaml
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Facade/
│   │   │   │   │   ├── ActiveModulesDataProvider.php
│   │   │   │   │   ├── ActiveModulesDataProviderBridge.php
│   │   │   │   │   ├── ActiveModulesDataProviderBridgeInterface.php
│   │   │   │   │   ├── ActiveModulesDataProviderInterface.php
│   │   │   │   │   ├── ModuleSettingService.php
│   │   │   │   │   ├── ModuleSettingServiceInterface.php
│   │   │   │   │   ├── ModulesDataProvider.php
│   │   │   │   │   ├── ModulesDataProviderInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Install/
│   │   │   │   │   ├── DataObject/
│   │   │   │   │   │   └── OxidEshopPackage.php
│   │   │   │   │   ├── Service/
│   │   │   │   │   │   ├── BootstrapModuleInstaller.php
│   │   │   │   │   │   ├── ModuleConfigurationInstaller.php
│   │   │   │   │   │   ├── ModuleConfigurationInstallerInterface.php
│   │   │   │   │   │   ├── ModuleFilesInstaller.php
│   │   │   │   │   │   ├── ModuleFilesInstallerInterface.php
│   │   │   │   │   │   ├── ModuleInstaller.php
│   │   │   │   │   │   ├── ModuleInstallerInterface.php
│   │   │   │   │   │   ├── ProjectConfigurationGenerator.php
│   │   │   │   │   │   └── ProjectConfigurationGeneratorInterface.php
│   │   │   │   │   ├── bootstrap-services.yaml
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── MetaData/
│   │   │   │   │   ├── Converter/
│   │   │   │   │   │   ├── MetaDataConverterAggregate.php
│   │   │   │   │   │   ├── MetaDataConverterInterface.php
│   │   │   │   │   │   └── ModuleSettingsBooleanConverter.php
│   │   │   │   │   ├── Dao/
│   │   │   │   │   │   ├── MetaDataNormalizer.php
│   │   │   │   │   │   ├── MetaDataNormalizerInterface.php
│   │   │   │   │   │   ├── MetaDataProvider.php
│   │   │   │   │   │   ├── MetaDataProviderInterface.php
│   │   │   │   │   │   ├── MetaDataSchemataProvider.php
│   │   │   │   │   │   ├── MetaDataSchemataProviderInterface.php
│   │   │   │   │   │   ├── ModuleConfigurationDao.php
│   │   │   │   │   │   └── ModuleConfigurationDaoInterface.php
│   │   │   │   │   ├── DataMapper/
│   │   │   │   │   │   ├── MetaDataMapper.php
│   │   │   │   │   │   └── MetaDataToModuleConfigurationDataMapperInterface.php
│   │   │   │   │   ├── Exception/
│   │   │   │   │   │   ├── InvalidMetaDataException.php
│   │   │   │   │   │   ├── MetaDataVersionException.php
│   │   │   │   │   │   ├── ModuleIdNotValidException.php
│   │   │   │   │   │   ├── SettingNotValidException.php
│   │   │   │   │   │   ├── UnsupportedMetaDataKeyException.php
│   │   │   │   │   │   ├── UnsupportedMetaDataValueTypeException.php
│   │   │   │   │   │   └── UnsupportedMetaDataVersionException.php
│   │   │   │   │   ├── Validator/
│   │   │   │   │   │   ├── MetaDataSchemaValidator.php
│   │   │   │   │   │   ├── MetaDataSchemaValidatorInterface.php
│   │   │   │   │   │   ├── MetaDataValidatorAggregate.php
│   │   │   │   │   │   ├── MetaDataValidatorInterface.php
│   │   │   │   │   │   ├── ModuleIdValidator.php
│   │   │   │   │   │   ├── ModuleSettingBooleanValidator.php
│   │   │   │   │   │   └── SettingValidatorInterface.php
│   │   │   │   │   └── bootstrap-services.yaml
│   │   │   │   ├── Path/
│   │   │   │   │   ├── ModuleAssetsPathResolver.php
│   │   │   │   │   ├── ModuleAssetsPathResolverBridge.php
│   │   │   │   │   ├── ModuleAssetsPathResolverBridgeInterface.php
│   │   │   │   │   ├── ModuleAssetsPathResolverInterface.php
│   │   │   │   │   ├── ModulePathResolver.php
│   │   │   │   │   ├── ModulePathResolverInterface.php
│   │   │   │   │   └── bootstrap-services.yaml
│   │   │   │   ├── Setting/
│   │   │   │   │   ├── Event/
│   │   │   │   │   │   └── SettingChangedEvent.php
│   │   │   │   │   └── Setting.php
│   │   │   │   ├── Setup/
│   │   │   │   │   ├── Bridge/
│   │   │   │   │   │   ├── ModuleActivationBridge.php
│   │   │   │   │   │   └── ModuleActivationBridgeInterface.php
│   │   │   │   │   ├── Event/
│   │   │   │   │   │   ├── BeforeModuleDeactivationEvent.php
│   │   │   │   │   │   ├── FinalizingModuleActivationEvent.php
│   │   │   │   │   │   ├── FinalizingModuleDeactivationEvent.php
│   │   │   │   │   │   ├── ModuleSetupEvent.php
│   │   │   │   │   │   └── ServicesYamlConfigurationErrorEvent.php
│   │   │   │   │   ├── EventSubscriber/
│   │   │   │   │   │   ├── DispatchLegacyEventsSubscriber.php
│   │   │   │   │   │   └── EventLoggingSubscriber.php
│   │   │   │   │   ├── Exception/
│   │   │   │   │   │   ├── ControllersDuplicationModuleConfigurationException.php
│   │   │   │   │   │   ├── DependencyValidationException.php
│   │   │   │   │   │   ├── InvalidClassExtensionNamespaceException.php
│   │   │   │   │   │   ├── InvalidModuleServicesException.php
│   │   │   │   │   │   ├── ModuleSettingHandlerNotFoundException.php
│   │   │   │   │   │   ├── ModuleSettingNotValidException.php
│   │   │   │   │   │   ├── ModuleSetupValidationException.php
│   │   │   │   │   │   └── ServicesYamlConfigurationError.php
│   │   │   │   │   ├── Service/
│   │   │   │   │   │   ├── ActiveClassExtensionChainResolver.php
│   │   │   │   │   │   ├── ActiveClassExtensionChainResolverInterface.php
│   │   │   │   │   │   ├── ModuleActivationService.php
│   │   │   │   │   │   ├── ModuleActivationServiceInterface.php
│   │   │   │   │   │   ├── ModuleDependencyResolver.php
│   │   │   │   │   │   ├── ModuleDependencyResolverInterface.php
│   │   │   │   │   │   ├── ModuleServicesImporter.php
│   │   │   │   │   │   └── ModuleServicesImporterInterface.php
│   │   │   │   │   ├── Validator/
│   │   │   │   │   │   ├── ActivationDependencyValidator.php
│   │   │   │   │   │   ├── ClassExtensionsValidator.php
│   │   │   │   │   │   ├── ControllersValidator.php
│   │   │   │   │   │   ├── DeactivationDependencyValidator.php
│   │   │   │   │   │   ├── EventsValidator.php
│   │   │   │   │   │   ├── ModuleConfigurationValidatorAggregate.php
│   │   │   │   │   │   ├── ModuleConfigurationValidatorInterface.php
│   │   │   │   │   │   └── ServicesYamlValidator.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── State/
│   │   │   │   │   ├── ModuleStateService.php
│   │   │   │   │   ├── ModuleStateServiceInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Template/
│   │   │   │   │   ├── Locator/
│   │   │   │   │   │   └── ModulesMenuFileLocator.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Translation/
│   │   │   │   │   ├── Bridge/
│   │   │   │   │   │   ├── AdminAreaModuleTranslationFileLocatorBridge.php
│   │   │   │   │   │   ├── AdminAreaModuleTranslationFileLocatorBridgeInterface.php
│   │   │   │   │   │   ├── FrontendModuleTranslationFileLocatorBridge.php
│   │   │   │   │   │   ├── FrontendModuleTranslationFileLocatorBridgeInterface.php
│   │   │   │   │   │   └── services.yaml
│   │   │   │   │   ├── Locator/
│   │   │   │   │   │   ├── AdminAreaModuleTranslationFileLocator.php
│   │   │   │   │   │   ├── AdminAreaModuleTranslationFileLocatorInterface.php
│   │   │   │   │   │   ├── FrontendModuleTranslationFileLocator.php
│   │   │   │   │   │   ├── FrontendModuleTranslationFileLocatorInterface.php
│   │   │   │   │   │   ├── ModuleTranslationFileLocatorAbstract.php
│   │   │   │   │   │   └── services.yaml
│   │   │   │   │   └── services.yaml
│   │   │   │   └── services.yaml
│   │   │   ├── RateLimiter/
│   │   │   │   ├── ApiRateLimitListener.php
│   │   │   │   ├── ApiRateLimiterFactory.php
│   │   │   │   ├── ApiRateLimiterFactoryInterface.php
│   │   │   │   ├── ClientIdentifierProvider.php
│   │   │   │   ├── ClientIdentifierProviderInterface.php
│   │   │   │   ├── RateLimitHeadersListener.php
│   │   │   │   └── services.yaml
│   │   │   ├── Request/
│   │   │   │   ├── RequestInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Search/
│   │   │   │   ├── EqualsFilter.php
│   │   │   │   ├── FilterInterface.php
│   │   │   │   ├── InFilter.php
│   │   │   │   ├── Pagination.php
│   │   │   │   ├── SearchTerm.php
│   │   │   │   ├── SortDirection.php
│   │   │   │   └── Sorting.php
│   │   │   ├── Session/
│   │   │   │   ├── SessionInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Storage/
│   │   │   │   ├── ArrayStorageInterface.php
│   │   │   │   ├── FileStorageFactoryInterface.php
│   │   │   │   ├── YamlFileStorage.php
│   │   │   │   └── YamlFileStorageFactory.php
│   │   │   ├── SystemRequirements/
│   │   │   │   ├── SystemSecurityChecker.php
│   │   │   │   ├── SystemSecurityCheckerInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Templating/
│   │   │   │   ├── Cache/
│   │   │   │   │   ├── ShopTemplateCacheService.php
│   │   │   │   │   └── ShopTemplateCacheServiceInterface.php
│   │   │   │   ├── Exception/
│   │   │   │   │   ├── InvalidTemplateNameException.php
│   │   │   │   │   └── InvalidThemeNameException.php
│   │   │   │   ├── Locator/
│   │   │   │   │   ├── AdminNavigationFileLocator.php
│   │   │   │   │   ├── AdminTemplateFileLocator.php
│   │   │   │   │   ├── EditionMenuFileLocator.php
│   │   │   │   │   ├── EditionUserFileLocator.php
│   │   │   │   │   ├── FileLocatorInterface.php
│   │   │   │   │   ├── NavigationFileLocatorInterface.php
│   │   │   │   │   └── TemplateFileLocator.php
│   │   │   │   ├── TemplateEngine.php
│   │   │   │   ├── TemplateEngineFactoryInterface.php
│   │   │   │   ├── TemplateEngineInterface.php
│   │   │   │   ├── TemplateRenderer.php
│   │   │   │   ├── TemplateRendererBridge.php
│   │   │   │   ├── TemplateRendererBridgeInterface.php
│   │   │   │   ├── TemplateRendererInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Theme/
│   │   │   │   ├── Bridge/
│   │   │   │   │   ├── AdminThemeBridge.php
│   │   │   │   │   └── AdminThemeBridgeInterface.php
│   │   │   │   ├── Command/
│   │   │   │   │   └── ThemeActivateCommand.php
│   │   │   │   ├── Config/
│   │   │   │   │   ├── Dao/
│   │   │   │   │   │   ├── ThemeSettingDao.php
│   │   │   │   │   │   └── ThemeSettingDaoInterface.php
│   │   │   │   │   └── DataObject/
│   │   │   │   │       └── ThemeSetting.php
│   │   │   │   ├── Event/
│   │   │   │   │   ├── ThemeActivatedEvent.php
│   │   │   │   │   └── ThemeSettingChangedEvent.php
│   │   │   │   └── services.yaml
│   │   │   ├── parameters.yaml
│   │   │   └── services.yaml
│   │   ├── README.md
│   │   ├── Setup/
│   │   │   ├── Database/
│   │   │   │   ├── DatabaseNotEmptyException.php
│   │   │   │   ├── SetupDbConnectionFactory.php
│   │   │   │   ├── SetupDbConnectionFactoryInterface.php
│   │   │   │   ├── SetupDbConnectionValidator.php
│   │   │   │   ├── SetupDbConnectionValidatorInterface.php
│   │   │   │   ├── SetupDbValidator.php
│   │   │   │   ├── SetupDbValidatorInterface.php
│   │   │   │   ├── ShopDbManager.php
│   │   │   │   ├── ShopDbManagerInterface.php
│   │   │   │   ├── UnsupportedDatabaseConfigurationException.php
│   │   │   │   ├── ViewsGeneratorFactory.php
│   │   │   │   ├── ViewsGeneratorFactoryInterface.php
│   │   │   │   ├── services.yaml
│   │   │   │   └── sql/
│   │   │   │       ├── database_schema.sql
│   │   │   │       └── initial_data.sql
│   │   │   ├── Directory/
│   │   │   │   ├── DirectoryValidator.php
│   │   │   │   ├── DirectoryValidatorInterface.php
│   │   │   │   ├── NoPermissionDirectoryException.php
│   │   │   │   ├── NonExistenceDirectoryException.php
│   │   │   │   ├── NotAbsolutePathException.php
│   │   │   │   └── services.yaml
│   │   │   ├── Htaccess/
│   │   │   │   ├── HtaccessAccessException.php
│   │   │   │   ├── HtaccessDao.php
│   │   │   │   ├── HtaccessDaoFactory.php
│   │   │   │   ├── HtaccessDaoFactoryInterface.php
│   │   │   │   ├── HtaccessDaoInterface.php
│   │   │   │   ├── HtaccessUpdater.php
│   │   │   │   ├── HtaccessUpdaterInterface.php
│   │   │   │   ├── InvalidShopUrlException.php
│   │   │   │   ├── ShopBaseUrl.php
│   │   │   │   └── services.yaml
│   │   │   ├── Language/
│   │   │   │   ├── DefaultLanguage.php
│   │   │   │   ├── IncorrectLanguageException.php
│   │   │   │   ├── LanguageInstaller.php
│   │   │   │   ├── LanguageInstallerInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Parameters/
│   │   │   │   ├── SetupParameters.php
│   │   │   │   ├── SetupParametersFactory.php
│   │   │   │   ├── SetupParametersFactoryInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── ShopConfiguration/
│   │   │   │   ├── ShopConfigurationUpdater.php
│   │   │   │   ├── ShopConfigurationUpdaterInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── ShopSetupCommand.php
│   │   │   ├── Validator/
│   │   │   │   ├── SetupInfrastructureValidator.php
│   │   │   │   ├── SetupInfrastructureValidatorInterface.php
│   │   │   │   └── services.yaml
│   │   │   └── services.yaml
│   │   ├── Transition/
│   │   │   ├── Adapter/
│   │   │   │   ├── Email/
│   │   │   │   │   ├── EmailAdapterInterface.php
│   │   │   │   │   └── SymfonyMailerAdapter.php
│   │   │   │   ├── Exception/
│   │   │   │   │   └── TranslationNotFoundException.php
│   │   │   │   ├── Session/
│   │   │   │   │   └── SessionAdapter.php
│   │   │   │   ├── ShopAdapter.php
│   │   │   │   ├── ShopAdapterInterface.php
│   │   │   │   ├── TemplateLogic/
│   │   │   │   │   ├── AbstractInsertNewBasketItemLogic.php
│   │   │   │   │   ├── AddUrlParametersLogic.php
│   │   │   │   │   ├── ContentFactory.php
│   │   │   │   │   ├── FileSizeLogic.php
│   │   │   │   │   ├── FormatCurrencyLogic.php
│   │   │   │   │   ├── FormatDateLogic.php
│   │   │   │   │   ├── FormatPriceLogic.php
│   │   │   │   │   ├── FormatTimeLogic.php
│   │   │   │   │   ├── IfContentLogic.php
│   │   │   │   │   ├── IncludeDynamicLogic.php
│   │   │   │   │   ├── IncludeWidgetLogic.php
│   │   │   │   │   ├── InputHelpLogic.php
│   │   │   │   │   ├── InsertNewBasketItemLogicTwig.php
│   │   │   │   │   ├── ScriptLogic.php
│   │   │   │   │   ├── SeoUrlLogic.php
│   │   │   │   │   ├── SmartWordwrapLogic.php
│   │   │   │   │   ├── StyleLogic.php
│   │   │   │   │   ├── TranslateFilterLogic.php
│   │   │   │   │   ├── TranslateFunctionLogic.php
│   │   │   │   │   ├── TranslateSalutationLogic.php
│   │   │   │   │   ├── TruncateLogic.php
│   │   │   │   │   ├── WordwrapLogic.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Translator/
│   │   │   │   │   ├── LegacyTemplateTranslator.php
│   │   │   │   │   ├── TranslatorInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   └── services.yaml
│   │   │   ├── ShopEvents/
│   │   │   │   ├── AfterAdminAjaxRequestProcessedEvent.php
│   │   │   │   ├── AfterModelDeleteEvent.php
│   │   │   │   ├── AfterModelInsertEvent.php
│   │   │   │   ├── AfterModelUpdateEvent.php
│   │   │   │   ├── AfterRequestProcessedEvent.php
│   │   │   │   ├── AllCookiesRemovedEvent.php
│   │   │   │   ├── ApplicationExitEvent.php
│   │   │   │   ├── BasketChangedEvent.php
│   │   │   │   ├── BeforeHeadersSendEvent.php
│   │   │   │   ├── BeforeModelDeleteEvent.php
│   │   │   │   ├── BeforeModelUpdateEvent.php
│   │   │   │   ├── BeforeSessionStartEvent.php
│   │   │   │   ├── ModelChangeEventTrait.php
│   │   │   │   ├── ViewRenderedEvent.php
│   │   │   │   └── services.yaml
│   │   │   └── Utility/
│   │   │       ├── BasicContext.php
│   │   │       ├── BasicContextInterface.php
│   │   │       ├── Context.php
│   │   │       ├── ContextInterface.php
│   │   │       ├── Exception/
│   │   │       │   └── AdminUserNotFoundException.php
│   │   │       ├── bootstrap-services.yaml
│   │   │       └── services.yaml
│   │   ├── Utility/
│   │   │   ├── Authentication/
│   │   │   │   ├── Exception/
│   │   │   │   │   └── PasswordPolicyException.php
│   │   │   │   └── Policy/
│   │   │   │       ├── PasswordPolicy.php
│   │   │   │       └── PasswordPolicyInterface.php
│   │   │   ├── Email/
│   │   │   │   ├── EmailValidatorService.php
│   │   │   │   ├── EmailValidatorServiceBridge.php
│   │   │   │   ├── EmailValidatorServiceBridgeInterface.php
│   │   │   │   ├── EmailValidatorServiceInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Hash/
│   │   │   │   ├── Exception/
│   │   │   │   │   └── PasswordHashException.php
│   │   │   │   ├── Service/
│   │   │   │   │   ├── Argon2IPasswordHashService.php
│   │   │   │   │   ├── BcryptPasswordHashService.php
│   │   │   │   │   └── PasswordHashServiceInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Header/
│   │   │   │   ├── Bridge/
│   │   │   │   │   ├── CsvHeaderGeneratorBridge.php
│   │   │   │   │   └── HeaderGeneratorBridgeInterface.php
│   │   │   │   ├── CsvHeaderGenerator.php
│   │   │   │   ├── HeaderGeneratorInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Url/
│   │   │   │   ├── UrlParser.php
│   │   │   │   ├── UrlParserInterface.php
│   │   │   │   └── services.yaml
│   │   │   └── services.yaml
│   │   ├── parameters.yaml
│   │   └── services.yaml
│   ├── admin/
│   │   ├── index.php
│   │   └── oxajax.php
│   ├── api.php
│   ├── bin/
│   │   ├── .htaccess
│   │   └── cron.php
│   ├── bootstrap.php
│   ├── export/
│   │   └── .gitkeep
│   ├── getimg.php
│   ├── index.php
│   ├── log/
│   │   └── .htaccess
│   ├── migration/
│   │   ├── data/
│   │   │   ├── Version20170718124421.php
│   │   │   ├── Version20171018144650.php
│   │   │   ├── Version20180214152228.php
│   │   │   ├── Version20180228160418.php
│   │   │   ├── Version20180703135728.php
│   │   │   ├── Version20180928072235.php
│   │   │   ├── Version20191007144155.php
│   │   │   ├── Version20201029110624.php
│   │   │   ├── Version20201103010101.php
│   │   │   ├── Version20201203101929.php
│   │   │   ├── Version20211117193324.php
│   │   │   ├── Version20230109135625.php
│   │   │   ├── Version20230301123522.php
│   │   │   ├── Version20231128113123.php
│   │   │   ├── Version20250320120000.php
│   │   │   ├── Version20250911140000.php
│   │   │   └── Version20251009121500.php
│   │   ├── migrations.yml
│   │   ├── project_data/
│   │   │   └── .gitkeep
│   │   └── project_migrations.yml
│   ├── modules/
│   │   └── functions.php.dist
│   ├── offline.html
│   ├── out/
│   │   ├── .gitignore
│   │   ├── downloads/
│   │   │   ├── .htaccess
│   │   │   ├── README.txt
│   │   │   └── uploads/
│   │   │       └── .gitkeep
│   │   ├── media/
│   │   │   └── .gitkeep
│   │   └── pictures/
│   │       ├── generated/
│   │       │   └── .gitkeep
│   │       ├── media/
│   │       │   └── .gitkeep
│   │       ├── promo/
│   │       │   └── .gitkeep
│   │       └── vendor/
│   │           └── icon/
│   │               └── .gitkeep
│   ├── overridablefunctions.php
│   ├── oxfunctions.php
│   ├── oxseo.php
│   ├── robots.txt
│   └── widget.php
├── tests/
│   ├── CachingTrait.php
│   ├── Codeception/
│   │   ├── .gitignore
│   │   ├── Acceptance/
│   │   │   ├── Admin/
│   │   │   │   ├── ActiveCategoryAtStartCest.php
│   │   │   │   ├── AdminCreateCategoryCest.php
│   │   │   │   ├── AssignProductsToCategoryCest.php
│   │   │   │   ├── DownloadableProductCest.php
│   │   │   │   ├── ExportNewsletterRecipientsCest.php
│   │   │   │   ├── GenericExportCest.php
│   │   │   │   ├── GenericImportCest.php
│   │   │   │   ├── LoginCest.php
│   │   │   │   ├── ManufacturerCest.php
│   │   │   │   ├── MasterCoreStockSettingsCest.php
│   │   │   │   ├── ModuleActivationCest.php
│   │   │   │   ├── ModuleSettingsCest.php
│   │   │   │   ├── ModuleSortListCest.php
│   │   │   │   ├── NavigationCest.php
│   │   │   │   ├── NewCMSCreationCest.php
│   │   │   │   ├── NewLanguageCreationCest.php
│   │   │   │   ├── NotRegisteredUserOrderCest.php
│   │   │   │   ├── OrderEmailCest.php
│   │   │   │   ├── OrderTotalsAndCurrencyDisplayCest.php
│   │   │   │   ├── ProductListStatusTestCest.php
│   │   │   │   ├── ProductPicturesCest.php
│   │   │   │   ├── ProductStockTestCest.php
│   │   │   │   ├── ProductVariantWithSelectionsCest.php
│   │   │   │   ├── RemoveUserOrderCest.php
│   │   │   │   ├── SeoCest.php
│   │   │   │   ├── ServiceDiagnosticToolCest.php
│   │   │   │   ├── SessionHandlingCest.php
│   │   │   │   ├── ShopLicenseCest.php
│   │   │   │   ├── SystemInfoCest.php
│   │   │   │   ├── UpdateSQLToolCest.php
│   │   │   │   ├── UserCest.php
│   │   │   │   └── UserCredentialsCest.php
│   │   │   ├── BasketRefreshWithDeletedProductCest.php
│   │   │   ├── CMSPageChangeIdentCest.php
│   │   │   ├── CategoryDetailCest.php
│   │   │   ├── CategoryProductListCest.php
│   │   │   ├── CheckoutProcessCest.php
│   │   │   ├── ContactFormCest.php
│   │   │   ├── CookiesNoticeCest.php
│   │   │   ├── CurrencyCest.php
│   │   │   ├── DistributorCest.php
│   │   │   ├── DownloadableProductCest.php
│   │   │   ├── DynamicImageGenerationCest.php
│   │   │   ├── FlowThemeCest.php
│   │   │   ├── GiftRegistryCest.php
│   │   │   ├── LanguageCest.php
│   │   │   ├── ManufacturerCest.php
│   │   │   ├── NewsletterCest.php
│   │   │   ├── PrivateSalesBasketCest.php
│   │   │   ├── ProductCompareCest.php
│   │   │   ├── ProductDetailsPageCest.php
│   │   │   ├── ProductLabelCest.php
│   │   │   ├── ProductPromotionCest.php
│   │   │   ├── ProductStatusTestCest.php
│   │   │   ├── ReviewAndRatingCest.php
│   │   │   ├── SearchCest.php
│   │   │   ├── SessionHandlingCest.php
│   │   │   ├── ShopNavigationCest.php
│   │   │   ├── UserAccountCest.php
│   │   │   ├── UserRegistrationCest.php
│   │   │   ├── WishListCest.php
│   │   │   └── _bootstrap.php
│   │   ├── Acceptance.suite.yml
│   │   ├── Config/
│   │   │   ├── CodeceptionParametersProvider.php
│   │   │   └── params.php
│   │   ├── Support/
│   │   │   ├── AcceptanceActor.php
│   │   │   ├── AcceptanceTester.php
│   │   │   ├── Data/
│   │   │   │   ├── category.php
│   │   │   │   ├── genericImport/
│   │   │   │   │   ├── oxartextends_with_header.csv
│   │   │   │   │   └── oxartextends_without_header.csv
│   │   │   │   ├── modules/
│   │   │   │   │   ├── test-module-problems/
│   │   │   │   │   │   └── metadata.php
│   │   │   │   │   └── testModule/
│   │   │   │   │       ├── Controller/
│   │   │   │   │       │   └── ContentController.php
│   │   │   │   │       ├── metadata.php
│   │   │   │   │       └── views/
│   │   │   │   │           ├── admin_smarty/
│   │   │   │   │           │   ├── de/
│   │   │   │   │           │   │   └── module_options.php
│   │   │   │   │           │   └── en/
│   │   │   │   │           │       └── module_options.php
│   │   │   │   │           └── admin_twig/
│   │   │   │   │               ├── de/
│   │   │   │   │               │   └── module_options.php
│   │   │   │   │               └── en/
│   │   │   │   │                   └── module_options.php
│   │   │   │   ├── order.php
│   │   │   │   ├── product.php
│   │   │   │   ├── product_image.php
│   │   │   │   ├── shop.php
│   │   │   │   ├── test-fixtures.sql
│   │   │   │   ├── user.php
│   │   │   │   └── voucher.php
│   │   │   └── Helper/
│   │   │       └── Acceptance.php
│   │   ├── _envs/
│   │   │   └── .gitkeep
│   │   └── _output/
│   │       └── .gitkeep
│   ├── ConsoleRunnerTrait.php
│   ├── ContainerTrait.php
│   ├── DatabaseTrait.php
│   ├── EnvTrait.php
│   ├── FilesystemTrait.php
│   ├── Integration/
│   │   ├── Application/
│   │   │   ├── Component/
│   │   │   │   ├── BasketComponentSessionTest.php
│   │   │   │   ├── BasketComponentTest.php
│   │   │   │   └── UserComponentTest.php
│   │   │   ├── Controller/
│   │   │   │   ├── Admin/
│   │   │   │   │   ├── ArticlePicturesAjaxTest.php
│   │   │   │   │   ├── ArticleVariantTest.php
│   │   │   │   │   ├── ContentMainTest.php
│   │   │   │   │   ├── CountryMainTest.php
│   │   │   │   │   ├── Fixtures/
│   │   │   │   │   │   └── testModule/
│   │   │   │   │   │       ├── ModuleSetup.php
│   │   │   │   │   │       ├── Renderer.php
│   │   │   │   │   │       ├── RendererInterface.php
│   │   │   │   │   │       ├── metadata.php
│   │   │   │   │   │       └── services.yaml
│   │   │   │   │   ├── ManufacturerPictureTest.php
│   │   │   │   │   ├── ModuleConfigurationTest.php
│   │   │   │   │   └── ShopConfigurationTest.php
│   │   │   │   └── OrderControllerTest.php
│   │   │   └── Model/
│   │   │       ├── ArticleListTest.php
│   │   │       ├── ArticleTest.php
│   │   │       ├── BasketReservationTest.php
│   │   │       ├── DiagnosticsOutputTest.php
│   │   │       ├── GroupsTest.php
│   │   │       ├── ManufacturerTest.php
│   │   │       ├── ReviewTest.php
│   │   │       ├── UserTest.php
│   │   │       ├── UtilsSpy.php
│   │   │       └── VariantHandlerTest.php
│   │   ├── Core/
│   │   │   ├── DynamicImageGeneratorTest.php
│   │   │   ├── EmailTest.php
│   │   │   ├── Fixtures/
│   │   │   │   └── Modules/
│   │   │   │       ├── ExampleModule/
│   │   │   │       │   └── metadata.php
│   │   │   │       └── NotActiveModuleWithMissingData/
│   │   │   │           └── metadata.php
│   │   │   ├── GenericImport/
│   │   │   │   └── ImportObject/
│   │   │   │       └── ImportObjectTest.php
│   │   │   ├── InputValidatorTest.php
│   │   │   ├── LanguageTest.php
│   │   │   ├── Model/
│   │   │   │   ├── CategoryListTest.php
│   │   │   │   └── UserTest.php
│   │   │   ├── OnlineModuleVersionNotifierTest.php
│   │   │   ├── PictureHandlerTest.php
│   │   │   ├── SessionTest.php
│   │   │   ├── ShopControlTest.php
│   │   │   ├── SystemRequirementsTest.php
│   │   │   ├── Utils/
│   │   │   │   ├── UtilsCacheTest.php
│   │   │   │   ├── UtilsSearchEngineTest.php
│   │   │   │   └── UtilsSpy.php
│   │   │   ├── UtilsFileTest.php
│   │   │   ├── UtilsServerTest.php
│   │   │   ├── UtilsTest.php
│   │   │   └── ViewConfigTest.php
│   │   ├── IntegrationTestCase.php
│   │   ├── Internal/
│   │   │   ├── BootstrapContainer/
│   │   │   │   └── BootstrapContainerTest.php
│   │   │   ├── ComposerPlugin/
│   │   │   │   ├── ComponentInstallerTest.php
│   │   │   │   ├── Fixtures/
│   │   │   │   │   └── test-module-package-installation/
│   │   │   │   │       ├── metadata.php
│   │   │   │   │       └── services.yaml
│   │   │   │   └── ModulePackageInstallerTest.php
│   │   │   ├── Container/
│   │   │   │   ├── ContainerTest.php
│   │   │   │   └── Fixtures/
│   │   │   │       ├── SomeService.php
│   │   │   │       └── services.yaml
│   │   │   ├── Domain/
│   │   │   │   ├── Admin/
│   │   │   │   │   ├── Command/
│   │   │   │   │   │   └── CreateUserCommandTest.php
│   │   │   │   │   ├── Dao/
│   │   │   │   │   │   └── AdminDaoTest.php
│   │   │   │   │   └── Service/
│   │   │   │   │       └── AdminUserServiceTest.php
│   │   │   │   ├── Authentication/
│   │   │   │   │   ├── Bridge/
│   │   │   │   │   │   ├── PasswordServiceBridgeTest.php
│   │   │   │   │   │   └── RandomTokenGeneratorBridgeTest.php
│   │   │   │   │   └── Service/
│   │   │   │   │       ├── PasswordHashServiceTest.php
│   │   │   │   │       └── PasswordVerificationServiceTest.php
│   │   │   │   ├── Contact/
│   │   │   │   │   └── Form/
│   │   │   │   │       └── ContactFormBridgeTest.php
│   │   │   │   ├── Media/
│   │   │   │   │   ├── Dao/
│   │   │   │   │   │   └── MediaDaoTest.php
│   │   │   │   │   └── MediaUploaderTest.php
│   │   │   │   ├── Newsletter/
│   │   │   │   │   ├── Dao/
│   │   │   │   │   │   └── NewsletterRecipientsDaoTest.php
│   │   │   │   │   └── DataMapper/
│   │   │   │   │       └── NewsletterRecipientsDataMapperTest.php
│   │   │   │   ├── Product/
│   │   │   │   │   └── Media/
│   │   │   │   │       ├── Dao/
│   │   │   │   │       │   └── ProductMediaDaoTest.php
│   │   │   │   │       ├── Factory/
│   │   │   │   │       │   └── ProductMediaFactoryTest.php
│   │   │   │   │       └── Service/
│   │   │   │   │           ├── ProductMediaResolverTest.php
│   │   │   │   │           ├── ProductMediaServiceTest.php
│   │   │   │   │           ├── ProductMediaUploadProcessorTest.php
│   │   │   │   │           ├── ProductMediaViewServiceTest.php
│   │   │   │   │           └── ProductVariantMediaServiceTest.php
│   │   │   │   └── Review/
│   │   │   │       ├── Bridge/
│   │   │   │       │   ├── ProductRatingBridgeTest.php
│   │   │   │       │   ├── UserRatingBridgeTest.php
│   │   │   │       │   └── UserReviewBridgeTest.php
│   │   │   │       └── Dao/
│   │   │   │           ├── ProductRatingDaoTest.php
│   │   │   │           ├── RatingDaoTest.php
│   │   │   │           └── ReviewDaoTest.php
│   │   │   ├── Framework/
│   │   │   │   ├── Cache/
│   │   │   │   │   └── ShopCacheFacadeTest.php
│   │   │   │   ├── Configuration/
│   │   │   │   │   └── Dao/
│   │   │   │   │       └── SystemConfigurationDaoTest.php
│   │   │   │   ├── Console/
│   │   │   │   │   ├── ConsoleTest.php
│   │   │   │   │   └── Fixtures/
│   │   │   │   │       └── services.yaml
│   │   │   │   ├── DIContainer/
│   │   │   │   │   ├── ContainerBuilderTest.php
│   │   │   │   │   ├── Dao/
│   │   │   │   │   │   ├── ParameterDaoTest.php
│   │   │   │   │   │   └── ProjectYamlDaoTest.php
│   │   │   │   │   ├── Fixtures/
│   │   │   │   │   │   ├── Ce/
│   │   │   │   │   │   │   └── Internal/
│   │   │   │   │   │   │       ├── Service.php
│   │   │   │   │   │   │       ├── ServiceInterface.php
│   │   │   │   │   │   │       └── services.yaml
│   │   │   │   │   │   ├── Component/
│   │   │   │   │   │   │   └── Internal/
│   │   │   │   │   │   │       ├── ServiceDecorator.php
│   │   │   │   │   │   │       └── services.yaml
│   │   │   │   │   │   ├── Module/
│   │   │   │   │   │   │   └── Internal/
│   │   │   │   │   │   │       ├── ServiceDecorator.php
│   │   │   │   │   │   │       └── services.yaml
│   │   │   │   │   │   ├── Project/
│   │   │   │   │   │   │   └── Internal/
│   │   │   │   │   │   │       └── ServiceDecorator.php
│   │   │   │   │   │   ├── ProjectEnv/
│   │   │   │   │   │   │   └── Internal/
│   │   │   │   │   │   │       └── ServiceDecorator.php
│   │   │   │   │   │   └── var/
│   │   │   │   │   │       ├── active_module_services.yaml
│   │   │   │   │   │       ├── configuration/
│   │   │   │   │   │       │   ├── parameters.yaml
│   │   │   │   │   │       │   └── services.yaml
│   │   │   │   │   │       ├── configuration.abc/
│   │   │   │   │   │       │   ├── parameters.yaml
│   │   │   │   │   │       │   └── services.yaml
│   │   │   │   │   │       └── generated_services.yaml
│   │   │   │   │   └── Service/
│   │   │   │   │       ├── Fixtures/
│   │   │   │   │       │   ├── generated_services.yaml
│   │   │   │   │       │   ├── module-1/
│   │   │   │   │       │   │   └── services.yaml
│   │   │   │   │       │   └── module-2/
│   │   │   │   │       │       └── services.yaml
│   │   │   │   │       └── ProjectYamlImportServiceTest.php
│   │   │   │   ├── Database/
│   │   │   │   │   └── ConnectionFactoryTest.php
│   │   │   │   ├── Env/
│   │   │   │   │   ├── EnvLoaderTest.php
│   │   │   │   │   ├── EnvUrlFormatterTest.php
│   │   │   │   │   └── Fixtures/
│   │   │   │   │       └── EnvLoader/
│   │   │   │   │           └── services.yaml
│   │   │   │   ├── Event/
│   │   │   │   │   ├── EventLoggingSubscriberTest.php
│   │   │   │   │   ├── TestEvent.php
│   │   │   │   │   └── generated_project.yaml
│   │   │   │   ├── FileSystem/
│   │   │   │   │   ├── FileGenerator/
│   │   │   │   │   │   └── CsvFileGeneratorTest.php
│   │   │   │   │   ├── ProjectRootLocatorTest.php
│   │   │   │   │   └── Validator/
│   │   │   │   │       ├── FileValidatorTest.php
│   │   │   │   │       └── Fixtures/
│   │   │   │   │           └── images/
│   │   │   │   │               └── fake_image.php
│   │   │   │   ├── Logger/
│   │   │   │   │   └── LoggerTest.php
│   │   │   │   ├── Module/
│   │   │   │   │   ├── Cache/
│   │   │   │   │   │   └── ModuleCacheTest.php
│   │   │   │   │   ├── Command/
│   │   │   │   │   │   ├── Fixtures/
│   │   │   │   │   │   │   └── modules/
│   │   │   │   │   │   │       └── testmodule/
│   │   │   │   │   │   │           ├── assets/
│   │   │   │   │   │   │           │   └── some.css
│   │   │   │   │   │   │           └── metadata.php
│   │   │   │   │   │   ├── InstallModuleAssetsCommandTest.php
│   │   │   │   │   │   ├── ModuleActivateCommandTest.php
│   │   │   │   │   │   ├── ModuleCommandsTestCase.php
│   │   │   │   │   │   ├── ModuleDeactivateCommandTest.php
│   │   │   │   │   │   ├── ModuleInstallCommandTest.php
│   │   │   │   │   │   └── ModuleUninstallCommandTest.php
│   │   │   │   │   ├── Configuration/
│   │   │   │   │   │   ├── Bridge/
│   │   │   │   │   │   │   ├── ModuleSettingBridgeTest.php
│   │   │   │   │   │   │   └── ShopConfigurationDaoBridgeTest.php
│   │   │   │   │   │   ├── Dao/
│   │   │   │   │   │   │   ├── Chain/
│   │   │   │   │   │   │   │   └── ClassExtensionsChainDaoTest.php
│   │   │   │   │   │   │   ├── Fixtures/
│   │   │   │   │   │   │   │   ├── TestModuleWithDependencies/
│   │   │   │   │   │   │   │   │   └── dependencies.yaml
│   │   │   │   │   │   │   │   ├── TestModuleWithEmptyDependencyFile/
│   │   │   │   │   │   │   │   │   └── dependencies.yaml
│   │   │   │   │   │   │   │   └── project_configuration/
│   │   │   │   │   │   │   │       └── shops/
│   │   │   │   │   │   │   │           └── 1/
│   │   │   │   │   │   │   │               └── template_extension_chain.yaml
│   │   │   │   │   │   │   ├── ModuleConfigurationDaoTest.php
│   │   │   │   │   │   │   ├── ModuleDependencyDaoTest.php
│   │   │   │   │   │   │   ├── ModuleEnvironmentConfigurationDaoTest.php
│   │   │   │   │   │   │   ├── ModuleTemplateExtensionChainTest.php
│   │   │   │   │   │   │   ├── ShopConfigurationDaoTest.php
│   │   │   │   │   │   │   └── ShopEnvironmentMisconfigurationEventSubscriberTest.php
│   │   │   │   │   │   ├── DataMapper/
│   │   │   │   │   │   │   └── ModuleConfigurationDataMapperTest.php
│   │   │   │   │   │   └── Service/
│   │   │   │   │   │       └── ModuleConfigurationMergingServiceTest.php
│   │   │   │   │   ├── Controller/
│   │   │   │   │   │   ├── Fixtures/
│   │   │   │   │   │   │   └── module1/
│   │   │   │   │   │   │       ├── composer.json
│   │   │   │   │   │   │       ├── metadata.php
│   │   │   │   │   │   │       ├── services.yaml
│   │   │   │   │   │   │       ├── src/
│   │   │   │   │   │   │       │   └── Controller/
│   │   │   │   │   │   │       │       ├── ApiTestController.php
│   │   │   │   │   │   │       │       ├── ModuleController.php
│   │   │   │   │   │   │       │       ├── ModuleControllerAsService.php
│   │   │   │   │   │   │       │       └── ModuleControllerDecorator.php
│   │   │   │   │   │   │       └── views/
│   │   │   │   │   │   │           └── twig/
│   │   │   │   │   │   │               ├── module_controller.html.twig
│   │   │   │   │   │   │               └── module_controller_as_service.html.twig
│   │   │   │   │   │   ├── ModuleControllerApiTest.php
│   │   │   │   │   │   └── ModuleControllerRenderTest.php
│   │   │   │   │   ├── Facade/
│   │   │   │   │   │   ├── ActiveModulesDataProviderTest.php
│   │   │   │   │   │   ├── ModuleSettingServiceTest.php
│   │   │   │   │   │   └── ModulesDataProviderTest.php
│   │   │   │   │   ├── Install/
│   │   │   │   │   │   └── Service/
│   │   │   │   │   │       ├── BootstrapModuleInstallerTest.php
│   │   │   │   │   │       ├── Fixtures/
│   │   │   │   │   │       │   ├── myTestModule/
│   │   │   │   │   │       │   │   └── metadata.php
│   │   │   │   │   │       │   └── testModuleWithCustomSource/
│   │   │   │   │   │       │       └── customSourcePath/
│   │   │   │   │   │       │           └── metadata.php
│   │   │   │   │   │       ├── ModuleConfigurationInstallerTest.php
│   │   │   │   │   │       ├── ModuleFilesInstallerTest.php
│   │   │   │   │   │       └── ModuleInstallerTest.php
│   │   │   │   │   ├── MetaData/
│   │   │   │   │   │   ├── Dao/
│   │   │   │   │   │   │   └── MetaDataProviderTest.php
│   │   │   │   │   │   ├── DataMapper/
│   │   │   │   │   │   │   └── MetaDataMapperTest.php
│   │   │   │   │   │   ├── MetaDataMapperTest.php
│   │   │   │   │   │   └── TestData/
│   │   │   │   │   │       ├── TestModuleMetaData20/
│   │   │   │   │   │       │   └── metadata.php
│   │   │   │   │   │       ├── TestModuleMetaData21/
│   │   │   │   │   │       │   └── metadata.php
│   │   │   │   │   │       ├── TestModuleWithPartialMetaData/
│   │   │   │   │   │       │   └── metadata.php
│   │   │   │   │   │       └── TestModuleWithSurplusData/
│   │   │   │   │   │           └── metadata.php
│   │   │   │   │   ├── Setup/
│   │   │   │   │   │   ├── ModuleEventsTest.php
│   │   │   │   │   │   ├── Service/
│   │   │   │   │   │   │   ├── ActiveClassExtensionChainResolverTest.php
│   │   │   │   │   │   │   ├── Fixtures/
│   │   │   │   │   │   │   │   ├── Module/
│   │   │   │   │   │   │   │   │   └── services.yaml
│   │   │   │   │   │   │   │   ├── TestDependentModule/
│   │   │   │   │   │   │   │   │   └── metadata.php
│   │   │   │   │   │   │   │   ├── TestMissingDependencyModule/
│   │   │   │   │   │   │   │   │   ├── TestModuleService.php
│   │   │   │   │   │   │   │   │   ├── dependencies.yaml
│   │   │   │   │   │   │   │   │   ├── metadata.php
│   │   │   │   │   │   │   │   │   └── services.yaml
│   │   │   │   │   │   │   │   └── TestModuleWithDependency/
│   │   │   │   │   │   │   │       ├── dependencies.yaml
│   │   │   │   │   │   │   │       └── metadata.php
│   │   │   │   │   │   │   ├── ModuleActivationServiceTest.php
│   │   │   │   │   │   │   ├── ModuleDependencyActivationTest.php
│   │   │   │   │   │   │   ├── ModuleDependencyResolverTest.php
│   │   │   │   │   │   │   └── ModuleServicesImporterTest.php
│   │   │   │   │   │   └── Validator/
│   │   │   │   │   │       ├── Fixtures/
│   │   │   │   │   │       │   ├── ModuleWithCorrectServiceYaml/
│   │   │   │   │   │       │   │   └── services.yaml
│   │   │   │   │   │       │   └── ModuleWithWrongServiceYaml/
│   │   │   │   │   │       │       └── services.yaml
│   │   │   │   │   │       └── ServicesYamlValidatorTest.php
│   │   │   │   │   ├── State/
│   │   │   │   │   │   └── ModuleStateServiceTest.php
│   │   │   │   │   ├── TestData/
│   │   │   │   │   │   └── TestModule/
│   │   │   │   │   │       ├── CustomSourceDirectory/
│   │   │   │   │   │       │   └── metadata.php
│   │   │   │   │   │       ├── ModuleEvents.php
│   │   │   │   │   │       ├── SomeModuleService.php
│   │   │   │   │   │       ├── TestEventSubscriber.php
│   │   │   │   │   │       ├── assets/
│   │   │   │   │   │       │   └── some.css
│   │   │   │   │   │       ├── metadata.php
│   │   │   │   │   │       ├── readme.txt
│   │   │   │   │   │       └── services.yaml
│   │   │   │   │   └── Translation/
│   │   │   │   │       └── Locator/
│   │   │   │   │           ├── AdminAreaModuleTranslationFileLocatorTest.php
│   │   │   │   │           ├── Fixtures/
│   │   │   │   │           │   ├── module-name-1/
│   │   │   │   │           │   │   └── translations/
│   │   │   │   │           │   │       └── de/
│   │   │   │   │           │   │           ├── cust_lang.php
│   │   │   │   │           │   │           ├── de1_lang.php
│   │   │   │   │           │   │           └── de2_lang.php
│   │   │   │   │           │   ├── module-name-2/
│   │   │   │   │           │   │   └── views/
│   │   │   │   │           │   │       └── admin/
│   │   │   │   │           │   │           └── de/
│   │   │   │   │           │   │               ├── de1_lang.php
│   │   │   │   │           │   │               ├── de2_lang.php
│   │   │   │   │           │   │               └── module_options.php
│   │   │   │   │           │   ├── module-name-3/
│   │   │   │   │           │   │   └── Application/
│   │   │   │   │           │   │       └── translations/
│   │   │   │   │           │   │           └── de/
│   │   │   │   │           │   │               ├── de1_lang.php
│   │   │   │   │           │   │               └── de2_lang.php
│   │   │   │   │           │   └── module-name-4/
│   │   │   │   │           │       └── Application/
│   │   │   │   │           │           └── views/
│   │   │   │   │           │               └── admin/
│   │   │   │   │           │                   └── de/
│   │   │   │   │           │                       ├── de1_lang.php
│   │   │   │   │           │                       └── module_options.php
│   │   │   │   │           └── FrontendModuleTranslationFileLocatorTest.php
│   │   │   │   ├── Storage/
│   │   │   │   │   └── YamlFileStorageTest.php
│   │   │   │   ├── Templating/
│   │   │   │   │   └── Cache/
│   │   │   │   │       └── MultiShopTemplateCacheServiceTest.php
│   │   │   │   └── Theme/
│   │   │   │       ├── Command/
│   │   │   │       │   ├── Fixtures/
│   │   │   │       │   │   └── shop/
│   │   │   │       │   │       └── source/
│   │   │   │       │   │           └── Application/
│   │   │   │       │   │               └── views/
│   │   │   │       │   │                   └── testTheme/
│   │   │   │       │   │                       └── theme.php
│   │   │   │       │   └── ThemeActivateCommandTest.php
│   │   │   │       └── Config/
│   │   │   │           └── Dao/
│   │   │   │               └── ThemeSettingDaoTest.php
│   │   │   ├── Module/
│   │   │   │   ├── Migration/
│   │   │   │   │   ├── Fixtures/
│   │   │   │   │   │   ├── myTestModuleWithMigrations/
│   │   │   │   │   │   │   ├── metadata.php
│   │   │   │   │   │   │   └── migration/
│   │   │   │   │   │   │       ├── data/
│   │   │   │   │   │   │       │   └── Version20170530154603.php
│   │   │   │   │   │   │       └── migrations.yml
│   │   │   │   │   │   └── myTestModuleWithoutMigrations/
│   │   │   │   │   │       ├── metadata.php
│   │   │   │   │   │       └── migration/
│   │   │   │   │   │           └── migrations.yml
│   │   │   │   │   └── ModuleMigrationsTest.php
│   │   │   │   └── TestData/
│   │   │   │       └── TestModule/
│   │   │   │           └── TestEvent.php
│   │   │   ├── Setup/
│   │   │   │   ├── Database/
│   │   │   │   │   ├── SetupDbConnectionFactoryTest.php
│   │   │   │   │   ├── SetupDbConnectionValidatorTest.php
│   │   │   │   │   ├── SetupDbValidatorTest.php
│   │   │   │   │   └── ShopDbManagerTest.php
│   │   │   │   ├── Directory/
│   │   │   │   │   ├── DirectoryValidatorTest.php
│   │   │   │   │   └── Fixtures/
│   │   │   │   │       └── dir-structure/
│   │   │   │   │           ├── test-folder/
│   │   │   │   │           │   ├── log/
│   │   │   │   │           │   │   └── .gitkeep
│   │   │   │   │           │   ├── out/
│   │   │   │   │           │   │   ├── media/
│   │   │   │   │           │   │   │   └── .gitkeep
│   │   │   │   │           │   │   └── pictures/
│   │   │   │   │           │   │       ├── generated/
│   │   │   │   │           │   │       │   └── .gitkeep
│   │   │   │   │           │   │       ├── master/
│   │   │   │   │           │   │       │   └── .gitkeep
│   │   │   │   │           │   │       ├── media/
│   │   │   │   │           │   │       │   └── .gitkeep
│   │   │   │   │           │   │       └── promo/
│   │   │   │   │           │   │           └── .gitkeep
│   │   │   │   │           │   └── tmp/
│   │   │   │   │           │       └── .gitkeep
│   │   │   │   │           └── var/
│   │   │   │   │               └── .gitkeep
│   │   │   │   ├── Language/
│   │   │   │   │   └── LanguageInstallerTest.php
│   │   │   │   ├── SetupParametersFactoryTest.php
│   │   │   │   ├── ShopConfiguration/
│   │   │   │   │   └── ShopConfigurationUpdaterTest.php
│   │   │   │   └── ShopSetupCommandTest.php
│   │   │   └── Transition/
│   │   │       ├── Adapter/
│   │   │       │   ├── Configuration/
│   │   │       │   │   └── Dao/
│   │   │       │   │       └── ShopConfigurationSettingDaoTest.php
│   │   │       │   └── TemplateLogic/
│   │   │       │       ├── FormatCurrencyLogicTest.php
│   │   │       │       ├── FormatDateLogicTest.php
│   │   │       │       ├── FormatPriceLogicTest.php
│   │   │       │       ├── ScriptLogicTest.php
│   │   │       │       ├── TranslateFunctionLogicTest.php
│   │   │       │       ├── TranslateLogicTest.php
│   │   │       │       ├── TranslateSalutationLogicTest.php
│   │   │       │       ├── TruncateLogicTest.php
│   │   │       │       └── WordwrapLogicTest.php
│   │   │       └── Utility/
│   │   │           ├── BasicContextTest.php
│   │   │           └── ContextTest.php
│   │   └── Legacy/
│   │       ├── Application/
│   │       │   ├── Component/
│   │       │   │   └── Widget/
│   │       │   │       └── CategoryTreeTest.php
│   │       │   ├── Controller/
│   │       │   │   ├── AccountReviewControllerTest.php
│   │       │   │   ├── Admin/
│   │       │   │   │   ├── NavigationTree/
│   │       │   │   │   │   ├── Fixtures/
│   │       │   │   │   │   │   ├── module1/
│   │       │   │   │   │   │   │   ├── menu.xml
│   │       │   │   │   │   │   │   └── metadata.php
│   │       │   │   │   │   │   ├── module2/
│   │       │   │   │   │   │   │   ├── menu.xml
│   │       │   │   │   │   │   │   └── metadata.php
│   │       │   │   │   │   │   └── testModule/
│   │       │   │   │   │   │       ├── ModuleSetup.php
│   │       │   │   │   │   │       ├── Renderer.php
│   │       │   │   │   │   │       ├── RendererInterface.php
│   │       │   │   │   │   │       ├── metadata.php
│   │       │   │   │   │   │       └── services.yaml
│   │       │   │   │   │   ├── NavigationTreeDemoShopTest.php
│   │       │   │   │   │   └── NavigationTreeTest.php
│   │       │   │   │   ├── PaymentRDFaTest.php
│   │       │   │   │   └── ShopConfigurationTest.php
│   │       │   │   ├── FrontendController/
│   │       │   │   │   ├── FrontendComponentTest.php
│   │       │   │   │   └── FrontendSearchEngineTest.php
│   │       │   │   └── SearchControllerTest.php
│   │       │   └── Model/
│   │       │       ├── ManufacturerTest.php
│   │       │       ├── RatingTest.php
│   │       │       ├── ReviewTest.php
│   │       │       ├── SeoEncoderCategoryTest.php
│   │       │       └── UserTest.php
│   │       ├── Checkout/
│   │       │   └── BasketWithStockTest.php
│   │       ├── Core/
│   │       │   ├── Database/
│   │       │   │   └── Adapter/
│   │       │   │       ├── DatabaseInterfaceImplementation.php
│   │       │   │       ├── DatabaseInterfaceImplementationBase.php
│   │       │   │       └── Doctrine/
│   │       │   │           ├── DatabaseTest.php
│   │       │   │           └── ResultSetTest.php
│   │       │   ├── Model/
│   │       │   │   └── BaseModelTest.php
│   │       │   ├── Module/
│   │       │   │   ├── Fixtures/
│   │       │   │   │   ├── InvalidNamespaceModule/
│   │       │   │   │   │   ├── Controller/
│   │       │   │   │   │   │   └── NonExistentClass.php
│   │       │   │   │   │   ├── Model/
│   │       │   │   │   │   │   └── .gitkeep
│   │       │   │   │   │   └── metadata.php
│   │       │   │   │   ├── chainTestModuleClasses/
│   │       │   │   │   │   ├── FirstUser.php
│   │       │   │   │   │   ├── FourthUser.php
│   │       │   │   │   │   ├── SecondUser.php
│   │       │   │   │   │   └── ThirdUser.php
│   │       │   │   │   ├── with_class_extensions/
│   │       │   │   │   │   └── metadata.php
│   │       │   │   │   ├── with_class_extensions2/
│   │       │   │   │   │   ├── Controllers/
│   │       │   │   │   │   │   └── ContentController.php
│   │       │   │   │   │   └── metadata.php
│   │       │   │   │   ├── with_class_extensions_cleaner/
│   │       │   │   │   │   └── metadata.php
│   │       │   │   │   ├── with_everything/
│   │       │   │   │   │   └── metadata.php
│   │       │   │   │   ├── with_extending_blocks/
│   │       │   │   │   │   └── metadata.php
│   │       │   │   │   ├── with_metadata_v21/
│   │       │   │   │   │   ├── Smarty/
│   │       │   │   │   │   │   ├── PluginDirectory1WithMetadataVersion21/
│   │       │   │   │   │   │   │   └── .gitkeep
│   │       │   │   │   │   │   └── PluginDirectory2WithMetadataVersion21/
│   │       │   │   │   │   │       └── .gitkeep
│   │       │   │   │   │   ├── metadata.php
│   │       │   │   │   │   └── test_template.tpl
│   │       │   │   │   └── with_multiple_extensions/
│   │       │   │   │       └── metadata.php
│   │       │   │   └── ModuleListTest.php
│   │       │   ├── Routing/
│   │       │   │   └── ControllerIdToClassResolvingTest.php
│   │       │   ├── UtilsFileLocalImagesHandlingTest.php
│   │       │   └── WidgetControlTest.php
│   │       ├── Encryptor/
│   │       │   └── EncryptationTest.php
│   │       ├── Modules/
│   │       │   ├── ModuleInheritanceTest.php
│   │       │   ├── ModuleTranslationsTest.php
│   │       │   ├── TestData/
│   │       │   │   └── modules/
│   │       │   │       ├── extending_1_class/
│   │       │   │       │   ├── metadata.php
│   │       │   │       │   └── myorder.php
│   │       │   │       ├── extending_1_class_3_extensions/
│   │       │   │       │   └── metadata.php
│   │       │   │       ├── translation_Application/
│   │       │   │       │   ├── Application/
│   │       │   │       │   │   └── translations/
│   │       │   │       │   │       ├── de/
│   │       │   │       │   │       │   └── _lang.php
│   │       │   │       │   │       └── en/
│   │       │   │       │   │           └── _lang.php
│   │       │   │       │   ├── metadata.php
│   │       │   │       │   └── myarticle.php
│   │       │   │       └── with_everything/
│   │       │   │           ├── Event/
│   │       │   │           │   └── MyEvents.php
│   │       │   │           └── metadata.php
│   │       │   └── TestDataInheritance/
│   │       │       └── modules/
│   │       │           ├── Vendor1/
│   │       │           │   ├── ModuleChainExtension35/
│   │       │           │   │   ├── MyClass35.php
│   │       │           │   │   └── metadata.php
│   │       │           │   ├── ModuleChainExtension36/
│   │       │           │   │   ├── MyClass36.php
│   │       │           │   │   └── metadata.php
│   │       │           │   ├── ModuleChainExtension44/
│   │       │           │   │   ├── MyClass44.php
│   │       │           │   │   └── metadata.php
│   │       │           │   ├── ModuleInheritance16/
│   │       │           │   │   ├── MyClass.php
│   │       │           │   │   └── metadata.php
│   │       │           │   ├── ModuleInheritance28a/
│   │       │           │   │   ├── MyClass.php
│   │       │           │   │   └── metadata.php
│   │       │           │   ├── namespaced_from_ns/
│   │       │           │   │   ├── MyClass.php
│   │       │           │   │   └── metadata.php
│   │       │           │   └── own_namespace_extending_unified_namespace/
│   │       │           │       ├── MyClass.php
│   │       │           │       └── metadata.php
│   │       │           ├── Vendor2/
│   │       │           │   ├── ModuleChainExtension44/
│   │       │           │   │   ├── MyClass44.php
│   │       │           │   │   └── metadata.php
│   │       │           │   ├── ModuleInheritance24/
│   │       │           │   │   ├── MyClass.php
│   │       │           │   │   └── metadata.php
│   │       │           │   └── ModuleInheritance28b/
│   │       │           │       ├── MyClass.php
│   │       │           │       └── metadata.php
│   │       │           ├── module_chain_extension_3_1/
│   │       │           │   ├── metadata.php
│   │       │           │   └── vendor_1_module_3_1_myclass.php
│   │       │           ├── module_chain_extension_3_2/
│   │       │           │   ├── metadata.php
│   │       │           │   └── vendor_1_module_3_2_myclass.php
│   │       │           └── module_native_extension/
│   │       │               ├── Article.php
│   │       │               ├── ContentController.php
│   │       │               ├── NativeExtendingArticle.php
│   │       │               ├── NativeExtendingContentController.php
│   │       │               └── metadata.php
│   │       ├── Multilanguage/
│   │       │   ├── AdditionalTablesTest.php
│   │       │   ├── LanguageMainControllerStub.php
│   │       │   ├── MultiLanguageModelTest.php
│   │       │   ├── MultilanguageTrait.php
│   │       │   └── ViewTest.php
│   │       ├── OnlineInfo/
│   │       │   ├── CurlSpy.php
│   │       │   ├── FrontendServersInformationStoringTest.php
│   │       │   ├── OnlineLicenseCheckRequestFormationTest.php
│   │       │   └── OnlineModuleNotifierRequestFormationTest.php
│   │       ├── Price/
│   │       │   ├── BasketConstruct.php
│   │       │   ├── BasketTest.php
│   │       │   ├── DeliveryCostTest.php
│   │       │   ├── OrderNumberingTest.php
│   │       │   ├── OrderTest.php
│   │       │   ├── PriceTest.php
│   │       │   ├── ProductVatTest.php
│   │       │   ├── VatForShippingCountryTest.php
│   │       │   ├── VoucherTest.php
│   │       │   └── testcases/
│   │       │       ├── basket/
│   │       │       │   ├── PriceB2basket2.yaml
│   │       │       │   ├── case1.yaml
│   │       │       │   ├── case10.yaml
│   │       │       │   ├── case100.yaml
│   │       │       │   ├── case101.yaml
│   │       │       │   ├── case102.yaml
│   │       │       │   ├── case103.yaml
│   │       │       │   ├── case104.yaml
│   │       │       │   ├── case105.yaml
│   │       │       │   ├── case106.yaml
│   │       │       │   ├── case107.yaml
│   │       │       │   ├── case108.yaml
│   │       │       │   ├── case109.yaml
│   │       │       │   ├── case11.yaml
│   │       │       │   ├── case110.yaml
│   │       │       │   ├── case111.yaml
│   │       │       │   ├── case112.yaml
│   │       │       │   ├── case113.yaml
│   │       │       │   ├── case114.yaml
│   │       │       │   ├── case115.yaml
│   │       │       │   ├── case116.yaml
│   │       │       │   ├── case117.yaml
│   │       │       │   ├── case118.yaml
│   │       │       │   ├── case119.yaml
│   │       │       │   ├── case12.yaml
│   │       │       │   ├── case120.yaml
│   │       │       │   ├── case121.yaml
│   │       │       │   ├── case122.yaml
│   │       │       │   ├── case123.yaml
│   │       │       │   ├── case124.yaml
│   │       │       │   ├── case125.yaml
│   │       │       │   ├── case126.yaml
│   │       │       │   ├── case127.yaml
│   │       │       │   ├── case128.yaml
│   │       │       │   ├── case129.yaml
│   │       │       │   ├── case13.yaml
│   │       │       │   ├── case130.yaml
│   │       │       │   ├── case131.yaml
│   │       │       │   ├── case132.yaml
│   │       │       │   ├── case133.yaml
│   │       │       │   ├── case134.yaml
│   │       │       │   ├── case135.yaml
│   │       │       │   ├── case136.yaml
│   │       │       │   ├── case137.yaml
│   │       │       │   ├── case138.yaml
│   │       │       │   ├── case139.yaml
│   │       │       │   ├── case14.yaml
│   │       │       │   ├── case140.yaml
│   │       │       │   ├── case141.yaml
│   │       │       │   ├── case142.yaml
│   │       │       │   ├── case143.yaml
│   │       │       │   ├── case144.yaml
│   │       │       │   ├── case145.yaml
│   │       │       │   ├── case146.yaml
│   │       │       │   ├── case147.yaml
│   │       │       │   ├── case148.yaml
│   │       │       │   ├── case149.yaml
│   │       │       │   ├── case15.yaml
│   │       │       │   ├── case150.yaml
│   │       │       │   ├── case151.yaml
│   │       │       │   ├── case152.yaml
│   │       │       │   ├── case153.yaml
│   │       │       │   ├── case154.yaml
│   │       │       │   ├── case155.yaml
│   │       │       │   ├── case156.yaml
│   │       │       │   ├── case157.yaml
│   │       │       │   ├── case158.yaml
│   │       │       │   ├── case159.yaml
│   │       │       │   ├── case16.yaml
│   │       │       │   ├── case160.yaml
│   │       │       │   ├── case161.yaml
│   │       │       │   ├── case162.yaml
│   │       │       │   ├── case163.yaml
│   │       │       │   ├── case164.yaml
│   │       │       │   ├── case165.yaml
│   │       │       │   ├── case166.yaml
│   │       │       │   ├── case167.yaml
│   │       │       │   ├── case168.yaml
│   │       │       │   ├── case169.yaml
│   │       │       │   ├── case17.yaml
│   │       │       │   ├── case170.yaml
│   │       │       │   ├── case171.yaml
│   │       │       │   ├── case172.yaml
│   │       │       │   ├── case173.yaml
│   │       │       │   ├── case174.yaml
│   │       │       │   ├── case18.yaml
│   │       │       │   ├── case19.yaml
│   │       │       │   ├── case2.yaml
│   │       │       │   ├── case20.yaml
│   │       │       │   ├── case21.yaml
│   │       │       │   ├── case22.yaml
│   │       │       │   ├── case23.yaml
│   │       │       │   ├── case24.yaml
│   │       │       │   ├── case25.yaml
│   │       │       │   ├── case26.yaml
│   │       │       │   ├── case27.yaml
│   │       │       │   ├── case28.yaml
│   │       │       │   ├── case29.yaml
│   │       │       │   ├── case3.yaml
│   │       │       │   ├── case30.yaml
│   │       │       │   ├── case31.yaml
│   │       │       │   ├── case32.yaml
│   │       │       │   ├── case33.yaml
│   │       │       │   ├── case34.yaml
│   │       │       │   ├── case35.yaml
│   │       │       │   ├── case36.yaml
│   │       │       │   ├── case37.yaml
│   │       │       │   ├── case38.yaml
│   │       │       │   ├── case39.yaml
│   │       │       │   ├── case4.yaml
│   │       │       │   ├── case40.yaml
│   │       │       │   ├── case41.yaml
│   │       │       │   ├── case42.yaml
│   │       │       │   ├── case43.yaml
│   │       │       │   ├── case44.yaml
│   │       │       │   ├── case45.yaml
│   │       │       │   ├── case46.yaml
│   │       │       │   ├── case47.yaml
│   │       │       │   ├── case48.yaml
│   │       │       │   ├── case49.yaml
│   │       │       │   ├── case5.yaml
│   │       │       │   ├── case50.yaml
│   │       │       │   ├── case51.yaml
│   │       │       │   ├── case52.yaml
│   │       │       │   ├── case53.yaml
│   │       │       │   ├── case54.yaml
│   │       │       │   ├── case55.yaml
│   │       │       │   ├── case56.yaml
│   │       │       │   ├── case57.yaml
│   │       │       │   ├── case58.yaml
│   │       │       │   ├── case59.yaml
│   │       │       │   ├── case6.yaml
│   │       │       │   ├── case60.yaml
│   │       │       │   ├── case61.yaml
│   │       │       │   ├── case65.yaml
│   │       │       │   ├── case66.yaml
│   │       │       │   ├── case67.yaml
│   │       │       │   ├── case68.yaml
│   │       │       │   ├── case69.yaml
│   │       │       │   ├── case7.yaml
│   │       │       │   ├── case70.yaml
│   │       │       │   ├── case71.yaml
│   │       │       │   ├── case72.yaml
│   │       │       │   ├── case73.yaml
│   │       │       │   ├── case74.yaml
│   │       │       │   ├── case75.yaml
│   │       │       │   ├── case76.yaml
│   │       │       │   ├── case77.yaml
│   │       │       │   ├── case78.yaml
│   │       │       │   ├── case79.yaml
│   │       │       │   ├── case8.yaml
│   │       │       │   ├── case80.yaml
│   │       │       │   ├── case81.yaml
│   │       │       │   ├── case82.yaml
│   │       │       │   ├── case83.yaml
│   │       │       │   ├── case84.yaml
│   │       │       │   ├── case85.yaml
│   │       │       │   ├── case86.yaml
│   │       │       │   ├── case87.yaml
│   │       │       │   ├── case88.yaml
│   │       │       │   ├── case89.yaml
│   │       │       │   ├── case9.yaml
│   │       │       │   ├── case90.yaml
│   │       │       │   ├── case91.yaml
│   │       │       │   ├── case92.yaml
│   │       │       │   ├── case93.yaml
│   │       │       │   ├── case94.yaml
│   │       │       │   ├── case95.yaml
│   │       │       │   ├── case96.yaml
│   │       │       │   ├── case97.yaml
│   │       │       │   ├── case98.yaml
│   │       │       │   ├── case99.yaml
│   │       │       │   ├── testDeliveryBug4622(1).yaml
│   │       │       │   ├── testDeliveryBug4622(2).yaml
│   │       │       │   ├── testDeliveryBug4622(3).yaml
│   │       │       │   ├── testDeliveryBug4622(4).yaml
│   │       │       │   ├── testDeliveryBug4730(1).yaml
│   │       │       │   ├── testDeliveryBug4730(2).yaml
│   │       │       │   ├── testDeliveryByWeight(1).yaml
│   │       │       │   ├── testDeliveryByWeight(2).yaml
│   │       │       │   ├── testDeliveryByWeight(3).yaml
│   │       │       │   ├── testDeliveryByWeight(4).yaml
│   │       │       │   ├── testDeliveryByWeight(5).yaml
│   │       │       │   ├── testDeliveryByWeight(6).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(1).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(2).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(3).yaml
│   │       │       │   ├── testDiscountBug5913.yaml
│   │       │       │   ├── testDiscountSorting.yaml
│   │       │       │   ├── testDiscountSortingDBRMIndependency.yaml
│   │       │       │   ├── testFewItmDiscounts.yaml
│   │       │       │   ├── testFrontendItmDiscounts.yaml
│   │       │       │   ├── testFrontendNettoPrices.yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(1).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(2).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(3).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(4).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(5).yaml
│   │       │       │   ├── testFrontendOrderStep1CalculationVoucher.yaml
│   │       │       │   ├── testFrontendOrderStep1DeliverySortedWithCategories(1).yaml
│   │       │       │   ├── testFrontendOrderStep1DeliverySortedWithCategories(2).yaml
│   │       │       │   ├── testFrontendOrdersFractionQuantities1.yaml
│   │       │       │   ├── testFrontendOrdersFractionQuantities2.yaml
│   │       │       │   ├── testFrontendPriceA.yaml
│   │       │       │   ├── testFrontendPriceA2.yaml
│   │       │       │   ├── testFrontendPriceB.yaml
│   │       │       │   ├── testFrontendPriceB2.yaml
│   │       │       │   ├── testFrontendPriceB3.yaml
│   │       │       │   ├── testFrontendPriceB4.yaml
│   │       │       │   ├── testFrontendPriceC.yaml
│   │       │       │   ├── testFrontendVatForBillingCountry(1).yaml
│   │       │       │   └── testFrontendVatForBillingCountry(2).yaml
│   │       │       ├── basket_php83/
│   │       │       │   ├── PriceB2basket2.yaml
│   │       │       │   ├── case1.yaml
│   │       │       │   ├── case10.yaml
│   │       │       │   ├── case100.yaml
│   │       │       │   ├── case101.yaml
│   │       │       │   ├── case102.yaml
│   │       │       │   ├── case103.yaml
│   │       │       │   ├── case104.yaml
│   │       │       │   ├── case105.yaml
│   │       │       │   ├── case106.yaml
│   │       │       │   ├── case107.yaml
│   │       │       │   ├── case108.yaml
│   │       │       │   ├── case109.yaml
│   │       │       │   ├── case11.yaml
│   │       │       │   ├── case110.yaml
│   │       │       │   ├── case111.yaml
│   │       │       │   ├── case112.yaml
│   │       │       │   ├── case113.yaml
│   │       │       │   ├── case114.yaml
│   │       │       │   ├── case115.yaml
│   │       │       │   ├── case116.yaml
│   │       │       │   ├── case117.yaml
│   │       │       │   ├── case118.yaml
│   │       │       │   ├── case119.yaml
│   │       │       │   ├── case12.yaml
│   │       │       │   ├── case120.yaml
│   │       │       │   ├── case121.yaml
│   │       │       │   ├── case122.yaml
│   │       │       │   ├── case123.yaml
│   │       │       │   ├── case124.yaml
│   │       │       │   ├── case125.yaml
│   │       │       │   ├── case126.yaml
│   │       │       │   ├── case127.yaml
│   │       │       │   ├── case128.yaml
│   │       │       │   ├── case129.yaml
│   │       │       │   ├── case13.yaml
│   │       │       │   ├── case130.yaml
│   │       │       │   ├── case131.yaml
│   │       │       │   ├── case132.yaml
│   │       │       │   ├── case133.yaml
│   │       │       │   ├── case134.yaml
│   │       │       │   ├── case135.yaml
│   │       │       │   ├── case136.yaml
│   │       │       │   ├── case137.yaml
│   │       │       │   ├── case138.yaml
│   │       │       │   ├── case139.yaml
│   │       │       │   ├── case14.yaml
│   │       │       │   ├── case140.yaml
│   │       │       │   ├── case141.yaml
│   │       │       │   ├── case142.yaml
│   │       │       │   ├── case143.yaml
│   │       │       │   ├── case144.yaml
│   │       │       │   ├── case145.yaml
│   │       │       │   ├── case146.yaml
│   │       │       │   ├── case147.yaml
│   │       │       │   ├── case148.yaml
│   │       │       │   ├── case149.yaml
│   │       │       │   ├── case15.yaml
│   │       │       │   ├── case150.yaml
│   │       │       │   ├── case151.yaml
│   │       │       │   ├── case152.yaml
│   │       │       │   ├── case153.yaml
│   │       │       │   ├── case154.yaml
│   │       │       │   ├── case155.yaml
│   │       │       │   ├── case156.yaml
│   │       │       │   ├── case157.yaml
│   │       │       │   ├── case158.yaml
│   │       │       │   ├── case159.yaml
│   │       │       │   ├── case16.yaml
│   │       │       │   ├── case160.yaml
│   │       │       │   ├── case161.yaml
│   │       │       │   ├── case162.yaml
│   │       │       │   ├── case163.yaml
│   │       │       │   ├── case164.yaml
│   │       │       │   ├── case165.yaml
│   │       │       │   ├── case166.yaml
│   │       │       │   ├── case167.yaml
│   │       │       │   ├── case168.yaml
│   │       │       │   ├── case169.yaml
│   │       │       │   ├── case17.yaml
│   │       │       │   ├── case170.yaml
│   │       │       │   ├── case171.yaml
│   │       │       │   ├── case172.yaml
│   │       │       │   ├── case173.yaml
│   │       │       │   ├── case174.yaml
│   │       │       │   ├── case18.yaml
│   │       │       │   ├── case19.yaml
│   │       │       │   ├── case2.yaml
│   │       │       │   ├── case20.yaml
│   │       │       │   ├── case21.yaml
│   │       │       │   ├── case22.yaml
│   │       │       │   ├── case23.yaml
│   │       │       │   ├── case24.yaml
│   │       │       │   ├── case25.yaml
│   │       │       │   ├── case26.yaml
│   │       │       │   ├── case27.yaml
│   │       │       │   ├── case28.yaml
│   │       │       │   ├── case29.yaml
│   │       │       │   ├── case3.yaml
│   │       │       │   ├── case30.yaml
│   │       │       │   ├── case31.yaml
│   │       │       │   ├── case32.yaml
│   │       │       │   ├── case33.yaml
│   │       │       │   ├── case34.yaml
│   │       │       │   ├── case35.yaml
│   │       │       │   ├── case36.yaml
│   │       │       │   ├── case37.yaml
│   │       │       │   ├── case38.yaml
│   │       │       │   ├── case39.yaml
│   │       │       │   ├── case4.yaml
│   │       │       │   ├── case40.yaml
│   │       │       │   ├── case41.yaml
│   │       │       │   ├── case42.yaml
│   │       │       │   ├── case43.yaml
│   │       │       │   ├── case44.yaml
│   │       │       │   ├── case45.yaml
│   │       │       │   ├── case46.yaml
│   │       │       │   ├── case47.yaml
│   │       │       │   ├── case48.yaml
│   │       │       │   ├── case49.yaml
│   │       │       │   ├── case5.yaml
│   │       │       │   ├── case50.yaml
│   │       │       │   ├── case51.yaml
│   │       │       │   ├── case52.yaml
│   │       │       │   ├── case53.yaml
│   │       │       │   ├── case54.yaml
│   │       │       │   ├── case55.yaml
│   │       │       │   ├── case56.yaml
│   │       │       │   ├── case57.yaml
│   │       │       │   ├── case58.yaml
│   │       │       │   ├── case59.yaml
│   │       │       │   ├── case6.yaml
│   │       │       │   ├── case60.yaml
│   │       │       │   ├── case61.yaml
│   │       │       │   ├── case65.yaml
│   │       │       │   ├── case66.yaml
│   │       │       │   ├── case67.yaml
│   │       │       │   ├── case68.yaml
│   │       │       │   ├── case69.yaml
│   │       │       │   ├── case7.yaml
│   │       │       │   ├── case70.yaml
│   │       │       │   ├── case71.yaml
│   │       │       │   ├── case72.yaml
│   │       │       │   ├── case73.yaml
│   │       │       │   ├── case74.yaml
│   │       │       │   ├── case75.yaml
│   │       │       │   ├── case76.yaml
│   │       │       │   ├── case77.yaml
│   │       │       │   ├── case78.yaml
│   │       │       │   ├── case79.yaml
│   │       │       │   ├── case8.yaml
│   │       │       │   ├── case80.yaml
│   │       │       │   ├── case81.yaml
│   │       │       │   ├── case82.yaml
│   │       │       │   ├── case83.yaml
│   │       │       │   ├── case84.yaml
│   │       │       │   ├── case85.yaml
│   │       │       │   ├── case86.yaml
│   │       │       │   ├── case87.yaml
│   │       │       │   ├── case88.yaml
│   │       │       │   ├── case89.yaml
│   │       │       │   ├── case9.yaml
│   │       │       │   ├── case90.yaml
│   │       │       │   ├── case91.yaml
│   │       │       │   ├── case92.yaml
│   │       │       │   ├── case93.yaml
│   │       │       │   ├── case94.yaml
│   │       │       │   ├── case95.yaml
│   │       │       │   ├── case96.yaml
│   │       │       │   ├── case97.yaml
│   │       │       │   ├── case98.yaml
│   │       │       │   ├── case99.yaml
│   │       │       │   ├── testDeliveryBug4622(1).yaml
│   │       │       │   ├── testDeliveryBug4622(2).yaml
│   │       │       │   ├── testDeliveryBug4622(3).yaml
│   │       │       │   ├── testDeliveryBug4622(4).yaml
│   │       │       │   ├── testDeliveryBug4730(1).yaml
│   │       │       │   ├── testDeliveryBug4730(2).yaml
│   │       │       │   ├── testDeliveryByWeight(1).yaml
│   │       │       │   ├── testDeliveryByWeight(2).yaml
│   │       │       │   ├── testDeliveryByWeight(3).yaml
│   │       │       │   ├── testDeliveryByWeight(4).yaml
│   │       │       │   ├── testDeliveryByWeight(5).yaml
│   │       │       │   ├── testDeliveryByWeight(6).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(1).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(2).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(3).yaml
│   │       │       │   ├── testDiscountBug5913.yaml
│   │       │       │   ├── testDiscountSorting.yaml
│   │       │       │   ├── testDiscountSortingDBRMIndependency.yaml
│   │       │       │   ├── testFewItmDiscounts.yaml
│   │       │       │   ├── testFrontendItmDiscounts.yaml
│   │       │       │   ├── testFrontendNettoPrices.yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(1).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(2).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(3).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(4).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(5).yaml
│   │       │       │   ├── testFrontendOrderStep1CalculationVoucher.yaml
│   │       │       │   ├── testFrontendOrderStep1DeliverySortedWithCategories(1).yaml
│   │       │       │   ├── testFrontendOrderStep1DeliverySortedWithCategories(2).yaml
│   │       │       │   ├── testFrontendOrdersFractionQuantities1.yaml
│   │       │       │   ├── testFrontendOrdersFractionQuantities2.yaml
│   │       │       │   ├── testFrontendPriceA.yaml
│   │       │       │   ├── testFrontendPriceA2.yaml
│   │       │       │   ├── testFrontendPriceB.yaml
│   │       │       │   ├── testFrontendPriceB2.yaml
│   │       │       │   ├── testFrontendPriceB3.yaml
│   │       │       │   ├── testFrontendPriceB4.yaml
│   │       │       │   ├── testFrontendPriceC.yaml
│   │       │       │   ├── testFrontendVatForBillingCountry(1).yaml
│   │       │       │   └── testFrontendVatForBillingCountry(2).yaml
│   │       │       ├── basket_php84/
│   │       │       │   ├── PriceB2basket2.yaml
│   │       │       │   ├── case1.yaml
│   │       │       │   ├── case10.yaml
│   │       │       │   ├── case100.yaml
│   │       │       │   ├── case101.yaml
│   │       │       │   ├── case102.yaml
│   │       │       │   ├── case103.yaml
│   │       │       │   ├── case104.yaml
│   │       │       │   ├── case105.yaml
│   │       │       │   ├── case106.yaml
│   │       │       │   ├── case107.yaml
│   │       │       │   ├── case108.yaml
│   │       │       │   ├── case109.yaml
│   │       │       │   ├── case11.yaml
│   │       │       │   ├── case110.yaml
│   │       │       │   ├── case111.yaml
│   │       │       │   ├── case112.yaml
│   │       │       │   ├── case113.yaml
│   │       │       │   ├── case114.yaml
│   │       │       │   ├── case115.yaml
│   │       │       │   ├── case116.yaml
│   │       │       │   ├── case117.yaml
│   │       │       │   ├── case118.yaml
│   │       │       │   ├── case119.yaml
│   │       │       │   ├── case12.yaml
│   │       │       │   ├── case120.yaml
│   │       │       │   ├── case121.yaml
│   │       │       │   ├── case122.yaml
│   │       │       │   ├── case123.yaml
│   │       │       │   ├── case124.yaml
│   │       │       │   ├── case125.yaml
│   │       │       │   ├── case126.yaml
│   │       │       │   ├── case127.yaml
│   │       │       │   ├── case128.yaml
│   │       │       │   ├── case129.yaml
│   │       │       │   ├── case13.yaml
│   │       │       │   ├── case130.yaml
│   │       │       │   ├── case131.yaml
│   │       │       │   ├── case132.yaml
│   │       │       │   ├── case133.yaml
│   │       │       │   ├── case134.yaml
│   │       │       │   ├── case135.yaml
│   │       │       │   ├── case136.yaml
│   │       │       │   ├── case137.yaml
│   │       │       │   ├── case138.yaml
│   │       │       │   ├── case139.yaml
│   │       │       │   ├── case14.yaml
│   │       │       │   ├── case140.yaml
│   │       │       │   ├── case141.yaml
│   │       │       │   ├── case142.yaml
│   │       │       │   ├── case143.yaml
│   │       │       │   ├── case144.yaml
│   │       │       │   ├── case145.yaml
│   │       │       │   ├── case146.yaml
│   │       │       │   ├── case147.yaml
│   │       │       │   ├── case148.yaml
│   │       │       │   ├── case149.yaml
│   │       │       │   ├── case15.yaml
│   │       │       │   ├── case150.yaml
│   │       │       │   ├── case151.yaml
│   │       │       │   ├── case152.yaml
│   │       │       │   ├── case153.yaml
│   │       │       │   ├── case154.yaml
│   │       │       │   ├── case155.yaml
│   │       │       │   ├── case156.yaml
│   │       │       │   ├── case157.yaml
│   │       │       │   ├── case158.yaml
│   │       │       │   ├── case159.yaml
│   │       │       │   ├── case16.yaml
│   │       │       │   ├── case160.yaml
│   │       │       │   ├── case161.yaml
│   │       │       │   ├── case162.yaml
│   │       │       │   ├── case163.yaml
│   │       │       │   ├── case164.yaml
│   │       │       │   ├── case165.yaml
│   │       │       │   ├── case166.yaml
│   │       │       │   ├── case167.yaml
│   │       │       │   ├── case168.yaml
│   │       │       │   ├── case169.yaml
│   │       │       │   ├── case17.yaml
│   │       │       │   ├── case170.yaml
│   │       │       │   ├── case171.yaml
│   │       │       │   ├── case172.yaml
│   │       │       │   ├── case173.yaml
│   │       │       │   ├── case174.yaml
│   │       │       │   ├── case18.yaml
│   │       │       │   ├── case19.yaml
│   │       │       │   ├── case2.yaml
│   │       │       │   ├── case20.yaml
│   │       │       │   ├── case21.yaml
│   │       │       │   ├── case22.yaml
│   │       │       │   ├── case23.yaml
│   │       │       │   ├── case24.yaml
│   │       │       │   ├── case25.yaml
│   │       │       │   ├── case26.yaml
│   │       │       │   ├── case27.yaml
│   │       │       │   ├── case28.yaml
│   │       │       │   ├── case29.yaml
│   │       │       │   ├── case3.yaml
│   │       │       │   ├── case30.yaml
│   │       │       │   ├── case31.yaml
│   │       │       │   ├── case32.yaml
│   │       │       │   ├── case33.yaml
│   │       │       │   ├── case34.yaml
│   │       │       │   ├── case35.yaml
│   │       │       │   ├── case36.yaml
│   │       │       │   ├── case37.yaml
│   │       │       │   ├── case38.yaml
│   │       │       │   ├── case39.yaml
│   │       │       │   ├── case4.yaml
│   │       │       │   ├── case40.yaml
│   │       │       │   ├── case41.yaml
│   │       │       │   ├── case42.yaml
│   │       │       │   ├── case43.yaml
│   │       │       │   ├── case44.yaml
│   │       │       │   ├── case45.yaml
│   │       │       │   ├── case46.yaml
│   │       │       │   ├── case47.yaml
│   │       │       │   ├── case48.yaml
│   │       │       │   ├── case49.yaml
│   │       │       │   ├── case5.yaml
│   │       │       │   ├── case50.yaml
│   │       │       │   ├── case51.yaml
│   │       │       │   ├── case52.yaml
│   │       │       │   ├── case53.yaml
│   │       │       │   ├── case54.yaml
│   │       │       │   ├── case55.yaml
│   │       │       │   ├── case56.yaml
│   │       │       │   ├── case57.yaml
│   │       │       │   ├── case58.yaml
│   │       │       │   ├── case59.yaml
│   │       │       │   ├── case6.yaml
│   │       │       │   ├── case60.yaml
│   │       │       │   ├── case61.yaml
│   │       │       │   ├── case65.yaml
│   │       │       │   ├── case66.yaml
│   │       │       │   ├── case67.yaml
│   │       │       │   ├── case68.yaml
│   │       │       │   ├── case69.yaml
│   │       │       │   ├── case7.yaml
│   │       │       │   ├── case70.yaml
│   │       │       │   ├── case71.yaml
│   │       │       │   ├── case72.yaml
│   │       │       │   ├── case73.yaml
│   │       │       │   ├── case74.yaml
│   │       │       │   ├── case75.yaml
│   │       │       │   ├── case76.yaml
│   │       │       │   ├── case77.yaml
│   │       │       │   ├── case78.yaml
│   │       │       │   ├── case79.yaml
│   │       │       │   ├── case8.yaml
│   │       │       │   ├── case80.yaml
│   │       │       │   ├── case81.yaml
│   │       │       │   ├── case82.yaml
│   │       │       │   ├── case83.yaml
│   │       │       │   ├── case84.yaml
│   │       │       │   ├── case85.yaml
│   │       │       │   ├── case86.yaml
│   │       │       │   ├── case87.yaml
│   │       │       │   ├── case88.yaml
│   │       │       │   ├── case89.yaml
│   │       │       │   ├── case9.yaml
│   │       │       │   ├── case90.yaml
│   │       │       │   ├── case91.yaml
│   │       │       │   ├── case92.yaml
│   │       │       │   ├── case93.yaml
│   │       │       │   ├── case94.yaml
│   │       │       │   ├── case95.yaml
│   │       │       │   ├── case96.yaml
│   │       │       │   ├── case97.yaml
│   │       │       │   ├── case98.yaml
│   │       │       │   ├── case99.yaml
│   │       │       │   ├── testDeliveryBug4622(1).yaml
│   │       │       │   ├── testDeliveryBug4622(2).yaml
│   │       │       │   ├── testDeliveryBug4622(3).yaml
│   │       │       │   ├── testDeliveryBug4622(4).yaml
│   │       │       │   ├── testDeliveryBug4730(1).yaml
│   │       │       │   ├── testDeliveryBug4730(2).yaml
│   │       │       │   ├── testDeliveryByWeight(1).yaml
│   │       │       │   ├── testDeliveryByWeight(2).yaml
│   │       │       │   ├── testDeliveryByWeight(3).yaml
│   │       │       │   ├── testDeliveryByWeight(4).yaml
│   │       │       │   ├── testDeliveryByWeight(5).yaml
│   │       │       │   ├── testDeliveryByWeight(6).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(1).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(2).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(3).yaml
│   │       │       │   ├── testDiscountBug5913.yaml
│   │       │       │   ├── testDiscountSorting.yaml
│   │       │       │   ├── testDiscountSortingDBRMIndependency.yaml
│   │       │       │   ├── testFewItmDiscounts.yaml
│   │       │       │   ├── testFrontendItmDiscounts.yaml
│   │       │       │   ├── testFrontendNettoPrices.yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(1).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(2).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(3).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(4).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(5).yaml
│   │       │       │   ├── testFrontendOrderStep1CalculationVoucher.yaml
│   │       │       │   ├── testFrontendOrderStep1DeliverySortedWithCategories(1).yaml
│   │       │       │   ├── testFrontendOrderStep1DeliverySortedWithCategories(2).yaml
│   │       │       │   ├── testFrontendOrdersFractionQuantities1.yaml
│   │       │       │   ├── testFrontendOrdersFractionQuantities2.yaml
│   │       │       │   ├── testFrontendPriceA.yaml
│   │       │       │   ├── testFrontendPriceA2.yaml
│   │       │       │   ├── testFrontendPriceB.yaml
│   │       │       │   ├── testFrontendPriceB2.yaml
│   │       │       │   ├── testFrontendPriceB3.yaml
│   │       │       │   ├── testFrontendPriceB4.yaml
│   │       │       │   ├── testFrontendPriceC.yaml
│   │       │       │   ├── testFrontendVatForBillingCountry(1).yaml
│   │       │       │   └── testFrontendVatForBillingCountry(2).yaml
│   │       │       ├── delivery_cost/
│   │       │       │   ├── rules/
│   │       │       │   │   ├── first_applicable_rule_cost_per_cart.yaml
│   │       │       │   │   ├── first_applicable_rule_cost_per_item.yaml
│   │       │       │   │   ├── first_applicable_rule_cost_per_product.yaml
│   │       │       │   │   ├── multiple_rules_2_applied.yaml
│   │       │       │   │   └── multiple_rules_3_applied.yaml
│   │       │       │   └── rules_assigned_to/
│   │       │       │       ├── category.yaml
│   │       │       │       └── product.yaml
│   │       │       ├── order/
│   │       │       │   ├── case1.yaml
│   │       │       │   ├── case10.yaml
│   │       │       │   ├── case11.yaml
│   │       │       │   ├── case12.yaml
│   │       │       │   ├── case13.yaml
│   │       │       │   ├── case14.yaml
│   │       │       │   ├── case15.yaml
│   │       │       │   ├── case16.yaml
│   │       │       │   ├── case18.yaml
│   │       │       │   ├── case19.yaml
│   │       │       │   ├── case2.yaml
│   │       │       │   ├── case20.yaml
│   │       │       │   ├── case21.yaml
│   │       │       │   ├── case22.yaml
│   │       │       │   ├── case23.yaml
│   │       │       │   ├── case24.yaml
│   │       │       │   ├── case26.yaml
│   │       │       │   ├── case28.yaml
│   │       │       │   ├── case29.yaml
│   │       │       │   ├── case3.yaml
│   │       │       │   ├── case30.yaml
│   │       │       │   ├── case31.yaml
│   │       │       │   ├── case32.yaml
│   │       │       │   ├── case39.yaml
│   │       │       │   ├── case5.yaml
│   │       │       │   ├── case6.yaml
│   │       │       │   ├── case7.yaml
│   │       │       │   ├── case9.yaml
│   │       │       │   └── oxorder_test_recalc_order_by_use_case.yaml
│   │       │       ├── order_numbering/
│   │       │       │   ├── case1.yaml
│   │       │       │   └── case2.yaml
│   │       │       └── price/
│   │       │           ├── case1.yaml
│   │       │           ├── case10.yaml
│   │       │           ├── case100.yaml
│   │       │           ├── case101.yaml
│   │       │           ├── case102.yaml
│   │       │           ├── case103.yaml
│   │       │           ├── case104.yaml
│   │       │           ├── case105.yaml
│   │       │           ├── case106.yaml
│   │       │           ├── case107.yaml
│   │       │           ├── case108.yaml
│   │       │           ├── case109.yaml
│   │       │           ├── case11.yaml
│   │       │           ├── case110.yaml
│   │       │           ├── case111.yaml
│   │       │           ├── case112.yaml
│   │       │           ├── case113.yaml
│   │       │           ├── case114.yaml
│   │       │           ├── case115.yaml
│   │       │           ├── case116.yaml
│   │       │           ├── case117.yaml
│   │       │           ├── case118.yaml
│   │       │           ├── case119.yaml
│   │       │           ├── case12.yaml
│   │       │           ├── case120.yaml
│   │       │           ├── case121.yaml
│   │       │           ├── case122.yaml
│   │       │           ├── case123.yaml
│   │       │           ├── case124.yaml
│   │       │           ├── case125.yaml
│   │       │           ├── case126.yaml
│   │       │           ├── case127.yaml
│   │       │           ├── case128.yaml
│   │       │           ├── case129.yaml
│   │       │           ├── case13.yaml
│   │       │           ├── case130.yaml
│   │       │           ├── case131.yaml
│   │       │           ├── case132.yaml
│   │       │           ├── case133.yaml
│   │       │           ├── case134.yaml
│   │       │           ├── case135.yaml
│   │       │           ├── case136.yaml
│   │       │           ├── case137.yaml
│   │       │           ├── case138.yaml
│   │       │           ├── case139.yaml
│   │       │           ├── case14.yaml
│   │       │           ├── case140.yaml
│   │       │           ├── case141.yaml
│   │       │           ├── case142.yaml
│   │       │           ├── case143.yaml
│   │       │           ├── case144.yaml
│   │       │           ├── case145.yaml
│   │       │           ├── case146.yaml
│   │       │           ├── case147.yaml
│   │       │           ├── case148.yaml
│   │       │           ├── case149.yaml
│   │       │           ├── case15.yaml
│   │       │           ├── case150.yaml
│   │       │           ├── case151.yaml
│   │       │           ├── case152.yaml
│   │       │           ├── case153.yaml
│   │       │           ├── case154.yaml
│   │       │           ├── case155.yaml
│   │       │           ├── case156.yaml
│   │       │           ├── case157.yaml
│   │       │           ├── case16.yaml
│   │       │           ├── case17.yaml
│   │       │           ├── case18.yaml
│   │       │           ├── case19.yaml
│   │       │           ├── case2.yaml
│   │       │           ├── case20.yaml
│   │       │           ├── case21.yaml
│   │       │           ├── case22.yaml
│   │       │           ├── case23.yaml
│   │       │           ├── case24.yaml
│   │       │           ├── case25.yaml
│   │       │           ├── case26.yaml
│   │       │           ├── case27.yaml
│   │       │           ├── case28.yaml
│   │       │           ├── case29.yaml
│   │       │           ├── case3.yaml
│   │       │           ├── case30.yaml
│   │       │           ├── case31.yaml
│   │       │           ├── case32.yaml
│   │       │           ├── case33.yaml
│   │       │           ├── case34.yaml
│   │       │           ├── case35.yaml
│   │       │           ├── case36.yaml
│   │       │           ├── case37.yaml
│   │       │           ├── case38.yaml
│   │       │           ├── case39.yaml
│   │       │           ├── case4.yaml
│   │       │           ├── case40.yaml
│   │       │           ├── case41.yaml
│   │       │           ├── case42.yaml
│   │       │           ├── case43.yaml
│   │       │           ├── case44.yaml
│   │       │           ├── case45.yaml
│   │       │           ├── case46.yaml
│   │       │           ├── case47.yaml
│   │       │           ├── case48.yaml
│   │       │           ├── case49.yaml
│   │       │           ├── case5.yaml
│   │       │           ├── case50.yaml
│   │       │           ├── case51.yaml
│   │       │           ├── case52.yaml
│   │       │           ├── case53.yaml
│   │       │           ├── case54.yaml
│   │       │           ├── case55.yaml
│   │       │           ├── case56.yaml
│   │       │           ├── case57.yaml
│   │       │           ├── case58.yaml
│   │       │           ├── case59.yaml
│   │       │           ├── case6.yaml
│   │       │           ├── case60.yaml
│   │       │           ├── case61.yaml
│   │       │           ├── case62.yaml
│   │       │           ├── case63.yaml
│   │       │           ├── case64.yaml
│   │       │           ├── case65.yaml
│   │       │           ├── case66.yaml
│   │       │           ├── case67.yaml
│   │       │           ├── case68.yaml
│   │       │           ├── case69.yaml
│   │       │           ├── case7.yaml
│   │       │           ├── case70.yaml
│   │       │           ├── case71.yaml
│   │       │           ├── case72.yaml
│   │       │           ├── case73.yaml
│   │       │           ├── case74.yaml
│   │       │           ├── case75.yaml
│   │       │           ├── case78.yaml
│   │       │           ├── case8.yaml
│   │       │           ├── case83.yaml
│   │       │           ├── case84.yaml
│   │       │           ├── case85.yaml
│   │       │           ├── case86.yaml
│   │       │           ├── case87.yaml
│   │       │           ├── case88.yaml
│   │       │           ├── case89.yaml
│   │       │           ├── case9.yaml
│   │       │           ├── case90.yaml
│   │       │           ├── case91.yaml
│   │       │           ├── case92.yaml
│   │       │           ├── case93.yaml
│   │       │           ├── case94.yaml
│   │       │           ├── case95.yaml
│   │       │           ├── case96.yaml
│   │       │           ├── case97.yaml
│   │       │           ├── case98.yaml
│   │       │           └── case99.yaml
│   │       ├── Search/
│   │       │   └── ProductSearchTest.php
│   │       ├── Url/
│   │       │   └── WidgetUrlTest.php
│   │       └── User/
│   │           ├── LoginTest.php
│   │           └── UserFixtureTrait.php
│   ├── TestContainerFactory.php
│   ├── Unit/
│   │   └── Internal/
│   │       ├── BasicContextStub.php
│   │       ├── Container/
│   │       │   └── DataObject/
│   │       │       └── DIConfigWrapperTest.php
│   │       ├── ContextStub.php
│   │       ├── Domain/
│   │       │   ├── Admin/
│   │       │   │   ├── Factory/
│   │       │   │   │   └── AdminFactoryTest.php
│   │       │   │   └── Service/
│   │       │   │       └── AdminUserServiceTest.php
│   │       │   ├── Authentication/
│   │       │   │   ├── Generator/
│   │       │   │   │   └── RandomTokenGeneratorTest.php
│   │       │   │   └── Service/
│   │       │   │       └── PasswordVerificationServiceTest.php
│   │       │   ├── Contact/
│   │       │   │   └── Form/
│   │       │   │       ├── ContactFormConfigurationFactoryTest.php
│   │       │   │       ├── ContactFormEmailValidatorTest.php
│   │       │   │       ├── ContactFormFactoryTest.php
│   │       │   │       └── ContactFormMessageBuilderTest.php
│   │       │   ├── Email/
│   │       │   │   └── EmailValidatorServiceTest.php
│   │       │   ├── Media/
│   │       │   │   ├── DataObject/
│   │       │   │   │   ├── MediaPathTest.php
│   │       │   │   │   └── MediaTypeTest.php
│   │       │   │   ├── MediaUrlGeneratorTest.php
│   │       │   │   └── Validator/
│   │       │   │       ├── FileExtensionConstraintValidatorTest.php
│   │       │   │       ├── FileSizeConstraintValidatorTest.php
│   │       │   │       ├── MimeTypeConstraintValidatorTest.php
│   │       │   │       └── UploadValidityConstraintValidatorTest.php
│   │       │   ├── Product/
│   │       │   │   ├── Media/
│   │       │   │   │   ├── DataMapper/
│   │       │   │   │   │   └── DataMapperTest.php
│   │       │   │   │   └── DataObject/
│   │       │   │   │       ├── ProductMediaRoleSetTest.php
│   │       │   │   │       └── ProductMediaRoleTest.php
│   │       │   │   └── Search/
│   │       │   │       └── Event/
│   │       │   │           ├── AfterProductSearchEventTest.php
│   │       │   │           └── BeforeProductSearchEventTest.php
│   │       │   └── Review/
│   │       │       ├── Dao/
│   │       │       │   └── ProductRatingDaoTest.php
│   │       │       ├── DataMapper/
│   │       │       │   ├── ProductRatingDataMapperTest.php
│   │       │       │   ├── RatingDataMapperTest.php
│   │       │       │   └── ReviewDataMapperTest.php
│   │       │       └── Service/
│   │       │           ├── RatingCalculatorServiceTest.php
│   │       │           ├── ReviewAndRatingMergingServiceTest.php
│   │       │           └── UserReviewAndRatingServiceTest.php
│   │       ├── Framework/
│   │       │   ├── Api/
│   │       │   │   └── HttpExceptionListenerTest.php
│   │       │   ├── Cache/
│   │       │   │   └── Command/
│   │       │   │       └── ClearCacheCommandTest.php
│   │       │   ├── Configuration/
│   │       │   │   └── DataObject/
│   │       │   │       └── DatabaseConfigurationTest.php
│   │       │   ├── DIContainer/
│   │       │   │   └── ContainerBuilderTest.php
│   │       │   ├── Database/
│   │       │   │   ├── IdTest.php
│   │       │   │   └── Logger/
│   │       │   │       └── QueryFilterTest.php
│   │       │   ├── FileSystem/
│   │       │   │   └── MasterImageHandlerTest.php
│   │       │   ├── Form/
│   │       │   │   ├── FromTest.php
│   │       │   │   └── RequiredFieldsValidatorTest.php
│   │       │   ├── FormConfiguration/
│   │       │   │   └── FromConfigurationTest.php
│   │       │   ├── Mailing/
│   │       │   │   ├── Adapter/
│   │       │   │   │   └── SymfonyMailerAdapterTest.php
│   │       │   │   └── Factory/
│   │       │   │       └── TransportFactoryTest.php
│   │       │   ├── Module/
│   │       │   │   ├── Cache/
│   │       │   │   │   └── InvalidateModuleCacheEventSubscriberTest.php
│   │       │   │   ├── Configuration/
│   │       │   │   │   ├── Bridge/
│   │       │   │   │   │   └── ModuleConfigurationDaoBridgeTest.php
│   │       │   │   │   ├── Cache/
│   │       │   │   │   │   └── ClassPropertyModuleConfigurationCacheTest.php
│   │       │   │   │   ├── Dao/
│   │       │   │   │   │   └── ModuleEnvironmentConfigurationExtenderTest.php
│   │       │   │   │   ├── DataMapper/
│   │       │   │   │   │   └── ModuleConfigurationDataMapperTest.php
│   │       │   │   │   └── DataObject/
│   │       │   │   │       ├── ClassExtensionsChainTest.php
│   │       │   │   │       ├── ModuleConfigurationTest.php
│   │       │   │   │       └── ShopConfigurationTest.php
│   │       │   │   ├── Facade/
│   │       │   │   │   └── ActiveModulesDataProviderBridgeTest.php
│   │       │   │   ├── Install/
│   │       │   │   │   └── Service/
│   │       │   │   │       ├── BootstrapModuleInstallerTest.php
│   │       │   │   │       └── ProjectConfigurationGeneratorTest.php
│   │       │   │   ├── MetaData/
│   │       │   │   │   ├── Converter/
│   │       │   │   │   │   ├── MetaDataConverterAggregateTest.php
│   │       │   │   │   │   └── ModuleSettingsBooleanConverterTest.php
│   │       │   │   │   ├── Dao/
│   │       │   │   │   │   ├── MetaDataNormalizerTest.php
│   │       │   │   │   │   └── MetaDataSchemataProviderTest.php
│   │       │   │   │   └── Validator/
│   │       │   │   │       ├── MetaDataSchemaValidatorTest.php
│   │       │   │   │       ├── MetaDataValidatorAggregateTest.php
│   │       │   │   │       ├── ModuleIdValidatorTest.php
│   │       │   │   │       ├── SchemaValidatorTest.php
│   │       │   │   │       └── ShopModuleSettingBooleanValidatorTest.php
│   │       │   │   ├── Path/
│   │       │   │   │   ├── ModuleAssetsPathResolverTest.php
│   │       │   │   │   └── ModulePathResolverTest.php
│   │       │   │   ├── Setup/
│   │       │   │   │   └── Validator/
│   │       │   │   │       ├── ClassExtensionsModuleSettingValidatorTest.php
│   │       │   │   │       ├── ControllersValidatorTest.php
│   │       │   │   │       └── EventsModuleSettingValidatorTest.php
│   │       │   │   └── Template/
│   │       │   │       └── Locator/
│   │       │   │           └── ModulesMenuFileLocatorTest.php
│   │       │   ├── RateLimiter/
│   │       │   │   ├── ApiRateLimitListenerTest.php
│   │       │   │   ├── ApiRateLimiterFactoryTest.php
│   │       │   │   └── RateLimitHeadersListenerTest.php
│   │       │   ├── Templating/
│   │       │   │   ├── Locator/
│   │       │   │   │   ├── AdminTemplateFileLocatorTest.php
│   │       │   │   │   ├── EditionMenuFileLocatorTest.php
│   │       │   │   │   ├── EditionUserFileLocatorTest.php
│   │       │   │   │   └── TemplateFileLocatorTest.php
│   │       │   │   └── TemplateRendererTest.php
│   │       │   └── Theme/
│   │       │       └── Bridge/
│   │       │           └── AdminThemeBridgeTest.php
│   │       ├── Setup/
│   │       │   ├── Directory/
│   │       │   │   └── DirectoryValidatorTest.php
│   │       │   ├── Htaccess/
│   │       │   │   ├── HtaccessDaoFactoryTest.php
│   │       │   │   ├── HtaccessDaoTest.php
│   │       │   │   ├── HtaccessUpdaterTest.php
│   │       │   │   ├── ShopBaseUrlTest.php
│   │       │   │   └── testData/
│   │       │   │       └── .htaccess
│   │       │   ├── Language/
│   │       │   │   └── DefaultLanguageTest.php
│   │       │   └── ShopSetupCommandTest.php
│   │       ├── Transition/
│   │       │   └── Adapter/
│   │       │       ├── Configuration/
│   │       │       │   └── Utility/
│   │       │       │       └── ShopSettingEncoderTest.php
│   │       │       └── TemplateLogic/
│   │       │           └── IncludeDynamicLogicTest.php
│   │       └── Utility/
│   │           ├── Authentication/
│   │           │   └── Policy/
│   │           │       └── PasswordPolicyTest.php
│   │           ├── Hash/
│   │           │   └── Service/
│   │           │       ├── Argon2IPasswordHashServiceTest.php
│   │           │       └── BcryptPasswordHashServiceTest.php
│   │           └── Url/
│   │               └── UrlParserTest.php
│   ├── bootstrap.php
│   ├── codeception.yml
│   └── scripts/
│       ├── check_log.sh
│       ├── codeception.sh
│       ├── codeception_failure_pattern.txt
│       ├── deprecated.sh
│       ├── deprecated_failure_pattern.txt
│       ├── integration.sh
│       ├── integration_failure_pattern.txt
│       ├── php-cs-report.sh
│       ├── unit.sh
│       └── unit_failure_pattern.txt
└── var/
    └── .gitignore

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/oxid-esales/install.sh
================================================
#!/bin/bash
# shellcheck disable=SC2154
# Lower case environment variables are passed from the workflow and used here
# We use a validation loop in init to ensure, they're set
# shellcheck disable=SC2086
# We want install_container_options to count as multiple arguments
set -e

function error() {
    echo -e "\033[0;31m${1}\033[0m"
    exit 1
}

function init() {
    for VAR in install_container_method install_container_options install_container_name \
        install_config_idebug install_is_enterprise; do
        echo -n "Checking, if $VAR is set ..."
        if [ -z ${VAR+x} ]; then
            error "Variable '${VAR}' not set"
        fi
        echo "OK, ${VAR}='${!VAR}'"
    done
    echo -n "Locating oe-console ... "
    cd source || exit 1
    if [ -f 'bin/oe-console' ]; then
        OE_CONSOLE='bin/oe-console'
    else
        if [ -f 'vendor/bin/oe-console' ]; then
        OE_CONSOLE='vendor/bin/oe-console'
        else
            error "Can't find oe-console in bin or vendor/bin!"
        fi
    fi
    echo "OK, using '${OE_CONSOLE}'"
    if [ -z "${OXID_BUILD_DIRECTORY}" ]; then
      echo "OXID_BUILD_DIRECTORY is not set, setting it to /var/www/var/cache/"
      export OXID_BUILD_DIRECTORY="/var/www/var/cache/"
    else
      echo "OXID_BUILD_DIRECTORY is set to '${OXID_BUILD_DIRECTORY}'"
    fi
    if [ ! -d "${OXID_BUILD_DIRECTORY/\/var\/www/source}" ]; then
      echo "Creating '${OXID_BUILD_DIRECTORY}'"
      docker compose "${install_container_method}" -T \
        ${install_container_options} \
        "${install_container_name}" \
        mkdir -p "${OXID_BUILD_DIRECTORY}"
    fi
}

init
# Run Install Shop
docker compose "${install_container_method}" -T \
    ${install_container_options} \
    "${install_container_name}" \
    ${OE_CONSOLE} oe:setup:shop \

# Activate iDebug
if [ "${install_config_idebug}" == 'true' ]; then
    export OXID_DEBUG_MODE="true"
fi

# Activate theme
docker compose "${install_container_method}" -T \
    ${install_container_options} \
    "${install_container_name}" \
    ${OE_CONSOLE} oe:theme:activate apex

# Output PHP error log
if [ -s data/php/logs/error_log.txt ]; then
    echo -e "\033[0;35mPHP error log\033[0m"
    cat data/php/logs/error_log.txt
fi
exit 0


================================================
FILE: .github/oxid-esales/shop_ce.yaml
================================================
install:
  add_services: 'selenium-chrome'
  git:
    sdk_ref: b-8.0.x
  script: 'source/.github/oxid-esales/install.sh'
  cache:
    prepared_shop: true
  composer:
    root_url: ''

runscript:
  matrix:
    script: |
      [
        "shop:~/unit.sh",
        "shop:~/integration.sh",
        "shop:~/codeception.sh",
      ]
  container:
    options:
      -e XDEBUG_MODE=coverage
      -e CODECEPTION_OPTIONS="--ext DotReporter --skip-group flow_theme"
      -e THEME_ID=apex
      -e SELENIUM_SERVER_HOST=selenium
      -e BROWSER_NAME=chrome
      -e GITHUB_EVENT_NAME="{{ .Github.EventName }}"
      -e GITHUB_BASE_REF="{{ .Github.BaseRef }}"
      -e GITHUB_REF="refs/heads/{{ .Data.install.git.ref }}"
      -e GITHUB_REF_NAME="{{ .Data.install.git.ref }}"

sonarcloud:
  matrix:
    testplan: '["-"]'
  strip_path: '/var/www/vendor/oxid-esales/oxideshop-ce/'
  run_cleanup: false
  target_branch: 'b-8.0.x'

finish:
  slack_title: 'Shop CE ({{ .Data.install.git.ref }}) by {{ .Github.Actor }}'


================================================
FILE: .github/workflows/dispatch-manual.yaml
================================================
name: Manual run

on:
  workflow_dispatch:
    inputs:
      scenario:
        type: choice
        options:
          - 8.0.x
          - use custom testplan
        default: '8.0.x'
        description: 'Choose test scenario'
      limit:
        type: choice
        description: 'Limit php and mysql versions'
        options:
          - 'no'
          - 'PHP8.4/MySQL5.7'
          - 'PHP8.4/MySQL8.0'
          - 'PHP8.4/MySQL8.4'
          - 'PHP8.5/MySQL8.0'
          - 'PHP8.5/MySQL8.4'
        default: 'PHP8.5/MySQL8.4'
      custom_testplan:
        type: string
        description: 'Custom testplan'
        default: '~/defaults/php8.5_mysql8.4_only.yaml,~/shop_ce.yaml'
      runs_on:
        type: string
        description: 'JSON string/array describing the runner'
        default: '"ubuntu-latest"'
      use_dev_version:
        type: choice
        options: ['no', 'v0']
        description: 'Use the dev version of github actions'
        default: 'no'

jobs:
  build_testplan:
    runs-on: ${{ fromJson(inputs.runs_on) }}
    outputs:
      testplan: '${{ steps.build.outputs.testplan }}'
    steps:
      - name: 'Build testplan'
        id: build
        run: |
          # Build testplan
          # shellcheck disable=SC2088
          PLAN="~/shop_ce.yaml"
          # shellcheck disable=SC2088
          case "${{ inputs.limit }}" in
            "no") LIMIT='';;
            "PHP8.3/MySQL5.7") LIMIT='~/defaults/php8.3_mysql5.7_only.yaml,' ;;
            "PHP8.3/MySQL8.0") LIMIT='~/defaults/php8.3_mysql8.0_only.yaml,' ;;
            "PHP8.3/MySQL8.4") LIMIT='~/defaults/php8.3_mysql8.4_only.yaml,' ;;
            "PHP8.4/MySQL5.7") LIMIT='~/defaults/php8.4_mysql5.7_only.yaml,' ;;
            "PHP8.4/MySQL8.0") LIMIT='~/defaults/php8.4_mysql8.0_only.yaml,' ;;
            "PHP8.4/MySQL8.4") LIMIT='~/defaults/php8.4_mysql8.4_only.yaml,' ;;
            "PHP8.5/MySQL8.0") LIMIT='~/defaults/php8.5_mysql8.0_only.yaml,' ;;
            "PHP8.5/MySQL8.4") LIMIT='~/defaults/php8.5_mysql8.4_only.yaml,' ;;
            *) echo "Illegal choice, fix the workflow"
              exit 1
              ;;
          esac
          # shellcheck disable=SC2088
          case '${{ inputs.scenario}}' in
            "8.0.x") TESTPLAN="${LIMIT}${PLAN}" ;;
            "use custom testplan") TESTPLAN="${{ inputs.custom_testplan }}" ;;
            *)
              echo "Illegal choice, fix the workflow"
              exit 1
              ;;
          esac
          echo "testplan=${TESTPLAN}" | tee -a "${GITHUB_OUTPUT}"

  dispatch_stable:
    if: ${{ inputs.use_dev_version == 'no' }}
    needs: build_testplan
    uses: oxid-eSales/github-actions/.github/workflows/universal_workflow_light.yaml@v5
    with:
      testplan: ${{ needs.build_testplan.outputs.testplan }}
      runs_on: ${{ inputs.runs_on }}
      defaults: 'v5'
      plan_folder: '.github/oxid-esales'
    secrets:
      DOCKER_HUB_USER: ${{ secrets.DOCKER_HUB_USER }}
      DOCKER_HUB_TOKEN: ${{ secrets.DOCKER_HUB_TOKEN }}
      CACHE_ENDPOINT: ${{ secrets.CACHE_ENDPOINT }}
      CACHE_ACCESS_KEY: ${{ secrets.CACHE_ACCESS_KEY }}
      CACHE_SECRET_KEY: ${{ secrets.CACHE_SECRET_KEY }}
      enterprise_github_token: ${{ secrets.enterprise_github_token }}
      SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

  dispatch_v0:
    if: ${{ inputs.use_dev_version == 'v0' }}
    needs: build_testplan
    uses: oxid-eSales/github-actions/.github/workflows/universal_workflow_light.yaml@v0
    with:
      testplan: ${{ needs.build_testplan.outputs.testplan }}
      runs_on: ${{ inputs.runs_on }}
      defaults: 'v0'
      plan_folder: '.github/oxid-esales'
    secrets:
      DOCKER_HUB_USER: ${{ secrets.DOCKER_HUB_USER }}
      DOCKER_HUB_TOKEN: ${{ secrets.DOCKER_HUB_TOKEN }}
      CACHE_ENDPOINT: ${{ secrets.CACHE_ENDPOINT }}
      CACHE_ACCESS_KEY: ${{ secrets.CACHE_ACCESS_KEY }}
      CACHE_SECRET_KEY: ${{ secrets.CACHE_SECRET_KEY }}
      enterprise_github_token: ${{ secrets.enterprise_github_token }}
      SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}


================================================
FILE: .github/workflows/trigger.yaml
================================================
name: Auto trigger on push or pull requests

on:
  pull_request: {}
  push: {}

jobs:
  build_testplan:
    runs-on: 'ubuntu-latest'
    outputs:
      testplan: '${{ steps.build.outputs.testplan }}'
    steps:
      - name: 'Build testplan'
        id: build
        run: |
          # Build testplan
          if [ '${{  github.event_name }}' == 'pull_request' ]; then
            REF_TO_CHECK='refs/heads/${{ github.base_ref }}'
            LIMIT=""
          else
            REF_TO_CHECK='${{ github.ref }}'
            # shellcheck disable=SC2088
            LIMIT="~/defaults/php8.5_mysql8.4_only.yaml,"
          fi
          # shellcheck disable=SC2088
          case "${REF_TO_CHECK}" in
            refs/heads/b-8.0.x*) TESTPLAN="${LIMIT}~/shop_ce.yaml" ;;
            *)
              echo "Can't match ${REF_TO_CHECK} to a version, can't determine test plan."
              echo "Branch names should start with b-<major>.<minor>.x"
              exit 1
              ;;
          esac
          echo "testplan=${TESTPLAN}" | tee -a "${GITHUB_OUTPUT}"

  shop_ce:
    needs: build_testplan
    uses: oxid-eSales/github-actions/.github/workflows/universal_workflow_light.yaml@v5
    with:
      testplan: ${{ needs.build_testplan.outputs.testplan }}
      runs_on: '"ubuntu-latest"'
      defaults: 'v5'
      plan_folder: '.github/oxid-esales'
    secrets:
      DOCKER_HUB_USER: ${{ secrets.DOCKER_HUB_USER }}
      DOCKER_HUB_TOKEN: ${{ secrets.DOCKER_HUB_TOKEN }}
      CACHE_ENDPOINT: ${{ secrets.CACHE_ENDPOINT }}
      CACHE_ACCESS_KEY: ${{ secrets.CACHE_ACCESS_KEY }}
      CACHE_SECRET_KEY: ${{ secrets.CACHE_SECRET_KEY }}
      enterprise_github_token: ${{ secrets.enterprise_github_token }}
      SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}


================================================
FILE: .gitignore
================================================
# Log
!/source/log/
/source/log/*
!/source/log/.htaccess

/.phpunit.result.cache

# Export
!/source/export/
/source/export/*
!/source/export/.gitkeep

# Composer
/vendor/
/composer.lock

# IDE
/.idea/
/.phpstorm.meta.php
/.ide-helper.php

# OS
.DS_Store

# Shop config & DI for modules and packages
/var/*
!/var/.gitignore

# DotEnv files
/.env
/.env.local
/.env.local.php
/.env.*.local

# Template files
/source/Application/views/*


================================================
FILE: CHANGELOG-8.0.md
================================================
# Change Log for OXID eShop Community Edition Core Component

## v8.0.0-alpha.3 - Unreleased
*Compilation release*

### Removed
- Remove deprecated constant `Database::MYSQL_ATTR_INIT_COMMAND`
- PHP v8.3 support

## v8.0.0-alpha.2 - 2026-02-12
*Compilation release*

### Added

- ClearShopCacheEvent
- Validation for country VAT number prefix in the admin area
- Upgrade to Symfony version 7.3

### Fixed

- Creating a new country does not check the VAT-ID prefix [#0007205](https://bugs.oxid-esales.com/view.php?id=7205)
- Use raw SQL in migrations instead of Doctrine's schema tools to keep doctrine/dbal v4.3.0 installs working
- Admin cookie handling to avoid explode type errors on non-string values
- Restrict shutdown logging to fatal errors
- Read `OXID_DEBUG_MODE` from dotenv before shutdown logging

### Changed

- Product pictures functionality has been redesigned
  - Unlimited product images (no longer limited to 12)
  - Images stored in separate tables (removed from `oxarticles`)
  - New reusable media handling infrastructure (`Internal\Domain\Media`)
  - New product media services (`Internal\Domain\Product\Media`)
  - Redesigned Admin UI for image management
- Module environment configuration file paths
- Updated doctrine/dbal dependency to ^4.2
- `ResultSet` constructor now strictly requires `$statement` to be a `Doctrine\DBAL\Statement`
- Refactored database query logging configuration.
- Database adapter fetcher methods now return associative results by default
- Method `getLastInsertId` of `DatabaseInterface` Adapter will throw `DatabaseErrorException` if no insert ID is available.
- The `DatabaseConfiguration` namespace has been renamed for consistency, and the `getScheme` method has been replaced with `getDriver`
- Shop setup proceeds with an empty database
- The method `prepareModulesInformation` now returns module data as arrays instead of stdClass objects
- `SetupDbValidatorInterface` no longer throws `DatabaseNotEmptyException`; database checks are now handled by a separate validator.
- `database_schema.sql` no longer removes existing `oxmigrations` tables during shop setup. The schema dump should only be applied to an empty database.

### Deprecated

- `RequestInterface` - use `Symfony\Component\HttpFoundation\Request` instead

### Removed

- Deprecated helper class `DateFormatHelper`
- Deprecated promotions
- Fetch mode support from `DatabaseInterface` and `DatabaseProvider`
- Redundant Logger classes and interfaces: `MonologConfigurationInterface`, `PsrLoggerConfigurationInterface`,
  `LoggerConfigurationValidatorInterface`, `LoggerWrapper`, `NullLogger` and `DatabaseLoggerFactoryInterface`
- Redundant shop state and configuration classes and services: `ShopStateServiceInterface`, `ProjectConfigurationDaoInterface`, `ProjectConfiguration`
- A deprecated partner-related method `getBelboonParam()` of class `BaseController` [0006140](https://bugs.oxid-esales.com/view.php?id=6140)
- `ContainerBuilderFactory` class
- Media refactoring — replaced with MediaView-based access
  - `Article`: `getThumbnailUrl()`, `getIconUrl()`, `getPictureUrl()`, `getMasterZoomPictureUrl()`, `getZoomPictureUrl()`, `getPictureFieldValue()`, `getMasterPicturePath()`, `getPicturesProduct()`, `getMasterZoomPicture()`, `getZoomMedia()`
  - `ArticleDetails`: `getActPicture()`, `morePics()`, `getIcons()`, `showZoomPics()`, `getZoomPics()`
  - `ArticleDetailsController`: `getActPictureId()`, `showZoomPics()`
- `RequestAdapter`  - use `Symfony\Component\HttpFoundation\Request` instead
- Deprecated method `Id::fromUid()`

## v8.0.0-alpha.1 - 2025-02-03

### Added

- Set custom product low stock label [#0004401](https://bugs.oxid-esales.com/view.php?id=4401)
- Support PSR caching interface, related functionalities and applied them on module cache.
- Registration of environment variables via Symfony Dotenv Component
- Interface for storing Symfony Service Container parameters in configuration
- Support Symfony caching interface with tags

### Deprecated

- `Utils` methods for managing cache will be replaced by using Symfony cache directly

### Changed

- Configuration parameters have been moved from `config.inc.php` to environment and container parameters
- Admin directory is not removed from the url in `ViewConfig::getModuleUrl`
  anymore [PR-817](https://github.com/OXID-eSales/oxideshop_ce/pull/817)
- Reset created product "sold" counter during Copying of the
  product [PR-913](https://github.com/OXID-eSales/oxideshop_ce/pull/913)
- `ModuleConfigurationValidatorInterface` is not optional anymore in the module activation service.
- The visibility of time-activated products has changed, products with an undefined end date appear in the shop for an
  unlimited period of time
- Functionality to extend Symfony DIC for environments and shops
- Method `getAltImageUrl` of PictureHandler will not use ssl parameter anymore
- `oe:setup:shop` command now fetches parameters from the current environment configuration.
  All corresponding command-line parameters were removed
- Updated list of Search Engines (formerly `aRobots` configuration)
- Browser-based application setup was discontinued. Only console-based setup is available
- Replace file caching in `Utils` with Symfony cache
- Removed $includePermanentCache parameter from `oxResetFileCache` method, all cache files are now cleared without exclusions.

### Removed

- Remove console classes from the Internal
  namespace: `Executor`, `ExecutorInterface`, `CommandsProvider`, `CommandsProviderInterface`
- Cleanup deprecated Private Sales Invite functionality
- `getContainer()` and `dispatchEvent()` methods from Core classes
- Remove deprecated global function \makeReadable()
- Redundant `TemplateFileResolverInterface` functionality
- Smarty templates support
- `PAYMENT_INFO_OFF`
  translation [#0006426](https://bugs.oxid-esales.com/view.php?id=6426) [PR-953](https://github.com/OXID-eSales/oxideshop_ce/pull/953)
- Remove deprecated `TemplateCacheService` implementation
- Remove deprecated `BasicContextInterface::getCurrentShopId` and its basic implementation in
  `BasicContext::getCurrentShopId`
- Remove deprecated model property `Attribute::_sTitle` [PR-914](https://github.com/OXID-eSales/oxideshop_ce/pull/914)
- Obsolete caching related functionalities
- Methods in deprecated `Database` and `DatabaseProvider`, related to configuration management
- Redundant interfaces `TransactionServiceInterface`, `FinderFactoryInterface`
- `ConnectionProviderInterface::get()` was superseded by `ConnectionFactory::create()`
- Deprecated global functions `warningHandler(), dumpVar(), debug()`
- Superseded and obsolete `config.inc.php` parameters
- Obsolete `ConfigFile` class and functionality for `config.inc.php` management
- Deprecated class `ModuleVariablesLocator`
- Redundant `BasicContextInterface` methods
- Related configuration parameter method `isTplBlocksDebugMode` of `ViewConfig` class
- Deprecated `NamedArgumentsTrait`
- Deprecated `isEnabledAdminQueryLog` method in ContextInterface. Query logging mode can be fetched directly from
  container.
- Deprecated `handleDatabaseException` functionality
- Dependency on `oxideshop-facts` component
- `FileCache` and `SubShopSpecificFileCache` classes. Use `ContextInterface::getCurrentShopId()` instead
- Legacy file-based caching methods from `Utils` class
- Remove deprecated Interface `CacheConnectorInterface`


================================================
FILE: CONTRIBUTING.md
================================================
Contributing to OXID eShop
==========================

OXID eShop is available under two different licenses, OXID Community License and a commercial license.

That's why, before contributing for the first time, you must sign the Contributor License Agreement.
You can find more information about it on the FAQ page OXID Contribution and Contributor Agreement FAQ:
https://docs.oxid-esales.com/developer/en/latest/contributing.html#contributor-agreement

If you'd like to contribute, please read the following documents:

* [Contributing guide](https://docs.oxid-esales.com/developer/en/latest/contributing.html)
* [Reporting bugs](https://bugs.oxid-esales.com/)
* [Submitting feature requests](https://docs.oxid-esales.com/developer/en/latest/contributing.html#new-features) 
* [Coding standards](https://docs.oxid-esales.com/developer/en/latest/development/modules_components_themes/quality.html)
* [Running tests](https://docs.oxid-esales.com/developer/en/latest/development/testing/index.html)
* [Security issues](https://docs.oxid-esales.com/en/security/security.html)


================================================
FILE: LICENSE
================================================
OXID eShop Community Edition Lizenz 2022

1.	Präambel
    Mit der OXID eShop Community Edition stellen wir Ihnen die jeweils aktuelle OXID eShop Software ab dem 15.08.2022 für die Zwecke des Evaluierens, des Testens und für Proof of Concepts zur Verfügung.
    Sie ist ausschließlich für den nichtkommerziellen Einsatz bestimmt. Wenn Sie eine kommerzielle Nutzung der Software anstreben, wenden Sie sich bitte an OXID eSales unter sales@oxid-esales.com.

2.	Definitionen
a.	„Mandant“: eine organisatorisch und datentechnisch abgeschlossene Einheit innerhalb des Systems mit getrennten Stammsätzen und einem eigenständigen Satz von Tabellen/Views, die über Parameter gesteuert und kontrolliert wird.
    „View“ ist eine datenbanktechnisch eingerichtete Ansicht auf einen Teildatenbestand der Stammdaten.
b.	„nichtkommerzielle Zwecke“: der Einsatz der Software, der nicht direkt auf einen geldwerten Vorteil durch Anbahnen, Durchführen und Abwickeln von Kundenbestellungen („Orders“) einschließlich der Zahlungen abzielt oder dem Nutzer der Software oder einem anderen dritten einen wirtschaftlichen Vorteil verschafft, z.B. durch Stellung von Rechnungen für Leistungen, die im Zusammenhang mit der Software erbracht werden. Die rechtliche oder steuerrechtliche Qualifikation Ihres Unternehmens als „öffentlich-rechtlich“ oder „gemeinnützig“ ist unbeachtlich.
c.	„Software”: die (i) Softwaredateien des Produkts OXID eShop, (ii) die dazugehörige Dokumentation sowie (iii) alle Updates, Upgrades und Ergänzungen hierzu.
d.  „Software Core“: alle Dateien mit dem Copyright-Vermerk der OXID eSales AG.
e.	„Verbundene Unternehmen“: verbundene Unternehmen gemäß §§ 15 ff. AktG.

3.	Urheberrecht
Die Software einschließlich aller OXID-Softwaremodule ist urheberrechtlich geschützt und geschütztes Geschäftsgeheimnis von OXID eSales.
OXID eSales behält sich alle Rechte vor, sofern Ihnen in dieser Lizenzvereinbarung keine ausdrücklichen Rechte an der Software eingeräumt werden.

4.	Rechteeinräumung
OXID eSales räumt Ihnen an der Software das nicht ausschließliche und nicht übertragbare Recht zur Nutzung der Software ein.

5.	Nutzungsbedingungen
Sie erhalten das Recht zur Nutzung unter der Bedingung, dass Sie die Nutzungsbedingungen akzeptieren und die Nutzung per E-Mail an lizenzregistrierung@oxid-esales.com melden.
Die Anmeldung muss wahrheitsgemäße Angaben über Ihren Namen, Adresse, Telefonnummer und E-Mail-Adresse enthalten. Diese Daten werden gemäß der Datenschutzrichtlinie unter oxid-esales.com/datenschutz erhoben und verarbeitet.

6.	Einschränkungen
a.	Die Nutzung ist beschränkt auf
i.	nichtkommerzielle Zwecke
ii.	auf einen (1) Mandanten
b.	Die Nutzung von mehreren Lizenzen zur Umgehung der Mandantenlimitation ist untersagt.
c.	Die Nutzung von unter dieser Lizenz veröffentlichten Softwareprodukten oder -modulen in Verbindung mit früheren Versionen der OXID eShop CE Software (vor Version 6.4.3) bzw. von dieser abgeleiteten Softwareprodukten (Forks) ist unter der Bedingung zulässig, dass diese nur
    - für nichtkommerzielle Zwecke und
    - beschränkt auf einen (1) Mandanten
    eingesetzt werden.
d.	Die Nutzung dieser Software oder Teilen davon durch Module oder Software Dritter unterliegt diesen Nutzungsbedingungen.
e.	Die Nutzung ist auf 6 Monate beschränkt. Die Nutzungszeit beginnt mit dem erstmaligen Download. Eine Löschung der Dateien oder Deinstallation führt nicht zu einer Unterbrechung der Nutzungszeit. Für eine mögliche Verlängerung wenden Sie sich bitte an sales@oxid-esales.com.
f.	Die Software enthält Softwareprodukte von Fremdherstellern. Die Fremdprodukte können Sie nach der Installation der composer.lock-Datei entnehmen. Für diese Fremdprodukte gelten zusätzliche Lizenzbestimmungen, die Sie der entsprechenden Lizenzdatei des Fremdprodukts entnehmen können.
g.	Sie dürfen den Software Core weder umarbeiten, anpassen noch übersetzen, ebenso ausgeschlossen ist Reverse Engineering und Nachbau der Software.
h.	Jede gemäß dieser Lizenz zulässige Kopie der Software muss die Urheberrechts- und Schutzrechtsvermerke von OXID eSales tragen, die auf oder in der lizensierten Software vorhanden sind.
i.	Sie dürfen die Software Dritten weder vermieten, verleihen, unterlizensieren oder übertragen.
j.	Sie dürfen den Quellcode der Software Dritten nicht zugänglich machen, es sei denn,
    - die entsprechenden Dateien sind von OXID eSales explizit als öffentlich (open source) gekennzeichnet oder
    - der Dritte benötigt den Quellcode zur Durchführung seiner Tätigkeit für Sie und hat mit OXID eSales eine schriftliche Geheimhaltungsvereinbarung abgeschlossen.
k.	Für die Überprüfung der korrekten Lizensierung und die Produktoptimierung ist OXID eSales berechtigt, auf die Software und deren Systemplattform zuzugreifen bzw. lizenzrelevante Informationen über die Software über eine automatische Rückmeldung der Systemplattform zu erhalten und diese zu speichern. Die übermittelten Daten werden nicht zu anderen Zwecken verwendet und es werden dabei keine personenbezogenen Daten erfasst. Sie dürfen diese Softwarefunktion nicht abschalten.
l.  Die Nutzung von OXID eSS-Modulen ist verpflichtend, wenn OXID ein Modul mit gleichartiger Funktionalität im Portfolio hat.
    Falls Sie erweiterte Nutzungsbedingungen benötigen, wenden Sie sich bitte an sales@oxid-esales.com.

7.	Marketing
OXID eSales erhält das Recht zur Nennung der mit der Software genutzten Sites und/oder Lösungen zu Werbezwecken.

8.	Nutzungsuntersagung und Nutzungsentschädigung
Wenn Sie die Bestimmungen von Ziff. 5 und 6 nicht oder nicht vollständig erfüllen, ist OXID eSales ohne weiteres berechtigt, Ihnen die Nutzung der Software zu untersagen. Schadensersatzansprüche von OXID eSales bleiben vorbehalten.
Werden die Nutzungsbedingungen nicht eingehalten und gibt es keine andere Vereinbarung, stimmt der Lizenznehmer einer Nutzungsentschädigung von 111 € zuzüglich des Inflationsausgleichs gemäß der vom statistischen Bundesamt festgestellten jährlichen Inflationsrate für jeden Monat unrechtmäßiger Nutzung zu. Diese Entschädigung entbindet nicht vom Abschluss eines der Nutzung entsprechenden Lizenzvertrags.
Für spätere Versionen behält sich OXID eine Anpassung der Nutzungsgebühr vor.
Werden mehrere Shops oder Teile der OXID Professional Edition oder OXID Enterprise Edition oder vergleichbare Funktionalität, die durch Dritte auf Basis von OXID Software bereitgestellt wurde, genutzt, wird eine Lizenzmiete gemäß der OXID Preisliste fällig. Es gilt die Preisliste des Monats, in dem die erste Lizenzmiete bezahlt wird.

9.	Support und Wartung
Support- und Wartungsleistungen sind nicht Bestandteil dieser Lizenzvereinbarung. Wenn Sie solche Leistungen in Anspruch nehmen wollen, wenden Sie sich bitte an sales@oxid-esales.com.

10.	Rechte bei Mängeln
a.	Die vertragsgemäße Beschaffenheit der Software bestimmt sich ausschließlich nach den Spezifikationen der Dokumentation in der bei Abschluss dieses Lizenzvertrages gültigen Fassung.
b.	Die Verjährungsfrist beträgt 12 Monate nach Lieferung der Software (Bereitstellung zum Download).
c.	Die Software wird Ihnen in der Beschaffenheit überlassen, wie sie sich zum Zeitpunkt des Abschlusses dieses Lizenzvertrages befindet. OXID eSales übernimmt keine Haftung für Sach- und Rechtsmängel, insbesondere übernehmen wir keine Haftung für die vertragsgemäße Beschaffenheit oder die Eignung für den vertraglich vorausgesetzten Verwendungszweck. Die in der Dokumentation gegebene Beschreibung der Software darf in keinem Fall als Zusicherung oder Garantie verstanden werden. Unsere Haftung für vorsätzliches und/oder arglistiges Handeln bleibt davon jedoch unberührt.

11.	Haftung
a.	OXID eSales haftet nur bei Vorsatz und grober Fahrlässigkeit, Ansprüchen nach dem deutschen Produkthaftungsgesetz sowie bei einer Verletzung des Lebens, des Körpers oder der Gesundheit. Im Übrigen haften die Parteien unbeschränkt nach den gesetzlichen Vorschriften
b.	Alle anderen Ansprüche sind ausgeschlossen.

12.	Sonstiges
a.	Dieser Lizenzvertrag unterliegt deutschem Recht.
b.	Sollte eine Bestimmung dieses Lizenzvertrages unwirksam oder nichtig sein oder werden, so bleibt seine Wirksamkeit im Übrigen unberührt.
c.	Für die Auslegung dieses Lizenzvertrages ist die deutsche Sprachfassung verbindlich.
d.	Für alle Streitigkeiten, die aus dieser Lizenzvereinbarung entstehen, wird die Zuständigkeit des Landgerichts Freiburg vereinbart.



This is a rough translation of the German language version for informational purposes. The German language version of this license agreement is legally binding.

1. Preamble
From the date of 15.08.2022, we provide you with the current OXID eShop Community Edition software for the purpose of evaluation, testing and proof of concepts.
It is intended exclusively for non-commercial use. If you intend to use the software commercially, please contact OXID eSales at sales@oxid-esales.com.

2. Definitions
a.  "Tenant" means an organisationally and data-wise self-contained unit within the system with separate master records and an independent set of tables/views, which is managed and controlled by parameters. "View" is a view of a partial dataset of the master data set up in terms of database technology.
b.	"Non-commercial Purposes" means the use of the Software which is not directly aimed at a pecuniary advantage by initiating, carrying out and processing customer orders ("Orders"), including payments, or which does not provide the user of the Software or another third party with an economic advantage, e.g. by issuing invoices for services provided in connection with the Software. The legal or fiscal qualification of your company as "public-law" or "non-profit" is irrelevant.
c.  "Software": the (i) software files of the OXID eShop product, (ii) the associated documentation and (iii) all updates, upgrades and supplements thereto.
d.  "Software Core": all files with the copyright notice of OXID eSales AG.
e.  "Affiliated Companies": affiliated companies according to §§ 15 ff. AktG (German Stock Corporation Act).

3. Copyright
The software including all OXID software modules is copyrighted and protected trade secret of OXID eSales.
OXID eSales reserves all rights unless you are granted explicit rights to the software in this license agreement.

4. Granting of rights
OXID eSales grants you the non-exclusive and non-transferable right to use the software.

5. Terms of use
You are granted the right to use the software under the condition that you accept the terms of use and report the use by e-mail to lizenzregistrierung@oxid-esales.com.
The registration must contain truthful information about your name, address, telephone number and e-mail address. This data will be collected and processed in accordance with the privacy policy at oxid-esales.com/datenschutz.

6. Restrictions
a.	Use is restricted to
    i. non-commercial purposes
    ii. to one (1) Tenant
b.	Use of multiple licences to circumvent the Tenant limitation is prohibited.
c.  The use of software products or modules published under this license in connection with earlier versions of the OXID eShop CE software (released prior to 15.08.2022) or software products derived from it (forks) is permitted on condition that they are used only
    - for non-commercial purposes and
    - limited to one (1) Tenant
    client.
d.  The use of this software or parts thereof by third party modules or software is subject to these Terms of Use.
e.  The use is limited to a period of 6 months. The period of use begins with the first download. Deletion of the files or de-installation does not lead to an interruption of the period of use. For a possible extension, please contact sales@oxid-esales.com.
f.  The software contains software products from third-party manufacturers. You can find the third-party products in the composer.lock file after installation. Additional license conditions apply to these third-party products, which you can find in the corresponding license file of the third-party product.
g.  You may not modify, adapt or translate the Software Core, nor may you reverse engineer or decompile the Software.
h.  Any copy of the Software permitted under this license must bear the copyright and proprietary notices of OXID eSales that are present on or in the Licensed Software.
i.  You may not rent, loan, sublicense or transfer the Software to any third party.
j.  You may not make the source code of the software available to third parties unless,
    - the corresponding files are explicitly marked as public (open source) by OXID eSales or
    - the third party requires the source code to carry out its activities for you and has concluded a written non-disclosure agreement with OXID eSales.
k.  For the purpose of checking the correct licensing and product optimisation, OXID eSales is entitled to access the software and its system platform or to receive license-relevant information about the software via automatic feedback from the system platform and to store this information. The transmitted data will not be used for other purposes and no personal data will be collected in the process. You may not disable this software feature.
l. The use of OXID eSS modules is mandatory if OXID has a module with similar functionality in its portfolio.

If you require extended terms of use, please contact sales@oxid-esales.com.

7. Marketing
OXID eSales receives the right to name the sites and/or solutions used with the software for advertising purposes.

8. Prohibition of Use and Compensation for Use
If you do not or not completely fulfill the provisions of clauses 5 and 6, OXID eSales is entitled without further ado to prohibit you from using the software. OXID eSales reserves the right to claim damages.
If the terms of use are not complied with and there is no other agreement, the licensee agrees to compensation for use of € 111 plus inflation compensation in accordance with the annual inflation rate determined by the Federal Statistical Office of Germany for each month of unlawful use. This compensation does not release from the conclusion of a license agreement corresponding to the use.
For later versions OXID reserves the right to adjust the usage fee.
If several shops or parts of the OXID Professional Edition or OXID Enterprise Edition or comparable functionality provided by third parties based on OXID software are used, a license fee according to the OXID price list is due. The price list of the month in which the first license fee is paid applies.

9 Support and Maintenance
Support and maintenance services are not part of this license agreement. If you wish to make use of such services, please contact sales@oxid-esales.com.

10. Rights in the Event of Defects
a.	The contractual quality of the software is determined exclusively by the specifications of the documentation in the version valid at the time of conclusion of this license agreement.
b.	The limitation period is 12 months after delivery of the software (provision for download).
c.	The software is provided to you in the condition as it is at the time of the conclusion of this license agreement. OXID eSales accepts no liability for material defects or defects of title, in particular we accept no liability for the contractual condition or suitability for the contractually assumed purpose. The description of the software given in the documentation may in no case be understood as an assurance or guarantee. However, this shall not affect our liability for intentional and/or fraudulent acts.

11. Liability
a.	OXID eSales shall only be liable in the event of intent and gross negligence, claims under the German Product Liability Act and in the event of injury to life or health. In all other respects the parties shall be liable without limitation in accordance with the statutory provisions.
b.	All other claims are excluded.

12. Miscellaneous
a.	This license agreement is subject to German law.
b.	Should any provision of this license agreement be or become invalid or void, the validity of the remaining provisions shall remain unaffected.
c.	The German language version shall be binding for the interpretation of this license agreement.
d.	It is agreed that the Regional Court of Freiburg shall have jurisdiction over all disputes arising from this licence agreement.

================================================
FILE: README.md
================================================
OXID eShop
==========

This repository contains the sources of OXID eShop Community Edition Core Component.

### About OXID eShop:

OXID eShop is a flexible e-commerce software with a wide range of functionalities. 
Thanks to its modular, modern and state-of-the-art architecture, it can be modified, expanded 
and customized to individual requirements with the greatest of ease. 

OXID eShop is just e-commerce software for agencies with deadlines :-)

### Installation

#### Compilation installation

For full installation instructions, please check the [OXID eShop compilation installation manual](https://docs.oxid-esales.com/developer/en/latest/getting_started/installation/eshop_installation.html).

#### Installation for Contributors

Information how to install development version and make a pull request can be found in [CONTRIBUTING.md](CONTRIBUTING.md) file.

### IDE code completion

You can easily enable code completion in your IDE by installing [this script](https://github.com/OXID-eSales/eshop-ide-helper) and generating it as described.

### Useful links

* Vendor home page - https://www.oxid-esales.com
* Bug tracker - https://bugs.oxid-esales.com
* SDK - https://github.com/OXID-eSales/docker-eshop-sdk


================================================
FILE: bin/oe-console
================================================
#!/usr/bin/env php
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

use OxidEsales\EshopCommunity\Internal\Container\BootstrapContainerFactory;
use OxidEsales\EshopCommunity\Internal\Framework\DIContainer\ContainerBuilder;
use OxidEsales\EshopCommunity\Internal\Framework\FileSystem\ProjectRootLocator;
use OxidEsales\EshopCommunity\Internal\Framework\Module\Configuration\Dao\ShopConfigurationDaoInterface;
use OxidEsales\EshopCommunity\Internal\Transition\Utility\BasicContext;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Input\ArgvInput;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\Filesystem\Path;

$autoloadFileExist = false;
$autoloadFiles = [
    __DIR__ . '/../vendor/autoload.php',
    __DIR__ . '/../../vendor/autoload.php',
    __DIR__ . '/../../../vendor/autoload.php',
    __DIR__ . '/../../../../vendor/autoload.php',
];

foreach ($autoloadFiles as $autoloadFile) {
    if (file_exists($autoloadFile)) {
        require_once $autoloadFile;
        $autoloadFileExist = true;
        break;
    }
}

if (!$autoloadFileExist) {
    exit('autoload.php file was not found!');
}

$shopId =  (int) (new ArgvInput())->getParameterOption(
    '--shop-id',
    1
);

$shopConfigurations = BootstrapContainerFactory::getBootstrapContainer()
    ->get(ShopConfigurationDaoInterface::class)
    ->getAll();
if (!isset($shopConfigurations[$shopId])) {
    echo "Error: Invalid --shop-id value. Configuration for shop '$shopId' can not be found!\n";
    exit(1);
}

$_POST['shp'] = $shopId;

$bootstrapFilePath = Path::join((new ProjectRootLocator())->getProjectRoot(), 'source', 'bootstrap.php');
require_once $bootstrapFilePath;

$container = (new ContainerBuilder(new BasicContext(), $shopId))->getContainer();
$container->compile(true);

$commandLoader = $container->get('console.command_loader');

$idCommands = [];
foreach ($container->getParameter('console.command.ids') as $id) {
    $idCommands[] = $container->get($id);
}

$application = new Application();
$application->setCommandLoader($commandLoader);
$application->setDispatcher($container->get(EventDispatcherInterface::class));
$application->addCommands(
    $idCommands
);

$application->run();


================================================
FILE: composer.json
================================================
{
    "name": "oxid-esales/oxideshop-ce",
    "description": "This package contains OXID eShop CE source code.",
    "license": "proprietary",
    "type": "oxideshop",
    "keywords": [
        "oxid",
        "modules",
        "eShop"
    ],
    "homepage": "https://www.oxid-esales.com/en",
    "require": {
        "php": "^8.4",
        "ext-dom": "*",
        "ext-gd": "*",
        "ext-iconv": "*",
        "ext-json": "*",
        "ext-pdo": "*",
        "ext-pdo_mysql": "*",
        "ext-tokenizer": "*",
        "doctrine/collections": "^1.4.0",
        "doctrine/dbal": "^4.2.5",
        "monolog/monolog": "^1.23.0",
        "oxid-esales/oxideshop-composer-plugin": "dev-b-8.0.x",
        "oxid-esales/oxideshop-db-views-generator": "dev-b-8.0.x",
        "oxid-esales/oxideshop-demodata-installer": "dev-b-8.0.x",
        "oxid-esales/oxideshop-doctrine-migration-wrapper": "dev-b-8.0.x",
        "oxid-esales/oxideshop-unified-namespace-generator": "dev-b-8.0.x",
        "phpmailer/phpmailer": "^6.5.0",
        "psr/container": "^1.1.1",
        "symfony/config": "^7.3",
        "symfony/console": "^7.3",
        "symfony/dependency-injection": "^7.3",
        "symfony/dotenv": "^7.3",
        "symfony/event-dispatcher": "^7.3",
        "symfony/expression-language": "^7.3",
        "symfony/filesystem": "^7.3",
        "symfony/finder": "^7.3",
        "symfony/http-foundation": "^7.3",
        "symfony/html-sanitizer": "^7.3",
        "symfony/lock": "^7.3",
        "symfony/mailer": "^7.3",
        "symfony/mime": "^7.3",
        "symfony/string": "^7.3",
        "symfony/yaml": "^7.3",
        "symfony/http-kernel": "^7.3",
        "symfony/routing": "^7.3",
        "symfony/error-handler": "^7.3",
        "symfony/rate-limiter": "^7.3"
    },
    "require-dev": {
        "codeception/codeception": "^5.0",
        "codeception/module-asserts": "^3.0",
        "codeception/module-db": "^3.0",
        "codeception/module-filesystem": "^3.0",
        "codeception/module-webdriver": "^4.0",
        "composer/composer": "^2.0",
        "incenteev/composer-parameter-handler": "^2.1.4",
        "mikey179/vfsstream": "~1.6.8",
        "oxid-esales/codeception-modules": "dev-b-8.0.x",
        "oxid-esales/codeception-page-objects": "dev-b-8.0.x",
        "oxid-esales/developer-tools": "dev-b-8.0.x",
        "oxid-esales/oxideshop-ide-helper": "dev-b-8.0.x",
        "phpspec/prophecy-phpunit": "^2.0.1",
        "phpunit/phpunit": "^12.5",
        "squizlabs/php_codesniffer": "^3.5.4",
        "symfony/browser-kit": "^7.3",
        "symfony/http-client": "^7.3"
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "autoload": {
        "psr-4": {
            "OxidEsales\\EshopCommunity\\": "./source"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "OxidEsales\\EshopCommunity\\Tests\\": "./tests"
        }
    },
    "bin": [
        "bin/oe-console"
    ],
    "config": {
        "allow-plugins": {
            "oxid-esales/oxideshop-composer-plugin": true,
            "oxid-esales/oxideshop-unified-namespace-generator": true
        }
    },
    "extra": {
        "oxideshop": {
            "blacklist-filter": [
                "Application/Component/**/*",
                "Application/Controller/**/*",
                "Application/Model/**/*",
                "Core/**/*",
                "Internal/**/*"
            ]
        }
    },
    "scripts": {
        "post-install-cmd": [
            "@oe:ide-helper:generate"
        ],
        "post-update-cmd": [
            "@oe:ide-helper:generate"
        ],
        "oe:ide-helper:generate": [
            "if [ -f ./vendor/bin/oe-eshop-ide_helper ]; then oe-eshop-ide_helper; fi"
        ]
    }
}


================================================
FILE: phpcs.xml.dist
================================================
<?xml version="1.0"?>
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="PHP_CodeSniffer" xsi:noNamespaceSchemaLocation="phpcs.xsd">
    <description>The coding standard for PHP_CodeSniffer itself.</description>
    <file>source</file>
    <exclude-pattern>*source/Application/views/.*$</exclude-pattern>
    <arg name="colors"/>
    <arg value="p"/>
    <arg value="n"/>
    <arg name="parallel" value="75"/>
    <arg name="extensions" value="php"/>
    <rule ref="PSR12"/>
    <rule ref="PSR2.Methods.MethodDeclaration.Underscore">
        <exclude-pattern>*tests/Codeception/.*$</exclude-pattern>
    </rule>
</ruleset>


================================================
FILE: phpunit.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/12.5/phpunit.xsd"
        bootstrap="./tests/bootstrap.php"
        cacheDirectory="./var/.phpunit.cache"
        processIsolation="true"
        backupGlobals="true"
        backupStaticProperties="true"
        beStrictAboutChangesToGlobalState="true"
        beStrictAboutCoverageMetadata="true"
        displayDetailsOnTestsThatTriggerNotices="true"
        displayDetailsOnTestsThatTriggerDeprecations="true"
        displayDetailsOnTestsThatTriggerWarnings="true"
        displayDetailsOnTestsThatTriggerErrors="true"
>
    <testsuites>
        <testsuite name="Unit">
            <directory>tests/Unit</directory>
        </testsuite>
        <testsuite name="Integration">
            <directory>tests/Integration</directory>
        </testsuite>
    </testsuites>
    <source>
        <include>
            <directory>source</directory>
        </include>
    </source>
    <php>
        <env name="OXID_CONTAINER_PROVIDER" value="OxidEsales\EshopCommunity\Tests\TestContainerFactory" force="true"/>
    </php>
</phpunit>


================================================
FILE: source/.htaccess
================================================
<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /

    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteRule ^graphql/?$    widget.php?cl=graphql&skipSession=1   [QSA,NC,L]

    RewriteRule ^api/(.*)$ api.php/$1 [QSA,NC,L]

    RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
    RewriteRule .* - [F]

    RewriteCond %{REQUEST_URI} oxseo\.php$
    RewriteCond %{QUERY_STRING} mod_rewrite_module_is=off
    RewriteRule oxseo\.php$ oxseo.php?mod_rewrite_module_is=on [L]

    RewriteCond %{REQUEST_URI} !^(\/admin\/|\/Core\/|\/Application\/|\/export\/|\/modules\/|\/out\/|\/views\/)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule !(\.html|\/|\.jpe?g|\.css|\.pdf|\.doc|\.gif|\.png|\.webp|\.js|\.htc|\.svg)$ %{REQUEST_URI}/ [NC,R=301,L]

    RewriteCond %{REQUEST_URI} !^(\/admin\/|\/Core\/|\/Application\/|\/export\/|\/modules\/|\/out\/|\/views\/)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule (\.html|\/)$ oxseo.php


    RewriteCond %{REQUEST_URI} (\/out\/pictures\/generated\/)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule (\.jpe?g|\.gif|\.png|\.webp|\.svg)$ getimg.php [NC]

    RewriteRule ^(vendor/) - [F,L,NC]
    RewriteRule ^migration - [R=403,L]
</IfModule>

# disabling log file access from outside
<FilesMatch "(EXCEPTION_LOG\.txt|\.log|\.tpl|pkg\.rev|\.ini|pkg\.info|\.pem|composer\.json|composer\.lock|test_config\.yml)$">
   <IfModule mod_authz_core.c>
       Require all denied
   </IfModule>
   <IfModule !mod_authz_core.c>
       Order allow,deny
       Deny from all
   </IfModule>
</FilesMatch>

# Prevent .ht* files from being sent to outside requests
<Files ~ "^\.ht">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order allow,deny
        Deny from all
    </IfModule>
</Files>

Options -Indexes
DirectoryIndex index.php


================================================
FILE: source/Application/Component/BasketComponent.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component;

use OxidEsales\Eshop\Core\DatabaseProvider;
use OxidEsales\Eshop\Core\Exception\ArticleInputException;
use OxidEsales\Eshop\Core\Exception\NoArticleException;
use OxidEsales\Eshop\Core\Exception\OutOfStockException;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\EshopCommunity\Core\Di\ContainerFacade;
use OxidEsales\EshopCommunity\Internal\Transition\ShopEvents\BasketChangedEvent;
use Psr\Log\LoggerInterface;
use stdClass;

use function oxNew;

/**
 * Main shopping basket manager. Arranges shopping basket
 * contents, updates amounts, prices, taxes etc.
 *
 * @subpackage oxcmp
 */
class BasketComponent extends \OxidEsales\Eshop\Core\Controller\BaseController
{
    /**
     * Marking object as component
     *
     * @var bool
     */
    protected $_blIsComponent = true;

    /**
     * Last call function name
     *
     * @var string
     */
    protected $_sLastCallFnc = null;

    protected bool $isBasketCalculated = false;

    /**
     * Parameters which are kept when redirecting after user
     * puts something to basket
     *
     * @var array
     */
    public $aRedirectParams = [
        'cnid', // category id
        'mnid', // manufacturer id
        'anid', // active article id
        'tpl', // spec. template
        'listtype', // list type
        'searchcnid', // search category
        'searchvendor', // search vendor
        'searchmanufacturer', // search manufacturer
        // @deprecated since v5.3 (2016-06-17); Listmania will be moved to an own module.
        'searchrecomm', // search recomendation
        'recommid' // recomm. list id
        // END deprecated
    ];

    public function init()
    {
        if (Registry::getConfig()->getConfigParam('blPsBasketReservationEnabled')) {
            $basketReservations = Registry::getSession()->getBasketReservations();
            if ($basketReservations) {
                if (!$basketReservations->getTimeLeft()) {
                    $basket = Registry::getSession()->getBasket();
                    if ($basket && $basket->getProductsCount()) {
                        $this->emptyBasket($basket);
                    }
                }
                $basketReservations->discardUnusedReservations(
                    ContainerFacade::getParameter('oxid_esales.basket_reservation_cleanup_rate')
                );
            }
        }

        parent::init();

        // Basket exclude
        if (Registry::getConfig()->getConfigParam('blBasketExcludeEnabled')) {
            $basket = Registry::getSession()->getBasket();
            if ($basket) {
                $this->getParent()->setRootCatChanged($this->isRootCatChanged() && $basket->getContents());
            }
        }
    }

    /**
     * Loads basket ($oBasket = $mySession->getBasket()), calls oBasket->calculateBasket,
     * executes parent::render() and returns basket object.
     *
     * @return object   $oBasket    basket object
     */
    public function render()
    {
        $session = Registry::getSession();

        if ($basket = $session->getBasket()) {
            if (!$this->isBasketCalculated) {
                $basket->calculateBasket(true);
                $this->isBasketCalculated = true;
            }
        }

        parent::render();

        return $basket;
    }

    /**
     * Basket content update controller.
     * Before adding article - check if client is not a search engine. If
     * yes - exits method by returning false. If no - executes
     * oxcmp_basket::_addItems() and puts article to basket.
     * Returns position where to redirect user browser.
     *
     * @param string $sProductId Product ID (default null)
     * @param double $dAmount    Product amount (default null)
     * @param array  $aSel       (default null)
     * @param array  $aPersParam (default null)
     * @param bool   $blOverride If true amount in basket is replaced by $dAmount otherwise amount is increased by
     *                           $dAmount (default false)
     *
     * @return mixed
     * @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
     * @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
     */
    public function toBasket($sProductId = null, $dAmount = null, $aSel = null, $aPersParam = null, $blOverride = false)
    {
        if (
            Registry::getSession()->getId() &&
            Registry::getSession()->isActualSidInCookie() &&
            !Registry::getSession()->checkSessionChallenge()
        ) {
            ContainerFacade::get(LoggerInterface::class)
                ->warning('EXCEPTION_NON_MATCHING_CSRF_TOKEN');
            Registry::getUtilsView()->addErrorToDisplay('ERROR_MESSAGE_NON_MATCHING_CSRF_TOKEN');
            return;
        }

        // adding to basket is not allowed ?
        $myConfig = Registry::getConfig();
        if (Registry::getUtils()->isSearchEngine()) {
            return;
        }

        // adding articles
        if ($aProducts = $this->getItems($sProductId, $dAmount, $aSel, $aPersParam, $blOverride)) {
            $this->setLastCallFnc('tobasket');

            $database = DatabaseProvider::getDb();
            $database->startTransaction();
            try {
                $oBasketItem = $this->addItems($aProducts);
                //reserve active basket
                if (Registry::getConfig()->getConfigParam('blPsBasketReservationEnabled')) {
                    $basket = Registry::getSession()->getBasket();
                    Registry::getSession()->getBasketReservations()->reserveBasket($basket);
                }
            } catch (\Exception $exception) {
                $database->rollbackTransaction();
                unset($oBasketItem);
                throw $exception;
            }
            $database->commitTransaction();

            // new basket item marker
            if ($oBasketItem && $myConfig->getConfigParam('iNewBasketItemMessage') != 0) {
                $oNewItem = new stdClass();
                $oNewItem->sTitle = $oBasketItem->getTitle();
                $oNewItem->sId = $oBasketItem->getProductId();
                $oNewItem->dAmount = $oBasketItem->getAmount();
                $oNewItem->dBundledAmount = $oBasketItem->getdBundledAmount();

                // passing article
                Registry::getSession()->setVariable('_newitem', $oNewItem);
            }

            // redirect to basket
            $redirectUrl = $this->getRedirectUrl();
            ContainerFacade::dispatch(new BasketChangedEvent($this));

            return $redirectUrl;
        }
    }

    /**
     * Similar to tobasket, except that as product id "bindex" parameter is (can be) taken
     *
     * @param string $sProductId Product ID (default null)
     * @param double $dAmount    Product amount (default null)
     * @param array  $aSel       (default null)
     * @param array  $aPersParam (default null)
     * @param bool   $blOverride If true means increase amount of chosen article (default false)
     *
     * @return mixed
     */
    public function changeBasket(
        $productId = null,
        $amount = null,
        $sel = null,
        $persParam = null,
        $override = true
    ) {
        if (!Registry::getSession()->checkSessionChallenge()) {
            return;
        }

        if (Registry::getUtils()->isSearchEngine()) {
            return;
        }

        $session = Registry::getSession();

        if (!$productId) {
            $basketItemId = Registry::getRequest()->getRequestEscapedParameter('bindex');

            if ($basketItemId) {
                $basket = $session->getBasket();
                $basketContents = $basket->getContents();
                $item = $basketContents[$basketItemId];

                $productId = isset($item) ? $item->getProductId() : null;
            } else {
                $productId = Registry::getRequest()->getRequestEscapedParameter('aid');
            }
        }

        $amount = $amount ?? Registry::getRequest()->getRequestEscapedParameter('am');
        $sel = $sel ?? Registry::getRequest()->getRequestEscapedParameter('sel');
        $persParam = $persParam ?: Registry::getRequest()->getRequestEscapedParameter('persparam');

        if ($products = $this->getItems($productId, $amount, $sel, $persParam, $override)) {
            $basket = $session->getBasket();
            $basket->onUpdate();
            $this->setLastCallFnc('changebasket');

            $database = DatabaseProvider::getDb();
            $database->startTransaction();
            try {
                $basketItem = $this->addItems($products);
                if (Registry::getConfig()->getConfigParam('blPsBasketReservationEnabled')) {
                    Registry::getSession()->getBasketReservations()->reserveBasket($basket);
                }
            } catch (NoArticleException $exception) {
                return $this->getRedirectUrl();
            } catch (\Exception $exception) {
                $database->rollbackTransaction();
                unset($basketItem);
                throw $exception;
            }
            $database->commitTransaction();
        }
    }

    /**
     * Formats and returns redirect URL where shop must be redirected after
     * storing something to basket
     *
     * @return string   $sClass.$sPosition  redirection URL
     */
    protected function getRedirectUrl()
    {

        // active controller id
        $controllerId = Registry::getConfig()->getRequestControllerId();
        $controllerId = $controllerId ? $controllerId . '?' : 'start?';
        $sPosition = '';

        // setting redirect parameters
        foreach ($this->aRedirectParams as $sParamName) {
            $sParamVal = Registry::getRequest()->getRequestEscapedParameter($sParamName);
            $sPosition .= $sParamVal ? $sParamName . '=' . $sParamVal . '&' : '';
        }

        // special treatment
        // search param
        if ($sParam = Registry::getRequest()->getRequestParameter('searchparam')) {
            $sPosition .= 'searchparam=' . rawurlencode($sParam) . '&';
        }

        // current page number
        $iPageNr = (int) Registry::getRequest()->getRequestEscapedParameter('pgNr');
        $sPosition .= ($iPageNr > 0) ? 'pgNr=' . $iPageNr . '&' : '';

        // reload and backbutton blocker
        if (Registry::getConfig()->getConfigParam('iNewBasketItemMessage') == 3) {
            // saving return to shop link to session
            Registry::getSession()->setVariable('_backtoshop', $controllerId . $sPosition);

            // redirecting to basket
            $controllerId = 'basket?';
        }

        return $controllerId . $sPosition;
    }

    /**
     * Cleans and returns persisted parameters.
     *
     * @param array $persistedParameters key-value parameters (optional). If not passed - takes parameters from request.
     *
     * @return array|null cleaned up parameters or null, if there are no non-empty parameters
     */
    protected function getPersistedParameters($persistedParameters = null)
    {
        $persistedParameters = ($persistedParameters ?: Registry::getRequest()->getRequestEscapedParameter('persparam'));
        if (!is_array($persistedParameters)) {
            return null;
        }
        return array_filter($persistedParameters) ?: null;
    }

    /**
     * Collects and returns array of items to add to basket. Product info is taken not only from
     * given parameters, but additionally from request 'aproducts' parameter
     *
     * @param string $sProductId product ID
     * @param double $dAmount    product amount
     * @param array  $aSel       product select lists
     * @param array  $aPersParam product persistent parameters
     * @param bool   $blOverride amount override status
     *
     * @return mixed
     */
    protected function getItems(
        $sProductId = null,
        $dAmount = null,
        $aSel = null,
        $aPersParam = null,
        $blOverride = false
    ) {
        // collecting items to add
        $aProducts = Registry::getRequest()->getRequestEscapedParameter('aproducts');

        // collecting specified item
        $sProductId = $sProductId ? $sProductId : Registry::getRequest()->getRequestEscapedParameter('aid');
        if ($sProductId) {
            // additionally fetching current product info
            $dAmount = isset($dAmount) ? $dAmount : Registry::getRequest()->getRequestEscapedParameter('am');

            // select lists
            $aSel = isset($aSel) ? $aSel : Registry::getRequest()->getRequestEscapedParameter('sel');

            // persistent parameters
            if (empty($aPersParam)) {
                $aPersParam = $this->getPersistedParameters();
            }

            $sBasketItemId = Registry::getRequest()->getRequestEscapedParameter('bindex');

            $aProducts[$sProductId] = [
                'am'           => $dAmount,
                'sel'          => $aSel,
                'persparam'    => $aPersParam,
                'override'     => $blOverride,
                'basketitemid' => $sBasketItemId
            ];
        }

        if (is_array($aProducts) && count($aProducts)) {
            if (Registry::getRequest()->getRequestEscapedParameter('removeBtn') !== null) {
                //setting amount to 0 if removing article from basket
                foreach ($aProducts as $sProductId => $aProduct) {
                    if (isset($aProduct['remove']) && $aProduct['remove']) {
                        $aProducts[$sProductId]['am'] = 0;
                    } else {
                        unset($aProducts[$sProductId]);
                    }
                }
            }

            return $aProducts;
        }

        return false;
    }

    /**
     * Adds all articles user wants to add to basket. Returns
     * last added to basket item.
     *
     * @param array $products products to add array
     *
     * @return  object  $oBasketItem    last added basket item
     */
    protected function addItems($products)
    {
        $activeView = Registry::getConfig()->getActiveView();
        $errorDestination = $activeView->getErrorDestination();
        $session = Registry::getSession();

        $basket = $session->getBasket();
        $basketInfo = $basket->getBasketSummary();

        $basketItemAmounts = [];

        foreach ($products as $addProductId => $productInfo) {
            $data = $this->prepareProductInformation($addProductId, $productInfo);
            $productAmount = 0;
            if (isset($basketInfo->aArticles[$data['id']])) {
                $productAmount = $basketInfo->aArticles[$data['id']];
            }
            $products[$addProductId]['oldam'] = $productAmount;

            //If we already changed articles so they now exactly match existing ones,
            //we need to make sure we get the amounts correct
            if ($data['oldBasketItemId'] !== null && isset($basketItemAmounts[$data['oldBasketItemId']])) {
                $data['amount'] = $data['amount'] + $basketItemAmounts[$data['oldBasketItemId']];
            }

            $basketItem = $this->addItemToBasket($basket, $data, $errorDestination);

            if (($basketItem instanceof \OxidEsales\Eshop\Application\Model\BasketItem)) {
                $basketItemKey = $basketItem->getBasketItemKey();
                if ($basketItemKey) {
                    if (! isset($basketItemAmounts[$basketItemKey])) {
                        $basketItemAmounts[$basketItemKey] = 0;
                    }
                    $basketItemAmounts[$basketItemKey] += $data['amount'];
                }
            }

            if (!$basketItem) {
                $info = $basket->getBasketSummary();
                $products[$addProductId]['am'] = $info->aArticles[$data['id']] ?? 0;
            }
        }

        //if basket empty remove possible gift card
        if ($basket->getProductsCount() == 0) {
            $basket->setCardId(null);
        }

        // information that last call was tobasket
        $this->setLastCall($this->getLastCallFnc(), $products, $basketInfo);

        return $basketItem;
    }

    /**
     * Setting last call data to session (data used by econda)
     *
     * @param string $sCallName    name of action ('tobasket', 'changebasket')
     * @param array  $aProductInfo data which comes from request when you press button "to basket"
     * @param array  $aBasketInfo  array returned by \OxidEsales\Eshop\Application\Model\Basket::getBasketSummary()
     */
    protected function setLastCall($sCallName, $aProductInfo, $aBasketInfo)
    {
        Registry::getSession()->setVariable('aLastcall', [$sCallName => $aProductInfo]);
    }

    /**
     * Setting last call function name (data used by econda)
     *
     * @param string $sCallName name of action ('tobasket', 'changebasket')
     */
    protected function setLastCallFnc($sCallName)
    {
        $this->_sLastCallFnc = $sCallName;
    }

    /**
     * Getting last call function name (data used by econda)
     *
     * @return string
     */
    protected function getLastCallFnc()
    {
        return $this->_sLastCallFnc;
    }

    /**
     * Returns true if active root category was changed
     *
     * @return bool
     */
    public function isRootCatChanged()
    {
        // in Basket
        $session = Registry::getSession();
        $oBasket = $session->getBasket();
        if ($oBasket->showCatChangeWarning()) {
            $oBasket->setCatChangeWarningState(false);

            return true;
        }

        // in Category, only then category is empty ant not equal to default category
        $sDefCat = Registry::getConfig()->getActiveShop()->oxshops__oxdefcat->value;
        $sActCat = Registry::getRequest()->getRequestEscapedParameter('cnid');
        $oActCat = oxNew(\OxidEsales\Eshop\Application\Model\Category::class);
        if ($sActCat && $sActCat != $sDefCat && $oActCat->load($sActCat)) {
            $sActRoot = $oActCat->oxcategories__oxrootid->value;
            if ($oBasket->getBasketRootCatId() && $sActRoot != $oBasket->getBasketRootCatId()) {
                return true;
            }
        }

        return false;
    }

    /**
     * Executes user choice:
     *
     * - if user clicked on "Proceed to checkout" - redirects to basket,
     * - if clicked "Continue shopping" - clear basket
     *
     * @return mixed
     */
    public function executeUserChoice()
    {
        ContainerFacade::dispatch(new BasketChangedEvent($this));

        // redirect to basket
        if (Registry::getRequest()->getRequestEscapedParameter("tobasket")) {
            return "basket";
        } else {
            // clear basket
            $session = Registry::getSession();
            $session->getBasket()->deleteBasket();
            $this->getParent()->setRootCatChanged(false);
        }
    }

    /**
     * Deletes user basket object from session and saved one from DB if needed.
     *
     * @param \OxidEsales\Eshop\Application\Model\Basket $oBasket
     */
    protected function emptyBasket($oBasket)
    {
        $oBasket->deleteBasket();
    }

    /**
     * Prepare information for adding product to basket.
     *
     * @param string $addProductId
     * @param array  $productInfo
     *
     * @return array
     */
    protected function prepareProductInformation($addProductId, $productInfo)
    {
        $return = [];

        $return['id'] = isset($productInfo['aid']) ? $productInfo['aid'] : $addProductId;
        $return['amount'] = isset($productInfo['am']) ? $productInfo['am'] : 0;
        $return['selectList'] = isset($productInfo['sel']) ? $productInfo['sel'] : null;

        $return['persistentParameters'] = $this->getPersistedParameters($productInfo['persparam'] ?? null);
        $return['override'] = isset($productInfo['override']) ? $productInfo['override'] : null;
        $return['bundle'] = isset($productInfo['bundle']) ? true : false;
        $return['oldBasketItemId'] = isset($productInfo['basketitemid']) ? $productInfo['basketitemid'] : null;

        return $return;
    }

    /**
     * Add one item to basket. Handle eventual errors.
     *
     * @param \OxidEsales\Eshop\Application\Model\Basket $basket
     * @param array                                      $itemData
     * @param string                                     $errorDestination
     *
     * @return null|\OxidEsales\Eshop\Application\Model\BasketItem
     */
    protected function addItemToBasket($basket, $itemData, $errorDestination)
    {
        $basketItem = null;

        try {
            $basketItem = $basket->addToBasket(
                $itemData['id'],
                $itemData['amount'],
                $itemData['selectList'],
                $itemData['persistentParameters'],
                $itemData['override'],
                $itemData['bundle'],
                $itemData['oldBasketItemId']
            );
        } catch (OutOfStockException $exception) {
            $exception->setDestination($errorDestination);
            // #950 Change error destination to basket popup
            if (!$errorDestination && Registry::getConfig()->getConfigParam('iNewBasketItemMessage') == 2) {
                $errorDestination = 'popup';
            }
            Registry::getUtilsView()->addErrorToDisplay($exception, false, (bool) $errorDestination, $errorDestination);
        } catch (ArticleInputException $exception) {
            //add to display at specific position
            $exception->setDestination($errorDestination);
            Registry::getUtilsView()->addErrorToDisplay($exception, false, (bool) $errorDestination, $errorDestination);
        } catch (NoArticleException $exception) {
            //ignored, best solution F ?
        }

        return $basketItem;
    }
}


================================================
FILE: source/Application/Component/CategoriesComponent.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component;

use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Str;

/**
 * Transparent category manager class (executed automatically).
 *
 * @subpackage oxcmp
 */
class CategoriesComponent extends \OxidEsales\Eshop\Core\Controller\BaseController
{
    /**
     * More category object.
     *
     * @var object
     */
    protected $_oMoreCat = null;

    /**
     * Marking object as component
     *
     * @var bool
     */
    protected $_blIsComponent = true;

    /**
     * Marking object as component
     *
     * @var bool
     */
    protected $_oCategoryTree = null;

    /**
     * Marking object as component
     *
     * @var \OxidEsales\Eshop\Application\Model\ManufacturerList
     */
    protected $_oManufacturerTree = null;

    /**
     * Executes parent::init(), searches for active category in URL,
     * session, post variables ("cnid", "cdefnid"), active article
     * ("anid", usually article details), then loads article and
     * category if any of them available. Generates category/navigation
     * list.
     *
     * @return null
     */
    public function init()
    {
        parent::init();

        // Performance
        $myConfig = \OxidEsales\Eshop\Core\Registry::getConfig();
        if (
            $myConfig->getConfigParam('blDisableNavBars') &&
            $myConfig->getTopActiveView()->getIsOrderStep()
        ) {
            return;
        }

        $sActCat = $this->getActCat();

        if ($myConfig->getConfigParam('bl_perfLoadManufacturerTree')) {
            // building Manufacturer tree
            $sActManufacturer = Registry::getRequest()->getRequestEscapedParameter('mnid');
            $this->loadManufacturerTree($sActManufacturer);
        }

        // building category tree for all purposes (nav, search and simple category trees)
        $this->loadCategoryTree($sActCat);
    }

    /**
     * get active article
     *
     * @return \OxidEsales\Eshop\Application\Model\Article
     */
    public function getProduct()
    {
        if (($sActProduct = Registry::getRequest()->getRequestEscapedParameter('anid'))) {
            $oParentView = $this->getParent();
            if (($oProduct = $oParentView->getViewProduct())) {
                return $oProduct;
            } else {
                $oProduct = oxNew(\OxidEsales\Eshop\Application\Model\Article::class);
                if ($oProduct->load($sActProduct)) {
                    // storing for reuse
                    $oParentView->setViewProduct($oProduct);

                    return $oProduct;
                }
            }
        }
    }

    /**
     * get active category id
     *
     * @return string
     */
    protected function getActCat()
    {
        $sActManufacturer = Registry::getRequest()->getRequestEscapedParameter('mnid');

        $sActCat = $sActManufacturer ? null : Registry::getRequest()->getRequestEscapedParameter('cnid');

        // loaded article - then checking additional parameters
        $oProduct = $this->getProduct();
        if ($oProduct) {
            $myConfig = \OxidEsales\Eshop\Core\Registry::getConfig();

            $sActManufacturer = $myConfig->getConfigParam('bl_perfLoadManufacturerTree') ? $sActManufacturer : null;

            $sActVendor = (Str::getStr()->preg_match('/^v_.?/i', $sActCat)) ? $sActCat : null;

            $sActCat = $this->addAdditionalParams($oProduct, $sActCat, $sActManufacturer, $sActVendor);
        }

        // Checking for the default category
        if ($sActCat === null && !$oProduct && !$sActManufacturer) {
            // set remote cat
            $sActCat = \OxidEsales\Eshop\Core\Registry::getConfig()->getActiveShop()->oxshops__oxdefcat->value;
            if ($sActCat == 'oxrootid') {
                // means none selected
                $sActCat = null;
            }
        }

        return $sActCat;
    }

    /**
     * Category tree loader
     *
     * @param string $sActCat active category id
     */
    protected function loadCategoryTree($sActCat)
    {
        /** @var \OxidEsales\Eshop\Application\Model\CategoryList $oCategoryTree */
        $oCategoryTree = oxNew(\OxidEsales\Eshop\Application\Model\CategoryList::class);
        $oCategoryTree->buildTree($sActCat);

        $oParentView = $this->getParent();

        // setting active category tree
        $oParentView->setCategoryTree($oCategoryTree);
        $this->setCategoryTree($oCategoryTree);

        // setting active category
        $oParentView->setActiveCategory($oCategoryTree->getClickCat());
    }

    /**
     * Manufacturer tree loader
     *
     * @param string $sActManufacturer active Manufacturer id
     */
    protected function loadManufacturerTree($sActManufacturer)
    {
        $myConfig = \OxidEsales\Eshop\Core\Registry::getConfig();
        if ($myConfig->getConfigParam('bl_perfLoadManufacturerTree')) {
            $oManufacturerTree = $this->getManufacturerList();
            $shopHomeURL = $myConfig->getShopHomeUrl();
            $oManufacturerTree->buildManufacturerTree('manufacturerlist', $sActManufacturer, $shopHomeURL);

            $oParentView = $this->getParent();

            // setting active Manufacturer list
            $oParentView->setManufacturerTree($oManufacturerTree);
            $this->setManufacturerTree($oManufacturerTree);

            // setting active Manufacturer
            if (($oManufacturer = $oManufacturerTree->getClickManufacturer())) {
                $oParentView->setActManufacturer($oManufacturer);
            }
        }
    }

    /**
     * Executes parent::render(), loads expanded/clicked category object,
     * adds parameters template engine and returns list of category tree.
     *
     * @return \OxidEsales\Eshop\Application\Model\CategoryList
     */
    public function render()
    {
        parent::render();

        // Performance
        $myConfig = \OxidEsales\Eshop\Core\Registry::getConfig();
        $oParentView = $this->getParent();

        if ($myConfig->getConfigParam('bl_perfLoadManufacturerTree') && $this->_oManufacturerTree) {
            $oParentView->setManufacturerlist($this->_oManufacturerTree);
            $oParentView->setRootManufacturer($this->_oManufacturerTree->getRootCat());
        }

        if ($this->_oCategoryTree) {
            return $this->_oCategoryTree;
        }
    }

    /**
     * Adds additional parameters: active category, list type and category id
     *
     * @param \OxidEsales\Eshop\Application\Model\Article $oProduct         loaded product
     * @param string                                      $sActCat          active category id
     * @param string                                      $sActManufacturer active manufacturer id
     * @param string                                      $sActVendor       active vendor
     *
     * @return string $sActCat
     */
    protected function addAdditionalParams($oProduct, $sActCat, $sActManufacturer, $sActVendor)
    {
        $sSearchPar = Registry::getRequest()->getRequestEscapedParameter('searchparam');
        $sSearchCat = Registry::getRequest()->getRequestEscapedParameter('searchcnid');
        $sSearchVnd = Registry::getRequest()->getRequestEscapedParameter('searchvendor');
        $sSearchMan = Registry::getRequest()->getRequestEscapedParameter('searchmanufacturer');
        $sListType = Registry::getRequest()->getRequestEscapedParameter('listtype');

        // search ?
        if ((!$sListType || $sListType == 'search') && ($sSearchPar || $sSearchCat || $sSearchVnd || $sSearchMan)) {
            // setting list type directly
            $sListType = 'search';
        } else {
            // such Manufacturer is available ?
            if ($sActManufacturer && ($sActManufacturer == $oProduct->getManufacturerId())) {
                // setting list type directly
                $sListType = 'manufacturer';
                $sActCat = $sActManufacturer;
            } elseif ($sActVendor && (substr($sActVendor, 2) == $oProduct->getVendorId())) {
                // such vendor is available ?
                $sListType = 'vendor';
                $sActCat = $sActVendor;
            } elseif ($sActCat && $oProduct->isAssignedToCategory($sActCat)) {
                // category ?
            } else {
                list($sListType, $sActCat) = $this->getDefaultParams($oProduct);
            }
        }

        $oParentView = $this->getParent();
        //set list type and category id
        $oParentView->setListType($sListType);
        $oParentView->setCategoryId($sActCat);

        return $sActCat;
    }

    /**
     * Returns array containing default list type and category (or manufacturer ir vendor) id
     *
     * @param \OxidEsales\Eshop\Application\Model\Article $oProduct current product object
     *
     * @return array
     */
    protected function getDefaultParams($oProduct)
    {
        $sListType = null;
        $aArticleCats = $oProduct->getCategoryIds(true);
        if (is_array($aArticleCats) && count($aArticleCats)) {
            $sActCat = reset($aArticleCats);
        } elseif (($sActCat = $oProduct->getManufacturerId())) {
            // not assigned to any category ? maybe it is assigned to Manufacturer ?
            $sListType = 'manufacturer';
        } elseif (($sActCat = $oProduct->getVendorId())) {
            // not assigned to any category ? maybe it is assigned to vendor ?
            $sListType = 'vendor';
        } else {
            $sActCat = null;
        }

        return [$sListType, $sActCat];
    }

    /**
     * Setter of category tree
     *
     * @param \OxidEsales\Eshop\Application\Model\CategoryList $oCategoryTree category list
     */
    public function setCategoryTree($oCategoryTree)
    {
        $this->_oCategoryTree = $oCategoryTree;
    }

    /**
     * Setter of manufacturer tree
     *
     * @param \OxidEsales\Eshop\Application\Model\ManufacturerList $oManufacturerTree manufacturer list
     */
    public function setManufacturerTree($oManufacturerTree)
    {
        $this->_oManufacturerTree = $oManufacturerTree;
    }

    /**
     * @return \OxidEsales\Eshop\Application\Model\ManufacturerList
     */
    protected function getManufacturerList()
    {
        return oxNew(\OxidEsales\Eshop\Application\Model\ManufacturerList::class);
    }
}


================================================
FILE: source/Application/Component/CurrencyComponent.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component;

use OxidEsales\Eshop\Core\Registry;

/**
 * Currency manager class.
 *
 * @subpackage oxcmp
 */
class CurrencyComponent extends \OxidEsales\Eshop\Core\Controller\BaseController
{
    /**
     * Array of available currencies.
     *
     * @var array
     */
    public $aCurrencies = null;

    /**
     * Active currency object.
     *
     * @var object
     */
    protected $_oActCur = null;

    /**
     * Marking object as component
     *
     * @var bool
     */
    protected $_blIsComponent = true;

    /**
     * Checks for currency parameter set in URL, session or post
     * variables. If such were found - loads all currencies possible
     * in shop, searches if passed is available (if no - default
     * currency is set the first defined in admin). Then sets currency
     * parameter so session ($myConfig->setActShopCurrency($iCur)),
     * loads basket and forces ir to recalculate (oBasket->blCalcNeeded
     * = true). Finally executes parent::init().
     *
     * @return null
     */
    public function init()
    {
        // Performance
        $myConfig = \OxidEsales\Eshop\Core\Registry::getConfig();
        if (!$myConfig->getConfigParam('bl_perfLoadCurrency')) {
            //#861C -  show first currency
            $aCurrencies = $myConfig->getCurrencyArray();
            $this->_oActCur = current($aCurrencies);

            return;
        }

        $iCur = Registry::getRequest()->getRequestEscapedParameter('cur');
        $session = \OxidEsales\Eshop\Core\Registry::getSession();

        if (isset($iCur)) {
            $aCurrencies = $myConfig->getCurrencyArray();
            if (!isset($aCurrencies[$iCur])) {
                $iCur = 0;
            }

            // set new currency
            $myConfig->setActShopCurrency($iCur);

            // recalc basket
            $oBasket = $session->getBasket();
            $oBasket->onUpdate();
        }

        $iActCur = $myConfig->getShopCurrency();
        $this->aCurrencies = $myConfig->getCurrencyArray($iActCur);

        $this->_oActCur = $this->aCurrencies[$iActCur];

        //setting basket currency (M:825)
        if (!isset($oBasket)) {
            $oBasket = $session->getBasket();
        }
        $oBasket->setBasketCurrency($this->_oActCur);
        parent::init();
    }

    /**
     * Executes parent::render(), passes currency object to template
     * engine and returns currencies array.
     *
     * Template variables:
     * <b>currency</b>
     *
     * @return array
     */
    public function render()
    {
        parent::render();
        $oParentView = $this->getParent();
        $oParentView->setActCurrency($this->_oActCur);

        if (\OxidEsales\Eshop\Core\Registry::getConfig()->getConfigParam('bl_perfLoadCurrency')) {
            $oUrlUtils = \OxidEsales\Eshop\Core\Registry::getUtilsUrl();
            $sUrl = $oUrlUtils->cleanUrl(\OxidEsales\Eshop\Core\Registry::getConfig()->getTopActiveView()->getLink(), ["cur"]);

            reset($this->aCurrencies);
            foreach ($this->aCurrencies as $oItem) {
                $oItem->link = $oUrlUtils->processUrl($sUrl, true, ["cur" => $oItem->id]);
            }
        }

        return $this->aCurrencies;
    }
}


================================================
FILE: source/Application/Component/LanguageComponent.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component;

use oxRegistry;

/**
 * Shop language manager.
 * Performs language manager function: changes template settings, modifies URL's.
 *
 * @subpackage oxcmp
 */
class LanguageComponent extends \OxidEsales\Eshop\Core\Controller\BaseController
{
    /**
     * Marking object as component
     *
     * @var bool
     */
    protected $_blIsComponent = true;

    /**
     * Executes parent::render() and returns array with languages.
     *
     * @return array $this->aLanguages languages
     */
    public function render()
    {
        parent::render();

        // Performance
        if (\OxidEsales\Eshop\Core\Registry::getConfig()->getConfigParam('bl_perfLoadLanguages')) {
            $aLanguages = \OxidEsales\Eshop\Core\Registry::getLang()->getLanguageArray(null, true, true);
            reset($aLanguages);
            foreach ($aLanguages as $oVal) {
                $oVal->link = \OxidEsales\Eshop\Core\Registry::getConfig()->getTopActiveView()->getLink($oVal->id);
            }

            return $aLanguages;
        }
    }
}


================================================
FILE: source/Application/Component/Locator.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component;

use OxidEsales\Eshop\Application\Controller\FrontendController;
use OxidEsales\Eshop\Application\Model\Article;
use OxidEsales\Eshop\Application\Model\SeoEncoderManufacturer;
use OxidEsales\Eshop\Application\Model\SeoEncoderVendor;
use OxidEsales\Eshop\Core\Model\ListModel;
use OxidEsales\Eshop\Core\Registry;

use function getLogger;

/**
 * Locator controller for: category, vendor, manufacturers and search lists.
 */
class Locator extends \OxidEsales\Eshop\Core\Base
{
    /**
     * Locator type
     */
    protected $_sType = "list";

    /**
     * Next product to currently loaded
     */
    protected $_oNextProduct = null;

    /**
     * Previous product to currently loaded
     */
    protected $_oBackProduct = null;

    /**
     * search handle
     */
    protected $_sSearchHandle = null;

    /**
     * error message
     */
    protected $_sErrorMessage = null;

    /**
     * Class constructor - sets locator type and parameters posted or loaded
     * from GET/Session
     *
     * @param string $sType locator type
     */
    public function __construct($sType = null)
    {
        // setting locator type
        if ($sType) {
            $this->_sType = trim($sType);
        }
    }

    /**
     * Executes locator method according locator type
     *
     * @param Article            $oCurrArticle   current article
     * @param FrontendController $oLocatorTarget FrontendController object
     */
    public function setLocatorData($oCurrArticle, $oLocatorTarget)
    {
        $sLocfnc = "set{$this->_sType}LocatorData";

        try {
            call_user_func([$this, $sLocfnc], $oLocatorTarget, $oCurrArticle);
        } catch (\Exception $e) {
            getLogger()->warning("Locator Type is wrong $this->_sType");
            $this->_sType = '';
        }

        // passing list type to view
        $oLocatorTarget->setListType($this->_sType);
    }

    /**
     * Sets details locator data for articles that came from regular list.
     *
     * @param FrontendController $oLocatorTarget view object
     * @param Article            $oCurrArticle   current article
     */
    protected function setListLocatorData($oLocatorTarget, $oCurrArticle)
    {
        // if no active category is loaded - lets check for category passed by post/get
        if (($oCategory = $oLocatorTarget->getActiveCategory())) {
            $sOrderBy = $oLocatorTarget->getSortingSql($oLocatorTarget->getSortIdent());
            $oIdList = $this->loadIdsInList($oCategory, $oCurrArticle, $sOrderBy);

            //page number
            $iPage = $this->findActPageNumber($oLocatorTarget->getActPage(), $oIdList, $oCurrArticle);

            // setting product position in list, amount of articles etc
            $oCategory->iCntOfProd = $oIdList->count();
            $oCategory->iProductPos = $this->getProductPos($oCurrArticle, $oIdList, $oLocatorTarget);

            if (Registry::getUtils()->seoIsActive() && $iPage) {
                /** @var \OxidEsales\Eshop\Application\Model\SeoEncoderCategory $oSeoEncoderCategory */
                $oSeoEncoderCategory = Registry::get(\OxidEsales\Eshop\Application\Model\SeoEncoderCategory::class);
                $oCategory->toListLink = $oSeoEncoderCategory->getCategoryPageUrl($oCategory, $iPage);
            } else {
                $oCategory->toListLink = $this->makeLink($oCategory->getLink(), $this->getPageNumber($iPage));
            }

            $oNextProduct = $this->_oNextProduct;
            $oBackProduct = $this->_oBackProduct;
            $oCategory->nextProductLink = $oNextProduct ? $this->makeLink($oNextProduct->getLink(), '') : null;
            $oCategory->prevProductLink = $oBackProduct ? $this->makeLink($oBackProduct->getLink(), '') : null;

            // active category
            $oLocatorTarget->setActiveCategory($oCategory);

            // category path
            if (($oCatTree = $oLocatorTarget->getCategoryTree())) {
                $oLocatorTarget->setCatTreePath($oCatTree->getPath());
            }
        }
    }

    /**
     * Sets details locator data for articles that came from vendor list.
     *
     * @param FrontendController $oLocatorTarget FrontendController object
     * @param Article            $oCurrArticle   current article
     */
    protected function setVendorLocatorData($oLocatorTarget, $oCurrArticle)
    {
        if (($oVendor = $oLocatorTarget->getActVendor())) {
            $sVendorId = $oVendor->getId();
            $myUtils = Registry::getUtils();

            $blSeo = $myUtils->seoIsActive();

            // loading data for article navigation
            $oIdList = oxNew(\OxidEsales\Eshop\Application\Model\ArticleList::class);
            $oIdList->setCustomSorting($oLocatorTarget->getSortingSql($oLocatorTarget->getSortIdent()));
            $oIdList->loadVendorIds($sVendorId);

            //page number
            $iPage = $this->findActPageNumber($oLocatorTarget->getActPage(), $oIdList, $oCurrArticle);

            $sAdd = null;
            if (!$blSeo) {
                $sAdd = 'listtype=vendor&amp;cnid=v_' . $sVendorId;
            }

            // setting product position in list, amount of articles etc
            $oVendor->iCntOfProd = $oIdList->count();
            $oVendor->iProductPos = $this->getProductPos($oCurrArticle, $oIdList, $oLocatorTarget);

            if ($blSeo && $iPage) {
                $oVendor->toListLink = Registry::get(SeoEncoderVendor::class)->getVendorPageUrl($oVendor, $iPage);
            } else {
                $oVendor->toListLink = $this->makeLink($oVendor->getLink(), $this->getPageNumber($iPage));
            }

            $oNextProduct = $this->_oNextProduct;
            $oBackProduct = $this->_oBackProduct;
            $oVendor->nextProductLink = $oNextProduct ? $this->makeLink($oNextProduct->getLink(), $sAdd) : null;
            $oVendor->prevProductLink = $oBackProduct ? $this->makeLink($oBackProduct->getLink(), $sAdd) : null;
        }
    }

    /**
     * Sets details locator data for articles that came from Manufacturer list.
     *
     * @param FrontendController $oLocatorTarget FrontendController object
     * @param Article            $oCurrArticle   current article
     */
    protected function setManufacturerLocatorData($oLocatorTarget, $oCurrArticle)
    {
        if (($oManufacturer = $oLocatorTarget->getActManufacturer())) {
            $sManufacturerId = $oManufacturer->getId();
            $myUtils = Registry::getUtils();

            $blSeo = $myUtils->seoIsActive();

            // loading data for article navigation
            $oIdList = oxNew(\OxidEsales\Eshop\Application\Model\ArticleList::class);
            $oIdList->setCustomSorting($oLocatorTarget->getSortingSql($oLocatorTarget->getSortIdent()));
            $oIdList->loadManufacturerIds($sManufacturerId);

            //page number
            $iPage = $this->findActPageNumber($oLocatorTarget->getActPage(), $oIdList, $oCurrArticle);

            $sAdd = null;
            if (!$blSeo) {
                $sAdd = 'listtype=manufacturer&amp;mnid=' . $sManufacturerId;
            }

            // setting product position in list, amount of articles etc
            $oManufacturer->iCntOfProd = $oIdList->count();
            $oManufacturer->iProductPos = $this->getProductPos($oCurrArticle, $oIdList, $oLocatorTarget);

            if ($blSeo && $iPage) {
                /** @var SeoEncoderManufacturer $oSeoEncoderManufacturer */
                $oSeoEncoderManufacturer = Registry::get(SeoEncoderManufacturer::class);
                $oManufacturer->toListLink = $oSeoEncoderManufacturer->getManufacturerPageUrl($oManufacturer, $iPage);
            } else {
                $oManufacturer->toListLink = $this->makeLink($oManufacturer->getLink(), $this->getPageNumber($iPage));
            }

            $oNextProduct = $this->_oNextProduct;
            $oBackProduct = $this->_oBackProduct;
            $oManufacturer->nextProductLink = $oNextProduct ? $this->makeLink($oNextProduct->getLink(), $sAdd) : null;
            $oManufacturer->prevProductLink = $oBackProduct ? $this->makeLink($oBackProduct->getLink(), $sAdd) : null;

            // active Manufacturer
            $oLocatorTarget->setActiveCategory($oManufacturer);

            // Manufacturer path
            if (($oManufacturerTree = $oLocatorTarget->getManufacturerTree())) {
                $oLocatorTarget->setCatTreePath($oManufacturerTree->getPath());
            }
        }
    }

    /**
     * Sets details locator data for articles that came from search list.
     *
     * @param FrontendController $oLocatorTarget FrontendController object
     * @param Article            $oCurrArticle   current article
     */
    protected function setSearchLocatorData($oLocatorTarget, $oCurrArticle)
    {
        if (($oSearchCat = $oLocatorTarget->getActSearch())) {
            // #1834/1184M - specialchar search
            $sSearchParam = Registry::getRequest()->getRequestParameter('searchparam');
            $sSearchFormParam = Registry::getRequest()->getRequestEscapedParameter('searchparam');
            $sSearchLinkParam = rawurlencode($sSearchParam);

            $sSearchCat = Registry::getRequest()->getRequestEscapedParameter('searchcnid');
            $sSearchCat = $sSearchCat ? rawurldecode($sSearchCat) : $sSearchCat;

            $sSearchVendor = Registry::getRequest()->getRequestEscapedParameter('searchvendor');
            $sSearchVendor = $sSearchVendor ? rawurldecode($sSearchVendor) : $sSearchVendor;

            $sSearchManufacturer = Registry::getRequest()->getRequestEscapedParameter('searchmanufacturer');
            $sSearchManufacturer = $sSearchManufacturer ? rawurldecode($sSearchManufacturer) : $sSearchManufacturer;

            // loading data for article navigation
            $oIdList = oxNew(\OxidEsales\Eshop\Application\Model\ArticleList::class);
            $oIdList->setCustomSorting($oLocatorTarget->getSortingSql($oLocatorTarget->getSortIdent()));
            $oIdList->loadSearchIds($sSearchParam, $sSearchCat, $sSearchVendor, $sSearchManufacturer);

            //page number
            $iPage = $this->findActPageNumber($oLocatorTarget->getActPage(), $oIdList, $oCurrArticle);

            $sAddSearch = "searchparam={$sSearchLinkParam}";
            $sAddSearch .= '&amp;listtype=search';

            if ($sSearchCat !== null) {
                $sAddSearch .= "&amp;searchcnid={$sSearchCat}";
            }

            if ($sSearchVendor !== null) {
                $sAddSearch .= "&amp;searchvendor={$sSearchVendor}";
            }

            if ($sSearchManufacturer !== null) {
                $sAddSearch .= "&amp;searchmanufacturer={$sSearchManufacturer}";
            }

            // setting product position in list, amount of articles etc
            $oSearchCat->iCntOfProd = $oIdList->count();
            $oSearchCat->iProductPos = $this->getProductPos($oCurrArticle, $oIdList, $oLocatorTarget);

            $sPageNr = $this->getPageNumber($iPage);
            $sParams = $sPageNr . ($sPageNr ? '&amp;' : '') . $sAddSearch;
            $oSearchCat->toListLink = $this->makeLink($oSearchCat->link, $sParams);
            $oNextProd = $this->_oNextProduct;
            $oBackProd = $this->_oBackProduct;
            $oSearchCat->nextProductLink = $oNextProd ? $this->makeLink($oNextProd->getLink(), $sAddSearch) : null;
            $oSearchCat->prevProductLink = $oBackProd ? $this->makeLink($oBackProd->getLink(), $sAddSearch) : null;

            $sFormat = Registry::getLang()->translateString('SEARCH_RESULT');
            $oLocatorTarget->setSearchTitle(sprintf($sFormat, $sSearchFormParam));
            $oLocatorTarget->setActiveCategory($oSearchCat);
        }
    }

    /**
     * Sets details locator data for articles that came from recommlist.
     *
     * Template variables:
     * <b>sSearchTitle</b>, <b>searchparamforhtml</b>
     *
     * @param FrontendController $oLocatorTarget FrontendController object
     * @param Article            $oCurrArticle   current article
     *
     * @deprecated since v5.3 (2016-06-17); Listmania will be moved to an own module.
     */
    protected function _setRecommlistLocatorData($oLocatorTarget, $oCurrArticle) // phpcs:ignore PSR2.Methods.MethodDeclaration.Underscore
    {
        if (($oRecommList = $oLocatorTarget->getActiveRecommList())) {
            // loading data for article navigation
            $oIdList = oxNew(\OxidEsales\Eshop\Application\Model\ArticleList::class);
            $oIdList->loadRecommArticleIds($oRecommList->getId(), null);

            //page number
            $iPage = $this->findActPageNumber($oLocatorTarget->getActPage(), $oIdList, $oCurrArticle);

            $sSearchRecomm = Registry::getRequest()->getRequestParameter('searchrecomm');

            if ($sSearchRecomm !== null) {
                $sSearchFormRecomm = Registry::getRequest()->getRequestEscapedParameter('searchrecomm');
                $sSearchLinkRecomm = rawurlencode($sSearchRecomm);
                $sAddSearch = 'searchrecomm=' . $sSearchLinkRecomm;
            }

            // setting product position in list, amount of articles etc
            $oRecommList->iCntOfProd = $oIdList->count();
            $oRecommList->iProductPos = $this->getProductPos($oCurrArticle, $oIdList, $oLocatorTarget);
            $blSeo = Registry::getUtils()->seoIsActive();

            if ($blSeo && $iPage) {
                /** @var \OxidEsales\Eshop\Application\Model\SeoEncoderRecomm $oSeoEncoderRecomm */
                $oSeoEncoderRecomm = Registry::get(\OxidEsales\Eshop\Application\Model\SeoEncoderRecomm::class);
                $oRecommList->toListLink = $oSeoEncoderRecomm->getRecommPageUrl($oRecommList, $iPage);
            } else {
                $oRecommList->toListLink = $this->makeLink($oRecommList->getLink(), $this->getPageNumber($iPage));
            }
            $oRecommList->toListLink = $this->makeLink($oRecommList->toListLink, $sAddSearch);

            $sAdd = '';
            if (!$blSeo) {
                $sAdd = 'recommid=' . $oRecommList->getId() . '&amp;listtype=recommlist' . ($sAddSearch ? '&amp;' : '');
            }
            $sAdd .= $sAddSearch;
            $oNextProduct = $this->_oNextProduct;
            $oBackProduct = $this->_oBackProduct;
            $oRecommList->nextProductLink = $oNextProduct ? $this->makeLink($oNextProduct->getLink(), $sAdd) : null;
            $oRecommList->prevProductLink = $oBackProduct ? $this->makeLink($oBackProduct->getLink(), $sAdd) : null;

            $oLang = Registry::getLang();
            $sTitle = $oLang->translateString('RECOMMLIST');
            if ($sSearchRecomm !== null) {
                $sTitle .= " / " . $oLang->translateString('RECOMMLIST_SEARCH') . ' "' . $sSearchFormRecomm . '"';
            }
            $oLocatorTarget->setSearchTitle($sTitle);
            $oLocatorTarget->setActiveCategory($oRecommList);
        }
    }

    /**
     * Setting product position in list, amount of articles etc
     *
     * @param \OxidEsales\Eshop\Application\Model\Category $oCategory    active category id
     * @param object                                       $oCurrArticle current article
     * @param string                                       $sOrderBy     order by fields
     *
     * @return object
     */
    protected function loadIdsInList($oCategory, $oCurrArticle, $sOrderBy = null)
    {
        $oIdList = oxNew(\OxidEsales\Eshop\Application\Model\ArticleList::class);
        $oIdList->setCustomSorting($sOrderBy);

        // additionally check if this category is loaded and is price category ?
        if ($oCategory->isPriceCategory()) {
            $oIdList->loadPriceIds(
                $oCategory->oxcategories__oxpricefrom->value,
                $oCategory->oxcategories__oxpriceto->value
            );
        } else {
            $sActCat = $oCategory->getId();
            $oIdList->loadCategoryIDs($sActCat, Registry::getSession()->getVariable('session_attrfilter'));
            // if not found - reloading with empty filter
            if (!isset($oIdList[$oCurrArticle->getId()])) {
                $oIdList->loadCategoryIDs($sActCat, null);
            }
        }

        return $oIdList;
    }

    /**
     * Appends urs with currently passed parameters
     *
     * @param string $sLink   url to add parameters
     * @param string $sParams parameters to add to url
     *
     * @return string
     */
    protected function makeLink($sLink, $sParams)
    {
        if ($sParams) {
            $sLink .= ((strpos($sLink, '?') !== false) ? '&amp;' : '?') . $sParams;
        }

        return $sLink;
    }

    /**
     * If page number is not passed trying to fetch it from list of ids. To search
     * for position in list, article ids list and current article id must be passed
     *
     * @param int       $iPageNr  current page number (user defined or passed by request)
     * @param ListModel $oIdList  list of article ids (optional)
     * @param Article   $oArticle active article id (optional)
     *
     * @return int
     */
    protected function findActPageNumber($iPageNr, $oIdList = null, $oArticle = null)
    {
        //page number
        $iPageNr = (int) $iPageNr;

        // maybe there is no page number passed, but we still can find the position in id's list
        if (!$iPageNr && $oIdList && $oArticle) {
            $iNrofCatArticles = (int) \OxidEsales\Eshop\Core\Registry::getConfig()->getConfigParam('iNrofCatArticles');
            $iNrofCatArticles = $iNrofCatArticles ? $iNrofCatArticles : 1;
            $sParentIdField = 'oxarticles__oxparentid';
            $sArticleId = $oArticle->$sParentIdField->value ? $oArticle->$sParentIdField->value : $oArticle->getId();
            $iPos = Registry::getUtils()->arrayStringSearch($sArticleId, $oIdList->arrayKeys());
            $iPageNr = floor($iPos / $iNrofCatArticles);
        }

        return $iPageNr;
    }

    /**
     * Gets current page number.
     *
     * @param int $iPageNr page number
     *
     * @return string $sPageNum
     */
    protected function getPageNumber($iPageNr)
    {
        //page number
        $iPageNr = (int) $iPageNr;

        return (($iPageNr > 0) ? "pgNr=$iPageNr" : '');
    }

    /**
     * Searches for current article in article list and sets previous/next product ids
     *
     * @param Article            $oArticle       current Article
     * @param object             $oIdList        articles list containing only fake article objects !!!
     * @param FrontendController $oLocatorTarget FrontendController object
     *
     * @return integer
     */
    protected function getProductPos($oArticle, $oIdList, $oLocatorTarget)
    {
        // variant handling
        $sOxid = $oArticle->oxarticles__oxparentid->value
            ? $oArticle->oxarticles__oxparentid->value
            : $oArticle->getId();
        if ($oIdList->count() && isset($oIdList[$sOxid])) {
            $aIds = $oIdList->arrayKeys();
            $iPos = Registry::getUtils()->arrayStringSearch($sOxid, $aIds);

            if (array_key_exists($iPos - 1, $aIds)) {
                $oBackProduct = oxNew(Article::class);
                $oBackProduct->modifyCacheKey('_locator');
                $oBackProduct->setNoVariantLoading(true);
                if ($oBackProduct->load($aIds[$iPos - 1])) {
                    $oBackProduct->setLinkType($oLocatorTarget->getLinkType());
                    $this->_oBackProduct = $oBackProduct;
                }
            }

            if (array_key_exists($iPos + 1, $aIds)) {
                $oNextProduct = oxNew(Article::class);
                $oNextProduct->modifyCacheKey('_locator');
                $oNextProduct->setNoVariantLoading(true);
                if ($oNextProduct->load($aIds[$iPos + 1])) {
                    $oNextProduct->setLinkType($oLocatorTarget->getLinkType());
                    $this->_oNextProduct = $oNextProduct;
                }
            }

            return $iPos + 1;
        }

        return 0;
    }

    /**
     * Template variable getter. Returns error message
     *
     * @return string
     */
    public function getErrorMessage()
    {
        return $this->_sErrorMessage;
    }
}


================================================
FILE: source/Application/Component/ShopComponent.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component;

use OxidEsales\Eshop\Core\Registry;
use oxRegistry;

/**
 * Translarent shop manager (executed automatically), sets
 * registration information and current shop object.
 *
 * @subpackage oxcmp
 */
class ShopComponent extends \OxidEsales\Eshop\Core\Controller\BaseController
{
    /**
     * Marking object as component
     *
     * @var bool
     */
    protected $_blIsComponent = true;

    /**
     * Executes parent::render() and returns active shop object.
     *
     * @return  object  $this->oActShop active shop object
     */
    public function render()
    {
        parent::render();

        $myConfig = Registry::getConfig();

        // is shop active?
        $oShop = $myConfig->getActiveShop();
        $sActiveField = 'oxshops__oxactive';
        $sClassName = $myConfig->getActiveView()->getClassKey();

        if (!$oShop->$sActiveField->value && 'oxstart' != $sClassName && !$this->isAdmin()) {
            // redirect to offline if there is no active shop
            Registry::getUtils()->showOfflinePage();
        }

        return $oShop;
    }
}


================================================
FILE: source/Application/Component/UserComponent.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component;

use Exception;
use OxidEsales\Eshop\Application\Model\Address;
use OxidEsales\Eshop\Application\Model\User;
use OxidEsales\Eshop\Application\Model\User\UserShippingAddressUpdatableFields;
use OxidEsales\Eshop\Application\Model\User\UserUpdatableFields;
use OxidEsales\Eshop\Core\Contract\AbstractUpdatableFields;
use OxidEsales\Eshop\Core\DatabaseProvider;
use OxidEsales\Eshop\Core\Exception\ConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\InputException;
use OxidEsales\Eshop\Core\Exception\UserException;
use OxidEsales\Eshop\Core\Field;
use OxidEsales\Eshop\Core\Form\FormFields;
use OxidEsales\Eshop\Core\Form\FormFieldsTrimmer;
use OxidEsales\Eshop\Core\Form\UpdatableFieldsConstructor;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\EshopCommunity\Core\Di\ContainerFacade;
use OxidEsales\EshopCommunity\Internal\Domain\Authentication\Bridge\PasswordServiceBridgeInterface;

use function array_key_exists;
use function is_array;

// defining login/logout states
define('USER_LOGIN_SUCCESS', 1);
define('USER_LOGIN_FAIL', 2);
define('USER_LOGOUT', 3);

/**
 * User object manager.
 * Sets user details data, switches, logouts, logins user etc.
 *
 * @subpackage oxcmp
 */
class UserComponent extends \OxidEsales\Eshop\Core\Controller\BaseController
{
    /**
     * Boolean - if user is new or not.
     *
     * @var bool
     */
    protected $_blIsNewUser = false;

    /**
     * Marking object as component
     *
     * @var bool
     */
    protected $_blIsComponent = true;

    /**
     * Newsletter subscription status
     *
     * @var bool
     */
    protected $_blNewsSubscriptionStatus = null;

    /**
     * User login state marker:
     *  - USER_LOGIN_SUCCESS - user successfully logged in;
     *  - USER_LOGIN_FAIL - login failed;
     *  - USER_LOGOUT - user logged out.
     *
     * @var int
     */
    protected $_iLoginStatus = null;

    /**
     * Terms/conditions version number
     *
     * @var string
     */
    protected $_sTermsVer = null;

    /**
     * View classes accessible for not logged in customers
     *
     * @var array
     */
    protected $_aAllowedClasses = [
        'register',
        'forgotpwd',
        'content',
        'account',
        'clearcookies',
        'oxwservicemenu',
        'oxwminibasket',
    ];

    /**
     * Sets oxcmp_oxuser::blIsComponent = true, fetches user error
     * code and sets it to default - 0. Executes parent::init().
     *
     * Session variable:
     * <b>usr_err</b>
     */
    public function init()
    {
        $this->saveDeliveryAddressState();
        $this->loadSessionUser();
        $this->saveInvitor();

        parent::init();
    }

    /**
     * Executes parent::render(), oxcmp_user::_loadSessionUser(), loads user delivery
     * info. Returns user object oxcmp_user::oUser.
     *
     * @return  object  user object
     */
    public function render()
    {
        // checks if private sales allows further tasks
        $this->checkPsState();

        parent::render();

        return $this->getUser();
    }

    /**
     * If private sales enabled, checks:
     *  (1) if no session user and view can be accessed;
     *  (2) session user is available and accepted terms version matches actual version.
     * In case any condition is not satisfied redirects user to:
     *  (1) login page;
     *  (2) terms agreement page;
     */
    protected function checkPsState()
    {
        $oConfig = Registry::getConfig();
        if ($this->getParent()->isEnabledPrivateSales()) {
            // load session user
            $oUser = $this->getUser();
            $sClass = $this->getParent()->getClassKey();

            // no session user
            if (!$oUser && !in_array($sClass, $this->_aAllowedClasses)) {
                Registry::getUtils()->redirect($oConfig->getShopHomeUrl() . 'cl=account', false, 302);
            }

            if ($oUser && !$oUser->isTermsAccepted() && !in_array($sClass, $this->_aAllowedClasses)) {
                Registry::getUtils()->redirect($oConfig->getShopHomeUrl() . 'cl=account&term=1', false, 302);
            }
        }
    }

    /**
     * Tries to load user ID from session.
     *
     * @return null
     */
    protected function loadSessionUser()
    {
        $myConfig = Registry::getConfig();
        $session = Registry::getSession();

        $oUser = $this->getUser();

        // no session user
        if (!$oUser) {
            return;
        }

        // this user is blocked, deny him
        if ($oUser->inGroup('oxidblocked')) {
            $sUrl = $myConfig->getShopHomeUrl() . 'cl=content&tpl=user_blocked';
            Registry::getUtils()->redirect($sUrl, true, 302);
        }

        // TODO: move this to a proper place
        if ($oUser->isLoadedFromCookie() && !$myConfig->getConfigParam('blPerfNoBasketSaving')) {
            if ($oBasket = $session->getBasket()) {
                $oBasket->load();
                $oBasket->onUpdate();
            }
        }
    }

    /**
     * Collects posted user information from posted variables ("lgn_usr",
     * "lgn_pwd", "lgn_cook"), executes User::login() and checks if
     * such user exists.
     *
     * Session variables:
     * <b>usr</b>, <b>usr_err</b>
     *
     * Template variables:
     * <b>usr_err</b>
     *
     * @return  string  redirection string
     */
    public function login()
    {
        $sUser = Registry::getRequest()->getRequestEscapedParameter('lgn_usr');
        $sPassword = Registry::getRequest()->getRequestParameter('lgn_pwd');
        $sCookie = Registry::getRequest()->getRequestEscapedParameter('lgn_cook');

        $this->setLoginStatus(USER_LOGIN_FAIL);

        // trying to login user
        try {
            /** @var User $oUser */
            $oUser = oxNew(User::class);
            $oUser->login($sUser, $sPassword, $sCookie);
            $this->setLoginStatus(USER_LOGIN_SUCCESS);
        } catch (UserException $oEx) {
            // for login component send exception text to a custom component (if defined)
            Registry::getUtilsView()->addErrorToDisplay($oEx, false, true, '', false);

            return 'user';
        } catch (\OxidEsales\Eshop\Core\Exception\CookieException $oEx) {
            Registry::getUtilsView()->addErrorToDisplay($oEx);

            return 'user';
        }

        // finalizing ..
        return $this->afterLogin($oUser);
    }

    /**
     * Special functionality which is performed after user logs in (or user is created without pass).
     * Performes additional checking if user is not BLOCKED
     * (User::InGroup("oxidblocked")) - if yes - redirects to blocked user
     * page ("cl=content&tpl=user_blocked").
     * Stores cookie info if user confirmed in login screen.
     * Then loads delivery info and forces basket to recalculate
     * (\OxidEsales\Eshop\Core\Session::getBasket() + oBasket::blCalcNeeded = true). Returns
     * "payment" to redirect to payment screen. If problems occured loading
     * user - sets error code according problem, and returns "user" to redirect
     * to user info screen.
     *
     * @param User $oUser user object
     *
     * @return string
     */
    protected function afterLogin($oUser)
    {
        $session = Registry::getSession();
        if ($session->isSessionStarted()) {
            $session->regenerateSessionId();
        }

        // this user is blocked, deny him
        if ($oUser->inGroup('oxidblocked')) {
            $sUrl = Registry::getConfig()->getShopHomeUrl() . 'cl=content&tpl=user_blocked';
            Registry::getUtils()->redirect($sUrl, true, 302);
        }

        // recalc basket
        if ($oBasket = $session->getBasket()) {
            $oBasket->onUpdate();
        }

        return 'payment';
    }

    /**
     * Executes oxcmp_user::login() method. After loggin user will not be
     * redirected to user or payment screens.
     */
    public function login_noredirect() //phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
    {
        $blAgb = Registry::getRequest()->getRequestEscapedParameter('ord_agb');

        if ($this->getParent()->isEnabledPrivateSales() && $blAgb !== null && ($oUser = $this->getUser())) {
            if ($blAgb) {
                $oUser->acceptTerms();
            }
        } else {
            $this->login();

            if (!$this->isAdmin() && !Registry::getConfig()->getConfigParam('blPerfNoBasketSaving')) {
                //load basket from the database
                try {
                    $session = Registry::getSession();
                    if ($oBasket = $session->getBasket()) {
                        $oBasket->load();
                    }
                } catch (Exception $oE) {
                    //just ignore it
                }
            }
        }
    }

    /**
     * Special utility function which is executed right after
     * oxcmp_user::logout is called. Currently it unsets such
     * session parameters as user chosen payment id, delivery
     * address id, active delivery set.
     */
    protected function afterLogout()
    {
        $session = Registry::getSession();

        $session->deleteVariable('paymentid');
        $session->deleteVariable('sShipSet');
        $session->deleteVariable('deladrid');
        $session->deleteVariable('dynvalue');

        // resetting & recalc basket
        if (($oBasket = $session->getBasket())) {
            $oBasket->resetUserInfo();
            $oBasket->onUpdate();

            // resetting voucher reservations
            if ($vouchers = $oBasket->getVouchers()) {
                foreach ($vouchers as $voucherId => $voucher) {
                    $oBasket->removeVoucher($voucherId);
                }
            }
        }

        $session->delBasket();
    }

    /**
     * @return string|void
     */
    public function logout()
    {
        if (oxNew(User::class)->logout()) {
            $this->setLoginStatus(USER_LOGOUT);
            $this->afterLogout();
            $this->resetPermissions();
            if ($this->getParent()->isEnabledPrivateSales()) {
                return 'account';
            }
            if (
                ContainerFacade::getParameter('oxid_esales.shop_url') &&
                Registry::getRequest()->getRequestEscapedParameter('redirect')
            ) {
                Registry::getUtils()->redirect($this->getLogoutLink());
            }
        }
    }

    /**
     * Any additional permission reset actions required on logout or changeuser actions
     */
    protected function resetPermissions()
    {
    }

    /**
     * Executes blUserRegistered = oxcmp_user::changeUserWithoutRedirect().
     * if this returns true - returns "payment" (this redirects to
     * payment page), else returns blUserRegistered value.
     *
     * @see oxcmp_user::changeUserWithoutRedirect()
     *
     * @return  mixed    redirection string or true if user is registered, false otherwise
     */
    public function changeUser()
    {
        return ($this->changeUserWithoutRedirect() === true) ? 'payment' : false;
    }

    /**
     * Executes oxcmp_user::changeUserWithoutRedirect().
     * returns "account_user" (this redirects to billing and shipping settings page) on success
     *
     * @return null
     */
    public function changeuser_testvalues() //phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
    {
        // skip updating user info if this is just form reload
        // on selecting delivery address
        // We do redirect only on success not to loose errors.

        if ($this->changeUserWithoutRedirect()) {
            return 'account_user';
        }
    }

    /**
     * First test if all required fields were filled, then performed
     * additional checking oxcmp_user::CheckValues(). If no errors
     * occured - trying to create new user (User::CreateUser()),
     * logging him to shop (User::Login() if user has entered password).
     * If User::CreateUser() returns false - this means user is
     * already created - we only logging him to shop (oxcmp_user::Login()).
     * If there is any error with missing data - function will return
     * false and set error code (oxcmp_user::iError). If user was
     * created successfully - will return "payment" to redirect to
     * payment interface.
     *
     * Template variables:
     * <b>usr_err</b>
     *
     * Session variables:
     * <b>usr_err</b>, <b>usr</b>
     *
     * @return  mixed    redirection string or true if successful, false otherwise
     */
    public function createUser()
    {
        if (!Registry::getSession()->checkSessionChallenge()) {
            Registry::getUtilsView()->addErrorToDisplay('ERROR_MESSAGE_NON_MATCHING_CSRF_TOKEN');

            return false;
        }

        $isPrivateSales = $this->getParent()->isEnabledPrivateSales();

        if (
            $isPrivateSales
            && !Registry::getRequest()->getRequestEscapedParameter('ord_agb')
            && Registry::getConfig()->getConfigParam('blConfirmAGB')
        ) {
            Registry::getUtilsView()->addErrorToDisplay('READ_AND_CONFIRM_TERMS', false, true);

            return false;
        }

        $username = Registry::getRequest()->getRequestEscapedParameter('lgn_usr');
        $password = Registry::getRequest()->getRequestParameter('lgn_pwd');
        $passwordConfirmation = Registry::getRequest()->getRequestParameter('lgn_pwd2');

        $billingAddress = $this->getBillingAddress();
        $shippingAddress = $this->getShippingAddress();
        try {
            $user = oxNew(User::class);
            $user->checkValues($username, $password, $passwordConfirmation, $billingAddress, $shippingAddress);

            $user->oxuser__oxusername = new Field($username, Field::T_RAW);
            $user->setPassword($password);
            $user->oxuser__oxactive = new Field(
                $isPrivateSales ? 0 : 1,
                Field::T_RAW
            );

            $userSubscriptionStatus = $user->getNewsSubscription()->getOptInStatus();

            $database = DatabaseProvider::getDb();
            $database->startTransaction();
            try {
                $user->createUser();
                $user = $this->configureUserBeforeCreation($user);
                $user->load($user->getId());
                $user->changeUserData(
                    $user->oxuser__oxusername->value,
                    $password,
                    $password,
                    $billingAddress,
                    $shippingAddress
                );

                if ($isPrivateSales) {
                    $user->acceptTerms();
                }

                $database->commitTransaction();
            } catch (Exception $exception) {
                $database->rollbackTransaction();

                throw $exception;
            }

            $invitationSenderUserId = Registry::getSession()->getVariable("su");
            $invitationRecipientEmail = Registry::getSession()->getVariable("re");
            if (
                $invitationSenderUserId
                && $invitationRecipientEmail
                && Registry::getConfig()->getConfigParam('blInvitationsEnabled')
            ) {
                $user->setCreditPointsForRegistrant($invitationSenderUserId, $invitationRecipientEmail);
            }

            $isSubscriptionRequested = Registry::getRequest()->getRequestEscapedParameter('blnewssubscribed');
            if ($isSubscriptionRequested && $userSubscriptionStatus == 1) {
                // if user was assigned to newsletter
                // and is creating account with newsletter checked,
                // don't require confirm
                $user->getNewsSubscription()->setOptInStatus(1);
                $user->addToGroup('oxidnewsletter');
                $this->_blNewsSubscriptionStatus = 1;
            } else {
                $isSubscriptionEmailRequested = Registry::getConfig()->getConfigParam('blOrderOptInEmail');
                $this->_blNewsSubscriptionStatus = $user->setNewsSubscription(
                    $isSubscriptionRequested,
                    $isSubscriptionEmailRequested
                );
            }

            $user->addToGroup('oxidnotyetordered');
            $user->logout();
        } catch (UserException | ConnectionException | InputException | DatabaseConnectionException $exception) {
            Registry::getUtilsView()->addErrorToDisplay($exception, false, true);

            return false;
        }

        if (!$isPrivateSales) {
            Registry::getSession()->setVariable('usr', $user->getId());
            $this->setSessionLoginToken((string)$user->getFieldData('oxpassword'));
            $this->afterLogin($user);

            // order remark
            //V #427: order remark for new users
            $orderRemark = Registry::getRequest()->getRequestParameter('order_remark');
            if ($orderRemark) {
                Registry::getSession()->setVariable('ordrem', $orderRemark);
            }
        }

        if ((int)Registry::getRequest()->getRequestEscapedParameter('option') === 3) {
            $user->sendRegistrationEmail($isPrivateSales);
        }

        // new registered
        $this->_blIsNewUser = true;

        return $this->_blNewsSubscriptionStatus !== null && !$this->_blNewsSubscriptionStatus
            ? 'payment?new_user=1&success=1&newslettererror=4'
            : 'payment?new_user=1&success=1';
    }

    /**
     * If any additional configurations required right before user creation
     *
     * @param User $user
     *
     * @return User The user we gave in.
     */
    protected function configureUserBeforeCreation($user)
    {
        return $user;
    }

    /**
     * Creates new oxid user
     *
     * @return string partial parameter string or null
     */
    public function registerUser()
    {
        // registered new user ?
        if ($this->createUser() != false && $this->_blIsNewUser) {
            if ($this->_blNewsSubscriptionStatus === null || $this->_blNewsSubscriptionStatus) {
                return 'register?success=1';
            } else {
                return 'register?success=1&newslettererror=4';
            }
        } else {
            // problems with registration ...
            $this->logout();
        }
    }

    /**
     * Deletes user shipping address.
     */
    public function deleteShippingAddress()
    {
        $session = Registry::getSession();

        $addressId = Registry::getRequest()->getRequestEscapedParameter('oxaddressid');

        $address = oxNew(Address::class);
        $address->load($addressId);
        if ($this->canUserDeleteShippingAddress($address) && $session->checkSessionChallenge()) {
            $address->delete($addressId);
        }
    }

    /**
     * Checks if shipping address is assigned to user.
     *
     * @param Address $address
     * @return bool
     */
    private function canUserDeleteShippingAddress($address)
    {
        $canDelete = false;
        $user = $this->getUser();
        if ($address->oxaddress__oxuserid->value === $user->getId()) {
            $canDelete = true;
        }

        return $canDelete;
    }

    /**
     * Saves invitor ID
     */
    protected function saveInvitor()
    {
        if (Registry::getConfig()->getConfigParam('blInvitationsEnabled')) {
            $this->getInvitor();
            $this->setRecipient();
        }
    }

    /**
     * Saving show/hide delivery address state
     */
    protected function saveDeliveryAddressState()
    {
        $oSession = Registry::getSession();

        $blShow = Registry::getRequest()->getRequestEscapedParameter('blshowshipaddress');
        if (!isset($blShow)) {
            $blShow = $oSession->getVariable('blshowshipaddress');
        }

        $oSession->setVariable('blshowshipaddress', $blShow);
    }

    /**
     * Mostly used for customer profile editing screen (OXID eShop ->
     * MY ACCOUNT). Checks if oUser is set (oxcmp_user::oUser) - if
     * not - executes oxcmp_user::_loadSessionUser(). If user unchecked newsletter
     * subscription option - removes him from this group. There is an
     * additional MUST FILL fields checking. Function returns true or false
     * according to user data submission status.
     *
     * Session variables:
     * <b>ordrem</b>
     *
     * @return  bool|void true on success, false otherwise
     */
    protected function changeUserWithoutRedirect()
    {
        $session = Registry::getSession();

        if (!$session->checkSessionChallenge()) {
            return;
        }

        $user = $this->getUser();
        if (!$user) {
            return;
        }

        $currentEmail = $user->getFieldData('oxusername');
        $password = $user->getFieldData('oxpassword');
        $shippingAddress = $this->getShippingAddress();
        $billingAddress = $this->getBillingAddress();
        $newEmail = $billingAddress['oxuser__oxusername'] ?? '';

        try {
            $isUsernameUpdated = $this->isUserNameUpdated($currentEmail ?? '', $newEmail);
            if ($isUsernameUpdated && $this->isGuestUser($user)) {
                $this->deleteExistingGuestUser($newEmail);
            }
            if (
                !$this->isGuestUser($user)
                && $isUsernameUpdated
                && $user->isEmailInUse($newEmail)
            ) {
                Registry::getUtilsView()->addErrorToDisplay('ERROR_MESSAGE_USER_USEREXISTS');
                return false;
            }
            $user->changeUserData($currentEmail, $password, $password, $billingAddress, $shippingAddress);

            $isSubscriptionRequested = Registry::getRequest()->getRequestEscapedParameter('blnewssubscribed');
            $userSubscriptionStatus = $isSubscriptionRequested ?? $user->getNewsSubscription()->getOptInStatus();
            $isSubscriptionEmailRequested = Registry::getConfig()->getConfigParam('blOrderOptInEmail');

            $this->_blNewsSubscriptionStatus = $user->setNewsSubscription(
                $userSubscriptionStatus,
                $isSubscriptionEmailRequested,
                $isUsernameUpdated
            );

            $this->resetPermissions();

            $orderRemark = Registry::getRequest()->getRequestParameter('order_remark');
            if ($orderRemark) {
                $session->setVariable('ordrem', $orderRemark);
            } else {
                $session->deleteVariable('ordrem');
            }

            if ($basket = $session->getBasket()) {
                $basket->setBasketUser(null);
                $basket->onUpdate();
            }

            return true;
        } catch (UserException | ConnectionException | InputException $exception) {
            Registry::getUtilsView()->addErrorToDisplay($exception, false, true);
            return;
        } catch (\Throwable) {
            Registry::getUtilsView()->addErrorToDisplay('ERROR_MESSAGE_USER_UPDATE_FAILED', false, true);
            return false;
        }
    }

    /**
     * Returns delivery address from request. Before returning array is checked if
     * all needed data is there
     *
     * @return array
     */
    protected function getDelAddressData()
    {
        // if user company name, user name and additional info has special chars
        $blShowShipAddressParameter = Registry::getRequest()->getRequestEscapedParameter('blshowshipaddress');
        $blShowShipAddressVariable = Registry::getSession()->getVariable('blshowshipaddress');
        $sDeliveryAddressParameter = Registry::getRequest()->getRequestParameter('deladr');
        $aDeladr = ($blShowShipAddressParameter || $blShowShipAddressVariable) ? $sDeliveryAddressParameter : [];
        $aDelAdress = $aDeladr;

        if (is_array($aDeladr)) {
            // checking if data is filled
            if (isset($aDeladr['oxaddress__oxsal'])) {
                unset($aDeladr['oxaddress__oxsal']);
            }
            if (!count($aDeladr) || implode('', $aDeladr) == '') {
                // resetting to avoid empty records
                $aDelAdress = [];
            }
        }

        return $aDelAdress;
    }

    /**
     * Returns logout link with additional params
     *
     * @return string $sLogoutLink
     */
    protected function getLogoutLink()
    {
        $oConfig = Registry::getConfig();

        $sLogoutLink = $oConfig->isSsl() ? $oConfig->getShopSecureHomeUrl() : $oConfig->getShopHomeUrl();
        $sLogoutLink .= 'cl=' . $oConfig->getRequestControllerId() . $this->getParent()->getDynUrlParams();
        if ($sParam = Registry::getRequest()->getRequestEscapedParameter('anid')) {
            $sLogoutLink .= '&amp;anid=' . $sParam;
        }
        if ($sParam = Registry::getRequest()->getRequestEscapedParameter('cnid')) {
            $sLogoutLink .= '&amp;cnid=' . $sParam;
        }
        if ($sParam = Registry::getRequest()->getRequestEscapedParameter('mnid')) {
            $sLogoutLink .= '&amp;mnid=' . $sParam;
        }
        if ($sParam = basename(Registry::getRequest()->getRequestEscapedParameter('tpl'))) {
            $sLogoutLink .= '&amp;tpl=' . $sParam;
        }
        if ($sParam = Registry::getRequest()->getRequestEscapedParameter('oxloadid')) {
            $sLogoutLink .= '&amp;oxloadid=' . $sParam;
        }
        // @deprecated since v5.3 (2016-06-17); Listmania will be moved to an own module.
        if ($sParam = Registry::getRequest()->getRequestEscapedParameter('recommid')) {
            $sLogoutLink .= '&amp;recommid=' . $sParam;
        }
        // END deprecated

        return $sLogoutLink . '&amp;fnc=logout';
    }

    /**
     * Sets user login state
     *
     * @param int $iStatus login state (USER_LOGIN_SUCCESS/USER_LOGIN_FAIL/USER_LOGOUT)
     */
    public function setLoginStatus($iStatus)
    {
        $this->_iLoginStatus = $iStatus;
    }

    /**
     * Returns user login state marker:
     *  - USER_LOGIN_SUCCESS - user successfully logged in;
     *  - USER_LOGIN_FAIL - login failed;
     *  - USER_LOGOUT - user logged out.
     *
     * @return int
     */
    public function getLoginStatus()
    {
        return $this->_iLoginStatus;
    }

    /**
     * Sets invitor id to session from URL
     */
    public function getInvitor()
    {
        $sSu = Registry::getSession()->getVariable('su');

        if (!$sSu && ($sSuNew = Registry::getRequest()->getRequestEscapedParameter('su'))) {
            Registry::getSession()->setVariable('su', $sSuNew);
        }
    }

    /**
     * sets from URL invitor id
     */
    public function setRecipient()
    {
        $sRe = Registry::getSession()->getVariable('re');
        if (!$sRe && ($sReNew = Registry::getRequest()->getRequestEscapedParameter('re'))) {
            Registry::getSession()->setVariable('re', $sReNew);
        }
    }

    /**
     * @param array                   $address
     * @param AbstractUpdatableFields $updatableFields
     *
     * @return array
     */
    private function cleanAddress($address, $updatableFields)
    {
        if (is_array($address)) {
            /** @var UpdatableFieldsConstructor $updatableFieldsConstructor */
            $updatableFieldsConstructor = oxNew(UpdatableFieldsConstructor::class);
            $cleaner = $updatableFieldsConstructor->getAllowedFieldsCleaner($updatableFields);
            return $cleaner->filterByUpdatableFields($address);
        }

        return $address;
    }

    /**
     * Returns trimmed address.
     *
     * @param array $address
     *
     * @return array
     */
    private function trimAddress($address)
    {
        if (is_array($address)) {
            $fields  = oxNew(FormFields::class, $address);
            $trimmer = oxNew(FormFieldsTrimmer::class);

            $address = (array)$trimmer->trim($fields);
        }

        return $address;
    }

    private function isGuestUser(User $user): bool
    {
        return empty($user->oxuser__oxpassword->value);
    }

    private function isUserNameUpdated(string $currentName, string $newName): bool
    {
        return $currentName && $newName && $currentName !== $newName;
    }

    /**
     * @throws Exception
     */
    private function deleteExistingGuestUser(string $newName): void
    {
        $existingUser = oxNew(User::class);
        $existingUser->load($existingUser->getIdByUserName($newName));
        if ($existingUser && $this->isGuestUser($existingUser)) {
            $existingUser->delete();
        }
    }

    private function getShippingAddress(): ?array
    {
        $shippingAddress = $this->getDelAddressData();
        $shippingAddress = $this->cleanAddress($shippingAddress, oxNew(UserShippingAddressUpdatableFields::class));
        return $this->trimAddress($shippingAddress);
    }

    private function getBillingAddress(): ?array
    {
        $billingAddress = Registry::getRequest()->getRequestParameter('invadr');
        $billingAddress = $this->cleanAddress($billingAddress, oxNew(UserUpdatableFields::class));
        if ($billingAddress && is_array($billingAddress)) {
            $billingAddress = $this->removeNonAddressFields($billingAddress);
        }
        return $this->trimAddress($billingAddress);
    }

    private function removeNonAddressFields(array $addressFormData): array
    {
        $nonAddressFields = [
            'oxuser__oxactive',
            'oxuser__oxshopid',
            'oxuser__oxpassword',
            'oxuser__oxpasssalt',
            'oxuser__oxupdatekey',
            'oxuser__oxupdateexp',
        ];
        foreach ($nonAddressFields as $field) {
            if ($addressFormData && array_key_exists($field, $addressFormData)) {
                unset($addressFormData[$field]);
            }
        }

        return $addressFormData;
    }

    private function setSessionLoginToken(string $passwordHash): void
    {
        Registry::getSession()
            ->setVariable(
                'login-token',
                ContainerFacade::get(PasswordServiceBridgeInterface::class)->hash($passwordHash)
            );
    }
}


================================================
FILE: source/Application/Component/UtilsComponent.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component;

use OxidEsales\Eshop\Core\Registry;

/**
 * Transparent shop utilities class.
 * Some specific utilities, such as fetching article info, etc. (Class may be used
 * for overriding).
 *
 * @subpackage oxcmp
 */
class UtilsComponent extends \OxidEsales\Eshop\Core\Controller\BaseController
{
    /**
     * Marking object as component
     *
     * @var bool
     */
    protected $_blIsComponent = true;

    /**
     * Adds/removes chosen article to/from article comparison list
     *
     * @param object $sProductId product id
     * @param double $dAmount    amount
     * @param array  $aSel       (default null)
     * @param bool   $blOverride allow override
     * @param bool   $blBundle   bundled
     */
    public function toCompareList(
        $sProductId = null,
        $dAmount = null,
        $aSel = null,
        $blOverride = false,
        $blBundle = false
    ) {
        // only if enabled and not search engine..
        if ($this->getViewConfig()->getShowCompareList() && !Registry::getUtils()->isSearchEngine()) {
            // #657 special treatment if we want to put on comparelist
            $blAddCompare = Registry::getRequest()->getRequestEscapedParameter('addcompare');
            $blRemoveCompare = Registry::getRequest()->getRequestEscapedParameter('removecompare');
            $sProductId = $sProductId ? $sProductId : Registry::getRequest()->getRequestEscapedParameter('aid');
            if (($blAddCompare || $blRemoveCompare) && $sProductId) {
                // toggle state in session array
                $aItems = Registry::getSession()->getVariable('aFiltcompproducts');
                if ($blAddCompare && !isset($aItems[$sProductId])) {
                    $aItems[$sProductId] = true;
                }

                if ($blRemoveCompare) {
                    unset($aItems[$sProductId]);
                }

                Registry::getSession()->setVariable('aFiltcompproducts', $aItems);
                $oParentView = $this->getParent();

                // #843C there was problem then field "blIsOnComparisonList" was not set to article object
                if (($oProduct = $oParentView->getViewProduct())) {
                    if (isset($aItems[$oProduct->getId()])) {
                        $oProduct->setOnComparisonList(true);
                    } else {
                        $oProduct->setOnComparisonList(false);
                    }
                }

                $aViewProds = $oParentView->getViewProductList();
                if (is_array($aViewProds) && count($aViewProds)) {
                    foreach ($aViewProds as $oProduct) {
                        if (isset($aItems[$oProduct->getId()])) {
                            $oProduct->setOnComparisonList(true);
                        } else {
                            $oProduct->setOnComparisonList(false);
                        }
                    }
                }
            }
        }
    }

    /**
     * If session user is set loads user noticelist (\OxidEsales\Eshop\Application\Model\User::GetBasket())
     * and adds article to it.
     *
     * @param string $sProductId Product/article ID (default null)
     * @param double $dAmount    amount of good (default null)
     * @param array  $aSel       product selection list (default null)
     */
    public function toNoticeList($sProductId = null, $dAmount = null, $aSel = null)
    {
        if (!Registry::getSession()->checkSessionChallenge()) {
            return;
        }

        $this->toList('noticelist', $sProductId, $dAmount, $aSel);
    }

    /**
     * If session user is set loads user wishlist (\OxidEsales\Eshop\Application\Model\User::GetBasket()) and
     * adds article to it.
     *
     * @param string $sProductId Product/article ID (default null)
     * @param double $dAmount    amount of good (default null)
     * @param array  $aSel       product selection list (default null)
     */
    public function toWishList($sProductId = null, $dAmount = null, $aSel = null)
    {
        if (!Registry::getSession()->checkSessionChallenge()) {
            return;
        }

        // only if enabled
        if ($this->getViewConfig()->getShowWishlist()) {
            $this->toList('wishlist', $sProductId, $dAmount, $aSel);
        }
    }

    /**
     * Adds chosen product to defined user list. if amount is 0, item is removed from the list
     *
     * @param string $sListType  user product list type
     * @param string $sProductId product id
     * @param double $dAmount    product amount
     * @param array  $aSel       product selection list
     */
    protected function toList($sListType, $sProductId, $dAmount, $aSel)
    {
        // only if user is logged in
        if ($oUser = $this->getUser()) {
            $sProductId = ($sProductId) ? $sProductId : Registry::getRequest()->getRequestEscapedParameter('itmid');
            $sProductId = ($sProductId) ? $sProductId : Registry::getRequest()->getRequestEscapedParameter('aid');
            $dAmount = isset($dAmount) ? $dAmount : Registry::getRequest()->getRequestEscapedParameter('am');
            $aSel = $aSel ? $aSel : Registry::getRequest()->getRequestEscapedParameter('sel');

            // processing amounts
            $dAmount = str_replace(',', '.', $dAmount);
            if (!\OxidEsales\Eshop\Core\Registry::getConfig()->getConfigParam('blAllowUnevenAmounts')) {
                $dAmount = round((string) $dAmount);
            }

            $oBasket = $oUser->getBasket($sListType);
            $oBasket->addItemToBasket($sProductId, abs($dAmount), $aSel, ($dAmount == 0));

            // recalculate basket count
            $oBasket->getItemCount(true);
        }
    }

    /**
     *  Set view data, call parent::render
     *
     * @return null
     */
    public function render()
    {
        parent::render();

        $oParentView = $this->getParent();

        // add content for main menu
        $oContentList = oxNew(\OxidEsales\Eshop\Application\Model\ContentList::class);
        $oContentList->loadMainMenulist();
        $oParentView->setMenueList($oContentList);

        return;
    }
}


================================================
FILE: source/Application/Component/Widget/Actions.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component\Widget;

/**
 * Actions widget.
 * Access actions in tpl.
 */
class Actions extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
{
    /**
     * Current class template name.
     *
     * @var string
     */
    protected $_sThisTemplate = 'widget/product/action';

    /**
     * Are actions on
     *
     * @var bool
     */
    protected $_blLoadActions = null;

    /**
     * Returns article list with action articles
     *
     * @return object
     */
    public function getAction()
    {
        $actionId = $this->getViewParameter('action');
        if ($actionId && $this->getLoadActionsParam()) {
            $artList = oxNew(\OxidEsales\Eshop\Application\Model\ArticleList::class);
            $artList->loadActionArticles($actionId);
            if ($artList->count()) {
                return $artList;
            }
        }
    }

    /**
     * Returns if actions are ON
     *
     * @return string
     */
    protected function getLoadActionsParam()
    {
        $this->_blLoadActions = \OxidEsales\Eshop\Core\Registry::getConfig()->getConfigParam('bl_perfLoadAktion');

        return $this->_blLoadActions;
    }

    /**
     * Returns action name
     *
     * @return string
     */
    public function getActionName()
    {
        $actionId = $this->getViewParameter('action');
        $action   = oxNew(\OxidEsales\Eshop\Application\Model\Actions::class);
        if ($action->load($actionId)) {
            return $action->oxactions__oxtitle->value;
        }
    }

    /**
     * Returns products list type
     *
     * @return string
     */
    public function getListType()
    {
        return $this->getViewParameter('listtype');
    }
}


================================================
FILE: source/Application/Component/Widget/ArticleBox.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component\Widget;

use oxRegistry;
use oxArticle;

/**
 * Article box widget
 */
class ArticleBox extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
{
    /**
     * Names of components (classes) that are initiated and executed
     * before any other regular operation.
     * User component used in template.
     *
     * @var array
     */
    protected $_aComponentNames = ['oxcmp_user' => 1, 'oxcmp_basket' => 1, 'oxcmp_cur' => 1];

    /**
     * Current class template name.
     *
     * @var string
     */
    protected $_sTemplate = 'widget/product/boxproduct';

    /**
     * Current article
     *
     * @var \OxidEsales\Eshop\Application\Model\Article|null
     */
    protected $_oArticle = null;

    /**
     * Returns active category
     *
     * @return \OxidEsales\Eshop\Application\Model\Category|null
     */
    public function getActiveCategory()
    {
        $oCategory = \OxidEsales\Eshop\Core\Registry::getConfig()->getTopActiveView()->getActiveCategory();
        if ($oCategory) {
            $this->setActiveCategory($oCategory);
        }

        return $this->_oActCategory;
    }

    /**
     * Renders template based on widget type or just use directly passed path of template
     *
     * @return string
     */
    public function render()
    {
        parent::render();

        $sWidgetType = $this->getViewParameter('sWidgetType');
        $sListType = $this->getViewParameter('sListType');

        if ($sWidgetType && $sListType) {
            $this->_sTemplate = "widget/" . $sWidgetType . "/" . $sListType;
        }

        $sForceTemplate = $this->getViewParameter('oxwtemplate');
        if ($sForceTemplate) {
            $this->_sTemplate = $sForceTemplate;
        }

        return $this->_sTemplate;
    }

    /**
     * Sets box product
     *
     * @param \OxidEsales\Eshop\Application\Model\Article $oArticle Box product
     */
    public function setProduct($oArticle)
    {
        $this->_oArticle = $oArticle;
    }

    /**
     * Get product article
     *
     * @return \OxidEsales\Eshop\Application\Model\Article
     */
    public function getProduct()
    {
        if (is_null($this->_oArticle)) {
            if ($this->getViewParameter('_object')) {
                $oArticle = $this->getViewParameter('_object');
            } else {
                $sAddDynParams = \OxidEsales\Eshop\Core\Registry::getConfig()->getTopActiveView()->getAddUrlParams();

                $sAddDynParams = $this->updateDynamicParameters($sAddDynParams);

                $oArticle = $this->getArticleById($this->getViewParameter('anid'));
                $this->addDynParamsToLink($sAddDynParams, $oArticle);
            }

            $this->setProduct($oArticle);
        }

        return $this->_oArticle;
    }

    /**
     * get link of current top view
     *
     * @param int $iLang requested language
     *
     * @return string
     */
    public function getLink($iLang = null)
    {
        return \OxidEsales\Eshop\Core\Registry::getConfig()->getTopActiveView()->getLink($iLang);
    }

    /**
     * Returns if VAT is included in price
     *
     * @return bool
     */
    public function isVatIncluded()
    {
        return (bool) $this->getViewParameter("isVatIncluded");
    }

    /**
     * Returns wish list id
     *
     * @return string
     */
    public function getWishId()
    {
        return $this->getViewParameter('owishid');
    }

    /**
     * Returns remove function
     *
     * @return string
     */
    public function getRemoveFunction()
    {
        return $this->getViewParameter('removeFunction');
    }

    /**
     * Returns toBasket function
     *
     * @return string
     */
    public function getToBasketFunction()
    {
        return $this->getViewParameter('toBasketFunction');
    }

    /**
     * Returns if toCart must be disabled
     *
     * @return bool
     */
    public function getDisableToCart()
    {
        return (bool) $this->getViewParameter('blDisableToCart');
    }

    /**
     * Returns list item id with identifier
     *
     * @return string
     */
    public function getIndex()
    {
        return $this->getViewParameter('iIndex');
    }

    /**
     * Returns recommendation id
     *
     * @deprecated since v5.3 (2016-06-17); Listmania will be moved to an own module.
     *
     * @return string
     */
    public function getRecommId()
    {
        return $this->getViewParameter('recommid');
    }

    /**
     * Returns iteration number
     *
     * @return string
     */
    public function getIteration()
    {
        return $this->getViewParameter('iIteration');
    }

    /**
     * Returns the answer if main link must be showed
     *
     * @return bool
     */
    public function getShowMainLink()
    {
        return (bool) $this->getViewParameter('showMainLink');
    }

    /**
     * Returns if alternate product exists
     *
     * @return bool
     */
    public function getAltProduct()
    {
        return (bool) $this->getViewParameter('altproduct');
    }

    /**
     * Appends dyn params to url.
     *
     * @param string                                      $sAddDynParams Dyn params
     * @param \OxidEsales\Eshop\Application\Model\Article $oArticle      Article
     *
     * @return bool
     */
    protected function addDynParamsToLink($sAddDynParams, $oArticle)
    {
        $blAddedParams = false;
        if ($sAddDynParams) {
            $blSeo = \OxidEsales\Eshop\Core\Registry::getUtils()->seoIsActive();
            if (!$blSeo) {
                // only if seo is off..
                $oArticle->appendStdLink($sAddDynParams);
            }
            $oArticle->appendLink($sAddDynParams);
            $blAddedParams = true;
        }

        return $blAddedParams;
    }

    /**
     * Returns prepared article by id.
     *
     * @param string $sArticleId Article id
     *
     * @return \OxidEsales\Eshop\Application\Model\Article
     */
    protected function getArticleById($sArticleId)
    {
        /** @var \OxidEsales\Eshop\Application\Model\Article $oArticle */
        $oArticle = oxNew(\OxidEsales\Eshop\Application\Model\Article::class);
        $oArticle->load($sArticleId);
        $iLinkType = $this->getViewParameter('iLinkType');

        if ($this->getViewParameter('inlist')) {
            $oArticle->setInList();
        }
        if ($iLinkType) {
            $oArticle->setLinkType($iLinkType);
        }
        // @deprecated since v5.3 (2016-06-17); Listmania will be moved to an own module.
        if ($oRecommList = $this->getActiveRecommList()) {
            $oArticle->text = $oRecommList->getArtDescription($oArticle->getId());
        }
        // END deprecated

        return $oArticle;
    }

    /**
     * @param string $dynamicParameters
     *
     * @return string
     */
    protected function updateDynamicParameters($dynamicParameters)
    {
        return $dynamicParameters;
    }
}


================================================
FILE: source/Application/Component/Widget/ArticleDetails.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component\Widget;

use OxidEsales\Eshop\Application\Model\Article;
use OxidEsales\Eshop\Application\Model\ArticleList;
use OxidEsales\Eshop\Application\Model\Manufacturer;
use OxidEsales\Eshop\Application\Model\SimpleVariantList;
use OxidEsales\Eshop\Application\Model\Vendor;
use OxidEsales\Eshop\Core\Config;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Utils;
use OxidEsales\EshopCommunity\Core\Di\ContainerFacade;
use OxidEsales\EshopCommunity\Core\SortingValidator;
use stdClass;

/**
 * Article detailed information widget.
 */
class ArticleDetails extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
{
    /**
     * List of article variants.
     *
     * @var array
     */
    protected $_aVariantList = null;
    /**
     * Names of components (classes) that are initiated and executed
     * before any other regular operation.
     *
     * @var array
     */
    protected $_aComponentNames = ['oxcmp_cur' => 1, 'oxcmp_shop' => 1, 'oxcmp_basket' => 1, 'oxcmp_user' => 1];

    /**
     * Current class template name.
     *
     * @var string
     */
    protected $_sThisTemplate = 'widget/product/details';

    /**
     * Current product parent article object.
     *
     * @var Article
     */
    protected $_oParentProd = null;

    /**
     * Marker if user can rate current product.
     *
     * @var bool
     */
    protected $_blCanRate = null;

    /**
     * Media files.
     *
     * @var array
     */
    protected $_aMediaFiles = null;

    /**
     * History (last seen) products.
     *
     * @var array
     */
    protected $_aLastProducts = null;

    /**
     * Current product's vendor.
     *
     * @var Vendor
     */
    protected $_oVendor = null;

    /**
     * Current product's manufacturer.
     *
     * @var Manufacturer
     */
    protected $_oManufacturer = null;

    /**
     * Current product's category.
     *
     * @var object
     */
    protected $_oCategory = null;

    /**
     * Current product's attributes.
     *
     * @var array
     */
    protected $_aAttributes = null;

    /**
     * Picture gallery.
     *
     * @var array
     */
    protected $_aPicGallery = null;

    /**
     * Reviews of current article.
     *
     * @var array
     */
    protected $_aReviews = null;

    /**
     * CrossSelling article list
     *
     * @var object
     */
    protected $_oCrossSelling = null;

    /**
     * Similar products article list.
     *
     * @var object
     */
    protected $_oSimilarProducts = null;

    /**
     * Accessories of current article.
     *
     * @var object
     */
    protected $_oAccessoires = null;

    /**
     * List of customer also bought these products.
     *
     * @var object
     */
    protected $_aAlsoBoughtArts = null;

    /**
     * Search title.
     *
     * @var string
     */
    protected $_sSearchTitle = null;

    /**
     * Marker if active product was fully initialized before returning it.
     * (see details::getProduct())
     *
     * @var bool
     */
    protected $_blIsInitialized = false;

    /**
     * Current view link type.
     *
     * @var int
     */
    protected $_iLinkType = null;

    /**
     * Is multi dimension variant view.
     *
     * @var bool
     */
    protected $_blMdView = null;

    /**
     * Rating value.
     *
     * @var double
     */
    protected $_dRatingValue = null;

    /**
     * Rating count.
     *
     * @var integer
     */
    protected $_iRatingCnt = null;

    /**
     * Bid price.
     *
     * @var string
     */
    protected $_sBidPrice = null;

    /**
     * Marked which defines if current view is sortable or not.
     *
     * @var bool
     */
    protected $_blShowSorting = true;

    /**
     * Array of id to form recommendation list.
     *
     * @deprecated since v5.3 (2016-06-17); Listmania will be moved to an own module.
     *
     * @var array
     */
    protected $_aSimilarRecommListIds = null;

    /**
     * Template variable getter. Returns active zoom picture id.
     *
     * @return int
     */
    public function getActZoomPic()
    {
        return 1;
    }

    /**
     * Returns current product parent article object if it is available.
     *
     * @param string $sParentId parent product id
     *
     * @return Article
     */
    protected function getParentProduct($sParentId)
    {
        if ($sParentId && $this->_oParentProd === null) {
            $this->_oParentProd = false;
            $oProduct = oxNew(\OxidEsales\Eshop\Application\Model\Article::class);
            if (($oProduct->load($sParentId))) {
                $this->processProduct($oProduct);
                $this->_oParentProd = $oProduct;
            }
        }

        return $this->_oParentProd;
    }

    /**
     * In case list type is "search" returns search parameters which will be added to product details link.
     *
     * @return string|null
     */
    protected function getAddDynUrlParams()
    {
        if ($this->getListType() == "search") {
            return $this->getDynUrlParams();
        }
    }

    /**
     * Processes product by setting link type and in case list type is search adds search parameters to details link.
     *
     * @param object $oProduct Product to process.
     */
    protected function processProduct($oProduct)
    {
        $oProduct->setLinkType($this->getLinkType());
        if ($sAddParams = $this->getAddDynUrlParams()) {
            $oProduct->appendLink($sAddParams);
        }
    }

    /**
     * Checks if rating functionality is active.
     *
     * @return bool
     */
    public function ratingIsActive()
    {
        return \OxidEsales\Eshop\Core\Registry::getConfig()->getConfigParam('bl_perfLoadReviews');
    }

    /**
     * Checks if rating functionality is on and allowed to user.
     *
     * @return bool
     */
    public function canRate()
    {
        if ($this->_blCanRate === null) {
            $this->_blCanRate = false;

            if ($this->ratingIsActive() && $oUser = $this->getUser()) {
                $oRating = oxNew(\OxidEsales\Eshop\Application\Model\Rating::class);
                $this->_blCanRate = $oRating->allowRating($oUser->getId(), 'oxarticle', $this->getProduct()->getId());
            }
        }

        return $this->_blCanRate;
    }

    /**
     * Loading full list of attributes.
     *
     * @return array
     */
    public function getAttributes()
    {
        if ($this->_aAttributes === null) {
            // all attributes this article has
            $aArtAttributes = $this->getProduct()->getAttributes();

            //making a new array for backward compatibility
            $this->_aAttributes = false;

            if (count($aArtAttributes)) {
                foreach ($aArtAttributes as $sKey => $oAttribute) {
                    $this->_aAttributes[$sKey] = new stdClass();
                    $this->_aAttributes[$sKey]->title = $oAttribute->oxattribute__oxtitle->value;
                    $this->_aAttributes[$sKey]->value = $oAttribute->oxattribute__oxvalue->value;
                }
            }
        }

        return $this->_aAttributes;
    }

    /**
     * Returns current view link type.
     *
     * @return int
     */
    public function getLinkType()
    {
        if ($this->_iLinkType === null) {
            $sListType = Registry::getRequest()->getRequestEscapedParameter('listtype');
            if ('vendor' == $sListType) {
                $this->_iLinkType = OXARTICLE_LINKTYPE_VENDOR;
            } elseif ('manufacturer' == $sListType) {
                $this->_iLinkType = OXARTICLE_LINKTYPE_MANUFACTURER;
                // @deprecated since v5.3 (2016-06-17); Listmania will be moved to an own module.
            } elseif ('recommlist' == $sListType) {
                $this->_iLinkType = OXARTICLE_LINKTYPE_RECOMM;
                // END deprecated
            } else {
                $this->_iLinkType = OXARTICLE_LINKTYPE_CATEGORY;

                // price category has own type..
                if (($oCat = $this->getActiveCategory()) && $oCat->isPriceCategory()) {
                    $this->_iLinkType = OXARTICLE_LINKTYPE_PRICECATEGORY;
                }
            }
        }

        return $this->_iLinkType;
    }

    /**
     * Returns variant lists of current product
     * excludes currently viewed product.
     *
     * @return array|SimpleVariantList|ArticleList
     */
    public function getVariantListExceptCurrent()
    {
        $oList = $this->getVariantList();
        if (is_object($oList)) {
            $oList = clone $oList;
        }

        $sOxId = $this->getProduct()->getId();
        if (isset($oList[$sOxId])) {
            unset($oList[$sOxId]);
        }

        return $oList;
    }

    /**
     * Loading full list of variants,
     * if we are child and do not have any variants then let's load all parent variants as ours.
     *
     * @return array|SimpleVariantList|ArticleList
     */
    public function loadVariantInformation()
    {
        if ($this->_aVariantList === null) {
            $oProduct = $this->getProduct();

            //if we are child and do not have any variants then let's load all parent variants as ours
            if ($oParent = $oProduct->getParentArticle()) {
                $myConfig = \OxidEsales\Eshop\Core\Registry::getConfig();

                $oParent->setNoVariantLoading(false);
                $this->_aVariantList = $oParent->getFullVariants(false);

                //lets additionally add parent article if it is sellable
                if (count($this->_aVariantList) && $myConfig->getConfigParam('blVariantParentBuyable')) {
                    //#1104S if parent is buyable load select lists too
                    $oParent->enablePriceLoad();
                    $oParent->aSelectlist = $oParent->getSelectLists();
                    $this->_aVariantList = array_merge([$oParent], $this->_aVariantList->getArray());
                }
            } else {
                //loading full list of variants
                $this->_aVariantList = $oProduct->getFullVariants(false);
            }

            // setting link type for variants ..
            foreach ($this->_aVariantList as $oVariant) {
                $this->processProduct($oVariant);
            }
        }

        return $this->_aVariantList;
    }

    /**
     * Returns variant lists of current product.
     *
     * @return array|SimpleVariantList|ArticleList
     */
    public function getVariantList()
    {
        return $this->loadVariantInformation();
    }

    /**
     * Template variable getter. Returns media files of current product.
     *
     * @return array
     */
    public function getMediaFiles()
    {
        if ($this->_aMediaFiles === null) {
            $aMediaFiles = $this->getProduct()->getMediaUrls();
            $this->_aMediaFiles = count($aMediaFiles) ? $aMediaFiles : false;
        }

        return $this->_aMediaFiles;
    }

    /**
     * Template variable getter. Returns last seen products.
     *
     * @param int $iCnt product count
     *
     * @return array
     */
    public function getLastProducts($iCnt = 4)
    {
        if ($this->_aLastProducts === null) {
            //last seen products for #768CA
            $oProduct = $this->getProduct();
            $sParentIdField = 'oxarticles__oxparentid';
            $sArtId = $oProduct->$sParentIdField->value ? $oProduct->$sParentIdField->value : $oProduct->getId();

            $oHistoryArtList = oxNew(\OxidEsales\Eshop\Application\Model\ArticleList::class);
            $oHistoryArtList->loadHistoryArticles($sArtId, $iCnt);
            $this->_aLastProducts = $oHistoryArtList;
        }

        return $this->_aLastProducts;
    }

    /**
     * Template variable getter. Returns product's vendor.
     *
     * @return object
     */
    public function getManufacturer()
    {
        if ($this->_oManufacturer === null) {
            $this->_oManufacturer = $this->getProduct()->getManufacturer(false);
        }

        return $this->_oManufacturer;
    }

    /**
     * Template variable getter. Returns product's vendor.
     *
     * @return object
     */
    public function getVendor()
    {
        if ($this->_oVendor === null) {
            $this->_oVendor = $this->getProduct()->getVendor(false);
        }

        return $this->_oVendor;
    }

    /**
     * Template variable getter. Returns product's root category.
     *
     * @return object
     */
    public function getCategory()
    {
        if ($this->_oCategory === null) {
            $this->_oCategory = $this->getProduct()->getCategory();
        }

        return $this->_oCategory;
    }

    /**
     * Template variable getter. Returns picture gallery of current article.
     *
     * @return array
     */
    public function getPictureGallery()
    {
        if ($this->_aPicGallery === null) {
            //get picture gallery
            $this->_aPicGallery = $this->getPicturesProduct()->getPictureGallery();
        }

        return $this->_aPicGallery;
    }

    public function hasMultipleImages(): bool
    {
        return $this->getPictureGallery()['hasMultipleImages'];
    }

    public function getMediaItems(): array
    {
        return $this->getPictureGallery()['mediaItems'];
    }

    /**
     * Template variable getter. Returns reviews of current article.
     *
     * @return array
     */
    public function getReviews()
    {
        if ($this->_aReviews === null) {
            $this->_aReviews = false;
            if (\OxidEsales\Eshop\Core\Registry::getConfig()->getConfigParam('bl_perfLoadReviews')) {
                $this->_aReviews = $this->getProduct()->getReviews();
            }
        }

        return $this->_aReviews;
    }

    /**
     * Template variable getter. Returns cross selling.
     *
     * @return object
     */
    public function getCrossSelling()
    {
        if ($this->_oCrossSelling === null) {
            $this->_oCrossSelling = false;
            if ($oProduct = $this->getProduct()) {
                $this->_oCrossSelling = $oProduct->getCrossSelling();
            }
        }

        return $this->_oCrossSelling;
    }

    /**
     * Template variable getter. Returns similar article list.
     *
     * @return object
     */
    public function getSimilarProducts()
    {
        if ($this->_oSimilarProducts === null) {
            $this->_oSimilarProducts = false;
            if ($oProduct = $this->getProduct()) {
                $this->_oSimilarProducts = $oProduct->getSimilarProducts();
            }
        }

        return $this->_oSimilarProducts;
    }

    /**
     * Return array of id to form recommend list.
     *
     * @deprecated since v5.3 (2016-06-17); Listmania will be moved to an own module.
     *
     * @return array
     */
    public function getSimilarRecommListIds()
    {
        if ($this->_aSimilarRecommListIds === null) {
            $this->_aSimilarRecommListIds = false;

            if ($oProduct = $this->getProduct()) {
                $this->_aSimilarRecommListIds = [$oProduct->getId()];
            }
        }

        return $this->_aSimilarRecommListIds;
    }

    /**
     * Template variable getter. Returns accessories of article.
     *
     * @return object
     */
    public function getAccessoires()
    {
        if ($this->_oAccessoires === null) {
            $this->_oAccessoires = false;
            if ($oProduct = $this->getProduct()) {
                $this->_oAccessoires = $oProduct->getAccessoires();
            }
        }

        return $this->_oAccessoires;
    }

    /**
     * Template variable getter. Returns list of customer also bought these products.
     *
     * @return object
     */
    public function getAlsoBoughtTheseProducts()
    {
        if ($this->_aAlsoBoughtArts === null) {
            $this->_aAlsoBoughtArts = false;
            if ($oProduct = $this->getProduct()) {
                $this->_aAlsoBoughtArts = $oProduct->getCustomerAlsoBoughtThisProducts();
            }
        }

        return $this->_aAlsoBoughtArts;
    }

    /**
     * Template variable getter. Returns if price alarm is enabled.
     *
     * @return bool
     */
    public function isPriceAlarm()
    {
        return $this->getProduct()->isPriceAlarm();
    }

    /**
     * returns object, associated with current view.
     * (the object that is shown in frontend)
     *
     * @param int $iLang language id
     *
     * @return object
     */
    protected function getSubject($iLang)
    {
        return $this->getProduct();
    }

    /**
     * Returns search title. It will be set in Locator.
     *
     * @return string
     */
    public function getSearchTitle()
    {
        return $this->_sSearchTitle;
    }

    /**
     * Returns search title setter.
     *
     * @param string $sTitle search title
     */
    public function setSearchTitle($sTitle)
    {
        $this->_sSearchTitle = $sTitle;
    }

    /**
     * active category path setter
     *
     * @param string $sActCatPath category tree path.
     */
    public function setCatTreePath($sActCatPath)
    {
        $this->_sCatTreePath = $sActCatPath;
    }

    /**
     * Checks should persistent parameter input field be displayed.
     *
     * @return bool
     */
    public function isPersParam()
    {
        $oProduct = $this->getProduct();

        return $oProduct->oxarticles__oxisconfigurable->value;
    }

    /**
     * Template variable getter. Returns rating value.
     *
     * @return double
     */
    public function getRatingValue()
    {
        if ($this->_dRatingValue === null) {
            $this->_dRatingValue = 0.0;
            if ($this->isReviewActive() && ($oDetailsProduct = $this->getProduct())) {
                $blShowVariantsReviews = \OxidEsales\Eshop\Core\Registry::getConfig()->getConfigParam('blShowVariantReviews');
                $this->_dRatingValue = round($oDetailsProduct->getArticleRatingAverage($blShowVariantsReviews), 1);
            }
        }

        return (float) $this->_dRatingValue;
    }

    /**
     * Template variable getter. Returns if review module is on.
     *
     * @return bool
     */
    public function isReviewActive()
    {
        return \OxidEsales\Eshop\Core\Registry::getConfig()->getConfigParam('bl_perfLoadReviews');
    }

    /**
     * Template variable getter. Returns rating count.
     *
     * @return integer
     */
    public function getRatingCount()
    {
        if ($this->_iRatingCnt === null) {
            $this->_iRatingCnt = false;
            if ($this->isReviewActive() && ($oDetailsProduct = $this->getProduct())) {
                $blShowVariantsReviews = \OxidEsales\Eshop\Core\Registry::getConfig()->getConfigParam('blShowVariantReviews');
                $this->_iRatingCnt = $oDetailsProduct->getArticleRatingCount($blShowVariantsReviews);
            }
        }

        return $this->_iRatingCnt;
    }

    /**
     * Return price alarm status (if it was send).
     *
     * @return integer
     */
    public function getPriceAlarmStatus()
    {
        return $this->getViewParameter('iPriceAlarmStatus');
    }

    /**
     * Template variable getter. Returns bid price.
     *
     * @return string
     */
    public function getBidPrice()
    {
        if ($this->_sBidPrice === null) {
            $this->_sBidPrice = false;

            $aParams = Registry::getRequest()->getRequestEscapedParameter('pa');
            $oCur = \OxidEsales\Eshop\Core\Registry::getConfig()->getActShopCurrencyObject();
            $iPrice = \OxidEsales\Eshop\Core\Registry::getUtils()->currency2Float($aParams['price']);
            $this->_sBidPrice = \OxidEsales\Eshop\Core\Registry::getLang()->formatCurrency($iPrice, $oCur);
        }

        return $this->_sBidPrice;
    }

    /**
     * Returns variant selection.
     *
     * @return array
     */
    public function getVariantSelections()
    {
        // finding parent
        $oProduct = $this->getProduct();
        $sParentIdField = 'oxarticles__oxparentid';
        if (($oParent = $this->getParentProduct($oProduct->$sParentIdField->value))) {
            $sVarSelId = Registry::getRequest()->getRequestEscapedParameter("varselid");

            return $oParent->getVariantSelections($sVarSelId, $oProduct->getId());
        }

        return $oProduct->getVariantSelections(Registry::getRequest()->getRequestEscapedParameter("varselid"));
    }

    /**
     * Returns pictures product object.
     *
     * @return Article
     */
    public function getPicturesProduct()
    {
        $aVariantSelections = $this->getVariantSelections();
        if ($aVariantSelections && $aVariantSelections['oActiveVariant'] && !$aVariantSelections['blPerfectFit']) {
            return $aVariantSelections['oActiveVariant'];
        }

        return $this->getProduct();
    }

    /**
     * Get product.
     *
     * @return Article
     */
    public function getProduct()
    {
        $myConfig = \OxidEsales\Eshop\Core\Registry::getConfig();
        $myUtils = \OxidEsales\Eshop\Core\Registry::getUtils();

        if ($this->_oProduct === null) {
            if ($this->getViewParameter('_object')) {
                $this->_oProduct = $this->getViewParameter('_object');
            } else {
                //this option is only for lists and we must reset value
                //as blLoadVariants = false affect "ab price" functionality
                $myConfig->setConfigParam('blLoadVariants', true);

                $sOxid = Registry::getRequest()->getRequestEscapedParameter('anid');

                // object is not yet loaded
                $this->_oProduct = oxNew(\OxidEsales\Eshop\Application\Model\Article::class);

                if (!$this->_oProduct->load($sOxid)) {
                    $myUtils->redirect($myConfig->getShopHomeUrl());
                    $myUtils->showMessageAndExit('');
                }

                $sVarSelId = Registry::getRequest()->getRequestEscapedParameter("varselid");
                $aVarSelections = $this->_oProduct->getVariantSelections($sVarSelId);
                if ($aVarSelections && $aVarSelections['oActiveVariant'] && $aVarSelections['blPerfectFit']) {
                    $this->_oProduct = $aVarSelections['oActiveVariant'];
                }
            }
        }
        if (!$this->_blIsInitialized) {
            $this->additionalChecksForArticle($myUtils, $myConfig);
        }

        return $this->_oProduct;
    }

    /**
     * Set item sorting for widget based of retrieved parameters.
     */
    protected function setSortingParameters()
    {
        $sSortingParameters = $this->getViewParameter('sorting');
        if ($sSortingParameters) {
            list($sortBy, $sortOrder) = explode('|', $sSortingParameters);
            if ((new SortingValidator())->isValid($sortBy, $sortOrder)) {
                $this->setItemSorting($this->getSortIdent(), $sortBy, $sortOrder);
            }
        }
    }

    /**
     * Executes parent::render().
     * Returns name of template file to render.
     *
     * @return string $this->_sThisTemplate current template file name
     */
    public function render()
    {
        $oProduct = $this->getProduct();

        parent::render();

        $oCategory = oxNew(\OxidEsales\Eshop\Application\Model\Category::class);

        // if category parameter is not found, use category from product
        $sCatId = $this->getViewParameter("cnid");

        if (!$sCatId && $oProduct->getCategory()) {
            $oCategory = $oProduct->getCategory();
        } else {
            $oCategory->load($sCatId);
        }
        $this->setSortingParameters();

        $this->setActiveCategory($oCategory);

        $oLocator = oxNew(\OxidEsales\Eshop\Application\Component\Locator::class, $this->getListType());
        $oLocator->setLocatorData($oProduct, $this);

        $this->_aViewData["config"] = Registry::getConfig();

        $config = Registry::getConfig();
        $this->_aViewData['preview'] = Registry::getRequest()->getRequestEscapedParameter('preview');
        $this->_aViewData['altImageUrl'] = ContainerFacade::getParameter('oxid_esales.alternative_image_url');
        $this->_aViewData['SSLAltImageUrl'] = ContainerFacade::getParameter('oxid_esales.alternative_image_url');

        return $this->_sThisTemplate;
    }

    /**
     * Should we show MD variant selection? - Not for 1 dimension variants.
     *
     * @return bool
     */
    public function isMdVariantView()
    {
        if ($this->_blMdView === null) {
            $this->_blMdView = false;
            if (\OxidEsales\Eshop\Core\Registry::getConfig()->getConfigParam('blUseMultidimensionVariants')) {
                $iMaxMdDepth = $this->getProduct()->getMdVariants()->getMaxDepth();
                $this->_blMdView = ($iMaxMdDepth > 1);
            }
        }

        return $this->_blMdView;
    }

    /**
     * Runs additional checks for article.
     *
     * @param Utils  $myUtils  General utils.
     * @param Config $myConfig Main shop configuration.
     */
    protected function additionalChecksForArticle($myUtils, $myConfig)
    {
        $blContinue = true;
        if (!$this->_oProduct->isVisible()) {
            $blContinue = false;
        } elseif ($this->_oProduct->oxarticles__oxparentid->value) {
            $oParent = $this->getParentProduct($this->_oProduct->oxarticles__oxparentid->value);
            if (!$oParent || !$oParent->isVisible()) {
                $blContinue = false;
            }
        }

        if (!$blContinue) {
            $myUtils->redirect($myConfig->getShopHomeUrl());
            $myUtils->showMessageAndExit('');
        }

        $this->processProduct($this->_oProduct);
        $this->_blIsInitialized = true;
    }

    /**
     * Returns default category sorting for selected category.
     *
     * @return array
     */
    public function getDefaultSorting()
    {
        $aSorting = parent::getDefaultSorting();

        $oCategory = $this->getActiveCategory();

        if ($this->getListType() != 'search' && $oCategory && $oCategory instanceof \OxidEsales\Eshop\Application\Model\Category) {
            if ($sSortBy = $oCategory->getDefaultSorting()) {
                $sSortDir = ($oCategory->getDefaultSortingMode()) ? "desc" : "asc";
                $aSorting = ['sortby' => $sSortBy, 'sortdir' => $sSortDir];
            }
        }

        return $aSorting;
    }
}


================================================
FILE: source/Application/Component/Widget/CategoryTree.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace  OxidEsales\EshopCommunity\Application\Component\Widget;

use OxidEsales\Eshop\Core\Registry;
use OxidEsales\EshopCommunity\Core\Di\ContainerFacade;
use OxidEsales\EshopCommunity\Internal\Framework\Templating\TemplateRendererBridgeInterface;

use function basename;

class CategoryTree extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
{
    /**
     * Names of components (classes) that are initiated and executed
     * before any other regular operation.
     * Cartegory component used in template.
     *
     * @var array
     */
    protected $_aComponentNames = ['oxcmp_categories' => 1];

    /**
     * Current class template name.
     *
     * @var string
     */
    protected $_sThisTemplate = 'widget/sidebar/categorytree';

    /**
     * @return string
     */
    public function render()
    {
        parent::render();

        $widgetType = $this->getViewParameter('sWidgetType');
        if (!$widgetType) {
            return $this->_sThisTemplate;
        }
        $template = sprintf(
            'widget/%s/categorylist',
            basename($widgetType)
        );
        $templateExists = ContainerFacade::get(TemplateRendererBridgeInterface::class)
            ->getTemplateRenderer()
            ->exists($template);
        if ($templateExists) {
            $this->_sThisTemplate = $template;
        }

        return $this->_sThisTemplate;
    }

    /**
     * Returns the deep level of category tree
     *
     * @return null
     */
    public function getDeepLevel()
    {
        return $this->getViewParameter("deepLevel");
    }

    /**
     * Content category getter.
     *
     * @return bool|string
     */
    public function getContentCategory()
    {
        return Registry::getRequest()->getRequestParameter('oxcid', false);
    }
}


================================================
FILE: source/Application/Component/Widget/CookieNote.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component\Widget;

/**
 * Cookie note widget
 */
class CookieNote extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
{
    /**
     * Current class template name.
     *
     * @var string
     */
    protected $_sThisTemplate = 'widget/header/cookienote';

    /**
     * Executes parent::render(). Check if need to hide cookie note.
     * Returns name of template file to render.
     *
     * @return  string  current template file name
     */
    public function render()
    {
        parent::render();

        return $this->_sThisTemplate;
    }

    /**
     * Return if cookie notification is enabled by config.
     *
     * @return boolean
     */
    public function isEnabled()
    {
        return (bool) \OxidEsales\Eshop\Core\Registry::getConfig()->getConfigParam('blShowCookiesNotification');
    }
}


================================================
FILE: source/Application/Component/Widget/CurrencyList.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component\Widget;

/**
 * Currency selection list widget
 */
class CurrencyList extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
{
    /**
     * Names of components (classes) that are initiated and executed
     * before any other regular operation.
     * User component used in template.
     *
     * @var array
     */
    protected $_aComponentNames = ['oxcmp_cur' => 1];

    /**
     * Current class template name.
     *
     * @var string
     */
    protected $_sThisTemplate = 'widget/header/currencies';
}


================================================
FILE: source/Application/Component/Widget/Information.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component\Widget;

/**
 * List of additional shop information links widget.
 * Forms info link list.
 */
class Information extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
{
    /**
     * Current class template name
     *
     * @var string
     */
    protected $_sThisTemplate = 'widget/footer/info';

    /**
     * @var \OxidEsales\Eshop\Application\Model\ContentList
     */
    protected $_oContentList;

    /**
     * Returns service keys.
     *
     * @return array
     */
    public function getServicesKeys()
    {
        $oContentList = $this->getContentList();

        return $oContentList->getServiceKeys();
    }

    /**
     * Get services content list
     *
     * @return \OxidEsales\Eshop\Application\Model\ContentList
     */
    public function getServicesList()
    {
        $oContentList = $this->getContentList();
        $oContentList->loadServices();

        return $oContentList;
    }

    /**
     * Returns content list object.
     *
     * @return \OxidEsales\Eshop\Application\Model\ContentList
     */
    protected function getContentList()
    {
        if (!$this->_oContentList) {
            $this->_oContentList = oxNew(\OxidEsales\Eshop\Application\Model\ContentList::class);
        }

        return $this->_oContentList;
    }
}


================================================
FILE: source/Application/Component/Widget/LanguageList.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component\Widget;

/**
 * Language selection list widget
 */
class LanguageList extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
{
    /**
     * Names of components (classes) that are initiated and executed
     * before any other regular operation.
     * User component used in template.
     *
     * @var array
     */
    protected $_aComponentNames = ['oxcmp_lang' => 0];

    /**
     * Current class template name.
     *
     * @var string
     */
    protected $_sThisTemplate = 'widget/header/languages';
}


================================================
FILE: source/Application/Component/Widget/ManufacturerList.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component\Widget;

/**
 * Manufacturer list widget.
 * Forms Manufacturer list.
 */
class ManufacturerList extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
{
    /**
     * Names of components (classes) that are initiated and executed
     * before any other regular operation.
     * Cartegory component used in template.
     *
     * @var array
     */
    protected $_aComponentNames = ['oxcmp_categories' => 1];

    /**
     * Current class template name.
     *
     * @var string
     */
    protected $_sThisTemplate = 'widget/footer/manufacturerlist';
}


================================================
FILE: source/Application/Component/Widget/MiniBasket.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component\Widget;

/**
 * Mini basket widget
 */
class MiniBasket extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
{
    /**
     * Names of components (classes) that are initiated and executed
     * before any other regular operation.
     * User component used in template.
     *
     * @var array
     */
    protected $_aComponentNames = ['oxcmp_cur' => 1, 'oxcmp_basket' => 1, 'oxcmp_user' => 1];

    /**
     * Current class template name.
     *
     * @var string
     */
    protected $_sThisTemplate = 'widget/header/minibasket';
}


================================================
FILE: source/Application/Component/Widget/Rating.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component\Widget;

/**
 * Product Ratings widget.
 * Forms product ratings.
 */
class Rating extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
{
    /**
     * Names of components (classes) that are initiated and executed
     * before any other regular operation.
     * User component used in template.
     *
     * @var array
     */
    protected $_aComponentNames = ['oxcmp_user' => 1];

    /**
     * Current class template name.
     *
     * @var string
     */
    protected $_sThisTemplate = 'widget/reviews/rating';

    /**
     * Rating value
     *
     * @var double
     */
    protected $_dRatingValue = null;

    /**
     * Rating count
     *
     * @var integer
     */
    protected $_iRatingCnt = null;

    /**
     * Executes parent::render().
     * Returns name of template file to render.
     *
     * @return string current template file name
     */
    public function render()
    {
        parent::render();

        return $this->_sThisTemplate;
    }

    /**
     * Template variable getter. Returns rating value
     *
     * @return double
     */
    public function getRatingValue()
    {
        if ($this->_dRatingValue === null) {
            $this->_dRatingValue = 0.0;
            $dValue = $this->getViewParameter("dRatingValue");
            if ($dValue) {
                $this->_dRatingValue = round($dValue, 1);
            }
        }

        return (float) $this->_dRatingValue;
    }

    /**
     * Template variable getter. Returns rating count
     *
     * @return integer
     */
    public function getRatingCount()
    {
        return $dCount = $this->getViewParameter("dRatingCount");
    }

    /**
     * Template variable getter. Returns rating url
     *
     * @return string
     */
    public function getRateUrl()
    {
        return $this->getViewParameter("sRateUrl");
    }

    /**
     * Template variable getter. Returns rating count
     *
     * @return integer
     */
    public function canRate()
    {
        return $this->getViewParameter("blCanRate");
    }

    /**
     * Template variable getter. Returns article nid
     *
     * @return string
     */
    public function getArticleNId()
    {
        return $this->getViewParameter('anid');
    }
}


================================================
FILE: source/Application/Component/Widget/Recommendation.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component\Widget;

/**
 * Recomendation list.
 * Forms recomendation list.
 *
 * @deprecated since v5.3 (2016-06-17); Listmania will be moved to an own module.
 */
class Recommendation extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
{
    /**
     * Names of components (classes) that are initiated and executed
     * before any other regular operation.
     * User component used in template.
     *
     * @var array
     */
    protected $_aComponentNames = ['oxcmp_cur' => 1];

    /**
     * Current class template name.
     *
     * @var string
     */
    protected $_sThisTemplate = 'widget/sidebar/recommendation';

    /**
     * Returns similar recommendation list.
     *
     * @return array
     */
    public function getSimilarRecommLists()
    {
        $aArticleIds = $this->getViewParameter("aArticleIds");

        $oRecommList = oxNew(\OxidEsales\Eshop\Application\Model\RecommendationList::class);

        return $oRecommList->getRecommListsByIds($aArticleIds);
    }

    /**
     * Return recomm list object.
     *
     * @return object
     */
    public function getRecommList()
    {
        return oxNew(\OxidEsales\Eshop\Application\Controller\RecommListController::class);
    }
}


================================================
FILE: source/Application/Component/Widget/Review.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component\Widget;

/**
 * Product reviews widget
 */
class Review extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
{
    /**
     * Names of components (classes) that are initiated and executed
     * before any other regular operation.
     * User component used in template.
     *
     * @var array
     */
    protected $_aComponentNames = ['oxcmp_user' => 1];

    /**
     * Current class template name.
     *
     * @var string
     */
    protected $_sThisTemplate = 'widget/reviews/reviews';

    /**
     * Executes parent::render().
     * Returns name of template file to render.
     *
     * @return  string  current template file name
     */
    public function render()
    {
        parent::render();

        return $this->_sThisTemplate;
    }

    /**
     * Template variable getter. Returns review type
     *
     * @return string
     */
    public function getReviewType()
    {
        return strtolower($this->getViewParameter('type'));
    }

    /**
     * Template variable getter. Returns article id
     *
     * @return string
     */
    public function getArticleId()
    {
        return $this->getViewParameter('aid');
    }

    /**
     * Template variable getter. Returns article nid
     *
     * @return string
     */
    public function getArticleNId()
    {
        return $this->getViewParameter('anid');
    }

    /**
     * Template variable getter. Returns recommlist id
     *
     * @deprecated since v5.3 (2016-06-17); Listmania will be moved to an own module.
     *
     * @return string
     */
    public function getRecommListId()
    {
        return $this->getViewParameter('recommid');
    }

    /**
     * Template variable getter. Returns whether user can rate
     *
     * @return string
     */
    public function canRate()
    {
        return $this->getViewParameter('canrate');
    }

    /**
     * Template variable getter. Returns review user id
     *
     * @return string
     */
    public function getReviewUserHash()
    {
        return $this->getViewParameter('reviewuserhash');
    }

    /**
     * Template variable getter. Returns active object's reviews from parent class
     *
     * @return array
     */
    public function getReviews()
    {
        $oReview = \OxidEsales\Eshop\Core\Registry::getConfig()->getTopActiveView();

        return $oReview->getReviews();
    }
}


================================================
FILE: source/Application/Component/Widget/ServiceList.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component\Widget;

/**
 * List of shop services widget.
 * Forms service list.
 */
class ServiceList extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
{
    /**
     * Current class template name.
     *
     * @var string
     */
    protected $_sThisTemplate = 'widget/footer/services';
}


================================================
FILE: source/Application/Component/Widget/ServiceMenu.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component\Widget;

/**
 * Recomendation list.
 * Forms recomendation list.
 */
class ServiceMenu extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
{
    /**
     * Names of components (classes) that are initiated and executed
     * before any other regular operation.
     * User component used in template.
     *
     * @var array
     */
    protected $_aComponentNames = ['oxcmp_user' => 1];

    /**
     * Current class template name.
     *
     * @var string
     */
    protected $_sThisTemplate = 'widget/header/servicemenu';

    /**
     * Template variable getter. Returns comparison article list.
     *
     * @param bool $blJson return json encoded array
     *
     * @return array
     */
    public function getCompareItems($blJson = false)
    {
        $oCompare = oxNew(\OxidEsales\Eshop\Application\Controller\CompareController::class);
        $aCompareItems = $oCompare->getCompareItems();

        if ($blJson) {
            $aCompareItems = json_encode($aCompareItems);
        }

        return $aCompareItems;
    }
}


================================================
FILE: source/Application/Component/Widget/VendorList.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component\Widget;

/**
 * Vendor list widget.
 * Forms vendor list.
 */
class VendorList extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
{
    /**
     * Current class template name.
     *
     * @var string
     */
    protected $_sThisTemplate = 'widget/footer/vendorlist';

    /**
     * Template variable getter. Returns vendorlist for search
     *
     * @return array
     */
    public function getVendorlist()
    {
        if ($this->_aVendorlist === null) {
            $oVendorTree = oxNew(\OxidEsales\Eshop\Application\Model\VendorList::class);
            $oVendorTree->buildVendorTree('vendorlist', null, \OxidEsales\Eshop\Core\Registry::getConfig()->getShopHomeUrl());
            $this->_aVendorlist = $oVendorTree;
        }

        return $this->_aVendorlist;
    }
}


================================================
FILE: source/Application/Component/Widget/WidgetController.php
================================================
<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace OxidEsales\EshopCommunity\Application\Component\Widget;

/**
 * Widget parent.
 * Gather functionality needed for all widgets but not for other views.
 */
class WidgetController extends \OxidEsales\Eshop\Application\Controller\FrontendController
{
    /**
     * Names of components (classes) that are initiated and executed
     * before any other regular operation.
     * Widget should rewrite and use only those which  it needs.
     *
     * @var array
     */
    protected $_aComponentNames = [];

    /**
     * If active load components
     * Widgets loads active view components
     *
     * @var array
     */
    protected $_blLoadComponents = false;

    /**
     * Sets self::$_aCollectedComponentNames to null, as views and widgets
     * controllers loads different components and calls parent::init()
     */
    public function init()
    {
        self::$_aCollectedComponentNames = null;

        if (!empty($this->_aComponentNames)) {
            foreach ($this->_aComponentNames as $sComponentName => $sCompCache) {
                $oActTopView = \OxidEsales\Eshop\Core\Registry::getConfig()->getTopActiveView();
                if ($oActTo
Download .txt
gitextract_qqbczboj/

├── .github/
│   ├── oxid-esales/
│   │   ├── install.sh
│   │   └── shop_ce.yaml
│   └── workflows/
│       ├── dispatch-manual.yaml
│       └── trigger.yaml
├── .gitignore
├── CHANGELOG-8.0.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── bin/
│   └── oe-console
├── composer.json
├── phpcs.xml.dist
├── phpunit.xml
├── source/
│   ├── .htaccess
│   ├── Application/
│   │   ├── Component/
│   │   │   ├── BasketComponent.php
│   │   │   ├── CategoriesComponent.php
│   │   │   ├── CurrencyComponent.php
│   │   │   ├── LanguageComponent.php
│   │   │   ├── Locator.php
│   │   │   ├── ShopComponent.php
│   │   │   ├── UserComponent.php
│   │   │   ├── UtilsComponent.php
│   │   │   └── Widget/
│   │   │       ├── Actions.php
│   │   │       ├── ArticleBox.php
│   │   │       ├── ArticleDetails.php
│   │   │       ├── CategoryTree.php
│   │   │       ├── CookieNote.php
│   │   │       ├── CurrencyList.php
│   │   │       ├── Information.php
│   │   │       ├── LanguageList.php
│   │   │       ├── ManufacturerList.php
│   │   │       ├── MiniBasket.php
│   │   │       ├── Rating.php
│   │   │       ├── Recommendation.php
│   │   │       ├── Review.php
│   │   │       ├── ServiceList.php
│   │   │       ├── ServiceMenu.php
│   │   │       ├── VendorList.php
│   │   │       └── WidgetController.php
│   │   ├── Controller/
│   │   │   ├── AccountController.php
│   │   │   ├── AccountDownloadsController.php
│   │   │   ├── AccountNewsletterController.php
│   │   │   ├── AccountNoticeListController.php
│   │   │   ├── AccountOrderController.php
│   │   │   ├── AccountPasswordController.php
│   │   │   ├── AccountRecommlistController.php
│   │   │   ├── AccountReviewController.php
│   │   │   ├── AccountUserController.php
│   │   │   ├── AccountWishlistController.php
│   │   │   ├── Admin/
│   │   │   │   ├── ActionsArticleAjax.php
│   │   │   │   ├── ActionsController.php
│   │   │   │   ├── ActionsGroupsAjax.php
│   │   │   │   ├── ActionsList.php
│   │   │   │   ├── ActionsMain.php
│   │   │   │   ├── ActionsMainAjax.php
│   │   │   │   ├── ActionsOrderAjax.php
│   │   │   │   ├── AdminContent.php
│   │   │   │   ├── AdminController.php
│   │   │   │   ├── AdminDetailsController.php
│   │   │   │   ├── AdminLinks.php
│   │   │   │   ├── AdminListController.php
│   │   │   │   ├── AdminNewsletter.php
│   │   │   │   ├── AdminOrder.php
│   │   │   │   ├── AdminPayment.php
│   │   │   │   ├── AdminPriceAlarm.php
│   │   │   │   ├── AdminStart.php
│   │   │   │   ├── AdminUser.php
│   │   │   │   ├── AdminWrapping.php
│   │   │   │   ├── AdminlinksList.php
│   │   │   │   ├── AdminlinksMain.php
│   │   │   │   ├── ArticleAccessoriesAjax.php
│   │   │   │   ├── ArticleAttribute.php
│   │   │   │   ├── ArticleAttributeAjax.php
│   │   │   │   ├── ArticleBundleAjax.php
│   │   │   │   ├── ArticleController.php
│   │   │   │   ├── ArticleCrossselling.php
│   │   │   │   ├── ArticleCrosssellingAjax.php
│   │   │   │   ├── ArticleExtend.php
│   │   │   │   ├── ArticleExtendAjax.php
│   │   │   │   ├── ArticleFiles.php
│   │   │   │   ├── ArticleList.php
│   │   │   │   ├── ArticleMain.php
│   │   │   │   ├── ArticleOverview.php
│   │   │   │   ├── ArticlePictures.php
│   │   │   │   ├── ArticlePicturesAjax.php
│   │   │   │   ├── ArticleReview.php
│   │   │   │   ├── ArticleSelectionAjax.php
│   │   │   │   ├── ArticleSeo.php
│   │   │   │   ├── ArticleStock.php
│   │   │   │   ├── ArticleUserdef.php
│   │   │   │   ├── ArticleVariant.php
│   │   │   │   ├── AttributeCategory.php
│   │   │   │   ├── AttributeCategoryAjax.php
│   │   │   │   ├── AttributeController.php
│   │   │   │   ├── AttributeList.php
│   │   │   │   ├── AttributeMain.php
│   │   │   │   ├── AttributeMainAjax.php
│   │   │   │   ├── AttributeOrderAjax.php
│   │   │   │   ├── CategoryController.php
│   │   │   │   ├── CategoryList.php
│   │   │   │   ├── CategoryMain.php
│   │   │   │   ├── CategoryMainAjax.php
│   │   │   │   ├── CategoryOrder.php
│   │   │   │   ├── CategoryOrderAjax.php
│   │   │   │   ├── CategoryPictures.php
│   │   │   │   ├── CategorySeo.php
│   │   │   │   ├── CategoryText.php
│   │   │   │   ├── CategoryUpdate.php
│   │   │   │   ├── ContentList.php
│   │   │   │   ├── ContentMain.php
│   │   │   │   ├── ContentSeo.php
│   │   │   │   ├── CountryController.php
│   │   │   │   ├── CountryList.php
│   │   │   │   ├── CountryMain.php
│   │   │   │   ├── DeliveryArticles.php
│   │   │   │   ├── DeliveryArticlesAjax.php
│   │   │   │   ├── DeliveryCategoriesAjax.php
│   │   │   │   ├── DeliveryController.php
│   │   │   │   ├── DeliveryGroupsAjax.php
│   │   │   │   ├── DeliveryList.php
│   │   │   │   ├── DeliveryMain.php
│   │   │   │   ├── DeliveryMainAjax.php
│   │   │   │   ├── DeliverySetController.php
│   │   │   │   ├── DeliverySetCountryAjax.php
│   │   │   │   ├── DeliverySetGroupsAjax.php
│   │   │   │   ├── DeliverySetList.php
│   │   │   │   ├── DeliverySetMain.php
│   │   │   │   ├── DeliverySetMainAjax.php
│   │   │   │   ├── DeliverySetPayment.php
│   │   │   │   ├── DeliverySetPaymentAjax.php
│   │   │   │   ├── DeliverySetRdfa.php
│   │   │   │   ├── DeliverySetUsers.php
│   │   │   │   ├── DeliverySetUsersAjax.php
│   │   │   │   ├── DeliveryUsers.php
│   │   │   │   ├── DeliveryUsersAjax.php
│   │   │   │   ├── DiagnosticsController.php
│   │   │   │   ├── DiagnosticsList.php
│   │   │   │   ├── DiagnosticsMain.php
│   │   │   │   ├── DiscountArticles.php
│   │   │   │   ├── DiscountArticlesAjax.php
│   │   │   │   ├── DiscountCategoriesAjax.php
│   │   │   │   ├── DiscountController.php
│   │   │   │   ├── DiscountGroupsAjax.php
│   │   │   │   ├── DiscountItemAjax.php
│   │   │   │   ├── DiscountList.php
│   │   │   │   ├── DiscountMain.php
│   │   │   │   ├── DiscountMainAjax.php
│   │   │   │   ├── DiscountUsers.php
│   │   │   │   ├── DiscountUsersAjax.php
│   │   │   │   ├── DynamicExportBaseController.php
│   │   │   │   ├── GenericExport.php
│   │   │   │   ├── GenericExportDo.php
│   │   │   │   ├── GenericExportMain.php
│   │   │   │   ├── GenericImport.php
│   │   │   │   ├── GenericImportMain.php
│   │   │   │   ├── LanguageController.php
│   │   │   │   ├── LanguageList.php
│   │   │   │   ├── LanguageMain.php
│   │   │   │   ├── ListComponentAjax.php
│   │   │   │   ├── ListReview.php
│   │   │   │   ├── ListUser.php
│   │   │   │   ├── LoginController.php
│   │   │   │   ├── ManufacturerController.php
│   │   │   │   ├── ManufacturerList.php
│   │   │   │   ├── ManufacturerMain.php
│   │   │   │   ├── ManufacturerMainAjax.php
│   │   │   │   ├── ManufacturerPicture.php
│   │   │   │   ├── ManufacturerSeo.php
│   │   │   │   ├── ModuleConfiguration.php
│   │   │   │   ├── ModuleController.php
│   │   │   │   ├── ModuleList.php
│   │   │   │   ├── ModuleMain.php
│   │   │   │   ├── ModuleSortList.php
│   │   │   │   ├── NavigationController.php
│   │   │   │   ├── NavigationTree.php
│   │   │   │   ├── ObjectSeo.php
│   │   │   │   ├── OrderAddress.php
│   │   │   │   ├── OrderArticle.php
│   │   │   │   ├── OrderDownloads.php
│   │   │   │   ├── OrderList.php
│   │   │   │   ├── OrderMain.php
│   │   │   │   ├── OrderOverview.php
│   │   │   │   ├── OrderRemark.php
│   │   │   │   ├── PaymentCountry.php
│   │   │   │   ├── PaymentCountryAjax.php
│   │   │   │   ├── PaymentList.php
│   │   │   │   ├── PaymentMain.php
│   │   │   │   ├── PaymentMainAjax.php
│   │   │   │   ├── PaymentRdfa.php
│   │   │   │   ├── PriceAlarmList.php
│   │   │   │   ├── PriceAlarmMail.php
│   │   │   │   ├── PriceAlarmMain.php
│   │   │   │   ├── PriceAlarmSend.php
│   │   │   │   ├── SelectListController.php
│   │   │   │   ├── SelectListList.php
│   │   │   │   ├── SelectListMain.php
│   │   │   │   ├── SelectListMainAjax.php
│   │   │   │   ├── SelectListOrderAjax.php
│   │   │   │   ├── ShopConfiguration.php
│   │   │   │   ├── ShopController.php
│   │   │   │   ├── ShopCountries.php
│   │   │   │   ├── ShopDefaultCategoryAjax.php
│   │   │   │   ├── ShopLicense.php
│   │   │   │   ├── ShopList.php
│   │   │   │   ├── ShopMain.php
│   │   │   │   ├── ShopPerformance.php
│   │   │   │   ├── ShopRdfa.php
│   │   │   │   ├── ShopSeo.php
│   │   │   │   ├── ShopSystem.php
│   │   │   │   ├── SystemInfoController.php
│   │   │   │   ├── SystemRequirements.php
│   │   │   │   ├── SystemRequirementsList.php
│   │   │   │   ├── SystemRequirementsMain.php
│   │   │   │   ├── ThemeConfiguration.php
│   │   │   │   ├── ThemeController.php
│   │   │   │   ├── ThemeList.php
│   │   │   │   ├── ThemeMain.php
│   │   │   │   ├── ToolsController.php
│   │   │   │   ├── ToolsList.php
│   │   │   │   ├── ToolsMain.php
│   │   │   │   ├── UserAddress.php
│   │   │   │   ├── UserArticle.php
│   │   │   │   ├── UserExtend.php
│   │   │   │   ├── UserGroupController.php
│   │   │   │   ├── UserGroupList.php
│   │   │   │   ├── UserGroupMain.php
│   │   │   │   ├── UserGroupMainAjax.php
│   │   │   │   ├── UserList.php
│   │   │   │   ├── UserMain.php
│   │   │   │   ├── UserMainAjax.php
│   │   │   │   ├── UserOverview.php
│   │   │   │   ├── UserPayment.php
│   │   │   │   ├── UserRemark.php
│   │   │   │   ├── VendorController.php
│   │   │   │   ├── VendorList.php
│   │   │   │   ├── VendorMain.php
│   │   │   │   ├── VendorMainAjax.php
│   │   │   │   ├── VendorSeo.php
│   │   │   │   ├── VoucherSerieController.php
│   │   │   │   ├── VoucherSerieExport.php
│   │   │   │   ├── VoucherSerieGenerate.php
│   │   │   │   ├── VoucherSerieGroups.php
│   │   │   │   ├── VoucherSerieGroupsAjax.php
│   │   │   │   ├── VoucherSerieList.php
│   │   │   │   ├── VoucherSerieMain.php
│   │   │   │   ├── WrappingList.php
│   │   │   │   └── WrappingMain.php
│   │   │   ├── ArticleDetailsController.php
│   │   │   ├── ArticleListController.php
│   │   │   ├── BasketController.php
│   │   │   ├── ClearCookiesController.php
│   │   │   ├── CompareController.php
│   │   │   ├── ContactController.php
│   │   │   ├── ContentController.php
│   │   │   ├── CreditsController.php
│   │   │   ├── DownloadController.php
│   │   │   ├── ExceptionErrorController.php
│   │   │   ├── ForgotPasswordController.php
│   │   │   ├── FrontendController.php
│   │   │   ├── LinksController.php
│   │   │   ├── ManufacturerListController.php
│   │   │   ├── MoreDetailsController.php
│   │   │   ├── NewsletterController.php
│   │   │   ├── OrderController.php
│   │   │   ├── OxidStartController.php
│   │   │   ├── PaymentController.php
│   │   │   ├── PriceAlarmController.php
│   │   │   ├── RecommListController.php
│   │   │   ├── RecommendationAddController.php
│   │   │   ├── RegisterController.php
│   │   │   ├── ReviewController.php
│   │   │   ├── SearchController.php
│   │   │   ├── StartController.php
│   │   │   ├── TemplateController.php
│   │   │   ├── TextEditorHandler.php
│   │   │   ├── ThankYouController.php
│   │   │   ├── UserController.php
│   │   │   ├── VendorListController.php
│   │   │   ├── WishListController.php
│   │   │   └── WrappingController.php
│   │   ├── Enum/
│   │   │   ├── NewsletterSubscriptionStatus.php
│   │   │   └── SubscriptionOptedInStatus.php
│   │   ├── Model/
│   │   │   ├── ActionList.php
│   │   │   ├── Actions.php
│   │   │   ├── Address.php
│   │   │   ├── AmountPriceList.php
│   │   │   ├── Article.php
│   │   │   ├── ArticleList.php
│   │   │   ├── Attribute.php
│   │   │   ├── AttributeList.php
│   │   │   ├── Basket.php
│   │   │   ├── BasketContentMarkGenerator.php
│   │   │   ├── BasketItem.php
│   │   │   ├── BasketReservation.php
│   │   │   ├── Category.php
│   │   │   ├── CategoryList.php
│   │   │   ├── CompanyVatIn.php
│   │   │   ├── Content.php
│   │   │   ├── ContentList.php
│   │   │   ├── Contract/
│   │   │   │   └── ArticleInterface.php
│   │   │   ├── Country.php
│   │   │   ├── CountryList.php
│   │   │   ├── Delivery.php
│   │   │   ├── DeliveryList.php
│   │   │   ├── DeliverySet.php
│   │   │   ├── DeliverySetList.php
│   │   │   ├── Diagnostics.php
│   │   │   ├── DiagnosticsOutput.php
│   │   │   ├── Discount.php
│   │   │   ├── DiscountList.php
│   │   │   ├── File.php
│   │   │   ├── FileCollector.php
│   │   │   ├── Groups.php
│   │   │   ├── Links.php
│   │   │   ├── ListObject.php
│   │   │   ├── Maintenance.php
│   │   │   ├── Manufacturer.php
│   │   │   ├── ManufacturerList.php
│   │   │   ├── MdVariant.php
│   │   │   ├── MediaUrl.php
│   │   │   ├── NewsSubscribed.php
│   │   │   ├── Object2Category.php
│   │   │   ├── Object2Group.php
│   │   │   ├── Order.php
│   │   │   ├── OrderArticle.php
│   │   │   ├── OrderArticleList.php
│   │   │   ├── OrderFile.php
│   │   │   ├── OrderFileList.php
│   │   │   ├── Payment.php
│   │   │   ├── PaymentGateway.php
│   │   │   ├── PaymentList.php
│   │   │   ├── PriceAlarm.php
│   │   │   ├── Rating.php
│   │   │   ├── RecommendationList.php
│   │   │   ├── Remark.php
│   │   │   ├── RequiredAddressFields.php
│   │   │   ├── RequiredFieldValidator.php
│   │   │   ├── RequiredFieldsValidator.php
│   │   │   ├── Review.php
│   │   │   ├── Search.php
│   │   │   ├── SelectList.php
│   │   │   ├── Selection.php
│   │   │   ├── SeoEncoderArticle.php
│   │   │   ├── SeoEncoderCategory.php
│   │   │   ├── SeoEncoderContent.php
│   │   │   ├── SeoEncoderManufacturer.php
│   │   │   ├── SeoEncoderRecomm.php
│   │   │   ├── SeoEncoderVendor.php
│   │   │   ├── Shop.php
│   │   │   ├── ShopList.php
│   │   │   ├── ShopViewValidator.php
│   │   │   ├── SimpleVariant.php
│   │   │   ├── SimpleVariantList.php
│   │   │   ├── State.php
│   │   │   ├── User/
│   │   │   │   ├── UserShippingAddressUpdatableFields.php
│   │   │   │   └── UserUpdatableFields.php
│   │   │   ├── User.php
│   │   │   ├── UserAddressList.php
│   │   │   ├── UserBasket.php
│   │   │   ├── UserBasketItem.php
│   │   │   ├── UserList.php
│   │   │   ├── UserPayment.php
│   │   │   ├── VariantHandler.php
│   │   │   ├── VariantSelectList.php
│   │   │   ├── VatSelector.php
│   │   │   ├── Vendor.php
│   │   │   ├── VendorList.php
│   │   │   ├── Voucher.php
│   │   │   ├── VoucherList.php
│   │   │   ├── VoucherSerie.php
│   │   │   └── Wrapping.php
│   │   └── translations/
│   │       ├── de/
│   │       │   ├── cust_lang.php.dist
│   │       │   ├── lang.php
│   │       │   └── translit_lang.php
│   │       └── en/
│   │           ├── cust_lang.php.dist
│   │           ├── lang.php
│   │           └── translit_lang.php
│   ├── Core/
│   │   ├── AdminLogSqlDecorator.php
│   │   ├── Autoload/
│   │   │   ├── BackwardsCompatibilityAutoload.php
│   │   │   ├── BackwardsCompatibilityClassMap.php
│   │   │   ├── BackwardsCompatibilityClassMapProvider.php
│   │   │   ├── ModuleAutoload.php
│   │   │   └── UnifiedNameSpaceClassMap.php
│   │   ├── BackwardsCompatibleClassNameProvider.php
│   │   ├── Base.php
│   │   ├── CompanyVatInChecker.php
│   │   ├── CompanyVatInCountryChecker.php
│   │   ├── CompanyVatInValidator.php
│   │   ├── Config.php
│   │   ├── Contract/
│   │   │   ├── AbstractUpdatableFields.php
│   │   │   ├── ClassNameResolverInterface.php
│   │   │   ├── ControllerMapProviderInterface.php
│   │   │   ├── IConfigurable.php
│   │   │   ├── ICountryAware.php
│   │   │   ├── IDisplayError.php
│   │   │   ├── ISelectList.php
│   │   │   └── IUrl.php
│   │   ├── Controller/
│   │   │   └── BaseController.php
│   │   ├── Counter.php
│   │   ├── Curl.php
│   │   ├── Dao/
│   │   │   ├── ApplicationServerDao.php
│   │   │   ├── ApplicationServerDaoInterface.php
│   │   │   └── BaseDaoInterface.php
│   │   ├── DataObject/
│   │   │   └── ApplicationServer.php
│   │   ├── Database/
│   │   │   └── Adapter/
│   │   │       ├── DatabaseInterface.php
│   │   │       ├── Doctrine/
│   │   │       │   ├── Database.php
│   │   │       │   └── ResultSet.php
│   │   │       └── ResultSetInterface.php
│   │   ├── DatabaseProvider.php
│   │   ├── DbMetaDataHandler.php
│   │   ├── DebugInfo.php
│   │   ├── Decryptor.php
│   │   ├── Di/
│   │   │   └── ContainerFacade.php
│   │   ├── DisplayError.php
│   │   ├── DynamicImageGenerator.php
│   │   ├── Email.php
│   │   ├── EmailBuilder.php
│   │   ├── Encryptor.php
│   │   ├── Exception/
│   │   │   ├── ArticleException.php
│   │   │   ├── ArticleInputException.php
│   │   │   ├── ConnectionException.php
│   │   │   ├── CookieException.php
│   │   │   ├── DatabaseConnectionException.php
│   │   │   ├── DatabaseErrorException.php
│   │   │   ├── DatabaseException.php
│   │   │   ├── ExceptionHandler.php
│   │   │   ├── ExceptionToDisplay.php
│   │   │   ├── FileException.php
│   │   │   ├── InputException.php
│   │   │   ├── LanguageNotFoundException.php
│   │   │   ├── ModuleValidationException.php
│   │   │   ├── NoArticleException.php
│   │   │   ├── NoResultException.php
│   │   │   ├── ObjectException.php
│   │   │   ├── OutOfStockException.php
│   │   │   ├── RoutingException.php
│   │   │   ├── ShopException.php
│   │   │   ├── StandardException.php
│   │   │   ├── SystemComponentException.php
│   │   │   ├── UserException.php
│   │   │   └── VoucherException.php
│   │   ├── Field.php
│   │   ├── FileSystem/
│   │   │   └── FileSystem.php
│   │   ├── Form/
│   │   │   ├── FormFields.php
│   │   │   ├── FormFieldsCleaner.php
│   │   │   ├── FormFieldsTrimmer.php
│   │   │   ├── FormFieldsTrimmerInterface.php
│   │   │   └── UpdatableFieldsConstructor.php
│   │   ├── GenericImport/
│   │   │   ├── GenericImport.php
│   │   │   └── ImportObject/
│   │   │       ├── Accessories2Article.php
│   │   │       ├── Article.php
│   │   │       ├── Article2Action.php
│   │   │       ├── Article2Category.php
│   │   │       ├── ArticleExtends.php
│   │   │       ├── Category.php
│   │   │       ├── Country.php
│   │   │       ├── CrossSelling.php
│   │   │       ├── ImportObject.php
│   │   │       ├── Order.php
│   │   │       ├── OrderArticle.php
│   │   │       ├── ScalePrice.php
│   │   │       ├── User.php
│   │   │       └── Vendor.php
│   │   ├── Hasher.php
│   │   ├── Header.php
│   │   ├── InputValidator.php
│   │   ├── Language.php
│   │   ├── Model/
│   │   │   ├── BaseModel.php
│   │   │   ├── FieldNameHelper.php
│   │   │   ├── ListModel.php
│   │   │   └── MultiLanguageModel.php
│   │   ├── Module/
│   │   │   ├── Module.php
│   │   │   ├── ModuleChainsGenerator.php
│   │   │   └── ModuleList.php
│   │   ├── NamespaceInformationProvider.php
│   │   ├── NoJsValidator.php
│   │   ├── OnlineCaller.php
│   │   ├── OnlineLicenseCheck.php
│   │   ├── OnlineLicenseCheckCaller.php
│   │   ├── OnlineLicenseCheckRequest.php
│   │   ├── OnlineLicenseCheckResponse.php
│   │   ├── OnlineModuleVersionNotifier.php
│   │   ├── OnlineModuleVersionNotifierCaller.php
│   │   ├── OnlineModulesNotifierRequest.php
│   │   ├── OnlineRequest.php
│   │   ├── OnlineServerEmailBuilder.php
│   │   ├── OnlineVatIdCheck.php
│   │   ├── OpenSSLFunctionalityChecker.php
│   │   ├── Output.php
│   │   ├── Oxid.php
│   │   ├── PasswordHasher.php
│   │   ├── PictureHandler.php
│   │   ├── Price.php
│   │   ├── PriceList.php
│   │   ├── Registry.php
│   │   ├── Request.php
│   │   ├── Routing/
│   │   │   ├── ControllerClassNameResolver.php
│   │   │   └── ShopControllerMapProvider.php
│   │   ├── SeoDecoder.php
│   │   ├── SeoEncoder.php
│   │   ├── SepaBICValidator.php
│   │   ├── SepaIBANValidator.php
│   │   ├── SepaValidator.php
│   │   ├── Service/
│   │   │   ├── ApplicationServerExporter.php
│   │   │   ├── ApplicationServerExporterInterface.php
│   │   │   ├── ApplicationServerService.php
│   │   │   └── ApplicationServerServiceInterface.php
│   │   ├── Session.php
│   │   ├── SettingsHandler.php
│   │   ├── Sha512Hasher.php
│   │   ├── ShopControl.php
│   │   ├── ShopIdCalculator.php
│   │   ├── ShopVersion.php
│   │   ├── SimpleXml.php
│   │   ├── SortingValidator.php
│   │   ├── Str.php
│   │   ├── StrMb.php
│   │   ├── StrRegular.php
│   │   ├── SystemEventHandler.php
│   │   ├── SystemRequirements.php
│   │   ├── TableViewNameGenerator.php
│   │   ├── Theme.php
│   │   ├── UniversallyUniqueIdGenerator.php
│   │   ├── UserCounter.php
│   │   ├── Utils.php
│   │   ├── UtilsCount.php
│   │   ├── UtilsDate.php
│   │   ├── UtilsFile.php
│   │   ├── UtilsObject.php
│   │   ├── UtilsPic.php
│   │   ├── UtilsServer.php
│   │   ├── UtilsString.php
│   │   ├── UtilsUrl.php
│   │   ├── UtilsView.php
│   │   ├── UtilsXml.php
│   │   ├── ViewConfig.php
│   │   ├── ViewHelper/
│   │   │   ├── BaseRegistrator.php
│   │   │   ├── JavaScriptRegistrator.php
│   │   │   ├── JavaScriptRenderer.php
│   │   │   ├── StyleRegistrator.php
│   │   │   └── StyleRenderer.php
│   │   ├── WidgetControl.php
│   │   └── utils/
│   │       └── oxpicgenerator.php
│   ├── Internal/
│   │   ├── Container/
│   │   │   ├── BootstrapContainerBuilder.php
│   │   │   ├── BootstrapContainerFactory.php
│   │   │   ├── ContainerFactory.php
│   │   │   ├── ContainerProviderInterface.php
│   │   │   ├── Event/
│   │   │   │   └── ConfigurationChangedEventSubscriber.php
│   │   │   ├── bootstrap-services.yaml
│   │   │   └── services.yaml
│   │   ├── Domain/
│   │   │   ├── Admin/
│   │   │   │   ├── Command/
│   │   │   │   │   ├── CreateUserCommand.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Dao/
│   │   │   │   │   ├── AdminDao.php
│   │   │   │   │   ├── AdminDaoInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── DataObject/
│   │   │   │   │   └── Admin.php
│   │   │   │   ├── Event/
│   │   │   │   │   └── AdminModeChangedEvent.php
│   │   │   │   ├── Exception/
│   │   │   │   │   ├── EmailAlreadyTakenException.php
│   │   │   │   │   ├── InvalidEmailException.php
│   │   │   │   │   ├── InvalidRightsException.php
│   │   │   │   │   └── InvalidShopException.php
│   │   │   │   ├── Factory/
│   │   │   │   │   ├── AdminFactory.php
│   │   │   │   │   ├── AdminFactoryInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Service/
│   │   │   │   │   ├── AdminUserService.php
│   │   │   │   │   ├── AdminUserServiceInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   └── services.yaml
│   │   │   ├── Authentication/
│   │   │   │   ├── Bridge/
│   │   │   │   │   ├── PasswordServiceBridge.php
│   │   │   │   │   ├── PasswordServiceBridgeInterface.php
│   │   │   │   │   ├── RandomTokenGeneratorBridge.php
│   │   │   │   │   └── RandomTokenGeneratorBridgeInterface.php
│   │   │   │   ├── Exception/
│   │   │   │   │   └── UnavailableSourceOfRandomnessException.php
│   │   │   │   ├── Generator/
│   │   │   │   │   ├── RandomTokenGenerator.php
│   │   │   │   │   └── RandomTokenGeneratorInterface.php
│   │   │   │   ├── Service/
│   │   │   │   │   ├── PasswordVerificationService.php
│   │   │   │   │   └── PasswordVerificationServiceInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Contact/
│   │   │   │   ├── Form/
│   │   │   │   │   ├── ContactFormBridge.php
│   │   │   │   │   ├── ContactFormBridgeInterface.php
│   │   │   │   │   ├── ContactFormConfigurationFactory.php
│   │   │   │   │   ├── ContactFormEmailValidator.php
│   │   │   │   │   ├── ContactFormFactory.php
│   │   │   │   │   ├── ContactFormFieldsConfigurationDataProvider.php
│   │   │   │   │   ├── ContactFormMessageBuilder.php
│   │   │   │   │   └── ContactFormMessageBuilderInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Media/
│   │   │   │   ├── Dao/
│   │   │   │   │   ├── MediaDao.php
│   │   │   │   │   └── MediaDaoInterface.php
│   │   │   │   ├── DataMapper/
│   │   │   │   │   ├── DataMapper.php
│   │   │   │   │   └── DataMapperInterface.php
│   │   │   │   ├── DataObject/
│   │   │   │   │   ├── Media.php
│   │   │   │   │   ├── MediaPath.php
│   │   │   │   │   └── MediaType.php
│   │   │   │   ├── MediaUploader.php
│   │   │   │   ├── MediaUploaderInterface.php
│   │   │   │   ├── MediaUrlGenerator.php
│   │   │   │   ├── MediaUrlGeneratorInterface.php
│   │   │   │   ├── Validator/
│   │   │   │   │   ├── Exception/
│   │   │   │   │   │   ├── FileExtensionMismatchException.php
│   │   │   │   │   │   ├── FileSizeTooLargeException.php
│   │   │   │   │   │   ├── FileSizeTooSmallException.php
│   │   │   │   │   │   ├── MediaValidationException.php
│   │   │   │   │   │   ├── MimeBaseTypeMismatchException.php
│   │   │   │   │   │   ├── MimeGuessMismatchException.php
│   │   │   │   │   │   ├── MimeTypeGuessFailedException.php
│   │   │   │   │   │   └── UploadInvalidException.php
│   │   │   │   │   ├── FileExtensionConstraintValidator.php
│   │   │   │   │   ├── FileSizeConstraintValidator.php
│   │   │   │   │   ├── MediaConstraintValidatorInterface.php
│   │   │   │   │   ├── MimeTypeConstraintValidator.php
│   │   │   │   │   └── UploadValidityConstraintValidator.php
│   │   │   │   └── services.yaml
│   │   │   ├── Newsletter/
│   │   │   │   ├── Bridge/
│   │   │   │   │   ├── NewsletterRecipientsDaoBridge.php
│   │   │   │   │   └── NewsletterRecipientsDaoBridgeInterface.php
│   │   │   │   ├── Dao/
│   │   │   │   │   ├── NewsletterRecipientsDao.php
│   │   │   │   │   └── NewsletterRecipientsDaoInterface.php
│   │   │   │   ├── DataMapper/
│   │   │   │   │   ├── NewsletterRecipientsDataMapper.php
│   │   │   │   │   └── NewsletterRecipientsDataMapperInterface.php
│   │   │   │   ├── DataObject/
│   │   │   │   │   └── NewsletterRecipient.php
│   │   │   │   └── services.yaml
│   │   │   ├── Product/
│   │   │   │   ├── Media/
│   │   │   │   │   ├── Dao/
│   │   │   │   │   │   ├── ProductMediaDao.php
│   │   │   │   │   │   └── ProductMediaDaoInterface.php
│   │   │   │   │   ├── DataMapper/
│   │   │   │   │   │   ├── DataMapper.php
│   │   │   │   │   │   └── DataMapperInterface.php
│   │   │   │   │   ├── DataObject/
│   │   │   │   │   │   ├── ProductMedia.php
│   │   │   │   │   │   ├── ProductMediaRole.php
│   │   │   │   │   │   ├── ProductMediaRoleSet.php
│   │   │   │   │   │   ├── ProductMediaSorting.php
│   │   │   │   │   │   └── ProductMediaView.php
│   │   │   │   │   ├── Exception/
│   │   │   │   │   │   └── EmptyProductMediaRoleException.php
│   │   │   │   │   ├── Factory/
│   │   │   │   │   │   ├── ProductMediaFactory.php
│   │   │   │   │   │   └── ProductMediaFactoryInterface.php
│   │   │   │   │   ├── Service/
│   │   │   │   │   │   ├── ProductMediaPathResolver.php
│   │   │   │   │   │   ├── ProductMediaPathResolverInterface.php
│   │   │   │   │   │   ├── ProductMediaService.php
│   │   │   │   │   │   ├── ProductMediaServiceInterface.php
│   │   │   │   │   │   ├── ProductMediaUploadProcessor.php
│   │   │   │   │   │   ├── ProductMediaUploadProcessorInterface.php
│   │   │   │   │   │   ├── ProductMediaViewService.php
│   │   │   │   │   │   ├── ProductMediaViewServiceInterface.php
│   │   │   │   │   │   ├── ProductVariantMediaService.php
│   │   │   │   │   │   └── ProductVariantMediaServiceInterface.php
│   │   │   │   │   ├── Validator/
│   │   │   │   │   │   └── ProductMediaValidator.php
│   │   │   │   │   ├── parameters.yaml
│   │   │   │   │   └── services.yaml
│   │   │   │   └── Search/
│   │   │   │       ├── Event/
│   │   │   │       │   ├── AfterProductSearchEvent.php
│   │   │   │       │   └── BeforeProductSearchEvent.php
│   │   │   │       ├── ProductSearchCriteria.php
│   │   │   │       ├── ProductSearchException.php
│   │   │   │       ├── ProductSearchResult.php
│   │   │   │       ├── ProductSearchServiceInterface.php
│   │   │   │       ├── parameters.yaml
│   │   │   │       └── services.yaml
│   │   │   ├── Review/
│   │   │   │   ├── Bridge/
│   │   │   │   │   ├── ProductRatingBridge.php
│   │   │   │   │   ├── ProductRatingBridgeInterface.php
│   │   │   │   │   ├── UserRatingBridge.php
│   │   │   │   │   ├── UserRatingBridgeInterface.php
│   │   │   │   │   ├── UserReviewAndRatingBridge.php
│   │   │   │   │   ├── UserReviewAndRatingBridgeInterface.php
│   │   │   │   │   ├── UserReviewBridge.php
│   │   │   │   │   ├── UserReviewBridgeInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Dao/
│   │   │   │   │   ├── ProductRatingDao.php
│   │   │   │   │   ├── ProductRatingDaoInterface.php
│   │   │   │   │   ├── RatingDao.php
│   │   │   │   │   ├── RatingDaoInterface.php
│   │   │   │   │   ├── ReviewDao.php
│   │   │   │   │   ├── ReviewDaoInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── DataMapper/
│   │   │   │   │   ├── ProductRatingDataMapper.php
│   │   │   │   │   ├── ProductRatingDataMapperInterface.php
│   │   │   │   │   ├── RatingDataMapper.php
│   │   │   │   │   ├── RatingDataMapperInterface.php
│   │   │   │   │   ├── ReviewDataMapper.php
│   │   │   │   │   ├── ReviewDataMapperInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── DataObject/
│   │   │   │   │   ├── ProductRating.php
│   │   │   │   │   ├── Rating.php
│   │   │   │   │   └── Review.php
│   │   │   │   ├── Exception/
│   │   │   │   │   ├── RatingPermissionException.php
│   │   │   │   │   ├── ReviewAndRatingObjectTypeException.php
│   │   │   │   │   └── ReviewPermissionException.php
│   │   │   │   ├── Service/
│   │   │   │   │   ├── ProductRatingService.php
│   │   │   │   │   ├── ProductRatingServiceInterface.php
│   │   │   │   │   ├── RatingCalculatorService.php
│   │   │   │   │   ├── RatingCalculatorServiceInterface.php
│   │   │   │   │   ├── ReviewAndRatingMergingService.php
│   │   │   │   │   ├── ReviewAndRatingMergingServiceInterface.php
│   │   │   │   │   ├── UserRatingService.php
│   │   │   │   │   ├── UserRatingServiceInterface.php
│   │   │   │   │   ├── UserReviewAndRatingService.php
│   │   │   │   │   ├── UserReviewAndRatingServiceInterface.php
│   │   │   │   │   ├── UserReviewService.php
│   │   │   │   │   ├── UserReviewServiceInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── ViewDataObject/
│   │   │   │   │   └── ReviewAndRating.php
│   │   │   │   └── services.yaml
│   │   │   ├── parameter.yaml
│   │   │   └── services.yaml
│   │   ├── Framework/
│   │   │   ├── Api/
│   │   │   │   ├── Api.php
│   │   │   │   ├── AttributeRouteControllerLoader.php
│   │   │   │   ├── ExceptionHandler.php
│   │   │   │   ├── HttpExceptionListener.php
│   │   │   │   └── services.yaml
│   │   │   ├── Cache/
│   │   │   │   ├── Adapter/
│   │   │   │   │   ├── FilesystemTagAwareAdapterFactory.php
│   │   │   │   │   ├── TagAwareAdapterFactoryInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Command/
│   │   │   │   │   ├── ClearCacheCommand.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Event/
│   │   │   │   │   └── ClearShopCacheEvent.php
│   │   │   │   ├── ShopCacheCleanerInterface.php
│   │   │   │   ├── ShopCacheFacade.php
│   │   │   │   └── services.yaml
│   │   │   ├── Config/
│   │   │   │   ├── Dao/
│   │   │   │   │   ├── ShopConfigurationSettingDao.php
│   │   │   │   │   └── ShopConfigurationSettingDaoInterface.php
│   │   │   │   ├── DataObject/
│   │   │   │   │   ├── ShopConfigurationSetting.php
│   │   │   │   │   └── ShopSettingType.php
│   │   │   │   ├── Event/
│   │   │   │   │   └── ShopConfigurationChangedEvent.php
│   │   │   │   ├── Exception/
│   │   │   │   │   └── InvalidShopSettingValueException.php
│   │   │   │   └── Utility/
│   │   │   │       ├── ShopSettingEncoder.php
│   │   │   │       └── ShopSettingEncoderInterface.php
│   │   │   ├── Console/
│   │   │   │   └── services.yaml
│   │   │   ├── Controller/
│   │   │   │   ├── AbstractControllerDecorator.php
│   │   │   │   └── ViewControllerInterface.php
│   │   │   ├── DIContainer/
│   │   │   │   ├── CompilerPass/
│   │   │   │   │   ├── RoutePass.php
│   │   │   │   │   └── ViewControllerPass.php
│   │   │   │   ├── ContainerBuilder.php
│   │   │   │   ├── Dao/
│   │   │   │   │   ├── ContainerAwareProjectYamlDao.php
│   │   │   │   │   ├── ParameterDao.php
│   │   │   │   │   ├── ParameterDaoInterface.php
│   │   │   │   │   ├── ProjectYamlDao.php
│   │   │   │   │   ├── ProjectYamlDaoInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── DataObject/
│   │   │   │   │   └── DIConfigWrapper.php
│   │   │   │   ├── Event/
│   │   │   │   │   └── ProjectYamlChangedEvent.php
│   │   │   │   ├── Exception/
│   │   │   │   │   ├── MissingServiceException.php
│   │   │   │   │   ├── MissingUpdateCallException.php
│   │   │   │   │   ├── NoServiceYamlException.php
│   │   │   │   │   └── SystemServiceOverwriteException.php
│   │   │   │   ├── Service/
│   │   │   │   │   ├── ContainerCacheInterface.php
│   │   │   │   │   ├── FilesystemContainerCache.php
│   │   │   │   │   ├── ProjectYamlImportService.php
│   │   │   │   │   ├── ProjectYamlImportServiceInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   └── services.yaml
│   │   │   ├── Dao/
│   │   │   │   ├── EntryDoesNotExistDaoException.php
│   │   │   │   └── InvalidObjectIdDaoException.php
│   │   │   ├── Database/
│   │   │   │   ├── Configuration/
│   │   │   │   │   ├── DataObject/
│   │   │   │   │   │   └── DatabaseConfiguration.php
│   │   │   │   │   └── InvalidDatabaseConfigurationException.php
│   │   │   │   ├── ConnectionFactory.php
│   │   │   │   ├── ConnectionFactoryInterface.php
│   │   │   │   ├── ConnectionParameterProvider.php
│   │   │   │   ├── ConnectionParameterProviderInterface.php
│   │   │   │   ├── Id.php
│   │   │   │   ├── Logger/
│   │   │   │   │   ├── QueryLogContextExtender.php
│   │   │   │   │   ├── QueryLogContextExtenderInterface.php
│   │   │   │   │   ├── QueryLogFilter.php
│   │   │   │   │   ├── QueryLogFilterInterface.php
│   │   │   │   │   ├── QueryLogger.php
│   │   │   │   │   ├── QueryLoggerFactory.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── QueryBuilderFactory.php
│   │   │   │   ├── QueryBuilderFactoryInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Edition/
│   │   │   │   ├── Edition.php
│   │   │   │   ├── EditionDirectoriesLocator.php
│   │   │   │   ├── EditionPaths.php
│   │   │   │   └── EditionResolver.php
│   │   │   ├── Env/
│   │   │   │   ├── DotenvLoader.php
│   │   │   │   └── EnvUrlFormatter.php
│   │   │   ├── Event/
│   │   │   │   └── services.yaml
│   │   │   ├── FileSystem/
│   │   │   │   ├── Bridge/
│   │   │   │   │   ├── MasterImageHandlerBridge.php
│   │   │   │   │   └── MasterImageHandlerBridgeInterface.php
│   │   │   │   ├── DirectoryNotExistentException.php
│   │   │   │   ├── DirectoryNotReadableException.php
│   │   │   │   ├── FileGenerator/
│   │   │   │   │   ├── Bridge/
│   │   │   │   │   │   ├── CsvFileGeneratorBridge.php
│   │   │   │   │   │   └── FileGeneratorBridgeInterface.php
│   │   │   │   │   ├── CsvFileGenerator.php
│   │   │   │   │   └── FileGeneratorInterface.php
│   │   │   │   ├── ImageHandlerInterface.php
│   │   │   │   ├── MasterImageHandler.php
│   │   │   │   ├── ProjectDirectoriesLocator.php
│   │   │   │   ├── ProjectRootLocator.php
│   │   │   │   ├── Validator/
│   │   │   │   │   ├── FileValidator.php
│   │   │   │   │   ├── FileValidatorBridge.php
│   │   │   │   │   ├── FileValidatorBridgeInterface.php
│   │   │   │   │   ├── FileValidatorInterface.php
│   │   │   │   │   └── ImageValidationException.php
│   │   │   │   ├── bootstrap-services.yaml
│   │   │   │   └── services.yaml
│   │   │   ├── Form/
│   │   │   │   ├── Form.php
│   │   │   │   ├── FormFactoryInterface.php
│   │   │   │   ├── FormField.php
│   │   │   │   ├── FormFieldInterface.php
│   │   │   │   ├── FormInterface.php
│   │   │   │   ├── FormValidatorInterface.php
│   │   │   │   ├── RequiredFieldsValidator.php
│   │   │   │   └── services.yaml
│   │   │   ├── FormConfiguration/
│   │   │   │   ├── FieldConfiguration.php
│   │   │   │   ├── FieldConfigurationInterface.php
│   │   │   │   ├── FormConfiguration.php
│   │   │   │   ├── FormConfigurationFactoryInterface.php
│   │   │   │   ├── FormConfigurationInterface.php
│   │   │   │   └── FormFieldsConfigurationDataProviderInterface.php
│   │   │   ├── Html/
│   │   │   │   ├── AllowAllHtmlSanitizer.php
│   │   │   │   ├── HtmlSanitizer.php
│   │   │   │   ├── HtmlSanitizerConfigFactory.php
│   │   │   │   ├── HtmlSanitizerConfigFactoryInterface.php
│   │   │   │   ├── HtmlSanitizerFactory.php
│   │   │   │   ├── HtmlSanitizerInterface.php
│   │   │   │   ├── parameters.yaml
│   │   │   │   └── services.yaml
│   │   │   ├── Logger/
│   │   │   │   ├── Factory/
│   │   │   │   │   ├── LoggerFactoryInterface.php
│   │   │   │   │   └── MonologLoggerFactory.php
│   │   │   │   ├── LoggerServiceFactory.php
│   │   │   │   └── services.yaml
│   │   │   ├── Mailing/
│   │   │   │   ├── Factory/
│   │   │   │   │   ├── TransportFactory.php
│   │   │   │   │   └── TransportFactoryInterface.php
│   │   │   │   ├── parameters.yaml
│   │   │   │   └── services.yaml
│   │   │   ├── Migration/
│   │   │   │   ├── MigrationExecutor.php
│   │   │   │   ├── MigrationExecutorInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Module/
│   │   │   │   ├── Cache/
│   │   │   │   │   ├── CacheNotFoundException.php
│   │   │   │   │   ├── InvalidateModuleCacheEventSubscriber.php
│   │   │   │   │   ├── ModuleCache.php
│   │   │   │   │   ├── ModuleCacheInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Command/
│   │   │   │   │   ├── InstallModuleAssetsCommand.php
│   │   │   │   │   ├── ModuleActivateCommand.php
│   │   │   │   │   ├── ModuleDeactivateCommand.php
│   │   │   │   │   ├── ModuleInstallCommand.php
│   │   │   │   │   ├── ModuleUninstallCommand.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Configuration/
│   │   │   │   │   ├── Bridge/
│   │   │   │   │   │   ├── ModuleConfigurationDaoBridge.php
│   │   │   │   │   │   ├── ModuleConfigurationDaoBridgeInterface.php
│   │   │   │   │   │   ├── ModuleConfigurationDataMapperBridge.php
│   │   │   │   │   │   ├── ModuleConfigurationDataMapperBridgeInterface.php
│   │   │   │   │   │   ├── ModuleSettingBridge.php
│   │   │   │   │   │   ├── ModuleSettingBridgeInterface.php
│   │   │   │   │   │   ├── ShopConfigurationDaoBridge.php
│   │   │   │   │   │   └── ShopConfigurationDaoBridgeInterface.php
│   │   │   │   │   ├── Cache/
│   │   │   │   │   │   ├── ClassPropertyModuleConfigurationCache.php
│   │   │   │   │   │   └── ModuleConfigurationCacheInterface.php
│   │   │   │   │   ├── Dao/
│   │   │   │   │   │   ├── Chain/
│   │   │   │   │   │   │   ├── ClassExtensionsChainDao.php
│   │   │   │   │   │   │   ├── ClassExtensionsChainDaoInterface.php
│   │   │   │   │   │   │   ├── TemplateExtensionChainDao.php
│   │   │   │   │   │   │   └── TemplateExtensionChainDaoInterface.php
│   │   │   │   │   │   ├── ModuleConfigurationDao.php
│   │   │   │   │   │   ├── ModuleConfigurationDaoInterface.php
│   │   │   │   │   │   ├── ModuleConfigurationExtenderInterface.php
│   │   │   │   │   │   ├── ModuleDependencyDao.php
│   │   │   │   │   │   ├── ModuleDependencyDaoInterface.php
│   │   │   │   │   │   ├── ModuleEnvironmentConfigurationDao.php
│   │   │   │   │   │   ├── ModuleEnvironmentConfigurationDaoInterface.php
│   │   │   │   │   │   ├── ModuleEnvironmentConfigurationExtender.php
│   │   │   │   │   │   ├── ShopConfigurationDao.php
│   │   │   │   │   │   ├── ShopConfigurationDaoInterface.php
│   │   │   │   │   │   ├── ShopEnvironmentMisconfigurationEventSubscriber.php
│   │   │   │   │   │   └── ShopEnvironmentWithOrphanSettingEvent.php
│   │   │   │   │   ├── DataMapper/
│   │   │   │   │   │   ├── ModuleConfiguration/
│   │   │   │   │   │   │   ├── ClassExtensionsDataMapper.php
│   │   │   │   │   │   │   ├── ClassExtensionsExportDataMapper.php
│   │   │   │   │   │   │   ├── ControllersDataMapper.php
│   │   │   │   │   │   │   ├── ControllersExportDataMapper.php
│   │   │   │   │   │   │   ├── EventsDataMapper.php
│   │   │   │   │   │   │   └── ModuleSettingsDataMapper.php
│   │   │   │   │   │   ├── ModuleConfigurationDataMapper.php
│   │   │   │   │   │   ├── ModuleConfigurationDataMapperInterface.php
│   │   │   │   │   │   ├── ModuleConfigurationExportDataMapper.php
│   │   │   │   │   │   └── ModuleConfigurationExportDataMapperInterface.php
│   │   │   │   │   ├── DataObject/
│   │   │   │   │   │   ├── ClassExtensionsChain.php
│   │   │   │   │   │   ├── ModuleConfiguration/
│   │   │   │   │   │   │   ├── ClassExtension.php
│   │   │   │   │   │   │   ├── Controller.php
│   │   │   │   │   │   │   └── Event.php
│   │   │   │   │   │   ├── ModuleConfiguration.php
│   │   │   │   │   │   ├── ModuleDependencies.php
│   │   │   │   │   │   ├── ModuleIdChain.php
│   │   │   │   │   │   ├── ModuleTemplateExtensionChain.php
│   │   │   │   │   │   ├── ShopConfiguration.php
│   │   │   │   │   │   └── UnresolvedModuleDependencies.php
│   │   │   │   │   ├── Definition/
│   │   │   │   │   │   ├── TreeBuilderFactory.php
│   │   │   │   │   │   └── TreeBuilderFactoryInterface.php
│   │   │   │   │   ├── Event/
│   │   │   │   │   │   ├── ModuleClassExtensionChainChangedEvent.php
│   │   │   │   │   │   └── ModuleConfigurationChangedEvent.php
│   │   │   │   │   ├── Exception/
│   │   │   │   │   │   ├── ExtensionNotInChainException.php
│   │   │   │   │   │   ├── InvalidModuleIdException.php
│   │   │   │   │   │   ├── ModuleConfigurationNotFoundException.php
│   │   │   │   │   │   ├── ModuleSettingNotFountException.php
│   │   │   │   │   │   ├── ProjectConfigurationIsEmptyException.php
│   │   │   │   │   │   └── ShopConfigurationNotFoundException.php
│   │   │   │   │   ├── Service/
│   │   │   │   │   │   ├── ModuleClassExtensionsMergingService.php
│   │   │   │   │   │   ├── ModuleClassExtensionsMergingServiceInterface.php
│   │   │   │   │   │   ├── ModuleConfigurationMergingService.php
│   │   │   │   │   │   ├── ModuleConfigurationMergingServiceInterface.php
│   │   │   │   │   │   ├── SettingsMergingService.php
│   │   │   │   │   │   └── SettingsMergingServiceInterface.php
│   │   │   │   │   ├── bootstrap-services.yaml
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Facade/
│   │   │   │   │   ├── ActiveModulesDataProvider.php
│   │   │   │   │   ├── ActiveModulesDataProviderBridge.php
│   │   │   │   │   ├── ActiveModulesDataProviderBridgeInterface.php
│   │   │   │   │   ├── ActiveModulesDataProviderInterface.php
│   │   │   │   │   ├── ModuleSettingService.php
│   │   │   │   │   ├── ModuleSettingServiceInterface.php
│   │   │   │   │   ├── ModulesDataProvider.php
│   │   │   │   │   ├── ModulesDataProviderInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Install/
│   │   │   │   │   ├── DataObject/
│   │   │   │   │   │   └── OxidEshopPackage.php
│   │   │   │   │   ├── Service/
│   │   │   │   │   │   ├── BootstrapModuleInstaller.php
│   │   │   │   │   │   ├── ModuleConfigurationInstaller.php
│   │   │   │   │   │   ├── ModuleConfigurationInstallerInterface.php
│   │   │   │   │   │   ├── ModuleFilesInstaller.php
│   │   │   │   │   │   ├── ModuleFilesInstallerInterface.php
│   │   │   │   │   │   ├── ModuleInstaller.php
│   │   │   │   │   │   ├── ModuleInstallerInterface.php
│   │   │   │   │   │   ├── ProjectConfigurationGenerator.php
│   │   │   │   │   │   └── ProjectConfigurationGeneratorInterface.php
│   │   │   │   │   ├── bootstrap-services.yaml
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── MetaData/
│   │   │   │   │   ├── Converter/
│   │   │   │   │   │   ├── MetaDataConverterAggregate.php
│   │   │   │   │   │   ├── MetaDataConverterInterface.php
│   │   │   │   │   │   └── ModuleSettingsBooleanConverter.php
│   │   │   │   │   ├── Dao/
│   │   │   │   │   │   ├── MetaDataNormalizer.php
│   │   │   │   │   │   ├── MetaDataNormalizerInterface.php
│   │   │   │   │   │   ├── MetaDataProvider.php
│   │   │   │   │   │   ├── MetaDataProviderInterface.php
│   │   │   │   │   │   ├── MetaDataSchemataProvider.php
│   │   │   │   │   │   ├── MetaDataSchemataProviderInterface.php
│   │   │   │   │   │   ├── ModuleConfigurationDao.php
│   │   │   │   │   │   └── ModuleConfigurationDaoInterface.php
│   │   │   │   │   ├── DataMapper/
│   │   │   │   │   │   ├── MetaDataMapper.php
│   │   │   │   │   │   └── MetaDataToModuleConfigurationDataMapperInterface.php
│   │   │   │   │   ├── Exception/
│   │   │   │   │   │   ├── InvalidMetaDataException.php
│   │   │   │   │   │   ├── MetaDataVersionException.php
│   │   │   │   │   │   ├── ModuleIdNotValidException.php
│   │   │   │   │   │   ├── SettingNotValidException.php
│   │   │   │   │   │   ├── UnsupportedMetaDataKeyException.php
│   │   │   │   │   │   ├── UnsupportedMetaDataValueTypeException.php
│   │   │   │   │   │   └── UnsupportedMetaDataVersionException.php
│   │   │   │   │   ├── Validator/
│   │   │   │   │   │   ├── MetaDataSchemaValidator.php
│   │   │   │   │   │   ├── MetaDataSchemaValidatorInterface.php
│   │   │   │   │   │   ├── MetaDataValidatorAggregate.php
│   │   │   │   │   │   ├── MetaDataValidatorInterface.php
│   │   │   │   │   │   ├── ModuleIdValidator.php
│   │   │   │   │   │   ├── ModuleSettingBooleanValidator.php
│   │   │   │   │   │   └── SettingValidatorInterface.php
│   │   │   │   │   └── bootstrap-services.yaml
│   │   │   │   ├── Path/
│   │   │   │   │   ├── ModuleAssetsPathResolver.php
│   │   │   │   │   ├── ModuleAssetsPathResolverBridge.php
│   │   │   │   │   ├── ModuleAssetsPathResolverBridgeInterface.php
│   │   │   │   │   ├── ModuleAssetsPathResolverInterface.php
│   │   │   │   │   ├── ModulePathResolver.php
│   │   │   │   │   ├── ModulePathResolverInterface.php
│   │   │   │   │   └── bootstrap-services.yaml
│   │   │   │   ├── Setting/
│   │   │   │   │   ├── Event/
│   │   │   │   │   │   └── SettingChangedEvent.php
│   │   │   │   │   └── Setting.php
│   │   │   │   ├── Setup/
│   │   │   │   │   ├── Bridge/
│   │   │   │   │   │   ├── ModuleActivationBridge.php
│   │   │   │   │   │   └── ModuleActivationBridgeInterface.php
│   │   │   │   │   ├── Event/
│   │   │   │   │   │   ├── BeforeModuleDeactivationEvent.php
│   │   │   │   │   │   ├── FinalizingModuleActivationEvent.php
│   │   │   │   │   │   ├── FinalizingModuleDeactivationEvent.php
│   │   │   │   │   │   ├── ModuleSetupEvent.php
│   │   │   │   │   │   └── ServicesYamlConfigurationErrorEvent.php
│   │   │   │   │   ├── EventSubscriber/
│   │   │   │   │   │   ├── DispatchLegacyEventsSubscriber.php
│   │   │   │   │   │   └── EventLoggingSubscriber.php
│   │   │   │   │   ├── Exception/
│   │   │   │   │   │   ├── ControllersDuplicationModuleConfigurationException.php
│   │   │   │   │   │   ├── DependencyValidationException.php
│   │   │   │   │   │   ├── InvalidClassExtensionNamespaceException.php
│   │   │   │   │   │   ├── InvalidModuleServicesException.php
│   │   │   │   │   │   ├── ModuleSettingHandlerNotFoundException.php
│   │   │   │   │   │   ├── ModuleSettingNotValidException.php
│   │   │   │   │   │   ├── ModuleSetupValidationException.php
│   │   │   │   │   │   └── ServicesYamlConfigurationError.php
│   │   │   │   │   ├── Service/
│   │   │   │   │   │   ├── ActiveClassExtensionChainResolver.php
│   │   │   │   │   │   ├── ActiveClassExtensionChainResolverInterface.php
│   │   │   │   │   │   ├── ModuleActivationService.php
│   │   │   │   │   │   ├── ModuleActivationServiceInterface.php
│   │   │   │   │   │   ├── ModuleDependencyResolver.php
│   │   │   │   │   │   ├── ModuleDependencyResolverInterface.php
│   │   │   │   │   │   ├── ModuleServicesImporter.php
│   │   │   │   │   │   └── ModuleServicesImporterInterface.php
│   │   │   │   │   ├── Validator/
│   │   │   │   │   │   ├── ActivationDependencyValidator.php
│   │   │   │   │   │   ├── ClassExtensionsValidator.php
│   │   │   │   │   │   ├── ControllersValidator.php
│   │   │   │   │   │   ├── DeactivationDependencyValidator.php
│   │   │   │   │   │   ├── EventsValidator.php
│   │   │   │   │   │   ├── ModuleConfigurationValidatorAggregate.php
│   │   │   │   │   │   ├── ModuleConfigurationValidatorInterface.php
│   │   │   │   │   │   └── ServicesYamlValidator.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── State/
│   │   │   │   │   ├── ModuleStateService.php
│   │   │   │   │   ├── ModuleStateServiceInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Template/
│   │   │   │   │   ├── Locator/
│   │   │   │   │   │   └── ModulesMenuFileLocator.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Translation/
│   │   │   │   │   ├── Bridge/
│   │   │   │   │   │   ├── AdminAreaModuleTranslationFileLocatorBridge.php
│   │   │   │   │   │   ├── AdminAreaModuleTranslationFileLocatorBridgeInterface.php
│   │   │   │   │   │   ├── FrontendModuleTranslationFileLocatorBridge.php
│   │   │   │   │   │   ├── FrontendModuleTranslationFileLocatorBridgeInterface.php
│   │   │   │   │   │   └── services.yaml
│   │   │   │   │   ├── Locator/
│   │   │   │   │   │   ├── AdminAreaModuleTranslationFileLocator.php
│   │   │   │   │   │   ├── AdminAreaModuleTranslationFileLocatorInterface.php
│   │   │   │   │   │   ├── FrontendModuleTranslationFileLocator.php
│   │   │   │   │   │   ├── FrontendModuleTranslationFileLocatorInterface.php
│   │   │   │   │   │   ├── ModuleTranslationFileLocatorAbstract.php
│   │   │   │   │   │   └── services.yaml
│   │   │   │   │   └── services.yaml
│   │   │   │   └── services.yaml
│   │   │   ├── RateLimiter/
│   │   │   │   ├── ApiRateLimitListener.php
│   │   │   │   ├── ApiRateLimiterFactory.php
│   │   │   │   ├── ApiRateLimiterFactoryInterface.php
│   │   │   │   ├── ClientIdentifierProvider.php
│   │   │   │   ├── ClientIdentifierProviderInterface.php
│   │   │   │   ├── RateLimitHeadersListener.php
│   │   │   │   └── services.yaml
│   │   │   ├── Request/
│   │   │   │   ├── RequestInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Search/
│   │   │   │   ├── EqualsFilter.php
│   │   │   │   ├── FilterInterface.php
│   │   │   │   ├── InFilter.php
│   │   │   │   ├── Pagination.php
│   │   │   │   ├── SearchTerm.php
│   │   │   │   ├── SortDirection.php
│   │   │   │   └── Sorting.php
│   │   │   ├── Session/
│   │   │   │   ├── SessionInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Storage/
│   │   │   │   ├── ArrayStorageInterface.php
│   │   │   │   ├── FileStorageFactoryInterface.php
│   │   │   │   ├── YamlFileStorage.php
│   │   │   │   └── YamlFileStorageFactory.php
│   │   │   ├── SystemRequirements/
│   │   │   │   ├── SystemSecurityChecker.php
│   │   │   │   ├── SystemSecurityCheckerInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Templating/
│   │   │   │   ├── Cache/
│   │   │   │   │   ├── ShopTemplateCacheService.php
│   │   │   │   │   └── ShopTemplateCacheServiceInterface.php
│   │   │   │   ├── Exception/
│   │   │   │   │   ├── InvalidTemplateNameException.php
│   │   │   │   │   └── InvalidThemeNameException.php
│   │   │   │   ├── Locator/
│   │   │   │   │   ├── AdminNavigationFileLocator.php
│   │   │   │   │   ├── AdminTemplateFileLocator.php
│   │   │   │   │   ├── EditionMenuFileLocator.php
│   │   │   │   │   ├── EditionUserFileLocator.php
│   │   │   │   │   ├── FileLocatorInterface.php
│   │   │   │   │   ├── NavigationFileLocatorInterface.php
│   │   │   │   │   └── TemplateFileLocator.php
│   │   │   │   ├── TemplateEngine.php
│   │   │   │   ├── TemplateEngineFactoryInterface.php
│   │   │   │   ├── TemplateEngineInterface.php
│   │   │   │   ├── TemplateRenderer.php
│   │   │   │   ├── TemplateRendererBridge.php
│   │   │   │   ├── TemplateRendererBridgeInterface.php
│   │   │   │   ├── TemplateRendererInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Theme/
│   │   │   │   ├── Bridge/
│   │   │   │   │   ├── AdminThemeBridge.php
│   │   │   │   │   └── AdminThemeBridgeInterface.php
│   │   │   │   ├── Command/
│   │   │   │   │   └── ThemeActivateCommand.php
│   │   │   │   ├── Config/
│   │   │   │   │   ├── Dao/
│   │   │   │   │   │   ├── ThemeSettingDao.php
│   │   │   │   │   │   └── ThemeSettingDaoInterface.php
│   │   │   │   │   └── DataObject/
│   │   │   │   │       └── ThemeSetting.php
│   │   │   │   ├── Event/
│   │   │   │   │   ├── ThemeActivatedEvent.php
│   │   │   │   │   └── ThemeSettingChangedEvent.php
│   │   │   │   └── services.yaml
│   │   │   ├── parameters.yaml
│   │   │   └── services.yaml
│   │   ├── README.md
│   │   ├── Setup/
│   │   │   ├── Database/
│   │   │   │   ├── DatabaseNotEmptyException.php
│   │   │   │   ├── SetupDbConnectionFactory.php
│   │   │   │   ├── SetupDbConnectionFactoryInterface.php
│   │   │   │   ├── SetupDbConnectionValidator.php
│   │   │   │   ├── SetupDbConnectionValidatorInterface.php
│   │   │   │   ├── SetupDbValidator.php
│   │   │   │   ├── SetupDbValidatorInterface.php
│   │   │   │   ├── ShopDbManager.php
│   │   │   │   ├── ShopDbManagerInterface.php
│   │   │   │   ├── UnsupportedDatabaseConfigurationException.php
│   │   │   │   ├── ViewsGeneratorFactory.php
│   │   │   │   ├── ViewsGeneratorFactoryInterface.php
│   │   │   │   ├── services.yaml
│   │   │   │   └── sql/
│   │   │   │       ├── database_schema.sql
│   │   │   │       └── initial_data.sql
│   │   │   ├── Directory/
│   │   │   │   ├── DirectoryValidator.php
│   │   │   │   ├── DirectoryValidatorInterface.php
│   │   │   │   ├── NoPermissionDirectoryException.php
│   │   │   │   ├── NonExistenceDirectoryException.php
│   │   │   │   ├── NotAbsolutePathException.php
│   │   │   │   └── services.yaml
│   │   │   ├── Htaccess/
│   │   │   │   ├── HtaccessAccessException.php
│   │   │   │   ├── HtaccessDao.php
│   │   │   │   ├── HtaccessDaoFactory.php
│   │   │   │   ├── HtaccessDaoFactoryInterface.php
│   │   │   │   ├── HtaccessDaoInterface.php
│   │   │   │   ├── HtaccessUpdater.php
│   │   │   │   ├── HtaccessUpdaterInterface.php
│   │   │   │   ├── InvalidShopUrlException.php
│   │   │   │   ├── ShopBaseUrl.php
│   │   │   │   └── services.yaml
│   │   │   ├── Language/
│   │   │   │   ├── DefaultLanguage.php
│   │   │   │   ├── IncorrectLanguageException.php
│   │   │   │   ├── LanguageInstaller.php
│   │   │   │   ├── LanguageInstallerInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Parameters/
│   │   │   │   ├── SetupParameters.php
│   │   │   │   ├── SetupParametersFactory.php
│   │   │   │   ├── SetupParametersFactoryInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── ShopConfiguration/
│   │   │   │   ├── ShopConfigurationUpdater.php
│   │   │   │   ├── ShopConfigurationUpdaterInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── ShopSetupCommand.php
│   │   │   ├── Validator/
│   │   │   │   ├── SetupInfrastructureValidator.php
│   │   │   │   ├── SetupInfrastructureValidatorInterface.php
│   │   │   │   └── services.yaml
│   │   │   └── services.yaml
│   │   ├── Transition/
│   │   │   ├── Adapter/
│   │   │   │   ├── Email/
│   │   │   │   │   ├── EmailAdapterInterface.php
│   │   │   │   │   └── SymfonyMailerAdapter.php
│   │   │   │   ├── Exception/
│   │   │   │   │   └── TranslationNotFoundException.php
│   │   │   │   ├── Session/
│   │   │   │   │   └── SessionAdapter.php
│   │   │   │   ├── ShopAdapter.php
│   │   │   │   ├── ShopAdapterInterface.php
│   │   │   │   ├── TemplateLogic/
│   │   │   │   │   ├── AbstractInsertNewBasketItemLogic.php
│   │   │   │   │   ├── AddUrlParametersLogic.php
│   │   │   │   │   ├── ContentFactory.php
│   │   │   │   │   ├── FileSizeLogic.php
│   │   │   │   │   ├── FormatCurrencyLogic.php
│   │   │   │   │   ├── FormatDateLogic.php
│   │   │   │   │   ├── FormatPriceLogic.php
│   │   │   │   │   ├── FormatTimeLogic.php
│   │   │   │   │   ├── IfContentLogic.php
│   │   │   │   │   ├── IncludeDynamicLogic.php
│   │   │   │   │   ├── IncludeWidgetLogic.php
│   │   │   │   │   ├── InputHelpLogic.php
│   │   │   │   │   ├── InsertNewBasketItemLogicTwig.php
│   │   │   │   │   ├── ScriptLogic.php
│   │   │   │   │   ├── SeoUrlLogic.php
│   │   │   │   │   ├── SmartWordwrapLogic.php
│   │   │   │   │   ├── StyleLogic.php
│   │   │   │   │   ├── TranslateFilterLogic.php
│   │   │   │   │   ├── TranslateFunctionLogic.php
│   │   │   │   │   ├── TranslateSalutationLogic.php
│   │   │   │   │   ├── TruncateLogic.php
│   │   │   │   │   ├── WordwrapLogic.php
│   │   │   │   │   └── services.yaml
│   │   │   │   ├── Translator/
│   │   │   │   │   ├── LegacyTemplateTranslator.php
│   │   │   │   │   ├── TranslatorInterface.php
│   │   │   │   │   └── services.yaml
│   │   │   │   └── services.yaml
│   │   │   ├── ShopEvents/
│   │   │   │   ├── AfterAdminAjaxRequestProcessedEvent.php
│   │   │   │   ├── AfterModelDeleteEvent.php
│   │   │   │   ├── AfterModelInsertEvent.php
│   │   │   │   ├── AfterModelUpdateEvent.php
│   │   │   │   ├── AfterRequestProcessedEvent.php
│   │   │   │   ├── AllCookiesRemovedEvent.php
│   │   │   │   ├── ApplicationExitEvent.php
│   │   │   │   ├── BasketChangedEvent.php
│   │   │   │   ├── BeforeHeadersSendEvent.php
│   │   │   │   ├── BeforeModelDeleteEvent.php
│   │   │   │   ├── BeforeModelUpdateEvent.php
│   │   │   │   ├── BeforeSessionStartEvent.php
│   │   │   │   ├── ModelChangeEventTrait.php
│   │   │   │   ├── ViewRenderedEvent.php
│   │   │   │   └── services.yaml
│   │   │   └── Utility/
│   │   │       ├── BasicContext.php
│   │   │       ├── BasicContextInterface.php
│   │   │       ├── Context.php
│   │   │       ├── ContextInterface.php
│   │   │       ├── Exception/
│   │   │       │   └── AdminUserNotFoundException.php
│   │   │       ├── bootstrap-services.yaml
│   │   │       └── services.yaml
│   │   ├── Utility/
│   │   │   ├── Authentication/
│   │   │   │   ├── Exception/
│   │   │   │   │   └── PasswordPolicyException.php
│   │   │   │   └── Policy/
│   │   │   │       ├── PasswordPolicy.php
│   │   │   │       └── PasswordPolicyInterface.php
│   │   │   ├── Email/
│   │   │   │   ├── EmailValidatorService.php
│   │   │   │   ├── EmailValidatorServiceBridge.php
│   │   │   │   ├── EmailValidatorServiceBridgeInterface.php
│   │   │   │   ├── EmailValidatorServiceInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Hash/
│   │   │   │   ├── Exception/
│   │   │   │   │   └── PasswordHashException.php
│   │   │   │   ├── Service/
│   │   │   │   │   ├── Argon2IPasswordHashService.php
│   │   │   │   │   ├── BcryptPasswordHashService.php
│   │   │   │   │   └── PasswordHashServiceInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Header/
│   │   │   │   ├── Bridge/
│   │   │   │   │   ├── CsvHeaderGeneratorBridge.php
│   │   │   │   │   └── HeaderGeneratorBridgeInterface.php
│   │   │   │   ├── CsvHeaderGenerator.php
│   │   │   │   ├── HeaderGeneratorInterface.php
│   │   │   │   └── services.yaml
│   │   │   ├── Url/
│   │   │   │   ├── UrlParser.php
│   │   │   │   ├── UrlParserInterface.php
│   │   │   │   └── services.yaml
│   │   │   └── services.yaml
│   │   ├── parameters.yaml
│   │   └── services.yaml
│   ├── admin/
│   │   ├── index.php
│   │   └── oxajax.php
│   ├── api.php
│   ├── bin/
│   │   ├── .htaccess
│   │   └── cron.php
│   ├── bootstrap.php
│   ├── export/
│   │   └── .gitkeep
│   ├── getimg.php
│   ├── index.php
│   ├── log/
│   │   └── .htaccess
│   ├── migration/
│   │   ├── data/
│   │   │   ├── Version20170718124421.php
│   │   │   ├── Version20171018144650.php
│   │   │   ├── Version20180214152228.php
│   │   │   ├── Version20180228160418.php
│   │   │   ├── Version20180703135728.php
│   │   │   ├── Version20180928072235.php
│   │   │   ├── Version20191007144155.php
│   │   │   ├── Version20201029110624.php
│   │   │   ├── Version20201103010101.php
│   │   │   ├── Version20201203101929.php
│   │   │   ├── Version20211117193324.php
│   │   │   ├── Version20230109135625.php
│   │   │   ├── Version20230301123522.php
│   │   │   ├── Version20231128113123.php
│   │   │   ├── Version20250320120000.php
│   │   │   ├── Version20250911140000.php
│   │   │   └── Version20251009121500.php
│   │   ├── migrations.yml
│   │   ├── project_data/
│   │   │   └── .gitkeep
│   │   └── project_migrations.yml
│   ├── modules/
│   │   └── functions.php.dist
│   ├── offline.html
│   ├── out/
│   │   ├── .gitignore
│   │   ├── downloads/
│   │   │   ├── .htaccess
│   │   │   ├── README.txt
│   │   │   └── uploads/
│   │   │       └── .gitkeep
│   │   ├── media/
│   │   │   └── .gitkeep
│   │   └── pictures/
│   │       ├── generated/
│   │       │   └── .gitkeep
│   │       ├── media/
│   │       │   └── .gitkeep
│   │       ├── promo/
│   │       │   └── .gitkeep
│   │       └── vendor/
│   │           └── icon/
│   │               └── .gitkeep
│   ├── overridablefunctions.php
│   ├── oxfunctions.php
│   ├── oxseo.php
│   ├── robots.txt
│   └── widget.php
├── tests/
│   ├── CachingTrait.php
│   ├── Codeception/
│   │   ├── .gitignore
│   │   ├── Acceptance/
│   │   │   ├── Admin/
│   │   │   │   ├── ActiveCategoryAtStartCest.php
│   │   │   │   ├── AdminCreateCategoryCest.php
│   │   │   │   ├── AssignProductsToCategoryCest.php
│   │   │   │   ├── DownloadableProductCest.php
│   │   │   │   ├── ExportNewsletterRecipientsCest.php
│   │   │   │   ├── GenericExportCest.php
│   │   │   │   ├── GenericImportCest.php
│   │   │   │   ├── LoginCest.php
│   │   │   │   ├── ManufacturerCest.php
│   │   │   │   ├── MasterCoreStockSettingsCest.php
│   │   │   │   ├── ModuleActivationCest.php
│   │   │   │   ├── ModuleSettingsCest.php
│   │   │   │   ├── ModuleSortListCest.php
│   │   │   │   ├── NavigationCest.php
│   │   │   │   ├── NewCMSCreationCest.php
│   │   │   │   ├── NewLanguageCreationCest.php
│   │   │   │   ├── NotRegisteredUserOrderCest.php
│   │   │   │   ├── OrderEmailCest.php
│   │   │   │   ├── OrderTotalsAndCurrencyDisplayCest.php
│   │   │   │   ├── ProductListStatusTestCest.php
│   │   │   │   ├── ProductPicturesCest.php
│   │   │   │   ├── ProductStockTestCest.php
│   │   │   │   ├── ProductVariantWithSelectionsCest.php
│   │   │   │   ├── RemoveUserOrderCest.php
│   │   │   │   ├── SeoCest.php
│   │   │   │   ├── ServiceDiagnosticToolCest.php
│   │   │   │   ├── SessionHandlingCest.php
│   │   │   │   ├── ShopLicenseCest.php
│   │   │   │   ├── SystemInfoCest.php
│   │   │   │   ├── UpdateSQLToolCest.php
│   │   │   │   ├── UserCest.php
│   │   │   │   └── UserCredentialsCest.php
│   │   │   ├── BasketRefreshWithDeletedProductCest.php
│   │   │   ├── CMSPageChangeIdentCest.php
│   │   │   ├── CategoryDetailCest.php
│   │   │   ├── CategoryProductListCest.php
│   │   │   ├── CheckoutProcessCest.php
│   │   │   ├── ContactFormCest.php
│   │   │   ├── CookiesNoticeCest.php
│   │   │   ├── CurrencyCest.php
│   │   │   ├── DistributorCest.php
│   │   │   ├── DownloadableProductCest.php
│   │   │   ├── DynamicImageGenerationCest.php
│   │   │   ├── FlowThemeCest.php
│   │   │   ├── GiftRegistryCest.php
│   │   │   ├── LanguageCest.php
│   │   │   ├── ManufacturerCest.php
│   │   │   ├── NewsletterCest.php
│   │   │   ├── PrivateSalesBasketCest.php
│   │   │   ├── ProductCompareCest.php
│   │   │   ├── ProductDetailsPageCest.php
│   │   │   ├── ProductLabelCest.php
│   │   │   ├── ProductPromotionCest.php
│   │   │   ├── ProductStatusTestCest.php
│   │   │   ├── ReviewAndRatingCest.php
│   │   │   ├── SearchCest.php
│   │   │   ├── SessionHandlingCest.php
│   │   │   ├── ShopNavigationCest.php
│   │   │   ├── UserAccountCest.php
│   │   │   ├── UserRegistrationCest.php
│   │   │   ├── WishListCest.php
│   │   │   └── _bootstrap.php
│   │   ├── Acceptance.suite.yml
│   │   ├── Config/
│   │   │   ├── CodeceptionParametersProvider.php
│   │   │   └── params.php
│   │   ├── Support/
│   │   │   ├── AcceptanceActor.php
│   │   │   ├── AcceptanceTester.php
│   │   │   ├── Data/
│   │   │   │   ├── category.php
│   │   │   │   ├── genericImport/
│   │   │   │   │   ├── oxartextends_with_header.csv
│   │   │   │   │   └── oxartextends_without_header.csv
│   │   │   │   ├── modules/
│   │   │   │   │   ├── test-module-problems/
│   │   │   │   │   │   └── metadata.php
│   │   │   │   │   └── testModule/
│   │   │   │   │       ├── Controller/
│   │   │   │   │       │   └── ContentController.php
│   │   │   │   │       ├── metadata.php
│   │   │   │   │       └── views/
│   │   │   │   │           ├── admin_smarty/
│   │   │   │   │           │   ├── de/
│   │   │   │   │           │   │   └── module_options.php
│   │   │   │   │           │   └── en/
│   │   │   │   │           │       └── module_options.php
│   │   │   │   │           └── admin_twig/
│   │   │   │   │               ├── de/
│   │   │   │   │               │   └── module_options.php
│   │   │   │   │               └── en/
│   │   │   │   │                   └── module_options.php
│   │   │   │   ├── order.php
│   │   │   │   ├── product.php
│   │   │   │   ├── product_image.php
│   │   │   │   ├── shop.php
│   │   │   │   ├── test-fixtures.sql
│   │   │   │   ├── user.php
│   │   │   │   └── voucher.php
│   │   │   └── Helper/
│   │   │       └── Acceptance.php
│   │   ├── _envs/
│   │   │   └── .gitkeep
│   │   └── _output/
│   │       └── .gitkeep
│   ├── ConsoleRunnerTrait.php
│   ├── ContainerTrait.php
│   ├── DatabaseTrait.php
│   ├── EnvTrait.php
│   ├── FilesystemTrait.php
│   ├── Integration/
│   │   ├── Application/
│   │   │   ├── Component/
│   │   │   │   ├── BasketComponentSessionTest.php
│   │   │   │   ├── BasketComponentTest.php
│   │   │   │   └── UserComponentTest.php
│   │   │   ├── Controller/
│   │   │   │   ├── Admin/
│   │   │   │   │   ├── ArticlePicturesAjaxTest.php
│   │   │   │   │   ├── ArticleVariantTest.php
│   │   │   │   │   ├── ContentMainTest.php
│   │   │   │   │   ├── CountryMainTest.php
│   │   │   │   │   ├── Fixtures/
│   │   │   │   │   │   └── testModule/
│   │   │   │   │   │       ├── ModuleSetup.php
│   │   │   │   │   │       ├── Renderer.php
│   │   │   │   │   │       ├── RendererInterface.php
│   │   │   │   │   │       ├── metadata.php
│   │   │   │   │   │       └── services.yaml
│   │   │   │   │   ├── ManufacturerPictureTest.php
│   │   │   │   │   ├── ModuleConfigurationTest.php
│   │   │   │   │   └── ShopConfigurationTest.php
│   │   │   │   └── OrderControllerTest.php
│   │   │   └── Model/
│   │   │       ├── ArticleListTest.php
│   │   │       ├── ArticleTest.php
│   │   │       ├── BasketReservationTest.php
│   │   │       ├── DiagnosticsOutputTest.php
│   │   │       ├── GroupsTest.php
│   │   │       ├── ManufacturerTest.php
│   │   │       ├── ReviewTest.php
│   │   │       ├── UserTest.php
│   │   │       ├── UtilsSpy.php
│   │   │       └── VariantHandlerTest.php
│   │   ├── Core/
│   │   │   ├── DynamicImageGeneratorTest.php
│   │   │   ├── EmailTest.php
│   │   │   ├── Fixtures/
│   │   │   │   └── Modules/
│   │   │   │       ├── ExampleModule/
│   │   │   │       │   └── metadata.php
│   │   │   │       └── NotActiveModuleWithMissingData/
│   │   │   │           └── metadata.php
│   │   │   ├── GenericImport/
│   │   │   │   └── ImportObject/
│   │   │   │       └── ImportObjectTest.php
│   │   │   ├── InputValidatorTest.php
│   │   │   ├── LanguageTest.php
│   │   │   ├── Model/
│   │   │   │   ├── CategoryListTest.php
│   │   │   │   └── UserTest.php
│   │   │   ├── OnlineModuleVersionNotifierTest.php
│   │   │   ├── PictureHandlerTest.php
│   │   │   ├── SessionTest.php
│   │   │   ├── ShopControlTest.php
│   │   │   ├── SystemRequirementsTest.php
│   │   │   ├── Utils/
│   │   │   │   ├── UtilsCacheTest.php
│   │   │   │   ├── UtilsSearchEngineTest.php
│   │   │   │   └── UtilsSpy.php
│   │   │   ├── UtilsFileTest.php
│   │   │   ├── UtilsServerTest.php
│   │   │   ├── UtilsTest.php
│   │   │   └── ViewConfigTest.php
│   │   ├── IntegrationTestCase.php
│   │   ├── Internal/
│   │   │   ├── BootstrapContainer/
│   │   │   │   └── BootstrapContainerTest.php
│   │   │   ├── ComposerPlugin/
│   │   │   │   ├── ComponentInstallerTest.php
│   │   │   │   ├── Fixtures/
│   │   │   │   │   └── test-module-package-installation/
│   │   │   │   │       ├── metadata.php
│   │   │   │   │       └── services.yaml
│   │   │   │   └── ModulePackageInstallerTest.php
│   │   │   ├── Container/
│   │   │   │   ├── ContainerTest.php
│   │   │   │   └── Fixtures/
│   │   │   │       ├── SomeService.php
│   │   │   │       └── services.yaml
│   │   │   ├── Domain/
│   │   │   │   ├── Admin/
│   │   │   │   │   ├── Command/
│   │   │   │   │   │   └── CreateUserCommandTest.php
│   │   │   │   │   ├── Dao/
│   │   │   │   │   │   └── AdminDaoTest.php
│   │   │   │   │   └── Service/
│   │   │   │   │       └── AdminUserServiceTest.php
│   │   │   │   ├── Authentication/
│   │   │   │   │   ├── Bridge/
│   │   │   │   │   │   ├── PasswordServiceBridgeTest.php
│   │   │   │   │   │   └── RandomTokenGeneratorBridgeTest.php
│   │   │   │   │   └── Service/
│   │   │   │   │       ├── PasswordHashServiceTest.php
│   │   │   │   │       └── PasswordVerificationServiceTest.php
│   │   │   │   ├── Contact/
│   │   │   │   │   └── Form/
│   │   │   │   │       └── ContactFormBridgeTest.php
│   │   │   │   ├── Media/
│   │   │   │   │   ├── Dao/
│   │   │   │   │   │   └── MediaDaoTest.php
│   │   │   │   │   └── MediaUploaderTest.php
│   │   │   │   ├── Newsletter/
│   │   │   │   │   ├── Dao/
│   │   │   │   │   │   └── NewsletterRecipientsDaoTest.php
│   │   │   │   │   └── DataMapper/
│   │   │   │   │       └── NewsletterRecipientsDataMapperTest.php
│   │   │   │   ├── Product/
│   │   │   │   │   └── Media/
│   │   │   │   │       ├── Dao/
│   │   │   │   │       │   └── ProductMediaDaoTest.php
│   │   │   │   │       ├── Factory/
│   │   │   │   │       │   └── ProductMediaFactoryTest.php
│   │   │   │   │       └── Service/
│   │   │   │   │           ├── ProductMediaResolverTest.php
│   │   │   │   │           ├── ProductMediaServiceTest.php
│   │   │   │   │           ├── ProductMediaUploadProcessorTest.php
│   │   │   │   │           ├── ProductMediaViewServiceTest.php
│   │   │   │   │           └── ProductVariantMediaServiceTest.php
│   │   │   │   └── Review/
│   │   │   │       ├── Bridge/
│   │   │   │       │   ├── ProductRatingBridgeTest.php
│   │   │   │       │   ├── UserRatingBridgeTest.php
│   │   │   │       │   └── UserReviewBridgeTest.php
│   │   │   │       └── Dao/
│   │   │   │           ├── ProductRatingDaoTest.php
│   │   │   │           ├── RatingDaoTest.php
│   │   │   │           └── ReviewDaoTest.php
│   │   │   ├── Framework/
│   │   │   │   ├── Cache/
│   │   │   │   │   └── ShopCacheFacadeTest.php
│   │   │   │   ├── Configuration/
│   │   │   │   │   └── Dao/
│   │   │   │   │       └── SystemConfigurationDaoTest.php
│   │   │   │   ├── Console/
│   │   │   │   │   ├── ConsoleTest.php
│   │   │   │   │   └── Fixtures/
│   │   │   │   │       └── services.yaml
│   │   │   │   ├── DIContainer/
│   │   │   │   │   ├── ContainerBuilderTest.php
│   │   │   │   │   ├── Dao/
│   │   │   │   │   │   ├── ParameterDaoTest.php
│   │   │   │   │   │   └── ProjectYamlDaoTest.php
│   │   │   │   │   ├── Fixtures/
│   │   │   │   │   │   ├── Ce/
│   │   │   │   │   │   │   └── Internal/
│   │   │   │   │   │   │       ├── Service.php
│   │   │   │   │   │   │       ├── ServiceInterface.php
│   │   │   │   │   │   │       └── services.yaml
│   │   │   │   │   │   ├── Component/
│   │   │   │   │   │   │   └── Internal/
│   │   │   │   │   │   │       ├── ServiceDecorator.php
│   │   │   │   │   │   │       └── services.yaml
│   │   │   │   │   │   ├── Module/
│   │   │   │   │   │   │   └── Internal/
│   │   │   │   │   │   │       ├── ServiceDecorator.php
│   │   │   │   │   │   │       └── services.yaml
│   │   │   │   │   │   ├── Project/
│   │   │   │   │   │   │   └── Internal/
│   │   │   │   │   │   │       └── ServiceDecorator.php
│   │   │   │   │   │   ├── ProjectEnv/
│   │   │   │   │   │   │   └── Internal/
│   │   │   │   │   │   │       └── ServiceDecorator.php
│   │   │   │   │   │   └── var/
│   │   │   │   │   │       ├── active_module_services.yaml
│   │   │   │   │   │       ├── configuration/
│   │   │   │   │   │       │   ├── parameters.yaml
│   │   │   │   │   │       │   └── services.yaml
│   │   │   │   │   │       ├── configuration.abc/
│   │   │   │   │   │       │   ├── parameters.yaml
│   │   │   │   │   │       │   └── services.yaml
│   │   │   │   │   │       └── generated_services.yaml
│   │   │   │   │   └── Service/
│   │   │   │   │       ├── Fixtures/
│   │   │   │   │       │   ├── generated_services.yaml
│   │   │   │   │       │   ├── module-1/
│   │   │   │   │       │   │   └── services.yaml
│   │   │   │   │       │   └── module-2/
│   │   │   │   │       │       └── services.yaml
│   │   │   │   │       └── ProjectYamlImportServiceTest.php
│   │   │   │   ├── Database/
│   │   │   │   │   └── ConnectionFactoryTest.php
│   │   │   │   ├── Env/
│   │   │   │   │   ├── EnvLoaderTest.php
│   │   │   │   │   ├── EnvUrlFormatterTest.php
│   │   │   │   │   └── Fixtures/
│   │   │   │   │       └── EnvLoader/
│   │   │   │   │           └── services.yaml
│   │   │   │   ├── Event/
│   │   │   │   │   ├── EventLoggingSubscriberTest.php
│   │   │   │   │   ├── TestEvent.php
│   │   │   │   │   └── generated_project.yaml
│   │   │   │   ├── FileSystem/
│   │   │   │   │   ├── FileGenerator/
│   │   │   │   │   │   └── CsvFileGeneratorTest.php
│   │   │   │   │   ├── ProjectRootLocatorTest.php
│   │   │   │   │   └── Validator/
│   │   │   │   │       ├── FileValidatorTest.php
│   │   │   │   │       └── Fixtures/
│   │   │   │   │           └── images/
│   │   │   │   │               └── fake_image.php
│   │   │   │   ├── Logger/
│   │   │   │   │   └── LoggerTest.php
│   │   │   │   ├── Module/
│   │   │   │   │   ├── Cache/
│   │   │   │   │   │   └── ModuleCacheTest.php
│   │   │   │   │   ├── Command/
│   │   │   │   │   │   ├── Fixtures/
│   │   │   │   │   │   │   └── modules/
│   │   │   │   │   │   │       └── testmodule/
│   │   │   │   │   │   │           ├── assets/
│   │   │   │   │   │   │           │   └── some.css
│   │   │   │   │   │   │           └── metadata.php
│   │   │   │   │   │   ├── InstallModuleAssetsCommandTest.php
│   │   │   │   │   │   ├── ModuleActivateCommandTest.php
│   │   │   │   │   │   ├── ModuleCommandsTestCase.php
│   │   │   │   │   │   ├── ModuleDeactivateCommandTest.php
│   │   │   │   │   │   ├── ModuleInstallCommandTest.php
│   │   │   │   │   │   └── ModuleUninstallCommandTest.php
│   │   │   │   │   ├── Configuration/
│   │   │   │   │   │   ├── Bridge/
│   │   │   │   │   │   │   ├── ModuleSettingBridgeTest.php
│   │   │   │   │   │   │   └── ShopConfigurationDaoBridgeTest.php
│   │   │   │   │   │   ├── Dao/
│   │   │   │   │   │   │   ├── Chain/
│   │   │   │   │   │   │   │   └── ClassExtensionsChainDaoTest.php
│   │   │   │   │   │   │   ├── Fixtures/
│   │   │   │   │   │   │   │   ├── TestModuleWithDependencies/
│   │   │   │   │   │   │   │   │   └── dependencies.yaml
│   │   │   │   │   │   │   │   ├── TestModuleWithEmptyDependencyFile/
│   │   │   │   │   │   │   │   │   └── dependencies.yaml
│   │   │   │   │   │   │   │   └── project_configuration/
│   │   │   │   │   │   │   │       └── shops/
│   │   │   │   │   │   │   │           └── 1/
│   │   │   │   │   │   │   │               └── template_extension_chain.yaml
│   │   │   │   │   │   │   ├── ModuleConfigurationDaoTest.php
│   │   │   │   │   │   │   ├── ModuleDependencyDaoTest.php
│   │   │   │   │   │   │   ├── ModuleEnvironmentConfigurationDaoTest.php
│   │   │   │   │   │   │   ├── ModuleTemplateExtensionChainTest.php
│   │   │   │   │   │   │   ├── ShopConfigurationDaoTest.php
│   │   │   │   │   │   │   └── ShopEnvironmentMisconfigurationEventSubscriberTest.php
│   │   │   │   │   │   ├── DataMapper/
│   │   │   │   │   │   │   └── ModuleConfigurationDataMapperTest.php
│   │   │   │   │   │   └── Service/
│   │   │   │   │   │       └── ModuleConfigurationMergingServiceTest.php
│   │   │   │   │   ├── Controller/
│   │   │   │   │   │   ├── Fixtures/
│   │   │   │   │   │   │   └── module1/
│   │   │   │   │   │   │       ├── composer.json
│   │   │   │   │   │   │       ├── metadata.php
│   │   │   │   │   │   │       ├── services.yaml
│   │   │   │   │   │   │       ├── src/
│   │   │   │   │   │   │       │   └── Controller/
│   │   │   │   │   │   │       │       ├── ApiTestController.php
│   │   │   │   │   │   │       │       ├── ModuleController.php
│   │   │   │   │   │   │       │       ├── ModuleControllerAsService.php
│   │   │   │   │   │   │       │       └── ModuleControllerDecorator.php
│   │   │   │   │   │   │       └── views/
│   │   │   │   │   │   │           └── twig/
│   │   │   │   │   │   │               ├── module_controller.html.twig
│   │   │   │   │   │   │               └── module_controller_as_service.html.twig
│   │   │   │   │   │   ├── ModuleControllerApiTest.php
│   │   │   │   │   │   └── ModuleControllerRenderTest.php
│   │   │   │   │   ├── Facade/
│   │   │   │   │   │   ├── ActiveModulesDataProviderTest.php
│   │   │   │   │   │   ├── ModuleSettingServiceTest.php
│   │   │   │   │   │   └── ModulesDataProviderTest.php
│   │   │   │   │   ├── Install/
│   │   │   │   │   │   └── Service/
│   │   │   │   │   │       ├── BootstrapModuleInstallerTest.php
│   │   │   │   │   │       ├── Fixtures/
│   │   │   │   │   │       │   ├── myTestModule/
│   │   │   │   │   │       │   │   └── metadata.php
│   │   │   │   │   │       │   └── testModuleWithCustomSource/
│   │   │   │   │   │       │       └── customSourcePath/
│   │   │   │   │   │       │           └── metadata.php
│   │   │   │   │   │       ├── ModuleConfigurationInstallerTest.php
│   │   │   │   │   │       ├── ModuleFilesInstallerTest.php
│   │   │   │   │   │       └── ModuleInstallerTest.php
│   │   │   │   │   ├── MetaData/
│   │   │   │   │   │   ├── Dao/
│   │   │   │   │   │   │   └── MetaDataProviderTest.php
│   │   │   │   │   │   ├── DataMapper/
│   │   │   │   │   │   │   └── MetaDataMapperTest.php
│   │   │   │   │   │   ├── MetaDataMapperTest.php
│   │   │   │   │   │   └── TestData/
│   │   │   │   │   │       ├── TestModuleMetaData20/
│   │   │   │   │   │       │   └── metadata.php
│   │   │   │   │   │       ├── TestModuleMetaData21/
│   │   │   │   │   │       │   └── metadata.php
│   │   │   │   │   │       ├── TestModuleWithPartialMetaData/
│   │   │   │   │   │       │   └── metadata.php
│   │   │   │   │   │       └── TestModuleWithSurplusData/
│   │   │   │   │   │           └── metadata.php
│   │   │   │   │   ├── Setup/
│   │   │   │   │   │   ├── ModuleEventsTest.php
│   │   │   │   │   │   ├── Service/
│   │   │   │   │   │   │   ├── ActiveClassExtensionChainResolverTest.php
│   │   │   │   │   │   │   ├── Fixtures/
│   │   │   │   │   │   │   │   ├── Module/
│   │   │   │   │   │   │   │   │   └── services.yaml
│   │   │   │   │   │   │   │   ├── TestDependentModule/
│   │   │   │   │   │   │   │   │   └── metadata.php
│   │   │   │   │   │   │   │   ├── TestMissingDependencyModule/
│   │   │   │   │   │   │   │   │   ├── TestModuleService.php
│   │   │   │   │   │   │   │   │   ├── dependencies.yaml
│   │   │   │   │   │   │   │   │   ├── metadata.php
│   │   │   │   │   │   │   │   │   └── services.yaml
│   │   │   │   │   │   │   │   └── TestModuleWithDependency/
│   │   │   │   │   │   │   │       ├── dependencies.yaml
│   │   │   │   │   │   │   │       └── metadata.php
│   │   │   │   │   │   │   ├── ModuleActivationServiceTest.php
│   │   │   │   │   │   │   ├── ModuleDependencyActivationTest.php
│   │   │   │   │   │   │   ├── ModuleDependencyResolverTest.php
│   │   │   │   │   │   │   └── ModuleServicesImporterTest.php
│   │   │   │   │   │   └── Validator/
│   │   │   │   │   │       ├── Fixtures/
│   │   │   │   │   │       │   ├── ModuleWithCorrectServiceYaml/
│   │   │   │   │   │       │   │   └── services.yaml
│   │   │   │   │   │       │   └── ModuleWithWrongServiceYaml/
│   │   │   │   │   │       │       └── services.yaml
│   │   │   │   │   │       └── ServicesYamlValidatorTest.php
│   │   │   │   │   ├── State/
│   │   │   │   │   │   └── ModuleStateServiceTest.php
│   │   │   │   │   ├── TestData/
│   │   │   │   │   │   └── TestModule/
│   │   │   │   │   │       ├── CustomSourceDirectory/
│   │   │   │   │   │       │   └── metadata.php
│   │   │   │   │   │       ├── ModuleEvents.php
│   │   │   │   │   │       ├── SomeModuleService.php
│   │   │   │   │   │       ├── TestEventSubscriber.php
│   │   │   │   │   │       ├── assets/
│   │   │   │   │   │       │   └── some.css
│   │   │   │   │   │       ├── metadata.php
│   │   │   │   │   │       ├── readme.txt
│   │   │   │   │   │       └── services.yaml
│   │   │   │   │   └── Translation/
│   │   │   │   │       └── Locator/
│   │   │   │   │           ├── AdminAreaModuleTranslationFileLocatorTest.php
│   │   │   │   │           ├── Fixtures/
│   │   │   │   │           │   ├── module-name-1/
│   │   │   │   │           │   │   └── translations/
│   │   │   │   │           │   │       └── de/
│   │   │   │   │           │   │           ├── cust_lang.php
│   │   │   │   │           │   │           ├── de1_lang.php
│   │   │   │   │           │   │           └── de2_lang.php
│   │   │   │   │           │   ├── module-name-2/
│   │   │   │   │           │   │   └── views/
│   │   │   │   │           │   │       └── admin/
│   │   │   │   │           │   │           └── de/
│   │   │   │   │           │   │               ├── de1_lang.php
│   │   │   │   │           │   │               ├── de2_lang.php
│   │   │   │   │           │   │               └── module_options.php
│   │   │   │   │           │   ├── module-name-3/
│   │   │   │   │           │   │   └── Application/
│   │   │   │   │           │   │       └── translations/
│   │   │   │   │           │   │           └── de/
│   │   │   │   │           │   │               ├── de1_lang.php
│   │   │   │   │           │   │               └── de2_lang.php
│   │   │   │   │           │   └── module-name-4/
│   │   │   │   │           │       └── Application/
│   │   │   │   │           │           └── views/
│   │   │   │   │           │               └── admin/
│   │   │   │   │           │                   └── de/
│   │   │   │   │           │                       ├── de1_lang.php
│   │   │   │   │           │                       └── module_options.php
│   │   │   │   │           └── FrontendModuleTranslationFileLocatorTest.php
│   │   │   │   ├── Storage/
│   │   │   │   │   └── YamlFileStorageTest.php
│   │   │   │   ├── Templating/
│   │   │   │   │   └── Cache/
│   │   │   │   │       └── MultiShopTemplateCacheServiceTest.php
│   │   │   │   └── Theme/
│   │   │   │       ├── Command/
│   │   │   │       │   ├── Fixtures/
│   │   │   │       │   │   └── shop/
│   │   │   │       │   │       └── source/
│   │   │   │       │   │           └── Application/
│   │   │   │       │   │               └── views/
│   │   │   │       │   │                   └── testTheme/
│   │   │   │       │   │                       └── theme.php
│   │   │   │       │   └── ThemeActivateCommandTest.php
│   │   │   │       └── Config/
│   │   │   │           └── Dao/
│   │   │   │               └── ThemeSettingDaoTest.php
│   │   │   ├── Module/
│   │   │   │   ├── Migration/
│   │   │   │   │   ├── Fixtures/
│   │   │   │   │   │   ├── myTestModuleWithMigrations/
│   │   │   │   │   │   │   ├── metadata.php
│   │   │   │   │   │   │   └── migration/
│   │   │   │   │   │   │       ├── data/
│   │   │   │   │   │   │       │   └── Version20170530154603.php
│   │   │   │   │   │   │       └── migrations.yml
│   │   │   │   │   │   └── myTestModuleWithoutMigrations/
│   │   │   │   │   │       ├── metadata.php
│   │   │   │   │   │       └── migration/
│   │   │   │   │   │           └── migrations.yml
│   │   │   │   │   └── ModuleMigrationsTest.php
│   │   │   │   └── TestData/
│   │   │   │       └── TestModule/
│   │   │   │           └── TestEvent.php
│   │   │   ├── Setup/
│   │   │   │   ├── Database/
│   │   │   │   │   ├── SetupDbConnectionFactoryTest.php
│   │   │   │   │   ├── SetupDbConnectionValidatorTest.php
│   │   │   │   │   ├── SetupDbValidatorTest.php
│   │   │   │   │   └── ShopDbManagerTest.php
│   │   │   │   ├── Directory/
│   │   │   │   │   ├── DirectoryValidatorTest.php
│   │   │   │   │   └── Fixtures/
│   │   │   │   │       └── dir-structure/
│   │   │   │   │           ├── test-folder/
│   │   │   │   │           │   ├── log/
│   │   │   │   │           │   │   └── .gitkeep
│   │   │   │   │           │   ├── out/
│   │   │   │   │           │   │   ├── media/
│   │   │   │   │           │   │   │   └── .gitkeep
│   │   │   │   │           │   │   └── pictures/
│   │   │   │   │           │   │       ├── generated/
│   │   │   │   │           │   │       │   └── .gitkeep
│   │   │   │   │           │   │       ├── master/
│   │   │   │   │           │   │       │   └── .gitkeep
│   │   │   │   │           │   │       ├── media/
│   │   │   │   │           │   │       │   └── .gitkeep
│   │   │   │   │           │   │       └── promo/
│   │   │   │   │           │   │           └── .gitkeep
│   │   │   │   │           │   └── tmp/
│   │   │   │   │           │       └── .gitkeep
│   │   │   │   │           └── var/
│   │   │   │   │               └── .gitkeep
│   │   │   │   ├── Language/
│   │   │   │   │   └── LanguageInstallerTest.php
│   │   │   │   ├── SetupParametersFactoryTest.php
│   │   │   │   ├── ShopConfiguration/
│   │   │   │   │   └── ShopConfigurationUpdaterTest.php
│   │   │   │   └── ShopSetupCommandTest.php
│   │   │   └── Transition/
│   │   │       ├── Adapter/
│   │   │       │   ├── Configuration/
│   │   │       │   │   └── Dao/
│   │   │       │   │       └── ShopConfigurationSettingDaoTest.php
│   │   │       │   └── TemplateLogic/
│   │   │       │       ├── FormatCurrencyLogicTest.php
│   │   │       │       ├── FormatDateLogicTest.php
│   │   │       │       ├── FormatPriceLogicTest.php
│   │   │       │       ├── ScriptLogicTest.php
│   │   │       │       ├── TranslateFunctionLogicTest.php
│   │   │       │       ├── TranslateLogicTest.php
│   │   │       │       ├── TranslateSalutationLogicTest.php
│   │   │       │       ├── TruncateLogicTest.php
│   │   │       │       └── WordwrapLogicTest.php
│   │   │       └── Utility/
│   │   │           ├── BasicContextTest.php
│   │   │           └── ContextTest.php
│   │   └── Legacy/
│   │       ├── Application/
│   │       │   ├── Component/
│   │       │   │   └── Widget/
│   │       │   │       └── CategoryTreeTest.php
│   │       │   ├── Controller/
│   │       │   │   ├── AccountReviewControllerTest.php
│   │       │   │   ├── Admin/
│   │       │   │   │   ├── NavigationTree/
│   │       │   │   │   │   ├── Fixtures/
│   │       │   │   │   │   │   ├── module1/
│   │       │   │   │   │   │   │   ├── menu.xml
│   │       │   │   │   │   │   │   └── metadata.php
│   │       │   │   │   │   │   ├── module2/
│   │       │   │   │   │   │   │   ├── menu.xml
│   │       │   │   │   │   │   │   └── metadata.php
│   │       │   │   │   │   │   └── testModule/
│   │       │   │   │   │   │       ├── ModuleSetup.php
│   │       │   │   │   │   │       ├── Renderer.php
│   │       │   │   │   │   │       ├── RendererInterface.php
│   │       │   │   │   │   │       ├── metadata.php
│   │       │   │   │   │   │       └── services.yaml
│   │       │   │   │   │   ├── NavigationTreeDemoShopTest.php
│   │       │   │   │   │   └── NavigationTreeTest.php
│   │       │   │   │   ├── PaymentRDFaTest.php
│   │       │   │   │   └── ShopConfigurationTest.php
│   │       │   │   ├── FrontendController/
│   │       │   │   │   ├── FrontendComponentTest.php
│   │       │   │   │   └── FrontendSearchEngineTest.php
│   │       │   │   └── SearchControllerTest.php
│   │       │   └── Model/
│   │       │       ├── ManufacturerTest.php
│   │       │       ├── RatingTest.php
│   │       │       ├── ReviewTest.php
│   │       │       ├── SeoEncoderCategoryTest.php
│   │       │       └── UserTest.php
│   │       ├── Checkout/
│   │       │   └── BasketWithStockTest.php
│   │       ├── Core/
│   │       │   ├── Database/
│   │       │   │   └── Adapter/
│   │       │   │       ├── DatabaseInterfaceImplementation.php
│   │       │   │       ├── DatabaseInterfaceImplementationBase.php
│   │       │   │       └── Doctrine/
│   │       │   │           ├── DatabaseTest.php
│   │       │   │           └── ResultSetTest.php
│   │       │   ├── Model/
│   │       │   │   └── BaseModelTest.php
│   │       │   ├── Module/
│   │       │   │   ├── Fixtures/
│   │       │   │   │   ├── InvalidNamespaceModule/
│   │       │   │   │   │   ├── Controller/
│   │       │   │   │   │   │   └── NonExistentClass.php
│   │       │   │   │   │   ├── Model/
│   │       │   │   │   │   │   └── .gitkeep
│   │       │   │   │   │   └── metadata.php
│   │       │   │   │   ├── chainTestModuleClasses/
│   │       │   │   │   │   ├── FirstUser.php
│   │       │   │   │   │   ├── FourthUser.php
│   │       │   │   │   │   ├── SecondUser.php
│   │       │   │   │   │   └── ThirdUser.php
│   │       │   │   │   ├── with_class_extensions/
│   │       │   │   │   │   └── metadata.php
│   │       │   │   │   ├── with_class_extensions2/
│   │       │   │   │   │   ├── Controllers/
│   │       │   │   │   │   │   └── ContentController.php
│   │       │   │   │   │   └── metadata.php
│   │       │   │   │   ├── with_class_extensions_cleaner/
│   │       │   │   │   │   └── metadata.php
│   │       │   │   │   ├── with_everything/
│   │       │   │   │   │   └── metadata.php
│   │       │   │   │   ├── with_extending_blocks/
│   │       │   │   │   │   └── metadata.php
│   │       │   │   │   ├── with_metadata_v21/
│   │       │   │   │   │   ├── Smarty/
│   │       │   │   │   │   │   ├── PluginDirectory1WithMetadataVersion21/
│   │       │   │   │   │   │   │   └── .gitkeep
│   │       │   │   │   │   │   └── PluginDirectory2WithMetadataVersion21/
│   │       │   │   │   │   │       └── .gitkeep
│   │       │   │   │   │   ├── metadata.php
│   │       │   │   │   │   └── test_template.tpl
│   │       │   │   │   └── with_multiple_extensions/
│   │       │   │   │       └── metadata.php
│   │       │   │   └── ModuleListTest.php
│   │       │   ├── Routing/
│   │       │   │   └── ControllerIdToClassResolvingTest.php
│   │       │   ├── UtilsFileLocalImagesHandlingTest.php
│   │       │   └── WidgetControlTest.php
│   │       ├── Encryptor/
│   │       │   └── EncryptationTest.php
│   │       ├── Modules/
│   │       │   ├── ModuleInheritanceTest.php
│   │       │   ├── ModuleTranslationsTest.php
│   │       │   ├── TestData/
│   │       │   │   └── modules/
│   │       │   │       ├── extending_1_class/
│   │       │   │       │   ├── metadata.php
│   │       │   │       │   └── myorder.php
│   │       │   │       ├── extending_1_class_3_extensions/
│   │       │   │       │   └── metadata.php
│   │       │   │       ├── translation_Application/
│   │       │   │       │   ├── Application/
│   │       │   │       │   │   └── translations/
│   │       │   │       │   │       ├── de/
│   │       │   │       │   │       │   └── _lang.php
│   │       │   │       │   │       └── en/
│   │       │   │       │   │           └── _lang.php
│   │       │   │       │   ├── metadata.php
│   │       │   │       │   └── myarticle.php
│   │       │   │       └── with_everything/
│   │       │   │           ├── Event/
│   │       │   │           │   └── MyEvents.php
│   │       │   │           └── metadata.php
│   │       │   └── TestDataInheritance/
│   │       │       └── modules/
│   │       │           ├── Vendor1/
│   │       │           │   ├── ModuleChainExtension35/
│   │       │           │   │   ├── MyClass35.php
│   │       │           │   │   └── metadata.php
│   │       │           │   ├── ModuleChainExtension36/
│   │       │           │   │   ├── MyClass36.php
│   │       │           │   │   └── metadata.php
│   │       │           │   ├── ModuleChainExtension44/
│   │       │           │   │   ├── MyClass44.php
│   │       │           │   │   └── metadata.php
│   │       │           │   ├── ModuleInheritance16/
│   │       │           │   │   ├── MyClass.php
│   │       │           │   │   └── metadata.php
│   │       │           │   ├── ModuleInheritance28a/
│   │       │           │   │   ├── MyClass.php
│   │       │           │   │   └── metadata.php
│   │       │           │   ├── namespaced_from_ns/
│   │       │           │   │   ├── MyClass.php
│   │       │           │   │   └── metadata.php
│   │       │           │   └── own_namespace_extending_unified_namespace/
│   │       │           │       ├── MyClass.php
│   │       │           │       └── metadata.php
│   │       │           ├── Vendor2/
│   │       │           │   ├── ModuleChainExtension44/
│   │       │           │   │   ├── MyClass44.php
│   │       │           │   │   └── metadata.php
│   │       │           │   ├── ModuleInheritance24/
│   │       │           │   │   ├── MyClass.php
│   │       │           │   │   └── metadata.php
│   │       │           │   └── ModuleInheritance28b/
│   │       │           │       ├── MyClass.php
│   │       │           │       └── metadata.php
│   │       │           ├── module_chain_extension_3_1/
│   │       │           │   ├── metadata.php
│   │       │           │   └── vendor_1_module_3_1_myclass.php
│   │       │           ├── module_chain_extension_3_2/
│   │       │           │   ├── metadata.php
│   │       │           │   └── vendor_1_module_3_2_myclass.php
│   │       │           └── module_native_extension/
│   │       │               ├── Article.php
│   │       │               ├── ContentController.php
│   │       │               ├── NativeExtendingArticle.php
│   │       │               ├── NativeExtendingContentController.php
│   │       │               └── metadata.php
│   │       ├── Multilanguage/
│   │       │   ├── AdditionalTablesTest.php
│   │       │   ├── LanguageMainControllerStub.php
│   │       │   ├── MultiLanguageModelTest.php
│   │       │   ├── MultilanguageTrait.php
│   │       │   └── ViewTest.php
│   │       ├── OnlineInfo/
│   │       │   ├── CurlSpy.php
│   │       │   ├── FrontendServersInformationStoringTest.php
│   │       │   ├── OnlineLicenseCheckRequestFormationTest.php
│   │       │   └── OnlineModuleNotifierRequestFormationTest.php
│   │       ├── Price/
│   │       │   ├── BasketConstruct.php
│   │       │   ├── BasketTest.php
│   │       │   ├── DeliveryCostTest.php
│   │       │   ├── OrderNumberingTest.php
│   │       │   ├── OrderTest.php
│   │       │   ├── PriceTest.php
│   │       │   ├── ProductVatTest.php
│   │       │   ├── VatForShippingCountryTest.php
│   │       │   ├── VoucherTest.php
│   │       │   └── testcases/
│   │       │       ├── basket/
│   │       │       │   ├── PriceB2basket2.yaml
│   │       │       │   ├── case1.yaml
│   │       │       │   ├── case10.yaml
│   │       │       │   ├── case100.yaml
│   │       │       │   ├── case101.yaml
│   │       │       │   ├── case102.yaml
│   │       │       │   ├── case103.yaml
│   │       │       │   ├── case104.yaml
│   │       │       │   ├── case105.yaml
│   │       │       │   ├── case106.yaml
│   │       │       │   ├── case107.yaml
│   │       │       │   ├── case108.yaml
│   │       │       │   ├── case109.yaml
│   │       │       │   ├── case11.yaml
│   │       │       │   ├── case110.yaml
│   │       │       │   ├── case111.yaml
│   │       │       │   ├── case112.yaml
│   │       │       │   ├── case113.yaml
│   │       │       │   ├── case114.yaml
│   │       │       │   ├── case115.yaml
│   │       │       │   ├── case116.yaml
│   │       │       │   ├── case117.yaml
│   │       │       │   ├── case118.yaml
│   │       │       │   ├── case119.yaml
│   │       │       │   ├── case12.yaml
│   │       │       │   ├── case120.yaml
│   │       │       │   ├── case121.yaml
│   │       │       │   ├── case122.yaml
│   │       │       │   ├── case123.yaml
│   │       │       │   ├── case124.yaml
│   │       │       │   ├── case125.yaml
│   │       │       │   ├── case126.yaml
│   │       │       │   ├── case127.yaml
│   │       │       │   ├── case128.yaml
│   │       │       │   ├── case129.yaml
│   │       │       │   ├── case13.yaml
│   │       │       │   ├── case130.yaml
│   │       │       │   ├── case131.yaml
│   │       │       │   ├── case132.yaml
│   │       │       │   ├── case133.yaml
│   │       │       │   ├── case134.yaml
│   │       │       │   ├── case135.yaml
│   │       │       │   ├── case136.yaml
│   │       │       │   ├── case137.yaml
│   │       │       │   ├── case138.yaml
│   │       │       │   ├── case139.yaml
│   │       │       │   ├── case14.yaml
│   │       │       │   ├── case140.yaml
│   │       │       │   ├── case141.yaml
│   │       │       │   ├── case142.yaml
│   │       │       │   ├── case143.yaml
│   │       │       │   ├── case144.yaml
│   │       │       │   ├── case145.yaml
│   │       │       │   ├── case146.yaml
│   │       │       │   ├── case147.yaml
│   │       │       │   ├── case148.yaml
│   │       │       │   ├── case149.yaml
│   │       │       │   ├── case15.yaml
│   │       │       │   ├── case150.yaml
│   │       │       │   ├── case151.yaml
│   │       │       │   ├── case152.yaml
│   │       │       │   ├── case153.yaml
│   │       │       │   ├── case154.yaml
│   │       │       │   ├── case155.yaml
│   │       │       │   ├── case156.yaml
│   │       │       │   ├── case157.yaml
│   │       │       │   ├── case158.yaml
│   │       │       │   ├── case159.yaml
│   │       │       │   ├── case16.yaml
│   │       │       │   ├── case160.yaml
│   │       │       │   ├── case161.yaml
│   │       │       │   ├── case162.yaml
│   │       │       │   ├── case163.yaml
│   │       │       │   ├── case164.yaml
│   │       │       │   ├── case165.yaml
│   │       │       │   ├── case166.yaml
│   │       │       │   ├── case167.yaml
│   │       │       │   ├── case168.yaml
│   │       │       │   ├── case169.yaml
│   │       │       │   ├── case17.yaml
│   │       │       │   ├── case170.yaml
│   │       │       │   ├── case171.yaml
│   │       │       │   ├── case172.yaml
│   │       │       │   ├── case173.yaml
│   │       │       │   ├── case174.yaml
│   │       │       │   ├── case18.yaml
│   │       │       │   ├── case19.yaml
│   │       │       │   ├── case2.yaml
│   │       │       │   ├── case20.yaml
│   │       │       │   ├── case21.yaml
│   │       │       │   ├── case22.yaml
│   │       │       │   ├── case23.yaml
│   │       │       │   ├── case24.yaml
│   │       │       │   ├── case25.yaml
│   │       │       │   ├── case26.yaml
│   │       │       │   ├── case27.yaml
│   │       │       │   ├── case28.yaml
│   │       │       │   ├── case29.yaml
│   │       │       │   ├── case3.yaml
│   │       │       │   ├── case30.yaml
│   │       │       │   ├── case31.yaml
│   │       │       │   ├── case32.yaml
│   │       │       │   ├── case33.yaml
│   │       │       │   ├── case34.yaml
│   │       │       │   ├── case35.yaml
│   │       │       │   ├── case36.yaml
│   │       │       │   ├── case37.yaml
│   │       │       │   ├── case38.yaml
│   │       │       │   ├── case39.yaml
│   │       │       │   ├── case4.yaml
│   │       │       │   ├── case40.yaml
│   │       │       │   ├── case41.yaml
│   │       │       │   ├── case42.yaml
│   │       │       │   ├── case43.yaml
│   │       │       │   ├── case44.yaml
│   │       │       │   ├── case45.yaml
│   │       │       │   ├── case46.yaml
│   │       │       │   ├── case47.yaml
│   │       │       │   ├── case48.yaml
│   │       │       │   ├── case49.yaml
│   │       │       │   ├── case5.yaml
│   │       │       │   ├── case50.yaml
│   │       │       │   ├── case51.yaml
│   │       │       │   ├── case52.yaml
│   │       │       │   ├── case53.yaml
│   │       │       │   ├── case54.yaml
│   │       │       │   ├── case55.yaml
│   │       │       │   ├── case56.yaml
│   │       │       │   ├── case57.yaml
│   │       │       │   ├── case58.yaml
│   │       │       │   ├── case59.yaml
│   │       │       │   ├── case6.yaml
│   │       │       │   ├── case60.yaml
│   │       │       │   ├── case61.yaml
│   │       │       │   ├── case65.yaml
│   │       │       │   ├── case66.yaml
│   │       │       │   ├── case67.yaml
│   │       │       │   ├── case68.yaml
│   │       │       │   ├── case69.yaml
│   │       │       │   ├── case7.yaml
│   │       │       │   ├── case70.yaml
│   │       │       │   ├── case71.yaml
│   │       │       │   ├── case72.yaml
│   │       │       │   ├── case73.yaml
│   │       │       │   ├── case74.yaml
│   │       │       │   ├── case75.yaml
│   │       │       │   ├── case76.yaml
│   │       │       │   ├── case77.yaml
│   │       │       │   ├── case78.yaml
│   │       │       │   ├── case79.yaml
│   │       │       │   ├── case8.yaml
│   │       │       │   ├── case80.yaml
│   │       │       │   ├── case81.yaml
│   │       │       │   ├── case82.yaml
│   │       │       │   ├── case83.yaml
│   │       │       │   ├── case84.yaml
│   │       │       │   ├── case85.yaml
│   │       │       │   ├── case86.yaml
│   │       │       │   ├── case87.yaml
│   │       │       │   ├── case88.yaml
│   │       │       │   ├── case89.yaml
│   │       │       │   ├── case9.yaml
│   │       │       │   ├── case90.yaml
│   │       │       │   ├── case91.yaml
│   │       │       │   ├── case92.yaml
│   │       │       │   ├── case93.yaml
│   │       │       │   ├── case94.yaml
│   │       │       │   ├── case95.yaml
│   │       │       │   ├── case96.yaml
│   │       │       │   ├── case97.yaml
│   │       │       │   ├── case98.yaml
│   │       │       │   ├── case99.yaml
│   │       │       │   ├── testDeliveryBug4622(1).yaml
│   │       │       │   ├── testDeliveryBug4622(2).yaml
│   │       │       │   ├── testDeliveryBug4622(3).yaml
│   │       │       │   ├── testDeliveryBug4622(4).yaml
│   │       │       │   ├── testDeliveryBug4730(1).yaml
│   │       │       │   ├── testDeliveryBug4730(2).yaml
│   │       │       │   ├── testDeliveryByWeight(1).yaml
│   │       │       │   ├── testDeliveryByWeight(2).yaml
│   │       │       │   ├── testDeliveryByWeight(3).yaml
│   │       │       │   ├── testDeliveryByWeight(4).yaml
│   │       │       │   ├── testDeliveryByWeight(5).yaml
│   │       │       │   ├── testDeliveryByWeight(6).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(1).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(2).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(3).yaml
│   │       │       │   ├── testDiscountBug5913.yaml
│   │       │       │   ├── testDiscountSorting.yaml
│   │       │       │   ├── testDiscountSortingDBRMIndependency.yaml
│   │       │       │   ├── testFewItmDiscounts.yaml
│   │       │       │   ├── testFrontendItmDiscounts.yaml
│   │       │       │   ├── testFrontendNettoPrices.yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(1).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(2).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(3).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(4).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(5).yaml
│   │       │       │   ├── testFrontendOrderStep1CalculationVoucher.yaml
│   │       │       │   ├── testFrontendOrderStep1DeliverySortedWithCategories(1).yaml
│   │       │       │   ├── testFrontendOrderStep1DeliverySortedWithCategories(2).yaml
│   │       │       │   ├── testFrontendOrdersFractionQuantities1.yaml
│   │       │       │   ├── testFrontendOrdersFractionQuantities2.yaml
│   │       │       │   ├── testFrontendPriceA.yaml
│   │       │       │   ├── testFrontendPriceA2.yaml
│   │       │       │   ├── testFrontendPriceB.yaml
│   │       │       │   ├── testFrontendPriceB2.yaml
│   │       │       │   ├── testFrontendPriceB3.yaml
│   │       │       │   ├── testFrontendPriceB4.yaml
│   │       │       │   ├── testFrontendPriceC.yaml
│   │       │       │   ├── testFrontendVatForBillingCountry(1).yaml
│   │       │       │   └── testFrontendVatForBillingCountry(2).yaml
│   │       │       ├── basket_php83/
│   │       │       │   ├── PriceB2basket2.yaml
│   │       │       │   ├── case1.yaml
│   │       │       │   ├── case10.yaml
│   │       │       │   ├── case100.yaml
│   │       │       │   ├── case101.yaml
│   │       │       │   ├── case102.yaml
│   │       │       │   ├── case103.yaml
│   │       │       │   ├── case104.yaml
│   │       │       │   ├── case105.yaml
│   │       │       │   ├── case106.yaml
│   │       │       │   ├── case107.yaml
│   │       │       │   ├── case108.yaml
│   │       │       │   ├── case109.yaml
│   │       │       │   ├── case11.yaml
│   │       │       │   ├── case110.yaml
│   │       │       │   ├── case111.yaml
│   │       │       │   ├── case112.yaml
│   │       │       │   ├── case113.yaml
│   │       │       │   ├── case114.yaml
│   │       │       │   ├── case115.yaml
│   │       │       │   ├── case116.yaml
│   │       │       │   ├── case117.yaml
│   │       │       │   ├── case118.yaml
│   │       │       │   ├── case119.yaml
│   │       │       │   ├── case12.yaml
│   │       │       │   ├── case120.yaml
│   │       │       │   ├── case121.yaml
│   │       │       │   ├── case122.yaml
│   │       │       │   ├── case123.yaml
│   │       │       │   ├── case124.yaml
│   │       │       │   ├── case125.yaml
│   │       │       │   ├── case126.yaml
│   │       │       │   ├── case127.yaml
│   │       │       │   ├── case128.yaml
│   │       │       │   ├── case129.yaml
│   │       │       │   ├── case13.yaml
│   │       │       │   ├── case130.yaml
│   │       │       │   ├── case131.yaml
│   │       │       │   ├── case132.yaml
│   │       │       │   ├── case133.yaml
│   │       │       │   ├── case134.yaml
│   │       │       │   ├── case135.yaml
│   │       │       │   ├── case136.yaml
│   │       │       │   ├── case137.yaml
│   │       │       │   ├── case138.yaml
│   │       │       │   ├── case139.yaml
│   │       │       │   ├── case14.yaml
│   │       │       │   ├── case140.yaml
│   │       │       │   ├── case141.yaml
│   │       │       │   ├── case142.yaml
│   │       │       │   ├── case143.yaml
│   │       │       │   ├── case144.yaml
│   │       │       │   ├── case145.yaml
│   │       │       │   ├── case146.yaml
│   │       │       │   ├── case147.yaml
│   │       │       │   ├── case148.yaml
│   │       │       │   ├── case149.yaml
│   │       │       │   ├── case15.yaml
│   │       │       │   ├── case150.yaml
│   │       │       │   ├── case151.yaml
│   │       │       │   ├── case152.yaml
│   │       │       │   ├── case153.yaml
│   │       │       │   ├── case154.yaml
│   │       │       │   ├── case155.yaml
│   │       │       │   ├── case156.yaml
│   │       │       │   ├── case157.yaml
│   │       │       │   ├── case158.yaml
│   │       │       │   ├── case159.yaml
│   │       │       │   ├── case16.yaml
│   │       │       │   ├── case160.yaml
│   │       │       │   ├── case161.yaml
│   │       │       │   ├── case162.yaml
│   │       │       │   ├── case163.yaml
│   │       │       │   ├── case164.yaml
│   │       │       │   ├── case165.yaml
│   │       │       │   ├── case166.yaml
│   │       │       │   ├── case167.yaml
│   │       │       │   ├── case168.yaml
│   │       │       │   ├── case169.yaml
│   │       │       │   ├── case17.yaml
│   │       │       │   ├── case170.yaml
│   │       │       │   ├── case171.yaml
│   │       │       │   ├── case172.yaml
│   │       │       │   ├── case173.yaml
│   │       │       │   ├── case174.yaml
│   │       │       │   ├── case18.yaml
│   │       │       │   ├── case19.yaml
│   │       │       │   ├── case2.yaml
│   │       │       │   ├── case20.yaml
│   │       │       │   ├── case21.yaml
│   │       │       │   ├── case22.yaml
│   │       │       │   ├── case23.yaml
│   │       │       │   ├── case24.yaml
│   │       │       │   ├── case25.yaml
│   │       │       │   ├── case26.yaml
│   │       │       │   ├── case27.yaml
│   │       │       │   ├── case28.yaml
│   │       │       │   ├── case29.yaml
│   │       │       │   ├── case3.yaml
│   │       │       │   ├── case30.yaml
│   │       │       │   ├── case31.yaml
│   │       │       │   ├── case32.yaml
│   │       │       │   ├── case33.yaml
│   │       │       │   ├── case34.yaml
│   │       │       │   ├── case35.yaml
│   │       │       │   ├── case36.yaml
│   │       │       │   ├── case37.yaml
│   │       │       │   ├── case38.yaml
│   │       │       │   ├── case39.yaml
│   │       │       │   ├── case4.yaml
│   │       │       │   ├── case40.yaml
│   │       │       │   ├── case41.yaml
│   │       │       │   ├── case42.yaml
│   │       │       │   ├── case43.yaml
│   │       │       │   ├── case44.yaml
│   │       │       │   ├── case45.yaml
│   │       │       │   ├── case46.yaml
│   │       │       │   ├── case47.yaml
│   │       │       │   ├── case48.yaml
│   │       │       │   ├── case49.yaml
│   │       │       │   ├── case5.yaml
│   │       │       │   ├── case50.yaml
│   │       │       │   ├── case51.yaml
│   │       │       │   ├── case52.yaml
│   │       │       │   ├── case53.yaml
│   │       │       │   ├── case54.yaml
│   │       │       │   ├── case55.yaml
│   │       │       │   ├── case56.yaml
│   │       │       │   ├── case57.yaml
│   │       │       │   ├── case58.yaml
│   │       │       │   ├── case59.yaml
│   │       │       │   ├── case6.yaml
│   │       │       │   ├── case60.yaml
│   │       │       │   ├── case61.yaml
│   │       │       │   ├── case65.yaml
│   │       │       │   ├── case66.yaml
│   │       │       │   ├── case67.yaml
│   │       │       │   ├── case68.yaml
│   │       │       │   ├── case69.yaml
│   │       │       │   ├── case7.yaml
│   │       │       │   ├── case70.yaml
│   │       │       │   ├── case71.yaml
│   │       │       │   ├── case72.yaml
│   │       │       │   ├── case73.yaml
│   │       │       │   ├── case74.yaml
│   │       │       │   ├── case75.yaml
│   │       │       │   ├── case76.yaml
│   │       │       │   ├── case77.yaml
│   │       │       │   ├── case78.yaml
│   │       │       │   ├── case79.yaml
│   │       │       │   ├── case8.yaml
│   │       │       │   ├── case80.yaml
│   │       │       │   ├── case81.yaml
│   │       │       │   ├── case82.yaml
│   │       │       │   ├── case83.yaml
│   │       │       │   ├── case84.yaml
│   │       │       │   ├── case85.yaml
│   │       │       │   ├── case86.yaml
│   │       │       │   ├── case87.yaml
│   │       │       │   ├── case88.yaml
│   │       │       │   ├── case89.yaml
│   │       │       │   ├── case9.yaml
│   │       │       │   ├── case90.yaml
│   │       │       │   ├── case91.yaml
│   │       │       │   ├── case92.yaml
│   │       │       │   ├── case93.yaml
│   │       │       │   ├── case94.yaml
│   │       │       │   ├── case95.yaml
│   │       │       │   ├── case96.yaml
│   │       │       │   ├── case97.yaml
│   │       │       │   ├── case98.yaml
│   │       │       │   ├── case99.yaml
│   │       │       │   ├── testDeliveryBug4622(1).yaml
│   │       │       │   ├── testDeliveryBug4622(2).yaml
│   │       │       │   ├── testDeliveryBug4622(3).yaml
│   │       │       │   ├── testDeliveryBug4622(4).yaml
│   │       │       │   ├── testDeliveryBug4730(1).yaml
│   │       │       │   ├── testDeliveryBug4730(2).yaml
│   │       │       │   ├── testDeliveryByWeight(1).yaml
│   │       │       │   ├── testDeliveryByWeight(2).yaml
│   │       │       │   ├── testDeliveryByWeight(3).yaml
│   │       │       │   ├── testDeliveryByWeight(4).yaml
│   │       │       │   ├── testDeliveryByWeight(5).yaml
│   │       │       │   ├── testDeliveryByWeight(6).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(1).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(2).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(3).yaml
│   │       │       │   ├── testDiscountBug5913.yaml
│   │       │       │   ├── testDiscountSorting.yaml
│   │       │       │   ├── testDiscountSortingDBRMIndependency.yaml
│   │       │       │   ├── testFewItmDiscounts.yaml
│   │       │       │   ├── testFrontendItmDiscounts.yaml
│   │       │       │   ├── testFrontendNettoPrices.yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(1).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(2).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(3).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(4).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(5).yaml
│   │       │       │   ├── testFrontendOrderStep1CalculationVoucher.yaml
│   │       │       │   ├── testFrontendOrderStep1DeliverySortedWithCategories(1).yaml
│   │       │       │   ├── testFrontendOrderStep1DeliverySortedWithCategories(2).yaml
│   │       │       │   ├── testFrontendOrdersFractionQuantities1.yaml
│   │       │       │   ├── testFrontendOrdersFractionQuantities2.yaml
│   │       │       │   ├── testFrontendPriceA.yaml
│   │       │       │   ├── testFrontendPriceA2.yaml
│   │       │       │   ├── testFrontendPriceB.yaml
│   │       │       │   ├── testFrontendPriceB2.yaml
│   │       │       │   ├── testFrontendPriceB3.yaml
│   │       │       │   ├── testFrontendPriceB4.yaml
│   │       │       │   ├── testFrontendPriceC.yaml
│   │       │       │   ├── testFrontendVatForBillingCountry(1).yaml
│   │       │       │   └── testFrontendVatForBillingCountry(2).yaml
│   │       │       ├── basket_php84/
│   │       │       │   ├── PriceB2basket2.yaml
│   │       │       │   ├── case1.yaml
│   │       │       │   ├── case10.yaml
│   │       │       │   ├── case100.yaml
│   │       │       │   ├── case101.yaml
│   │       │       │   ├── case102.yaml
│   │       │       │   ├── case103.yaml
│   │       │       │   ├── case104.yaml
│   │       │       │   ├── case105.yaml
│   │       │       │   ├── case106.yaml
│   │       │       │   ├── case107.yaml
│   │       │       │   ├── case108.yaml
│   │       │       │   ├── case109.yaml
│   │       │       │   ├── case11.yaml
│   │       │       │   ├── case110.yaml
│   │       │       │   ├── case111.yaml
│   │       │       │   ├── case112.yaml
│   │       │       │   ├── case113.yaml
│   │       │       │   ├── case114.yaml
│   │       │       │   ├── case115.yaml
│   │       │       │   ├── case116.yaml
│   │       │       │   ├── case117.yaml
│   │       │       │   ├── case118.yaml
│   │       │       │   ├── case119.yaml
│   │       │       │   ├── case12.yaml
│   │       │       │   ├── case120.yaml
│   │       │       │   ├── case121.yaml
│   │       │       │   ├── case122.yaml
│   │       │       │   ├── case123.yaml
│   │       │       │   ├── case124.yaml
│   │       │       │   ├── case125.yaml
│   │       │       │   ├── case126.yaml
│   │       │       │   ├── case127.yaml
│   │       │       │   ├── case128.yaml
│   │       │       │   ├── case129.yaml
│   │       │       │   ├── case13.yaml
│   │       │       │   ├── case130.yaml
│   │       │       │   ├── case131.yaml
│   │       │       │   ├── case132.yaml
│   │       │       │   ├── case133.yaml
│   │       │       │   ├── case134.yaml
│   │       │       │   ├── case135.yaml
│   │       │       │   ├── case136.yaml
│   │       │       │   ├── case137.yaml
│   │       │       │   ├── case138.yaml
│   │       │       │   ├── case139.yaml
│   │       │       │   ├── case14.yaml
│   │       │       │   ├── case140.yaml
│   │       │       │   ├── case141.yaml
│   │       │       │   ├── case142.yaml
│   │       │       │   ├── case143.yaml
│   │       │       │   ├── case144.yaml
│   │       │       │   ├── case145.yaml
│   │       │       │   ├── case146.yaml
│   │       │       │   ├── case147.yaml
│   │       │       │   ├── case148.yaml
│   │       │       │   ├── case149.yaml
│   │       │       │   ├── case15.yaml
│   │       │       │   ├── case150.yaml
│   │       │       │   ├── case151.yaml
│   │       │       │   ├── case152.yaml
│   │       │       │   ├── case153.yaml
│   │       │       │   ├── case154.yaml
│   │       │       │   ├── case155.yaml
│   │       │       │   ├── case156.yaml
│   │       │       │   ├── case157.yaml
│   │       │       │   ├── case158.yaml
│   │       │       │   ├── case159.yaml
│   │       │       │   ├── case16.yaml
│   │       │       │   ├── case160.yaml
│   │       │       │   ├── case161.yaml
│   │       │       │   ├── case162.yaml
│   │       │       │   ├── case163.yaml
│   │       │       │   ├── case164.yaml
│   │       │       │   ├── case165.yaml
│   │       │       │   ├── case166.yaml
│   │       │       │   ├── case167.yaml
│   │       │       │   ├── case168.yaml
│   │       │       │   ├── case169.yaml
│   │       │       │   ├── case17.yaml
│   │       │       │   ├── case170.yaml
│   │       │       │   ├── case171.yaml
│   │       │       │   ├── case172.yaml
│   │       │       │   ├── case173.yaml
│   │       │       │   ├── case174.yaml
│   │       │       │   ├── case18.yaml
│   │       │       │   ├── case19.yaml
│   │       │       │   ├── case2.yaml
│   │       │       │   ├── case20.yaml
│   │       │       │   ├── case21.yaml
│   │       │       │   ├── case22.yaml
│   │       │       │   ├── case23.yaml
│   │       │       │   ├── case24.yaml
│   │       │       │   ├── case25.yaml
│   │       │       │   ├── case26.yaml
│   │       │       │   ├── case27.yaml
│   │       │       │   ├── case28.yaml
│   │       │       │   ├── case29.yaml
│   │       │       │   ├── case3.yaml
│   │       │       │   ├── case30.yaml
│   │       │       │   ├── case31.yaml
│   │       │       │   ├── case32.yaml
│   │       │       │   ├── case33.yaml
│   │       │       │   ├── case34.yaml
│   │       │       │   ├── case35.yaml
│   │       │       │   ├── case36.yaml
│   │       │       │   ├── case37.yaml
│   │       │       │   ├── case38.yaml
│   │       │       │   ├── case39.yaml
│   │       │       │   ├── case4.yaml
│   │       │       │   ├── case40.yaml
│   │       │       │   ├── case41.yaml
│   │       │       │   ├── case42.yaml
│   │       │       │   ├── case43.yaml
│   │       │       │   ├── case44.yaml
│   │       │       │   ├── case45.yaml
│   │       │       │   ├── case46.yaml
│   │       │       │   ├── case47.yaml
│   │       │       │   ├── case48.yaml
│   │       │       │   ├── case49.yaml
│   │       │       │   ├── case5.yaml
│   │       │       │   ├── case50.yaml
│   │       │       │   ├── case51.yaml
│   │       │       │   ├── case52.yaml
│   │       │       │   ├── case53.yaml
│   │       │       │   ├── case54.yaml
│   │       │       │   ├── case55.yaml
│   │       │       │   ├── case56.yaml
│   │       │       │   ├── case57.yaml
│   │       │       │   ├── case58.yaml
│   │       │       │   ├── case59.yaml
│   │       │       │   ├── case6.yaml
│   │       │       │   ├── case60.yaml
│   │       │       │   ├── case61.yaml
│   │       │       │   ├── case65.yaml
│   │       │       │   ├── case66.yaml
│   │       │       │   ├── case67.yaml
│   │       │       │   ├── case68.yaml
│   │       │       │   ├── case69.yaml
│   │       │       │   ├── case7.yaml
│   │       │       │   ├── case70.yaml
│   │       │       │   ├── case71.yaml
│   │       │       │   ├── case72.yaml
│   │       │       │   ├── case73.yaml
│   │       │       │   ├── case74.yaml
│   │       │       │   ├── case75.yaml
│   │       │       │   ├── case76.yaml
│   │       │       │   ├── case77.yaml
│   │       │       │   ├── case78.yaml
│   │       │       │   ├── case79.yaml
│   │       │       │   ├── case8.yaml
│   │       │       │   ├── case80.yaml
│   │       │       │   ├── case81.yaml
│   │       │       │   ├── case82.yaml
│   │       │       │   ├── case83.yaml
│   │       │       │   ├── case84.yaml
│   │       │       │   ├── case85.yaml
│   │       │       │   ├── case86.yaml
│   │       │       │   ├── case87.yaml
│   │       │       │   ├── case88.yaml
│   │       │       │   ├── case89.yaml
│   │       │       │   ├── case9.yaml
│   │       │       │   ├── case90.yaml
│   │       │       │   ├── case91.yaml
│   │       │       │   ├── case92.yaml
│   │       │       │   ├── case93.yaml
│   │       │       │   ├── case94.yaml
│   │       │       │   ├── case95.yaml
│   │       │       │   ├── case96.yaml
│   │       │       │   ├── case97.yaml
│   │       │       │   ├── case98.yaml
│   │       │       │   ├── case99.yaml
│   │       │       │   ├── testDeliveryBug4622(1).yaml
│   │       │       │   ├── testDeliveryBug4622(2).yaml
│   │       │       │   ├── testDeliveryBug4622(3).yaml
│   │       │       │   ├── testDeliveryBug4622(4).yaml
│   │       │       │   ├── testDeliveryBug4730(1).yaml
│   │       │       │   ├── testDeliveryBug4730(2).yaml
│   │       │       │   ├── testDeliveryByWeight(1).yaml
│   │       │       │   ├── testDeliveryByWeight(2).yaml
│   │       │       │   ├── testDeliveryByWeight(3).yaml
│   │       │       │   ├── testDeliveryByWeight(4).yaml
│   │       │       │   ├── testDeliveryByWeight(5).yaml
│   │       │       │   ├── testDeliveryByWeight(6).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(1).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(2).yaml
│   │       │       │   ├── testDeliveryLowerShippingCost(3).yaml
│   │       │       │   ├── testDiscountBug5913.yaml
│   │       │       │   ├── testDiscountSorting.yaml
│   │       │       │   ├── testDiscountSortingDBRMIndependency.yaml
│   │       │       │   ├── testFewItmDiscounts.yaml
│   │       │       │   ├── testFrontendItmDiscounts.yaml
│   │       │       │   ├── testFrontendNettoPrices.yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(1).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(2).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(3).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(4).yaml
│   │       │       │   ├── testFrontendOrderStep1Calculation2(5).yaml
│   │       │       │   ├── testFrontendOrderStep1CalculationVoucher.yaml
│   │       │       │   ├── testFrontendOrderStep1DeliverySortedWithCategories(1).yaml
│   │       │       │   ├── testFrontendOrderStep1DeliverySortedWithCategories(2).yaml
│   │       │       │   ├── testFrontendOrdersFractionQuantities1.yaml
│   │       │       │   ├── testFrontendOrdersFractionQuantities2.yaml
│   │       │       │   ├── testFrontendPriceA.yaml
│   │       │       │   ├── testFrontendPriceA2.yaml
│   │       │       │   ├── testFrontendPriceB.yaml
│   │       │       │   ├── testFrontendPriceB2.yaml
│   │       │       │   ├── testFrontendPriceB3.yaml
│   │       │       │   ├── testFrontendPriceB4.yaml
│   │       │       │   ├── testFrontendPriceC.yaml
│   │       │       │   ├── testFrontendVatForBillingCountry(1).yaml
│   │       │       │   └── testFrontendVatForBillingCountry(2).yaml
│   │       │       ├── delivery_cost/
│   │       │       │   ├── rules/
│   │       │       │   │   ├── first_applicable_rule_cost_per_cart.yaml
│   │       │       │   │   ├── first_applicable_rule_cost_per_item.yaml
│   │       │       │   │   ├── first_applicable_rule_cost_per_product.yaml
│   │       │       │   │   ├── multiple_rules_2_applied.yaml
│   │       │       │   │   └── multiple_rules_3_applied.yaml
│   │       │       │   └── rules_assigned_to/
│   │       │       │       ├── category.yaml
│   │       │       │       └── product.yaml
│   │       │       ├── order/
│   │       │       │   ├── case1.yaml
│   │       │       │   ├── case10.yaml
│   │       │       │   ├── case11.yaml
│   │       │       │   ├── case12.yaml
│   │       │       │   ├── case13.yaml
│   │       │       │   ├── case14.yaml
│   │       │       │   ├── case15.yaml
│   │       │       │   ├── case16.yaml
│   │       │       │   ├── case18.yaml
│   │       │       │   ├── case19.yaml
│   │       │       │   ├── case2.yaml
│   │       │       │   ├── case20.yaml
│   │       │       │   ├── case21.yaml
│   │       │       │   ├── case22.yaml
│   │       │       │   ├── case23.yaml
│   │       │       │   ├── case24.yaml
│   │       │       │   ├── case26.yaml
│   │       │       │   ├── case28.yaml
│   │       │       │   ├── case29.yaml
│   │       │       │   ├── case3.yaml
│   │       │       │   ├── case30.yaml
│   │       │       │   ├── case31.yaml
│   │       │       │   ├── case32.yaml
│   │       │       │   ├── case39.yaml
│   │       │       │   ├── case5.yaml
│   │       │       │   ├── case6.yaml
│   │       │       │   ├── case7.yaml
│   │       │       │   ├── case9.yaml
│   │       │       │   └── oxorder_test_recalc_order_by_use_case.yaml
│   │       │       ├── order_numbering/
│   │       │       │   ├── case1.yaml
│   │       │       │   └── case2.yaml
│   │       │       └── price/
│   │       │           ├── case1.yaml
│   │       │           ├── case10.yaml
│   │       │           ├── case100.yaml
│   │       │           ├── case101.yaml
│   │       │           ├── case102.yaml
│   │       │           ├── case103.yaml
│   │       │           ├── case104.yaml
│   │       │           ├── case105.yaml
│   │       │           ├── case106.yaml
│   │       │           ├── case107.yaml
│   │       │           ├── case108.yaml
│   │       │           ├── case109.yaml
│   │       │           ├── case11.yaml
│   │       │           ├── case110.yaml
│   │       │           ├── case111.yaml
│   │       │           ├── case112.yaml
│   │       │           ├── case113.yaml
│   │       │           ├── case114.yaml
│   │       │           ├── case115.yaml
│   │       │           ├── case116.yaml
│   │       │           ├── case117.yaml
│   │       │           ├── case118.yaml
│   │       │           ├── case119.yaml
│   │       │           ├── case12.yaml
│   │       │           ├── case120.yaml
│   │       │           ├── case121.yaml
│   │       │           ├── case122.yaml
│   │       │           ├── case123.yaml
│   │       │           ├── case124.yaml
│   │       │           ├── case125.yaml
│   │       │           ├── case126.yaml
│   │       │           ├── case127.yaml
│   │       │           ├── case128.yaml
│   │       │           ├── case129.yaml
│   │       │           ├── case13.yaml
│   │       │           ├── case130.yaml
│   │       │           ├── case131.yaml
│   │       │           ├── case132.yaml
│   │       │           ├── case133.yaml
│   │       │           ├── case134.yaml
│   │       │           ├── case135.yaml
│   │       │           ├── case136.yaml
│   │       │           ├── case137.yaml
│   │       │           ├── case138.yaml
│   │       │           ├── case139.yaml
│   │       │           ├── case14.yaml
│   │       │           ├── case140.yaml
│   │       │           ├── case141.yaml
│   │       │           ├── case142.yaml
│   │       │           ├── case143.yaml
│   │       │           ├── case144.yaml
│   │       │           ├── case145.yaml
│   │       │           ├── case146.yaml
│   │       │           ├── case147.yaml
│   │       │           ├── case148.yaml
│   │       │           ├── case149.yaml
│   │       │           ├── case15.yaml
│   │       │           ├── case150.yaml
│   │       │           ├── case151.yaml
│   │       │           ├── case152.yaml
│   │       │           ├── case153.yaml
│   │       │           ├── case154.yaml
│   │       │           ├── case155.yaml
│   │       │           ├── case156.yaml
│   │       │           ├── case157.yaml
│   │       │           ├── case16.yaml
│   │       │           ├── case17.yaml
│   │       │           ├── case18.yaml
│   │       │           ├── case19.yaml
│   │       │           ├── case2.yaml
│   │       │           ├── case20.yaml
│   │       │           ├── case21.yaml
│   │       │           ├── case22.yaml
│   │       │           ├── case23.yaml
│   │       │           ├── case24.yaml
│   │       │           ├── case25.yaml
│   │       │           ├── case26.yaml
│   │       │           ├── case27.yaml
│   │       │           ├── case28.yaml
│   │       │           ├── case29.yaml
│   │       │           ├── case3.yaml
│   │       │           ├── case30.yaml
│   │       │           ├── case31.yaml
│   │       │           ├── case32.yaml
│   │       │           ├── case33.yaml
│   │       │           ├── case34.yaml
│   │       │           ├── case35.yaml
│   │       │           ├── case36.yaml
│   │       │           ├── case37.yaml
│   │       │           ├── case38.yaml
│   │       │           ├── case39.yaml
│   │       │           ├── case4.yaml
│   │       │           ├── case40.yaml
│   │       │           ├── case41.yaml
│   │       │           ├── case42.yaml
│   │       │           ├── case43.yaml
│   │       │           ├── case44.yaml
│   │       │           ├── case45.yaml
│   │       │           ├── case46.yaml
│   │       │           ├── case47.yaml
│   │       │           ├── case48.yaml
│   │       │           ├── case49.yaml
│   │       │           ├── case5.yaml
│   │       │           ├── case50.yaml
│   │       │           ├── case51.yaml
│   │       │           ├── case52.yaml
│   │       │           ├── case53.yaml
│   │       │           ├── case54.yaml
│   │       │           ├── case55.yaml
│   │       │           ├── case56.yaml
│   │       │           ├── case57.yaml
│   │       │           ├── case58.yaml
│   │       │           ├── case59.yaml
│   │       │           ├── case6.yaml
│   │       │           ├── case60.yaml
│   │       │           ├── case61.yaml
│   │       │           ├── case62.yaml
│   │       │           ├── case63.yaml
│   │       │           ├── case64.yaml
│   │       │           ├── case65.yaml
│   │       │           ├── case66.yaml
│   │       │           ├── case67.yaml
│   │       │           ├── case68.yaml
│   │       │           ├── case69.yaml
│   │       │           ├── case7.yaml
│   │       │           ├── case70.yaml
│   │       │           ├── case71.yaml
│   │       │           ├── case72.yaml
│   │       │           ├── case73.yaml
│   │       │           ├── case74.yaml
│   │       │           ├── case75.yaml
│   │       │           ├── case78.yaml
│   │       │           ├── case8.yaml
│   │       │           ├── case83.yaml
│   │       │           ├── case84.yaml
│   │       │           ├── case85.yaml
│   │       │           ├── case86.yaml
│   │       │           ├── case87.yaml
│   │       │           ├── case88.yaml
│   │       │           ├── case89.yaml
│   │       │           ├── case9.yaml
│   │       │           ├── case90.yaml
│   │       │           ├── case91.yaml
│   │       │           ├── case92.yaml
│   │       │           ├── case93.yaml
│   │       │           ├── case94.yaml
│   │       │           ├── case95.yaml
│   │       │           ├── case96.yaml
│   │       │           ├── case97.yaml
│   │       │           ├── case98.yaml
│   │       │           └── case99.yaml
│   │       ├── Search/
│   │       │   └── ProductSearchTest.php
│   │       ├── Url/
│   │       │   └── WidgetUrlTest.php
│   │       └── User/
│   │           ├── LoginTest.php
│   │           └── UserFixtureTrait.php
│   ├── TestContainerFactory.php
│   ├── Unit/
│   │   └── Internal/
│   │       ├── BasicContextStub.php
│   │       ├── Container/
│   │       │   └── DataObject/
│   │       │       └── DIConfigWrapperTest.php
│   │       ├── ContextStub.php
│   │       ├── Domain/
│   │       │   ├── Admin/
│   │       │   │   ├── Factory/
│   │       │   │   │   └── AdminFactoryTest.php
│   │       │   │   └── Service/
│   │       │   │       └── AdminUserServiceTest.php
│   │       │   ├── Authentication/
│   │       │   │   ├── Generator/
│   │       │   │   │   └── RandomTokenGeneratorTest.php
│   │       │   │   └── Service/
│   │       │   │       └── PasswordVerificationServiceTest.php
│   │       │   ├── Contact/
│   │       │   │   └── Form/
│   │       │   │       ├── ContactFormConfigurationFactoryTest.php
│   │       │   │       ├── ContactFormEmailValidatorTest.php
│   │       │   │       ├── ContactFormFactoryTest.php
│   │       │   │       └── ContactFormMessageBuilderTest.php
│   │       │   ├── Email/
│   │       │   │   └── EmailValidatorServiceTest.php
│   │       │   ├── Media/
│   │       │   │   ├── DataObject/
│   │       │   │   │   ├── MediaPathTest.php
│   │       │   │   │   └── MediaTypeTest.php
│   │       │   │   ├── MediaUrlGeneratorTest.php
│   │       │   │   └── Validator/
│   │       │   │       ├── FileExtensionConstraintValidatorTest.php
│   │       │   │       ├── FileSizeConstraintValidatorTest.php
│   │       │   │       ├── MimeTypeConstraintValidatorTest.php
│   │       │   │       └── UploadValidityConstraintValidatorTest.php
│   │       │   ├── Product/
│   │       │   │   ├── Media/
│   │       │   │   │   ├── DataMapper/
│   │       │   │   │   │   └── DataMapperTest.php
│   │       │   │   │   └── DataObject/
│   │       │   │   │       ├── ProductMediaRoleSetTest.php
│   │       │   │   │       └── ProductMediaRoleTest.php
│   │       │   │   └── Search/
│   │       │   │       └── Event/
│   │       │   │           ├── AfterProductSearchEventTest.php
│   │       │   │           └── BeforeProductSearchEventTest.php
│   │       │   └── Review/
│   │       │       ├── Dao/
│   │       │       │   └── ProductRatingDaoTest.php
│   │       │       ├── DataMapper/
│   │       │       │   ├── ProductRatingDataMapperTest.php
│   │       │       │   ├── RatingDataMapperTest.php
│   │       │       │   └── ReviewDataMapperTest.php
│   │       │       └── Service/
│   │       │           ├── RatingCalculatorServiceTest.php
│   │       │           ├── ReviewAndRatingMergingServiceTest.php
│   │       │           └── UserReviewAndRatingServiceTest.php
│   │       ├── Framework/
│   │       │   ├── Api/
│   │       │   │   └── HttpExceptionListenerTest.php
│   │       │   ├── Cache/
│   │       │   │   └── Command/
│   │       │   │       └── ClearCacheCommandTest.php
│   │       │   ├── Configuration/
│   │       │   │   └── DataObject/
│   │       │   │       └── DatabaseConfigurationTest.php
│   │       │   ├── DIContainer/
│   │       │   │   └── ContainerBuilderTest.php
│   │       │   ├── Database/
│   │       │   │   ├── IdTest.php
│   │       │   │   └── Logger/
│   │       │   │       └── QueryFilterTest.php
│   │       │   ├── FileSystem/
│   │       │   │   └── MasterImageHandlerTest.php
│   │       │   ├── Form/
│   │       │   │   ├── FromTest.php
│   │       │   │   └── RequiredFieldsValidatorTest.php
│   │       │   ├── FormConfiguration/
│   │       │   │   └── FromConfigurationTest.php
│   │       │   ├── Mailing/
│   │       │   │   ├── Adapter/
│   │       │   │   │   └── SymfonyMailerAdapterTest.php
│   │       │   │   └── Factory/
│   │       │   │       └── TransportFactoryTest.php
│   │       │   ├── Module/
│   │       │   │   ├── Cache/
│   │       │   │   │   └── InvalidateModuleCacheEventSubscriberTest.php
│   │       │   │   ├── Configuration/
│   │       │   │   │   ├── Bridge/
│   │       │   │   │   │   └── ModuleConfigurationDaoBridgeTest.php
│   │       │   │   │   ├── Cache/
│   │       │   │   │   │   └── ClassPropertyModuleConfigurationCacheTest.php
│   │       │   │   │   ├── Dao/
│   │       │   │   │   │   └── ModuleEnvironmentConfigurationExtenderTest.php
│   │       │   │   │   ├── DataMapper/
│   │       │   │   │   │   └── ModuleConfigurationDataMapperTest.php
│   │       │   │   │   └── DataObject/
│   │       │   │   │       ├── ClassExtensionsChainTest.php
│   │       │   │   │       ├── ModuleConfigurationTest.php
│   │       │   │   │       └── ShopConfigurationTest.php
│   │       │   │   ├── Facade/
│   │       │   │   │   └── ActiveModulesDataProviderBridgeTest.php
│   │       │   │   ├── Install/
│   │       │   │   │   └── Service/
│   │       │   │   │       ├── BootstrapModuleInstallerTest.php
│   │       │   │   │       └── ProjectConfigurationGeneratorTest.php
│   │       │   │   ├── MetaData/
│   │       │   │   │   ├── Converter/
│   │       │   │   │   │   ├── MetaDataConverterAggregateTest.php
│   │       │   │   │   │   └── ModuleSettingsBooleanConverterTest.php
│   │       │   │   │   ├── Dao/
│   │       │   │   │   │   ├── MetaDataNormalizerTest.php
│   │       │   │   │   │   └── MetaDataSchemataProviderTest.php
│   │       │   │   │   └── Validator/
│   │       │   │   │       ├── MetaDataSchemaValidatorTest.php
│   │       │   │   │       ├── MetaDataValidatorAggregateTest.php
│   │       │   │   │       ├── ModuleIdValidatorTest.php
│   │       │   │   │       ├── SchemaValidatorTest.php
│   │       │   │   │       └── ShopModuleSettingBooleanValidatorTest.php
│   │       │   │   ├── Path/
│   │       │   │   │   ├── ModuleAssetsPathResolverTest.php
│   │       │   │   │   └── ModulePathResolverTest.php
│   │       │   │   ├── Setup/
│   │       │   │   │   └── Validator/
│   │       │   │   │       ├── ClassExtensionsModuleSettingValidatorTest.php
│   │       │   │   │       ├── ControllersValidatorTest.php
│   │       │   │   │       └── EventsModuleSettingValidatorTest.php
│   │       │   │   └── Template/
│   │       │   │       └── Locator/
│   │       │   │           └── ModulesMenuFileLocatorTest.php
│   │       │   ├── RateLimiter/
│   │       │   │   ├── ApiRateLimitListenerTest.php
│   │       │   │   ├── ApiRateLimiterFactoryTest.php
│   │       │   │   └── RateLimitHeadersListenerTest.php
│   │       │   ├── Templating/
│   │       │   │   ├── Locator/
│   │       │   │   │   ├── AdminTemplateFileLocatorTest.php
│   │       │   │   │   ├── EditionMenuFileLocatorTest.php
│   │       │   │   │   ├── EditionUserFileLocatorTest.php
│   │       │   │   │   └── TemplateFileLocatorTest.php
│   │       │   │   └── TemplateRendererTest.php
│   │       │   └── Theme/
│   │       │       └── Bridge/
│   │       │           └── AdminThemeBridgeTest.php
│   │       ├── Setup/
│   │       │   ├── Directory/
│   │       │   │   └── DirectoryValidatorTest.php
│   │       │   ├── Htaccess/
│   │       │   │   ├── HtaccessDaoFactoryTest.php
│   │       │   │   ├── HtaccessDaoTest.php
│   │       │   │   ├── HtaccessUpdaterTest.php
│   │       │   │   ├── ShopBaseUrlTest.php
│   │       │   │   └── testData/
│   │       │   │       └── .htaccess
│   │       │   ├── Language/
│   │       │   │   └── DefaultLanguageTest.php
│   │       │   └── ShopSetupCommandTest.php
│   │       ├── Transition/
│   │       │   └── Adapter/
│   │       │       ├── Configuration/
│   │       │       │   └── Utility/
│   │       │       │       └── ShopSettingEncoderTest.php
│   │       │       └── TemplateLogic/
│   │       │           └── IncludeDynamicLogicTest.php
│   │       └── Utility/
│   │           ├── Authentication/
│   │           │   └── Policy/
│   │           │       └── PasswordPolicyTest.php
│   │           ├── Hash/
│   │           │   └── Service/
│   │           │       ├── Argon2IPasswordHashServiceTest.php
│   │           │       └── BcryptPasswordHashServiceTest.php
│   │           └── Url/
│   │               └── UrlParserTest.php
│   ├── bootstrap.php
│   ├── codeception.yml
│   └── scripts/
│       ├── check_log.sh
│       ├── codeception.sh
│       ├── codeception_failure_pattern.txt
│       ├── deprecated.sh
│       ├── deprecated_failure_pattern.txt
│       ├── integration.sh
│       ├── integration_failure_pattern.txt
│       ├── php-cs-report.sh
│       ├── unit.sh
│       └── unit_failure_pattern.txt
└── var/
    └── .gitignore
Download .txt
Showing preview only (1,047K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (10543 symbols across 1510 files)

FILE: source/Application/Component/BasketComponent.php
  class BasketComponent (line 28) | class BasketComponent extends \OxidEsales\Eshop\Core\Controller\BaseCont...
    method init (line 67) | public function init()
    method render (line 101) | public function render()
    method toBasket (line 135) | public function toBasket($sProductId = null, $dAmount = null, $aSel = ...
    method changeBasket (line 205) | public function changeBasket(
    method getRedirectUrl (line 269) | protected function getRedirectUrl()
    method getPersistedParameters (line 312) | protected function getPersistedParameters($persistedParameters = null)
    method getItems (line 333) | protected function getItems(
    method addItems (line 394) | protected function addItems($products)
    method setLastCall (line 455) | protected function setLastCall($sCallName, $aProductInfo, $aBasketInfo)
    method setLastCallFnc (line 465) | protected function setLastCallFnc($sCallName)
    method getLastCallFnc (line 475) | protected function getLastCallFnc()
    method isRootCatChanged (line 485) | public function isRootCatChanged()
    method executeUserChoice (line 518) | public function executeUserChoice()
    method emptyBasket (line 538) | protected function emptyBasket($oBasket)
    method prepareProductInformation (line 551) | protected function prepareProductInformation($addProductId, $productInfo)
    method addItemToBasket (line 576) | protected function addItemToBasket($basket, $itemData, $errorDestination)

FILE: source/Application/Component/CategoriesComponent.php
  class CategoriesComponent (line 18) | class CategoriesComponent extends \OxidEsales\Eshop\Core\Controller\Base...
    method init (line 57) | public function init()
    method getProduct (line 87) | public function getProduct()
    method getActCat (line 110) | protected function getActCat()
    method loadCategoryTree (line 146) | protected function loadCategoryTree($sActCat)
    method loadManufacturerTree (line 167) | protected function loadManufacturerTree($sActManufacturer)
    method render (line 194) | public function render()
    method addAdditionalParams (line 222) | protected function addAdditionalParams($oProduct, $sActCat, $sActManuf...
    method getDefaultParams (line 266) | protected function getDefaultParams($oProduct)
    method setCategoryTree (line 290) | public function setCategoryTree($oCategoryTree)
    method setManufacturerTree (line 300) | public function setManufacturerTree($oManufacturerTree)
    method getManufacturerList (line 308) | protected function getManufacturerList()

FILE: source/Application/Component/CurrencyComponent.php
  class CurrencyComponent (line 17) | class CurrencyComponent extends \OxidEsales\Eshop\Core\Controller\BaseCo...
    method init (line 51) | public function init()
    method render (line 102) | public function render()

FILE: source/Application/Component/LanguageComponent.php
  class LanguageComponent (line 18) | class LanguageComponent extends \OxidEsales\Eshop\Core\Controller\BaseCo...
    method render (line 32) | public function render()

FILE: source/Application/Component/Locator.php
  class Locator (line 22) | class Locator extends \OxidEsales\Eshop\Core\Base
    method __construct (line 55) | public function __construct($sType = null)
    method setLocatorData (line 69) | public function setLocatorData($oCurrArticle, $oLocatorTarget)
    method setListLocatorData (line 90) | protected function setListLocatorData($oLocatorTarget, $oCurrArticle)
    method setVendorLocatorData (line 133) | protected function setVendorLocatorData($oLocatorTarget, $oCurrArticle)
    method setManufacturerLocatorData (line 177) | protected function setManufacturerLocatorData($oLocatorTarget, $oCurrA...
    method setSearchLocatorData (line 231) | protected function setSearchLocatorData($oLocatorTarget, $oCurrArticle)
    method _setRecommlistLocatorData (line 300) | protected function _setRecommlistLocatorData($oLocatorTarget, $oCurrAr...
    method loadIdsInList (line 361) | protected function loadIdsInList($oCategory, $oCurrArticle, $sOrderBy ...
    method makeLink (line 392) | protected function makeLink($sLink, $sParams)
    method findActPageNumber (line 411) | protected function findActPageNumber($iPageNr, $oIdList = null, $oArti...
    method getPageNumber (line 436) | protected function getPageNumber($iPageNr)
    method getProductPos (line 453) | protected function getProductPos($oArticle, $oIdList, $oLocatorTarget)
    method getErrorMessage (line 494) | public function getErrorMessage()

FILE: source/Application/Component/ShopComponent.php
  class ShopComponent (line 19) | class ShopComponent extends \OxidEsales\Eshop\Core\Controller\BaseContro...
    method render (line 33) | public function render()

FILE: source/Application/Component/UserComponent.php
  class UserComponent (line 43) | class UserComponent extends \OxidEsales\Eshop\Core\Controller\BaseContro...
    method init (line 105) | public function init()
    method render (line 120) | public function render()
    method checkPsState (line 138) | protected function checkPsState()
    method loadSessionUser (line 162) | protected function loadSessionUser()
    method login (line 202) | public function login()
    method afterLogin (line 247) | protected function afterLogin($oUser)
    method login_noredirect (line 272) | public function login_noredirect() //phpcs:ignore PSR1.Methods.CamelCa...
    method afterLogout (line 303) | protected function afterLogout()
    method logout (line 331) | public function logout()
    method resetPermissions (line 352) | protected function resetPermissions()
    method changeUser (line 365) | public function changeUser()
    method changeuser_testvalues (line 376) | public function changeuser_testvalues() //phpcs:ignore PSR1.Methods.Ca...
    method createUser (line 407) | public function createUser()
    method configureUserBeforeCreation (line 537) | protected function configureUserBeforeCreation($user)
    method registerUser (line 547) | public function registerUser()
    method deleteShippingAddress (line 565) | public function deleteShippingAddress()
    method canUserDeleteShippingAddress (line 584) | private function canUserDeleteShippingAddress($address)
    method saveInvitor (line 598) | protected function saveInvitor()
    method saveDeliveryAddressState (line 609) | protected function saveDeliveryAddressState()
    method changeUserWithoutRedirect (line 634) | protected function changeUserWithoutRedirect()
    method getDelAddressData (line 708) | protected function getDelAddressData()
    method getLogoutLink (line 736) | protected function getLogoutLink()
    method setLoginStatus (line 771) | public function setLoginStatus($iStatus)
    method getLoginStatus (line 784) | public function getLoginStatus()
    method getInvitor (line 792) | public function getInvitor()
    method setRecipient (line 804) | public function setRecipient()
    method cleanAddress (line 818) | private function cleanAddress($address, $updatableFields)
    method trimAddress (line 837) | private function trimAddress($address)
    method isGuestUser (line 849) | private function isGuestUser(User $user): bool
    method isUserNameUpdated (line 854) | private function isUserNameUpdated(string $currentName, string $newNam...
    method deleteExistingGuestUser (line 862) | private function deleteExistingGuestUser(string $newName): void
    method getShippingAddress (line 871) | private function getShippingAddress(): ?array
    method getBillingAddress (line 878) | private function getBillingAddress(): ?array
    method removeNonAddressFields (line 888) | private function removeNonAddressFields(array $addressFormData): array
    method setSessionLoginToken (line 907) | private function setSessionLoginToken(string $passwordHash): void

FILE: source/Application/Component/UtilsComponent.php
  class UtilsComponent (line 19) | class UtilsComponent extends \OxidEsales\Eshop\Core\Controller\BaseContr...
    method toCompareList (line 37) | public function toCompareList(
    method toNoticeList (line 95) | public function toNoticeList($sProductId = null, $dAmount = null, $aSe...
    method toWishList (line 112) | public function toWishList($sProductId = null, $dAmount = null, $aSel ...
    method toList (line 132) | protected function toList($sListType, $sProductId, $dAmount, $aSel)
    method render (line 160) | public function render()

FILE: source/Application/Component/Widget/Actions.php
  class Actions (line 14) | class Actions extends \OxidEsales\Eshop\Application\Component\Widget\Wid...
    method getAction (line 35) | public function getAction()
    method getLoadActionsParam (line 52) | protected function getLoadActionsParam()
    method getActionName (line 64) | public function getActionName()
    method getListType (line 78) | public function getListType()

FILE: source/Application/Component/Widget/ArticleBox.php
  class ArticleBox (line 16) | class ArticleBox extends \OxidEsales\Eshop\Application\Component\Widget\...
    method getActiveCategory (line 46) | public function getActiveCategory()
    method render (line 61) | public function render()
    method setProduct (line 85) | public function setProduct($oArticle)
    method getProduct (line 95) | public function getProduct()
    method getLink (line 122) | public function getLink($iLang = null)
    method isVatIncluded (line 132) | public function isVatIncluded()
    method getWishId (line 142) | public function getWishId()
    method getRemoveFunction (line 152) | public function getRemoveFunction()
    method getToBasketFunction (line 162) | public function getToBasketFunction()
    method getDisableToCart (line 172) | public function getDisableToCart()
    method getIndex (line 182) | public function getIndex()
    method getRecommId (line 194) | public function getRecommId()
    method getIteration (line 204) | public function getIteration()
    method getShowMainLink (line 214) | public function getShowMainLink()
    method getAltProduct (line 224) | public function getAltProduct()
    method addDynParamsToLink (line 237) | protected function addDynParamsToLink($sAddDynParams, $oArticle)
    method getArticleById (line 260) | protected function getArticleById($sArticleId)
    method updateDynamicParameters (line 287) | protected function updateDynamicParameters($dynamicParameters)

FILE: source/Application/Component/Widget/ArticleDetails.php
  class ArticleDetails (line 25) | class ArticleDetails extends \OxidEsales\Eshop\Application\Component\Wid...
    method getActZoomPic (line 217) | public function getActZoomPic()
    method getParentProduct (line 229) | protected function getParentProduct($sParentId)
    method getAddDynUrlParams (line 248) | protected function getAddDynUrlParams()
    method processProduct (line 260) | protected function processProduct($oProduct)
    method ratingIsActive (line 273) | public function ratingIsActive()
    method canRate (line 283) | public function canRate()
    method getAttributes (line 302) | public function getAttributes()
    method getLinkType (line 328) | public function getLinkType()
    method getVariantListExceptCurrent (line 359) | public function getVariantListExceptCurrent()
    method loadVariantInformation (line 380) | public function loadVariantInformation()
    method getVariantList (line 418) | public function getVariantList()
    method getMediaFiles (line 428) | public function getMediaFiles()
    method getLastProducts (line 445) | public function getLastProducts($iCnt = 4)
    method getManufacturer (line 466) | public function getManufacturer()
    method getVendor (line 480) | public function getVendor()
    method getCategory (line 494) | public function getCategory()
    method getPictureGallery (line 508) | public function getPictureGallery()
    method hasMultipleImages (line 518) | public function hasMultipleImages(): bool
    method getMediaItems (line 523) | public function getMediaItems(): array
    method getReviews (line 533) | public function getReviews()
    method getCrossSelling (line 550) | public function getCrossSelling()
    method getSimilarProducts (line 567) | public function getSimilarProducts()
    method getSimilarRecommListIds (line 586) | public function getSimilarRecommListIds()
    method getAccessoires (line 604) | public function getAccessoires()
    method getAlsoBoughtTheseProducts (line 621) | public function getAlsoBoughtTheseProducts()
    method isPriceAlarm (line 638) | public function isPriceAlarm()
    method getSubject (line 651) | protected function getSubject($iLang)
    method getSearchTitle (line 661) | public function getSearchTitle()
    method setSearchTitle (line 671) | public function setSearchTitle($sTitle)
    method setCatTreePath (line 681) | public function setCatTreePath($sActCatPath)
    method isPersParam (line 691) | public function isPersParam()
    method getRatingValue (line 703) | public function getRatingValue()
    method isReviewActive (line 721) | public function isReviewActive()
    method getRatingCount (line 731) | public function getRatingCount()
    method getPriceAlarmStatus (line 749) | public function getPriceAlarmStatus()
    method getBidPrice (line 759) | public function getBidPrice()
    method getVariantSelections (line 778) | public function getVariantSelections()
    method getPicturesProduct (line 797) | public function getPicturesProduct()
    method getProduct (line 812) | public function getProduct()
    method setSortingParameters (line 852) | protected function setSortingParameters()
    method render (line 869) | public function render()
    method isMdVariantView (line 907) | public function isMdVariantView()
    method additionalChecksForArticle (line 926) | protected function additionalChecksForArticle($myUtils, $myConfig)
    method getDefaultSorting (line 952) | public function getDefaultSorting()

FILE: source/Application/Component/Widget/CategoryTree.php
  class CategoryTree (line 16) | class CategoryTree extends \OxidEsales\Eshop\Application\Component\Widge...
    method render (line 37) | public function render()
    method getDeepLevel (line 64) | public function getDeepLevel()
    method getContentCategory (line 74) | public function getContentCategory()

FILE: source/Application/Component/Widget/CookieNote.php
  class CookieNote (line 13) | class CookieNote extends \OxidEsales\Eshop\Application\Component\Widget\...
    method render (line 28) | public function render()
    method isEnabled (line 40) | public function isEnabled()

FILE: source/Application/Component/Widget/CurrencyList.php
  class CurrencyList (line 13) | class CurrencyList extends \OxidEsales\Eshop\Application\Component\Widge...

FILE: source/Application/Component/Widget/Information.php
  class Information (line 14) | class Information extends \OxidEsales\Eshop\Application\Component\Widget...
    method getServicesKeys (line 33) | public function getServicesKeys()
    method getServicesList (line 45) | public function getServicesList()
    method getContentList (line 58) | protected function getContentList()

FILE: source/Application/Component/Widget/LanguageList.php
  class LanguageList (line 13) | class LanguageList extends \OxidEsales\Eshop\Application\Component\Widge...

FILE: source/Application/Component/Widget/ManufacturerList.php
  class ManufacturerList (line 14) | class ManufacturerList extends \OxidEsales\Eshop\Application\Component\W...

FILE: source/Application/Component/Widget/MiniBasket.php
  class MiniBasket (line 13) | class MiniBasket extends \OxidEsales\Eshop\Application\Component\Widget\...

FILE: source/Application/Component/Widget/Rating.php
  class Rating (line 14) | class Rating extends \OxidEsales\Eshop\Application\Component\Widget\Widg...
    method render (line 52) | public function render()
    method getRatingValue (line 64) | public function getRatingValue()
    method getRatingCount (line 82) | public function getRatingCount()
    method getRateUrl (line 92) | public function getRateUrl()
    method canRate (line 102) | public function canRate()
    method getArticleNId (line 112) | public function getArticleNId()

FILE: source/Application/Component/Widget/Recommendation.php
  class Recommendation (line 16) | class Recommendation extends \OxidEsales\Eshop\Application\Component\Wid...
    method getSimilarRecommLists (line 39) | public function getSimilarRecommLists()
    method getRecommList (line 53) | public function getRecommList()

FILE: source/Application/Component/Widget/Review.php
  class Review (line 13) | class Review extends \OxidEsales\Eshop\Application\Component\Widget\Widg...
    method render (line 37) | public function render()
    method getReviewType (line 49) | public function getReviewType()
    method getArticleId (line 59) | public function getArticleId()
    method getArticleNId (line 69) | public function getArticleNId()
    method getRecommListId (line 81) | public function getRecommListId()
    method canRate (line 91) | public function canRate()
    method getReviewUserHash (line 101) | public function getReviewUserHash()
    method getReviews (line 111) | public function getReviews()

FILE: source/Application/Component/Widget/ServiceList.php
  class ServiceList (line 14) | class ServiceList extends \OxidEsales\Eshop\Application\Component\Widget...

FILE: source/Application/Component/Widget/ServiceMenu.php
  class ServiceMenu (line 14) | class ServiceMenu extends \OxidEsales\Eshop\Application\Component\Widget...
    method getCompareItems (line 39) | public function getCompareItems($blJson = false)

FILE: source/Application/Component/Widget/VendorList.php
  class VendorList (line 14) | class VendorList extends \OxidEsales\Eshop\Application\Component\Widget\...
    method getVendorlist (line 28) | public function getVendorlist()

FILE: source/Application/Component/Widget/WidgetController.php
  class WidgetController (line 14) | class WidgetController extends \OxidEsales\Eshop\Application\Controller\...
    method init (line 37) | public function init()
    method processRequest (line 63) | protected function processRequest()

FILE: source/Application/Controller/AccountController.php
  class AccountController (line 19) | class AccountController extends \OxidEsales\Eshop\Application\Controller...
    method render (line 118) | public function render()
    method getLoginTemplate (line 145) | protected function getLoginTemplate()
    method confirmTerms (line 155) | public function confirmTerms()
    method getNavigationParams (line 176) | public function getNavigationParams()
    method redirectAfterLogin (line 202) | public function redirectAfterLogin()
    method getOrderCnt (line 229) | public function getOrderCnt()
    method getArticleId (line 246) | public function getArticleId()
    method getSearchParamForHtml (line 263) | public function getSearchParamForHtml()
    method getSearchParam (line 280) | public function getSearchParam()
    method getListType (line 297) | public function getListType()
    method getBreadCrumb (line 315) | public function getBreadCrumb()
    method getCompareItemsCnt (line 338) | public function getCompareItemsCnt()
    method getTitle (line 350) | public function getTitle()
    method deleteAccount (line 369) | public function deleteAccount()
    method isUserAllowedToDeleteOwnAccount (line 395) | public function isUserAllowedToDeleteOwnAccount()
    method getAccountDeletionStatus (line 409) | public function getAccountDeletionStatus()
    method canUserAccountBeDeleted (line 419) | private function canUserAccountBeDeleted()

FILE: source/Application/Controller/AccountDownloadsController.php
  class AccountDownloadsController (line 16) | class AccountDownloadsController extends \OxidEsales\Eshop\Application\C...
    method getBreadCrumb (line 43) | public function getBreadCrumb()
    method getOrderFilesList (line 67) | public function getOrderFilesList()
    method prepareForTemplate (line 88) | protected function prepareForTemplate($oOrderFileList)
    method getDownloadError (line 112) | public function getDownloadError()

FILE: source/Application/Controller/AccountNewsletterController.php
  class AccountNewsletterController (line 18) | class AccountNewsletterController extends \OxidEsales\Eshop\Application\...
    method render (line 40) | public function render()
    method isNewsletter (line 59) | public function isNewsletter()
    method subscribe (line 75) | public function subscribe()
    method getSubscriptionStatus (line 99) | public function getSubscriptionStatus()
    method getBreadCrumb (line 109) | public function getBreadCrumb()

FILE: source/Application/Controller/AccountNoticeListController.php
  class AccountNoticeListController (line 19) | class AccountNoticeListController extends \OxidEsales\Eshop\Application\...
    method render (line 73) | public function render()
    method getNoticeProductList (line 91) | public function getNoticeProductList()
    method getSimilarProducts (line 107) | public function getSimilarProducts()
    method getSimilarRecommListIds (line 128) | public function getSimilarRecommListIds()
    method getBreadCrumb (line 147) | public function getBreadCrumb()

FILE: source/Application/Controller/AccountOrderController.php
  class AccountOrderController (line 21) | class AccountOrderController extends \OxidEsales\Eshop\Application\Contr...
    method render (line 64) | public function render()
    method getOrderList (line 82) | public function getOrderList()
    method getOrderArticleList (line 107) | public function getOrderArticleList()
    method getPageNavigation (line 127) | public function getPageNavigation()
    method getBreadCrumb (line 141) | public function getBreadCrumb()

FILE: source/Application/Controller/AccountPasswordController.php
  class AccountPasswordController (line 20) | class AccountPasswordController extends \OxidEsales\Eshop\Application\Co...
    method render (line 43) | public function render()
    method changePassword (line 61) | public function changePassword()
    method isPasswordChanged (line 117) | public function isPasswordChanged()
    method getBreadCrumb (line 127) | public function getBreadCrumb()

FILE: source/Application/Controller/AccountRecommlistController.php
  class AccountRecommlistController (line 21) | class AccountRecommlistController extends \OxidEsales\Eshop\Application\...
    method render (line 80) | public function render()
    method getNavigationParams (line 108) | public function getNavigationParams()
    method getRecommLists (line 125) | public function getRecommLists()
    method getArticleList (line 143) | public function getArticleList()
    method getActiveRecommList (line 174) | public function getActiveRecommList()
    method setActiveRecommList (line 203) | public function setActiveRecommList($oRecommList)
    method saveRecommList (line 213) | public function saveRecommList()
    method isSavedList (line 256) | public function isSavedList()
    method editList (line 266) | public function editList()
    method removeArticle (line 293) | public function removeArticle()
    method getPageNavigation (line 317) | public function getPageNavigation()
    method getBreadCrumb (line 334) | public function getBreadCrumb()
    method getArticleCount (line 357) | public function getArticleCount()

FILE: source/Application/Controller/AccountReviewController.php
  class AccountReviewController (line 23) | class AccountReviewController extends \OxidEsales\Eshop\Application\Cont...
    method init (line 32) | public function init()
    method getReviewList (line 46) | public function getReviewList()
    method deleteReviewAndRating (line 67) | public function deleteReviewAndRating()
    method getBreadCrumb (line 86) | public function getBreadCrumb()
    method getPageNavigation (line 105) | public function getPageNavigation()
    method getItemsPerPage (line 118) | public function getItemsPerPage()
    method getActPage (line 128) | public function getActPage()
    method deleteReview (line 143) | private function deleteReview()
    method deleteRating (line 157) | private function deleteRating()
    method getReviewIdFromRequest (line 173) | private function getReviewIdFromRequest()
    method getRatingIdFromRequest (line 185) | private function getRatingIdFromRequest()
    method redirectToAccountDashboard (line 195) | private function redirectToAccountDashboard()
    method getPagesCount (line 209) | private function getPagesCount()
    method getMyAccountPageUrl (line 219) | private function getMyAccountPageUrl()
    method getTranslatedString (line 233) | private function getTranslatedString($string)
    method getPaginatedReviewAndRatingList (line 253) | private function getPaginatedReviewAndRatingList(

FILE: source/Application/Controller/AccountUserController.php
  class AccountUserController (line 21) | class AccountUserController extends \OxidEsales\Eshop\Application\Contro...
    method render (line 38) | public function render()
    method showShipAddress (line 57) | public function showShipAddress()
    method getBreadCrumb (line 67) | public function getBreadCrumb()

FILE: source/Application/Controller/AccountWishlistController.php
  class AccountWishlistController (line 21) | #[\AllowDynamicProperties]
    method render (line 116) | public function render()
    method showSuggest (line 134) | public function showSuggest()
    method getWishList (line 148) | public function getWishList()
    method getWishProductList (line 168) | public function getWishProductList()
    method getSimilarRecommListIds (line 185) | public function getSimilarRecommListIds()
    method sendWishList (line 204) | public function sendWishList()
    method isWishListEmailSent (line 248) | public function isWishListEmailSent()
    method setEnteredData (line 258) | public function setEnteredData($oData)
    method getEnteredData (line 268) | public function getEnteredData()
    method togglePublic (line 279) | public function togglePublic()
    method searchForWishList (line 297) | public function searchForWishList()
    method getWishListUsers (line 317) | public function getWishListUsers()
    method getWishListSearchParam (line 327) | public function getWishListSearchParam()
    method getBreadCrumb (line 337) | public function getBreadCrumb()

FILE: source/Application/Controller/Admin/ActionsArticleAjax.php
  class ActionsArticleAjax (line 15) | class ActionsArticleAjax extends \OxidEsales\Eshop\Application\Controlle...
    method getQuery (line 45) | protected function getQuery()
    method addFilter (line 87) | protected function addFilter($sQ)
    method removeActionArticle (line 103) | public function removeActionArticle()
    method setActionArticle (line 121) | public function setActionArticle()

FILE: source/Application/Controller/Admin/ActionsController.php
  class ActionsController (line 15) | class ActionsController extends \OxidEsales\Eshop\Application\Controller...

FILE: source/Application/Controller/Admin/ActionsGroupsAjax.php
  class ActionsGroupsAjax (line 15) | class ActionsGroupsAjax extends \OxidEsales\Eshop\Application\Controller...
    method getQuery (line 41) | protected function getQuery()
    method removePromotionGroup (line 72) | public function removePromotionGroup()
    method addPromotionGroup (line 90) | public function addPromotionGroup()

FILE: source/Application/Controller/Admin/ActionsList.php
  class ActionsList (line 19) | class ActionsList extends \OxidEsales\Eshop\Application\Controller\Admin...
    method render (line 47) | public function render()
    method prepareWhereQuery (line 65) | protected function prepareWhereQuery($aWhere, $sqlFull)

FILE: source/Application/Controller/Admin/ActionsMain.php
  class ActionsMain (line 22) | class ActionsMain extends \OxidEsales\Eshop\Application\Controller\Admin...
    method render (line 25) | public function render()
    method save (line 119) | public function save()
    method saveinnlang (line 142) | public function saveinnlang()
    method checkAccessToEditAction (line 154) | protected function checkAccessToEditAction(Actions $action)
    method getActionFormData (line 164) | private function getActionFormData()
    method normalizeActionFormData (line 180) | private function normalizeActionFormData($formData)

FILE: source/Application/Controller/Admin/ActionsMainAjax.php
  class ActionsMainAjax (line 17) | class ActionsMainAjax extends \OxidEsales\Eshop\Application\Controller\A...
    method getQuery (line 57) | protected function getQuery()
    method addFilter (line 106) | protected function addFilter($sQ)
    method getSorting (line 128) | protected function getSorting()
    method removeArtFromAct (line 142) | public function removeArtFromAct()
    method addArtToAct (line 164) | public function addArtToAct()
    method setSorting (line 212) | public function setSorting()

FILE: source/Application/Controller/Admin/ActionsOrderAjax.php
  class ActionsOrderAjax (line 15) | class ActionsOrderAjax extends \OxidEsales\Eshop\Application\Controller\...
    method getQuery (line 36) | protected function getQuery()
    method getSorting (line 50) | protected function getSorting()
    method setSorting (line 58) | public function setSorting()

FILE: source/Application/Controller/Admin/AdminContent.php
  class AdminContent (line 15) | class AdminContent extends \OxidEsales\Eshop\Application\Controller\Admi...

FILE: source/Application/Controller/Admin/AdminController.php
  class AdminController (line 18) | class AdminController extends \OxidEsales\Eshop\Core\Controller\BaseCont...
    method __construct (line 98) | public function __construct()
    method getEditShop (line 117) | protected function getEditShop($sShopId)
    method init (line 137) | public function init()
    method addGlobalParams (line 163) | public function addGlobalParams($oShop = null)
    method getServiceProtocol (line 216) | protected function getServiceProtocol()
    method setupNavigation (line 226) | protected function setupNavigation($sNode)
    method addNavigationHistory (line 249) | protected function addNavigationHistory(string $nodeId): void
    method render (line 264) | public function render()
    method getMaxUploadFileInfo (line 314) | protected function getMaxUploadFileInfo(
    method save (line 351) | public function save()
    method resetContentCache (line 361) | public function resetContentCache($blForceReset = null)
    method resetCounter (line 376) | public function resetCounter($sCounterType, $sValue = null)
    method resetContentCacheAfterResetCounter (line 403) | protected function resetContentCacheAfterResetCounter()
    method allowAdminEdit (line 415) | protected function allowAdminEdit($sUserId)
    method getCountryByCode (line 427) | protected function getCountryByCode($sCountryCode)
    method authorize (line 465) | protected function authorize()
    method getNavigation (line 480) | public function getNavigation()
    method getViewId (line 494) | public function getViewId()
    method chshp (line 503) | public function chshp()
    method resetSeoData (line 515) | public function resetSeoData($sShopId)
    method getPreviewId (line 529) | public function getPreviewId()
    method getEditObjectId (line 539) | public function getEditObjectId()
    method setEditObjectId (line 555) | public function setEditObjectId($sId)
    method isNewEditObject (line 566) | protected function isNewEditObject()
    method getControllerKey (line 576) | protected function getControllerKey()
    method getShopParentClass (line 592) | protected function getShopParentClass()
    method validateRequestImages (line 602) | protected function validateRequestImages(): bool

FILE: source/Application/Controller/Admin/AdminDetailsController.php
  class AdminDetailsController (line 17) | class AdminDetailsController extends \OxidEsales\Eshop\Application\Contr...
    method render (line 20) | public function render()
    method getDocumentationLanguageId (line 49) | protected function getDocumentationLanguageId()
    method getEditValue (line 64) | protected function getEditValue($object, $fieldName)
    method generateTextEditor (line 87) | protected function generateTextEditor($width, $height, $object, $field...
    method resetNrOfCatArticles (line 100) | public function resetNrOfCatArticles()
    method resetNrOfVendorArticles (line 109) | public function resetNrOfVendorArticles()
    method resetNrOfManufacturerArticles (line 118) | public function resetNrOfManufacturerArticles()
    method createCategoryTree (line 134) | protected function createCategoryTree($sTplVarName, $sEditCatId = '', ...
    method getCategoryTree (line 179) | protected function getCategoryTree(
    method changeFolder (line 215) | public function changeFolder()
    method setupNavigation (line 236) | protected function setupNavigation($sNode)
    method resetCounts (line 255) | protected function resetCounts($aIds)
    method configureTextEditorHandler (line 283) | protected function configureTextEditorHandler(
    method createTextEditorHandler (line 297) | protected function createTextEditorHandler()

FILE: source/Application/Controller/Admin/AdminLinks.php
  class AdminLinks (line 16) | class AdminLinks extends \OxidEsales\Eshop\Application\Controller\Admin\...

FILE: source/Application/Controller/Admin/AdminListController.php
  class AdminListController (line 18) | class AdminListController extends \OxidEsales\Eshop\Application\Controll...
    method getListSorting (line 123) | public function getListSorting()
    method getListFilter (line 141) | public function getListFilter()
    method getViewListSize (line 159) | public function getViewListSize()
    method getUserDefListSize (line 184) | protected function getUserDefListSize()
    method render (line 197) | public function render()
    method deleteEntry (line 215) | public function deleteEntry()
    method calcListItemsCount (line 241) | protected function calcListItemsCount($sql)
    method setCurrentListPosition (line 264) | protected function setCurrentListPosition($page = null)
    method prepareOrderByQuery (line 288) | protected function prepareOrderByQuery($query = null)
    method buildSelectString (line 333) | protected function buildSelectString($listObject = null)
    method processFilter (line 348) | protected function processFilter($fieldValue)
    method buildFilter (line 366) | protected function buildFilter($value, $isSearchValue)
    method isSearchValue (line 386) | protected function isSearchValue($fieldValue)
    method prepareWhereQuery (line 401) | protected function prepareWhereQuery($whereQuery, $fullQuery)
    method changeselect (line 460) | protected function changeselect($query)
    method buildWhere (line 470) | public function buildWhere()
    method convertToDBDate (line 515) | protected function convertToDBDate($value, $fieldType)
    method convertDate (line 547) | protected function convertDate($date)
    method convertTime (line 585) | protected function convertTime($fullDate)
    method setListNavigationParams (line 623) | protected function setListNavigationParams()
    method setupNavigation (line 708) | protected function setupNavigation($node)
    method getItemList (line 744) | public function getItemList()
    method clearItemList (line 793) | public function clearItemList()
    method getItemListBaseObject (line 803) | public function getItemListBaseObject()

FILE: source/Application/Controller/Admin/AdminNewsletter.php
  class AdminNewsletter (line 23) | class AdminNewsletter extends \OxidEsales\Eshop\Application\Controller\A...
    method export (line 32) | public function export(): void
    method getNewsLetterRecipientsList (line 42) | private function getNewsLetterRecipientsList(): array
    method setCSVHeader (line 51) | private function setCSVHeader(): void
    method generateCSV (line 62) | private function generateCSV(array $data): void

FILE: source/Application/Controller/Admin/AdminOrder.php
  class AdminOrder (line 16) | class AdminOrder extends \OxidEsales\Eshop\Application\Controller\Admin\...

FILE: source/Application/Controller/Admin/AdminPayment.php
  class AdminPayment (line 16) | class AdminPayment extends \OxidEsales\Eshop\Application\Controller\Admi...

FILE: source/Application/Controller/Admin/AdminPriceAlarm.php
  class AdminPriceAlarm (line 16) | class AdminPriceAlarm extends \OxidEsales\Eshop\Application\Controller\A...

FILE: source/Application/Controller/Admin/AdminStart.php
  class AdminStart (line 16) | class AdminStart extends \OxidEsales\Eshop\Application\Controller\Admin\...

FILE: source/Application/Controller/Admin/AdminUser.php
  class AdminUser (line 16) | class AdminUser extends \OxidEsales\Eshop\Application\Controller\Admin\A...

FILE: source/Application/Controller/Admin/AdminWrapping.php
  class AdminWrapping (line 16) | class AdminWrapping extends \OxidEsales\Eshop\Application\Controller\Adm...

FILE: source/Application/Controller/Admin/AdminlinksList.php
  class AdminlinksList (line 16) | class AdminlinksList extends \OxidEsales\Eshop\Application\Controller\Ad...
    method getListSorting (line 44) | public function getListSorting()

FILE: source/Application/Controller/Admin/AdminlinksMain.php
  class AdminlinksMain (line 19) | class AdminlinksMain extends \OxidEsales\Eshop\Application\Controller\Ad...
    method render (line 27) | public function render()
    method save (line 80) | public function save()
    method saveinnlang (line 140) | public function saveinnlang()

FILE: source/Application/Controller/Admin/ArticleAccessoriesAjax.php
  class ArticleAccessoriesAjax (line 19) | class ArticleAccessoriesAjax extends \OxidEsales\Eshop\Application\Contr...
    method getQuery (line 67) | protected function getQuery()
    method getSorting (line 121) | protected function getSorting()
    method removeArticleAcc (line 133) | public function removeArticleAcc()
    method addArticleAcc (line 150) | public function addArticleAcc()
    method onArticleAccessoryRelationChange (line 181) | protected function onArticleAccessoryRelationChange($article)
    method sortAccessoriesList (line 189) | public function sortAccessoriesList()
    method rebuildAccessoriesSortIndexes (line 241) | private function rebuildAccessoriesSortIndexes(ListModel $inputList): ...

FILE: source/Application/Controller/Admin/ArticleAttribute.php
  class ArticleAttribute (line 18) | class ArticleAttribute extends \OxidEsales\Eshop\Application\Controller\...
    method render (line 21) | public function render()

FILE: source/Application/Controller/Admin/ArticleAttributeAjax.php
  class ArticleAttributeAjax (line 16) | class ArticleAttributeAjax extends \OxidEsales\Eshop\Application\Control...
    method getQuery (line 40) | protected function getQuery()
    method removeAttr (line 66) | public function removeAttr()
    method addAttr (line 86) | public function addAttr()
    method saveAttributeValue (line 114) | public function saveAttributeValue()
    method onArticleAttributeRelationChange (line 155) | protected function onArticleAttributeRelationChange($articleId)
    method onAttributeValueChange (line 164) | protected function onAttributeValueChange($article)

FILE: source/Application/Controller/Admin/ArticleBundleAjax.php
  class ArticleBundleAjax (line 15) | class ArticleBundleAjax extends \OxidEsales\Eshop\Application\Controller...
    method getQuery (line 45) | protected function getQuery()
    method addFilter (line 88) | protected function addFilter($sQ)
    method removeArticleBundle (line 102) | public function removeArticleBundle()
    method addArticleBundle (line 116) | public function addArticleBundle()

FILE: source/Application/Controller/Admin/ArticleController.php
  class ArticleController (line 15) | class ArticleController extends \OxidEsales\Eshop\Application\Controller...

FILE: source/Application/Controller/Admin/ArticleCrossselling.php
  class ArticleCrossselling (line 18) | class ArticleCrossselling extends \OxidEsales\Eshop\Application\Controll...
    method render (line 21) | public function render()

FILE: source/Application/Controller/Admin/ArticleCrosssellingAjax.php
  class ArticleCrosssellingAjax (line 15) | class ArticleCrosssellingAjax extends \OxidEsales\Eshop\Application\Cont...
    method getQuery (line 54) | protected function getQuery()
    method removeArticleCross (line 121) | public function removeArticleCross()
    method addArticleCross (line 138) | public function addArticleCross()
    method onArticleAddingToCrossSelling (line 169) | protected function onArticleAddingToCrossSelling($article)

FILE: source/Application/Controller/Admin/ArticleExtend.php
  class ArticleExtend (line 23) | class ArticleExtend extends \OxidEsales\Eshop\Application\Controller\Adm...
    method render (line 33) | public function render()
    method save (line 98) | public function save()
    method deletemedia (line 188) | public function deletemedia()
    method addDefaultValues (line 207) | public function addDefaultValues($aParams)
    method updateMedia (line 215) | public function updateMedia()
    method getUnitsArray (line 236) | public function getUnitsArray()
    method updateArticle (line 252) | protected function updateArticle($article)
    method prepareBundledArticlesDataForView (line 262) | protected function prepareBundledArticlesDataForView($article)

FILE: source/Application/Controller/Admin/ArticleExtendAjax.php
  class ArticleExtendAjax (line 17) | class ArticleExtendAjax extends \OxidEsales\Eshop\Application\Controller...
    method getQuery (line 45) | protected function getQuery()
    method getDataFields (line 78) | protected function getDataFields($sQ)
    method removeCat (line 113) | public function removeCat()
    method addCat (line 154) | public function addCat()
    method updateOxTime (line 205) | protected function updateOxTime($oxId)
    method setAsDefault (line 224) | public function setAsDefault()
    method updateQueryForRemovingArticleFromCategory (line 255) | protected function updateQueryForRemovingArticleFromCategory($query)
    method onCategoriesRemoval (line 266) | protected function onCategoriesRemoval($categoriesToRemove, $oxId)
    method onCategoriesAdd (line 275) | protected function onCategoriesAdd($categories)
    method formQueryToEmbedForUpdatingTime (line 284) | protected function formQueryToEmbedForUpdatingTime()
    method formQueryToEmbedForSettingCategoryAsDefault (line 294) | protected function formQueryToEmbedForSettingCategoryAsDefault()

FILE: source/Application/Controller/Admin/ArticleFiles.php
  class ArticleFiles (line 18) | class ArticleFiles extends \OxidEsales\Eshop\Application\Controller\Admi...
    method render (line 35) | public function render()
    method save (line 58) | public function save()
    method getArticle (line 91) | public function getArticle($blReset = false)
    method upload (line 109) | public function upload()
    method deletefile (line 158) | public function deletefile()
    method getConfigOptionValue (line 189) | public function getConfigOptionValue($iOption)
    method processOptions (line 201) | protected function processOptions($aParams)

FILE: source/Application/Controller/Admin/ArticleList.php
  class ArticleList (line 24) | class ArticleList extends \OxidEsales\Eshop\Application\Controller\Admin...
    method render (line 46) | public function render()
    method getSearchFields (line 95) | public function getSearchFields()
    method getCategoryList (line 118) | public function getCategoryList($sType, $sValue)
    method getManufacturerList (line 143) | public function getManufacturerList($sType, $sValue)
    method getVendorList (line 167) | public function getVendorList($sType, $sValue)
    method buildSelectString (line 190) | protected function buildSelectString($oListObject = null)
    method buildWhere (line 232) | public function buildWhere()
    method deleteEntry (line 250) | public function deleteEntry()
    method convertSearchFieldValueForProductsInList (line 259) | private function convertSearchFieldValueForProductsInList(ListModel $p...
    method getFieldTypeForCurrentProduct (line 274) | private function getFieldTypeForCurrentProduct(ListModel $productList,...
    method isDateField (line 280) | private function isDateField(string $fieldType): bool
    method setAdditionalSearchFieldForProductsInList (line 292) | private function setAdditionalSearchFieldForProductsInList(ListModel $...
    method setIsActiveFieldForProductsInList (line 301) | private function setIsActiveFieldForProductsInList(ListModel $productL...
    method convertValueToDatabaseTimestamp (line 315) | private function convertValueToDatabaseTimestamp(Field $field): void

FILE: source/Application/Controller/Admin/ArticleMain.php
  class ArticleMain (line 22) | class ArticleMain extends \OxidEsales\Eshop\Application\Controller\Admin...
    method render (line 25) | public function render()
    method getEditValue (line 103) | protected function getEditValue($object, $fieldName)
    method save (line 111) | public function save()
    method processLongDesc (line 203) | protected function processLongDesc($sValue)
    method resetCategoriesCounter (line 222) | protected function resetCategoriesCounter($sArticleId)
    method addToCategory (line 241) | public function addToCategory($sCatID, $sOXID)
    method copyArticle (line 261) | public function copyArticle($sOldId = null, $sNewId = null, $sParentId...
    method copyCategories (line 364) | protected function copyCategories($sOldId, $newArticleId)
    method copyAttributes (line 392) | protected function copyAttributes($sOldId, $sNewId)
    method copyFiles (line 419) | protected function copyFiles($sOldId, $sNewId)
    method copySelectlists (line 449) | protected function copySelectlists($sOldId, $sNewId)
    method copyCrossseling (line 475) | protected function copyCrossseling($sOldId, $sNewId)
    method copyAccessoires (line 503) | protected function copyAccessoires($sOldId, $sNewId)
    method copyStaffelpreis (line 531) | protected function copyStaffelpreis($sOldId, $sNewId)
    method copyArtExtends (line 557) | protected function copyArtExtends($sOldId, $sNewId)
    method saveinnlang (line 569) | public function saveinnlang()
    method addDefaultValues (line 582) | public function addDefaultValues($aParams)
    method formJumpList (line 593) | protected function formJumpList($oArticle, $oParentArticle)
    method getTitle (line 639) | protected function getTitle($oObj)
    method getCategoryList (line 654) | public function getCategoryList()
    method getVendorList (line 667) | public function getVendorList()
    method getManufacturerList (line 680) | public function getManufacturerList()
    method updateArticle (line 696) | protected function updateArticle($oArticle, $sOxId)
    method formQueryForCopyingToCategory (line 713) | protected function formQueryForCopyingToCategory($newArticleId, $sUid,...
    method updateBase (line 726) | protected function updateBase($base)
    method customizeArticleInformation (line 739) | protected function customizeArticleInformation($article)
    method saveAdditionalArticleData (line 753) | protected function saveAdditionalArticleData($article, $parameters)
    method createArticle (line 761) | protected function createArticle()

FILE: source/Application/Controller/Admin/ArticleOverview.php
  class ArticleOverview (line 18) | class ArticleOverview extends \OxidEsales\Eshop\Application\Controller\A...
    method render (line 21) | public function render()
    method getDatabase (line 77) | protected function getDatabase()
    method formOrderAmountQuery (line 89) | protected function formOrderAmountQuery($oxId)
    method formSoldOutAmountQuery (line 104) | protected function formSoldOutAmountQuery($oxId)
    method formCanceledAmountQuery (line 119) | protected function formCanceledAmountQuery($soxId)
    method updateArticle (line 133) | protected function updateArticle($article, $oxId)

FILE: source/Application/Controller/Admin/ArticlePictures.php
  class ArticlePictures (line 20) | class ArticlePictures extends AdminDetailsController
    method __construct (line 27) | public function __construct()
    method render (line 38) | public function render()
    method buildImageData (line 59) | private function buildImageData(ProductMedia $media): array

FILE: source/Application/Controller/Admin/ArticlePicturesAjax.php
  class ArticlePicturesAjax (line 31) | class ArticlePicturesAjax extends ListComponentAjax
    method __construct (line 38) | public function __construct()
    method addMedia (line 47) | public function addMedia(): void
    method replaceMedia (line 56) | public function replaceMedia(): void
    method removeMedia (line 68) | public function removeMedia(): void
    method toggleMediaActiveState (line 73) | public function toggleMediaActiveState(): void
    method sortMedia (line 84) | public function sortMedia(): void
    method removeRoleFromMedia (line 96) | private function removeRoleFromMedia(): void
    method processUploadedFiles (line 108) | private function processUploadedFiles(): array
    method getProductMediaId (line 129) | private function getProductMediaId(): Id
    method mapExceptionToTranslation (line 134) | private function mapExceptionToTranslation(\Throwable $e): array
    method formatErrorWithFilename (line 166) | private function formatErrorWithFilename(\Throwable $e, string $filena...
    method sendErrorsResponse (line 174) | private function sendErrorsResponse(array $errors): void

FILE: source/Application/Controller/Admin/ArticleReview.php
  class ArticleReview (line 18) | class ArticleReview extends \OxidEsales\Eshop\Application\Controller\Adm...
    method render (line 26) | public function render()
    method getReviewList (line 79) | protected function getReviewList($article)
    method save (line 110) | public function save()
    method delete (line 129) | public function delete()

FILE: source/Application/Controller/Admin/ArticleSelectionAjax.php
  class ArticleSelectionAjax (line 16) | class ArticleSelectionAjax extends \OxidEsales\Eshop\Application\Control...
    method getQuery (line 43) | protected function getQuery()
    method removeSel (line 82) | public function removeSel()
    method addSel (line 104) | public function addSel()
    method onArticleSelectionListChange (line 146) | protected function onArticleSelectionListChange($articleId)

FILE: source/Application/Controller/Admin/ArticleSeo.php
  class ArticleSeo (line 19) | class ArticleSeo extends \OxidEsales\Eshop\Application\Controller\Admin\...
    method getActCatType (line 40) | public function getActCatType()
    method getActCatLang (line 61) | public function getActCatLang()
    method getActCatId (line 87) | public function getActCatId()
    method getSelectionList (line 112) | public function getSelectionList()
    method getCategoryList (line 143) | protected function getCategoryList($article)
    method getVendorList (line 185) | protected function getVendorList($oArticle)
    method getManufacturerList (line 202) | protected function getManufacturerList($oArticle)
    method getActCategory (line 217) | public function getActCategory()
    method getActVendor (line 229) | public function getActVendor()
    method getActManufacturer (line 241) | public function getActManufacturer()
    method getListType (line 254) | public function getListType()
    method getEditLang (line 269) | public function getEditLang()
    method getAltSeoEntryId (line 279) | protected function getAltSeoEntryId()
    method getType (line 289) | protected function getType()
    method processParam (line 301) | public function processParam($sParam)
    method getEncoder (line 311) | protected function getEncoder()
    method getEntryUri (line 321) | public function getEntryUri()
    method showCatSelect (line 348) | public function showCatSelect()
    method isEntryFixed (line 358) | public function isEntryFixed()

FILE: source/Application/Controller/Admin/ArticleStock.php
  class ArticleStock (line 19) | class ArticleStock extends \OxidEsales\Eshop\Application\Controller\Admi...
    method render (line 27) | public function render()
    method save (line 89) | public function save()
    method addprice (line 127) | public function addprice($sOXID = null, $aUpdateParams = null)
    method updateprices (line 207) | public function updateprices()
    method deleteprice (line 224) | public function deleteprice()
    method onArticleAmountPriceChange (line 243) | protected function onArticleAmountPriceChange($articleId)

FILE: source/Application/Controller/Admin/ArticleUserdef.php
  class ArticleUserdef (line 13) | class ArticleUserdef extends \OxidEsales\Eshop\Application\Controller\Ad...
    method render (line 16) | public function render()

FILE: source/Application/Controller/Admin/ArticleVariant.php
  class ArticleVariant (line 22) | class ArticleVariant extends \OxidEsales\Eshop\Application\Controller\Ad...
    method render (line 32) | public function render()
    method savevariant (line 109) | public function savevariant($sOXID = null, $aParams = null)
    method isAnythingChanged (line 175) | protected function isAnythingChanged($oProduct, $aData)
    method getProductParent (line 196) | protected function getProductParent($sParentId)
    method savevariants (line 215) | public function savevariants()
    method deleteVariant (line 232) | public function deleteVariant()
    method changename (line 251) | public function changename()
    method addsel (line 275) | public function addsel()

FILE: source/Application/Controller/Admin/AttributeCategory.php
  class AttributeCategory (line 18) | class AttributeCategory extends \OxidEsales\Eshop\Application\Controller...
    method render (line 21) | public function render()

FILE: source/Application/Controller/Admin/AttributeCategoryAjax.php
  class AttributeCategoryAjax (line 16) | class AttributeCategoryAjax extends \OxidEsales\Eshop\Application\Contro...
    method getQuery (line 48) | protected function getQuery()
    method removeCatFromAttr (line 84) | public function removeCatFromAttr()
    method addCatToAttr (line 105) | public function addCatToAttr()

FILE: source/Application/Controller/Admin/AttributeController.php
  class AttributeController (line 15) | class AttributeController extends \OxidEsales\Eshop\Application\Controll...

FILE: source/Application/Controller/Admin/AttributeList.php
  class AttributeList (line 16) | class AttributeList extends \OxidEsales\Eshop\Application\Controller\Adm...

FILE: source/Application/Controller/Admin/AttributeMain.php
  class AttributeMain (line 19) | class AttributeMain extends \OxidEsales\Eshop\Application\Controller\Adm...
    method render (line 22) | public function render()
    method save (line 79) | public function save()
    method saveinnlang (line 114) | public function saveinnlang()

FILE: source/Application/Controller/Admin/AttributeMainAjax.php
  class AttributeMainAjax (line 16) | class AttributeMainAjax extends \OxidEsales\Eshop\Application\Controller...
    method getQuery (line 55) | protected function getQuery()
    method addFilter (line 103) | protected function addFilter($sQ)
    method removeAttrArticle (line 123) | public function removeAttrArticle()
    method addAttrArticle (line 142) | public function addAttrArticle()
    method onArticleAddToAttributeList (line 173) | protected function onArticleAddToAttributeList($articleId)

FILE: source/Application/Controller/Admin/AttributeOrderAjax.php
  class AttributeOrderAjax (line 15) | class AttributeOrderAjax extends \OxidEsales\Eshop\Application\Controlle...
    method getQuery (line 34) | protected function getQuery()
    method getSorting (line 48) | protected function getSorting()
    method setSorting (line 56) | public function setSorting()

FILE: source/Application/Controller/Admin/CategoryController.php
  class CategoryController (line 16) | class CategoryController extends \OxidEsales\Eshop\Application\Controlle...

FILE: source/Application/Controller/Admin/CategoryList.php
  class CategoryList (line 19) | class CategoryList extends \OxidEsales\Eshop\Application\Controller\Admi...
    method getListSorting (line 40) | public function getListSorting()
    method render (line 61) | public function render()

FILE: source/Application/Controller/Admin/CategoryMain.php
  class CategoryMain (line 20) | class CategoryMain extends \OxidEsales\Eshop\Application\Controller\Admi...
    method render (line 30) | public function render()
    method getSortableFields (line 107) | public function getSortableFields()
    method save (line 135) | public function save()
    method processLongDesc (line 177) | protected function processLongDesc($sValue)
    method saveinnlang (line 186) | public function saveinnlang()
    method deletePicture (line 196) | public function deletePicture()
    method deleteCatPicture (line 233) | protected function deleteCatPicture($item, $field)
    method parseRequestParametersForSave (line 280) | protected function parseRequestParametersForSave($aReqParams)
    method resetCategoryPictures (line 326) | protected function resetCategoryPictures($category, $params, $categoryId)
    method updateCategoryOnSave (line 349) | protected function updateCategoryOnSave($category, $params)
    method createCategory (line 362) | protected function createCategory()

FILE: source/Application/Controller/Admin/CategoryMainAjax.php
  class CategoryMainAjax (line 19) | class CategoryMainAjax extends \OxidEsales\Eshop\Application\Controller\...
    method getQuery (line 58) | protected function getQuery()
    method addFilter (line 98) | protected function addFilter($sQ)
    method addArticle (line 117) | public function addArticle()
    method updateOxTime (line 185) | protected function updateOxTime($sProdIds)
    method getUpdateOxTimeQueryShopFilter (line 210) | protected function getUpdateOxTimeQueryShopFilter()
    method getUpdateOxTimeSqlWhereFilter (line 221) | protected function getUpdateOxTimeSqlWhereFilter()
    method removeArticle (line 229) | public function removeArticle()
    method removeCategoryArticles (line 260) | protected function removeCategoryArticles($articles, $categoryID)
    method getRemoveCategoryArticlesQueryFilter (line 284) | protected function getRemoveCategoryArticlesQueryFilter($categoryID, $...

FILE: source/Application/Controller/Admin/CategoryOrder.php
  class CategoryOrder (line 17) | class CategoryOrder extends \OxidEsales\Eshop\Application\Controller\Adm...
    method render (line 25) | public function render()

FILE: source/Application/Controller/Admin/CategoryOrderAjax.php
  class CategoryOrderAjax (line 17) | class CategoryOrderAjax extends \OxidEsales\Eshop\Application\Controller...
    method getQuery (line 51) | protected function getQuery()
    method getSorting (line 87) | protected function getSorting()
    method removeCatOrderArticle (line 109) | public function removeCatOrderArticle()
    method addCatOrderArticle (line 146) | public function addCatOrderArticle()
    method saveNewOrder (line 187) | public function saveNewOrder()
    method remNewOrder (line 231) | public function remNewOrder()
    method updateQueryFilterForResetCategoryArticlesOrder (line 259) | protected function updateQueryFilterForResetCategoryArticlesOrder()
    method onCategoryChange (line 267) | protected function onCategoryChange($categoryId)
    method getObject2CategoryClass (line 271) | private function getObject2CategoryClass(): string

FILE: source/Application/Controller/Admin/CategoryPictures.php
  class CategoryPictures (line 15) | class CategoryPictures extends \OxidEsales\Eshop\Application\Controller\...
    method render (line 18) | public function render()

FILE: source/Application/Controller/Admin/CategorySeo.php
  class CategorySeo (line 15) | class CategorySeo extends \OxidEsales\Eshop\Application\Controller\Admin...
    method save (line 22) | public function save()
    method getEncoder (line 43) | protected function getEncoder()
    method isSuffixSupported (line 53) | public function isSuffixSupported()
    method getType (line 63) | protected function getType()
    method isEntrySuffixed (line 73) | public function isEntrySuffixed()
    method getEntryUri (line 86) | public function getEntryUri()

FILE: source/Application/Controller/Admin/CategoryText.php
  class CategoryText (line 18) | class CategoryText extends \OxidEsales\Eshop\Application\Controller\Admi...
    method render (line 21) | public function render()
    method save (line 63) | public function save()

FILE: source/Application/Controller/Admin/CategoryUpdate.php
  class CategoryUpdate (line 13) | class CategoryUpdate extends \OxidEsales\Eshop\Application\Controller\Ad...
    method getCategoryList (line 34) | protected function getCategoryList()
    method getCatListUpdateInfo (line 49) | public function getCatListUpdateInfo()

FILE: source/Application/Controller/Admin/ContentList.php
  class ContentList (line 19) | class ContentList extends \OxidEsales\Eshop\Application\Controller\Admin...
    method render (line 48) | public function render()
    method prepareWhereQuery (line 69) | protected function prepareWhereQuery($aWhere, $sqlFull)

FILE: source/Application/Controller/Admin/ContentMain.php
  class ContentMain (line 24) | class ContentMain extends \OxidEsales\Eshop\Application\Controller\Admin...
    method render (line 27) | public function render()
    method save (line 88) | public function save()
    method saveinnlang (line 119) | public function saveinnlang()
    method prepareIdent (line 151) | protected function prepareIdent($sIdent)
    method checkIdent (line 166) | protected function checkIdent($sIdent, $sOxId)
    method prepareAndSaveContent (line 190) | private function prepareAndSaveContent(array $requestParams, $contentI...
    method handleSaveError (line 217) | private function handleSaveError($contentId, $requestParams): void

FILE: source/Application/Controller/Admin/ContentSeo.php
  class ContentSeo (line 15) | class ContentSeo extends \OxidEsales\Eshop\Application\Controller\Admin\...
    method getType (line 22) | protected function getType()
    method getEncoder (line 32) | protected function getEncoder()
    method getEntryUri (line 42) | public function getEntryUri()

FILE: source/Application/Controller/Admin/CountryController.php
  class CountryController (line 15) | class CountryController extends \OxidEsales\Eshop\Application\Controller...

FILE: source/Application/Controller/Admin/CountryList.php
  class CountryList (line 13) | class CountryList extends \OxidEsales\Eshop\Application\Controller\Admin...
    method render (line 49) | public function render()
    method getListSorting (line 62) | public function getListSorting()
    method getSecondSortFieldName (line 78) | protected function getSecondSortFieldName()

FILE: source/Application/Controller/Admin/CountryMain.php
  class CountryMain (line 18) | class CountryMain extends \OxidEsales\Eshop\Application\Controller\Admin...
    method render (line 21) | public function render()
    method save (line 65) | public function save()
    method saveinnlang (line 101) | public function saveinnlang()

FILE: source/Application/Controller/Admin/DeliveryArticles.php
  class DeliveryArticles (line 18) | class DeliveryArticles extends \OxidEsales\Eshop\Application\Controller\...
    method render (line 21) | public function render()

FILE: source/Application/Controller/Admin/DeliveryArticlesAjax.php
  class DeliveryArticlesAjax (line 15) | class DeliveryArticlesAjax extends \OxidEsales\Eshop\Application\Control...
    method getQuery (line 54) | protected function getQuery()
    method removeArtFromDel (line 96) | public function removeArtFromDel()
    method addArtToDel (line 112) | public function addArtToDel()

FILE: source/Application/Controller/Admin/DeliveryCategoriesAjax.php
  class DeliveryCategoriesAjax (line 15) | class DeliveryCategoriesAjax extends \OxidEsales\Eshop\Application\Contr...
    method getQuery (line 42) | protected function getQuery()
    method removeCatFromDel (line 80) | public function removeCatFromDel()
    method addCatToDel (line 98) | public function addCatToDel()

FILE: source/Application/Controller/Admin/DeliveryController.php
  class DeliveryController (line 16) | class DeliveryController extends \OxidEsales\Eshop\Application\Controlle...

FILE: source/Application/Controller/Admin/DeliveryGroupsAjax.php
  class DeliveryGroupsAjax (line 15) | class DeliveryGroupsAjax extends \OxidEsales\Eshop\Application\Controlle...
    method getQuery (line 39) | protected function getQuery()
    method removeGroupFromDel (line 74) | public function removeGroupFromDel()
    method addGroupToDel (line 90) | public function addGroupToDel()

FILE: source/Application/Controller/Admin/DeliveryList.php
  class DeliveryList (line 16) | class DeliveryList extends \OxidEsales\Eshop\Application\Controller\Admi...

FILE: source/Application/Controller/Admin/DeliveryMain.php
  class DeliveryMain (line 19) | class DeliveryMain extends \OxidEsales\Eshop\Application\Controller\Admi...
    method render (line 22) | public function render()
    method save (line 89) | public function save()
    method saveinnlang (line 141) | public function saveinnlang()
    method getDeliveryTypes (line 182) | public function getDeliveryTypes()

FILE: source/Application/Controller/Admin/DeliveryMainAjax.php
  class DeliveryMainAjax (line 15) | class DeliveryMainAjax extends \OxidEsales\Eshop\Application\Controller\...
    method getQuery (line 43) | protected function getQuery()
    method removeCountryFromDel (line 74) | public function removeCountryFromDel()
    method addCountryToDel (line 89) | public function addCountryToDel()

FILE: source/Application/Controller/Admin/DeliverySetController.php
  class DeliverySetController (line 16) | class DeliverySetController extends \OxidEsales\Eshop\Application\Contro...

FILE: source/Application/Controller/Admin/DeliverySetCountryAjax.php
  class DeliverySetCountryAjax (line 15) | class DeliverySetCountryAjax extends \OxidEsales\Eshop\Application\Contr...
    method getQuery (line 43) | protected function getQuery()
    method removeCountryFromSet (line 75) | public function removeCountryFromSet()
    method addCountryToSet (line 92) | public function addCountryToSet()

FILE: source/Application/Controller/Admin/DeliverySetGroupsAjax.php
  class DeliverySetGroupsAjax (line 15) | class DeliverySetGroupsAjax extends \OxidEsales\Eshop\Application\Contro...
    method getQuery (line 39) | protected function getQuery()
    method removeGroupFromSet (line 71) | public function removeGroupFromSet()
    method addGroupToSet (line 87) | public function addGroupToSet()

FILE: source/Application/Controller/Admin/DeliverySetList.php
  class DeliverySetList (line 16) | class DeliverySetList extends \OxidEsales\Eshop\Application\Controller\A...

FILE: source/Application/Controller/Admin/DeliverySetMain.php
  class DeliverySetMain (line 19) | class DeliverySetMain extends \OxidEsales\Eshop\Application\Controller\A...
    method render (line 22) | public function render()
    method save (line 72) | public function save()
    method saveinnlang (line 113) | public function saveinnlang()

FILE: source/Application/Controller/Admin/DeliverySetMainAjax.php
  class DeliverySetMainAjax (line 16) | class DeliverySetMainAjax extends \OxidEsales\Eshop\Application\Controll...
    method getQuery (line 42) | protected function getQuery()
    method removeFromSet (line 69) | public function removeFromSet()
    method addToSet (line 86) | public function addToSet()

FILE: source/Application/Controller/Admin/DeliverySetPayment.php
  class DeliverySetPayment (line 18) | class DeliverySetPayment extends \OxidEsales\Eshop\Application\Controlle...
    method render (line 21) | public function render()

FILE: source/Application/Controller/Admin/DeliverySetPaymentAjax.php
  class DeliverySetPaymentAjax (line 16) | class DeliverySetPaymentAjax extends \OxidEsales\Eshop\Application\Contr...
    method getQuery (line 42) | protected function getQuery()
    method removePayFromSet (line 69) | public function removePayFromSet()
    method addPayToSet (line 86) | public function addPayToSet()

FILE: source/Application/Controller/Admin/DeliverySetRdfa.php
  class DeliverySetRdfa (line 19) | class DeliverySetRdfa extends \OxidEsales\Eshop\Application\Controller\A...
    method save (line 47) | public function save()
    method getAllRDFaDeliveries (line 75) | public function getAllRDFaDeliveries()
    method getAssignedRDFaDeliveries (line 95) | public function getAssignedRDFaDeliveries()

FILE: source/Application/Controller/Admin/DeliverySetUsers.php
  class DeliverySetUsers (line 19) | class DeliverySetUsers extends \OxidEsales\Eshop\Application\Controller\...
    method render (line 22) | public function render()

FILE: source/Application/Controller/Admin/DeliverySetUsersAjax.php
  class DeliverySetUsersAjax (line 15) | class DeliverySetUsersAjax extends \OxidEsales\Eshop\Application\Control...
    method getQuery (line 55) | protected function getQuery()
    method removeUserFromSet (line 96) | public function removeUserFromSet()
    method addUserToSet (line 111) | public function addUserToSet()

FILE: source/Application/Controller/Admin/DeliveryUsers.php
  class DeliveryUsers (line 19) | class DeliveryUsers extends \OxidEsales\Eshop\Application\Controller\Adm...
    method render (line 22) | public function render()

FILE: source/Application/Controller/Admin/DeliveryUsersAjax.php
  class DeliveryUsersAjax (line 15) | class DeliveryUsersAjax extends \OxidEsales\Eshop\Application\Controller...
    method getQuery (line 53) | protected function getQuery()
    method removeUserFromDel (line 91) | public function removeUserFromDel()
    method addUserToDel (line 106) | public function addUserToDel()

FILE: source/Application/Controller/Admin/DiagnosticsController.php
  class DiagnosticsController (line 14) | class DiagnosticsController extends \OxidEsales\Eshop\Application\Contro...

FILE: source/Application/Controller/Admin/DiagnosticsList.php
  class DiagnosticsList (line 14) | class DiagnosticsList extends \OxidEsales\Eshop\Application\Controller\A...

FILE: source/Application/Controller/Admin/DiagnosticsMain.php
  class DiagnosticsMain (line 20) | class DiagnosticsMain extends \OxidEsales\Eshop\Application\Controller\A...
    method hasError (line 69) | protected function hasError()
    method getErrorMessage (line 79) | protected function getErrorMessage()
    method __construct (line 88) | public function __construct()
    method render (line 99) | public function render()
    method startDiagnostics (line 113) | public function startDiagnostics()
    method runBasicDiagnostics (line 130) | protected function runBasicDiagnostics()
    method downloadResultFile (line 192) | public function downloadResultFile()
    method getSupportContactForm (line 203) | public function getSupportContactForm()
    method getParam (line 229) | public function getParam($name)
    method getInstalledModules (line 239) | private function getInstalledModules(): array
    method getRenderedReport (line 260) | private function getRenderedReport(array $diagnosticsResult): string

FILE: source/Application/Controller/Admin/DiscountArticles.php
  class DiscountArticles (line 18) | class DiscountArticles extends \OxidEsales\Eshop\Application\Controller\...
    method render (line 21) | public function render()

FILE: source/Application/Controller/Admin/DiscountArticlesAjax.php
  class DiscountArticlesAjax (line 15) | class DiscountArticlesAjax extends \OxidEsales\Eshop\Application\Control...
    method getQuery (line 58) | protected function getQuery()
    method removeDiscArt (line 107) | public function removeDiscArt()
    method addDiscArt (line 123) | public function addDiscArt()
    method addArticleToDiscount (line 146) | protected function addArticleToDiscount($discountListId, $articleId)

FILE: source/Application/Controller/Admin/DiscountCategoriesAjax.php
  class DiscountCategoriesAjax (line 15) | class DiscountCategoriesAjax extends \OxidEsales\Eshop\Application\Contr...
    method getQuery (line 47) | protected function getQuery()
    method removeDiscCat (line 86) | public function removeDiscCat()
    method addDiscCat (line 103) | public function addDiscCat()
    method addCategoryToDiscount (line 125) | protected function addCategoryToDiscount($discountId, $categoryId)

FILE: source/Application/Controller/Admin/DiscountController.php
  class DiscountController (line 16) | class DiscountController extends \OxidEsales\Eshop\Application\Controlle...

FILE: source/Application/Controller/Admin/DiscountGroupsAjax.php
  class DiscountGroupsAjax (line 15) | class DiscountGroupsAjax extends \OxidEsales\Eshop\Application\Controlle...
    method getQuery (line 44) | protected function getQuery()
    method removeDiscGroup (line 74) | public function removeDiscGroup()
    method addDiscGroup (line 92) | public function addDiscGroup()

FILE: source/Application/Controller/Admin/DiscountItemAjax.php
  class DiscountItemAjax (line 16) | class DiscountItemAjax extends \OxidEsales\Eshop\Application\Controller\...
    method getQuery (line 50) | protected function getQuery()
    method removeDiscArt (line 106) | public function removeDiscArt()
    method addDiscArt (line 122) | public function addDiscArt()
    method getQueryCols (line 141) | protected function getQueryCols()
    method getQueryForVisibleColumns (line 154) | private function getQueryForVisibleColumns(): string
    method getQueryForIdentifierColumns (line 177) | private function getQueryForIdentifierColumns(): string
    method getLanguageSuffix (line 188) | private function getLanguageSuffix(): string

FILE: source/Application/Controller/Admin/DiscountList.php
  class DiscountList (line 16) | class DiscountList extends \OxidEsales\Eshop\Application\Controller\Admi...

FILE: source/Application/Controller/Admin/DiscountMain.php
  class DiscountMain (line 20) | class DiscountMain extends \OxidEsales\Eshop\Application\Controller\Admi...
    method render (line 23) | public function render()
    method getItemDiscountProductTitle (line 85) | public function getItemDiscountProductTitle()
    method save (line 110) | public function save()
    method saveinnlang (line 165) | public function saveinnlang()
    method getNextOxsort (line 204) | public function getNextOxsort()

FILE: source/Application/Controller/Admin/DiscountMainAjax.php
  class DiscountMainAjax (line 15) | class DiscountMainAjax extends \OxidEsales\Eshop\Application\Controller\...
    method getQuery (line 43) | protected function getQuery()
    method removeDiscCountry (line 70) | public function removeDiscCountry()
    method addDiscCountry (line 85) | public function addDiscCountry()

FILE: source/Application/Controller/Admin/DiscountUsers.php
  class DiscountUsers (line 20) | class DiscountUsers extends \OxidEsales\Eshop\Application\Controller\Adm...
    method render (line 23) | public function render()

FILE: source/Application/Controller/Admin/DiscountUsersAjax.php
  class DiscountUsersAjax (line 15) | class DiscountUsersAjax extends \OxidEsales\Eshop\Application\Controller...
    method getQuery (line 53) | protected function getQuery()
    method removeDiscUser (line 92) | public function removeDiscUser()
    method addDiscUser (line 107) | public function addDiscUser()

FILE: source/Application/Controller/Admin/DynamicExportBaseController.php
  class DynamicExportBaseController (line 30) | class DynamicExportBaseController extends \OxidEsales\Eshop\Application\...
    method __construct (line 120) | public function __construct()
    method render (line 138) | public function render()
    method createMainExportView (line 162) | public function createMainExportView()
    method start (line 179) | public function start()
    method stop (line 203) | public function stop($iError = 0)
    method nextTick (line 220) | public function nextTick($cnt)
    method write (line 230) | public function write($sLine)
    method run (line 240) | public function run()
    method getExportPerTick (line 278) | public function getExportPerTick()
    method setExportPerTick (line 295) | public function setExportPerTick($iCount)
    method removeSid (line 307) | public function removeSid($sInput)
    method shrink (line 331) | public function shrink($sInput, $iMaxSize, $blRemoveNewline = true)
    method getCategoryString (line 354) | public function getCategoryString($article, $separator = "/")
    method getDefaultCategoryString (line 408) | public function getDefaultCategoryString($oArticle)
    method prepareCSV (line 434) | public function prepareCSV($sInput)
    method prepareXML (line 448) | public function prepareXML($sInput)
    method getDeepestCategoryPath (line 466) | public function getDeepestCategoryPath($oArticle)
    method prepareExport (line 476) | public function prepareExport()
    method getOneArticle (line 512) | public function getOneArticle($iCnt, &$blContinue)
    method assureContent (line 541) | public function assureContent($sInput, $sReplace = null)
    method unHtmlEntities (line 562) | protected function unHtmlEntities($sInput)
    method getHeapTableName (line 574) | protected function getHeapTableName()
    method generateTableCharSet (line 588) | protected function generateTableCharSet($sMysqlVersion)
    method createHeapTable (line 615) | protected function createHeapTable($sHeapTable, $sTableCharset)
    method getCatAdd (line 639) | protected function getCatAdd($aChosenCat)
    method insertArticles (line 667) | protected function insertArticles($sHeapTable, $sCatAdd)
    method removeParentArticles (line 725) | protected function removeParentArticles($heapTable)
    method setSessionParams (line 756) | protected function setSessionParams()
    method loadRootCats (line 810) | protected function loadRootCats()
    method findDeepestCatPath (line 863) | protected function findDeepestCatPath($oArticle)
    method initArticle (line 907) | protected function initArticle($sHeapTable, $iCnt, &$blContinue)
    method setCampaignDetailLink (line 949) | protected function setCampaignDetailLink($oArticle)
    method getViewId (line 973) | public function getViewId()
    method updateArticle (line 985) | protected function updateArticle($article)
    method getDb (line 995) | protected function getDb()

FILE: source/Application/Controller/Admin/GenericExport.php
  class GenericExport (line 13) | class GenericExport extends \OxidEsales\Eshop\Application\Controller\Adm...
    method getViewId (line 35) | public function getViewId()

FILE: source/Application/Controller/Admin/GenericExportDo.php
  class GenericExportDo (line 18) | class GenericExportDo extends \OxidEsales\Eshop\Application\Controller\A...
    method nextTick (line 55) | public function nextTick($cnt)
    method prepareLongDescription (line 84) | private function prepareLongDescription(Article $article): string
    method getRenderer (line 98) | private function getRenderer(): TemplateRendererInterface
    method write (line 110) | public function write($sLine)
    method getViewId (line 126) | public function getViewId()

FILE: source/Application/Controller/Admin/GenericExportMain.php
  class GenericExportMain (line 13) | class GenericExportMain extends \OxidEsales\Eshop\Application\Controller...
    method render (line 37) | public function render()
    method getViewId (line 50) | public function getViewId()

FILE: source/Application/Controller/Admin/GenericImport.php
  class GenericImport (line 13) | class GenericImport extends \OxidEsales\Eshop\Application\Controller\Adm...

FILE: source/Application/Controller/Admin/GenericImportMain.php
  class GenericImportMain (line 17) | class GenericImportMain extends \OxidEsales\Eshop\Application\Controller...
    method render (line 76) | public function render()
    method deleteCsvFile (line 164) | protected function deleteCsvFile()
    method getCsvFieldsNames (line 178) | protected function getCsvFieldsNames()
    method getCsvFirstRow (line 207) | protected function getCsvFirstRow()
    method resetUploadedCsvData (line 224) | protected function resetUploadedCsvData()
    method checkErrors (line 239) | protected function checkErrors($iNavStep)
    method getUploadedCsvFilePath (line 279) | protected function getUploadedCsvFilePath()
    method checkImportErrors (line 303) | protected function checkImportErrors($oErpImport)
    method getCsvFieldsTerminator (line 319) | protected function getCsvFieldsTerminator()
    method getCsvFieldsEncolser (line 336) | protected function getCsvFieldsEncolser()
    method setErrorToView (line 351) | private function setErrorToView($invalidData)

FILE: source/Application/Controller/Admin/LanguageController.php
  class LanguageController (line 15) | class LanguageController extends \OxidEsales\Eshop\Application\Controlle...

FILE: source/Application/Controller/Admin/LanguageList.php
  class LanguageList (line 17) | class LanguageList extends \OxidEsales\Eshop\Application\Controller\Admi...
    method deleteEntry (line 38) | public function deleteEntry()
    method render (line 83) | public function render()
    method getLanguagesList (line 96) | protected function getLanguagesList()
    method sortLanguagesCallback (line 142) | protected function sortLanguagesCallback($oLang1, $oLang2)
    method resetMultiLangDbFields (line 161) | protected function resetMultiLangDbFields($iLangId)

FILE: source/Application/Controller/Admin/LanguageMain.php
  class LanguageMain (line 17) | class LanguageMain extends \OxidEsales\Eshop\Application\Controller\Admi...
    method render (line 51) | public function render()
    method save (line 73) | public function save()
    method getLanguageInfo (line 179) | protected function getLanguageInfo($sOxId)
    method setLanguages (line 198) | protected function setLanguages($aLangData)
    method getLanguages (line 210) | protected function getLanguages()
    method updateAbbervation (line 231) | protected function updateAbbervation($sOldId, $sNewId)
    method sortLangArraysByBaseId (line 254) | protected function sortLangArraysByBaseId()
    method assignDefaultLangParams (line 281) | protected function assignDefaultLangParams($aLanguages)
    method setDefaultLang (line 302) | protected function setDefaultLang($sOxId)
    method getAvailableLangBaseId (line 313) | protected function getAvailableLangBaseId()
    method checkLangTranslations (line 341) | protected function checkLangTranslations($sOxId)
    method checkMultilangFieldsExistsInDb (line 361) | protected function checkMultilangFieldsExistsInDb($sOxId)
    method addNewMultilangFieldsToDb (line 378) | protected function addNewMultilangFieldsToDb()
    method checkLangExists (line 400) | protected function checkLangExists($sAbbr)
    method sortLangParamsByBaseIdCallback (line 416) | protected function sortLangParamsByBaseIdCallback($oLang1, $oLang2)
    method validateInput (line 426) | protected function validateInput()
    method checkAbbreviationAllowedCharacters (line 467) | protected function checkAbbreviationAllowedCharacters($abbreviation)
    method addDisplayException (line 483) | protected function addDisplayException($message)
    method isValidLanguageData (line 497) | protected function isValidLanguageData($aLanguageData)
    method getNoJsValidator (line 521) | protected function getNoJsValidator()

FILE: source/Application/Controller/Admin/ListComponentAjax.php
  class ListComponentAjax (line 20) | class ListComponentAjax extends \OxidEsales\Eshop\Core\Base
    method getColumns (line 63) | public function getColumns()
    method setColumns (line 73) | public function setColumns($aColumns)
    method getActionIds (line 87) | protected function getActionIds($sId)
    method setName (line 102) | public function setName($sName)
    method getQuery (line 112) | protected function getQuery()
    method getDataQuery (line 124) | protected function getDataQuery($sQ)
    method getCountQuery (line 136) | protected function getCountQuery($sQ)
    method processRequest (line 146) | public function processRequest($function = null)
    method getSortCol (line 167) | protected function getSortCol()
    method getColNames (line 186) | protected function getColNames($sId = null)
    method getIdentColNames (line 205) | protected function getIdentColNames()
    method getVisibleColNames (line 224) | protected function getVisibleColNames()
    method getQueryCols (line 259) | protected function getQueryCols()
    method buildColsQuery (line 275) | protected function buildColsQuery($aIdentCols, $blIdentCols = true)
    method isExtendedColumn (line 302) | protected function isExtendedColumn($sColumn)
    method getExtendedColQuery (line 319) | protected function getExtendedColQuery($sViewTable, $sColumn, $iCnt)
    method getSorting (line 334) | protected function getSorting()
    method getLimit (line 346) | protected function getLimit($iStart)
    method getFilter (line 359) | protected function getFilter()
    method addFilter (line 402) | protected function addFilter($sQ)
    method getAll (line 418) | protected function getAll($sQ)
    method getSortDir (line 428) | protected function getSortDir()
    method getStartIndex (line 443) | protected function getStartIndex()
    method getTotalCount (line 455) | protected function getTotalCount($sQ)
    method getDataFields (line 474) | protected function getDataFields($sQ)
    method outputResponse (line 485) | protected function outputResponse($aData)
    method output (line 495) | protected function output($sOut)
    method getViewName (line 507) | protected function getViewName($sTable)
    method getData (line 523) | protected function getData($sCountQ, $sQ)
    method resetArtSeoUrl (line 564) | public function resetArtSeoUrl($aArtIds, $aCatIds = null)
    method resetContentCache (line 584) | public function resetContentCache()
    method resetCounter (line 602) | public function resetCounter($sCounterType, $sValue = null)
    method resetCaches (line 630) | protected function resetCaches()

FILE: source/Application/Controller/Admin/ListReview.php
  class ListReview (line 17) | class ListReview extends \OxidEsales\Eshop\Application\Controller\Admin\...
    method getViewListSize (line 38) | public function getViewListSize()
    method render (line 44) | public function render()
    method buildSelectString (line 62) | protected function buildSelectString($oObject = null)
    method prepareWhereQuery (line 89) | protected function prepareWhereQuery($aWhere, $sSql)

FILE: source/Application/Controller/Admin/ListUser.php
  class ListUser (line 15) | class ListUser extends \OxidEsales\Eshop\Application\Controller\Admin\Us...
    method getViewListSize (line 22) | public function getViewListSize()
    method init (line 31) | public function init()
    method render (line 37) | public function render()

FILE: source/Application/Controller/Admin/LoginController.php
  class LoginController (line 21) | class LoginController extends \OxidEsales\Eshop\Application\Controller\A...
    method __construct (line 29) | public function __construct()
    method render (line 41) | public function render()
    method setShopConfigParameters (line 85) | protected function setShopConfigParameters()
    method checklogin (line 99) | public function checklogin()
    method authorize (line 179) | protected function authorize()
    method getViewId (line 189) | public function getViewId()
    method getAvailableLanguages (line 199) | protected function getAvailableLanguages()
    method getBrowserLanguage (line 217) | protected function getBrowserLanguage()

FILE: source/Application/Controller/Admin/ManufacturerController.php
  class ManufacturerController (line 15) | class ManufacturerController extends \OxidEsales\Eshop\Application\Contr...

FILE: source/Application/Controller/Admin/ManufacturerList.php
  class ManufacturerList (line 13) | class ManufacturerList extends \OxidEsales\Eshop\Application\Controller\...

FILE: source/Application/Controller/Admin/ManufacturerMain.php
  class ManufacturerMain (line 18) | class ManufacturerMain extends \OxidEsales\Eshop\Application\Controller\...
    method render (line 27) | public function render()
    method save (line 84) | public function save()
    method saveInnLang (line 122) | public function saveInnLang()

FILE: source/Application/Controller/Admin/ManufacturerMainAjax.php
  class ManufacturerMainAjax (line 15) | class ManufacturerMainAjax extends \OxidEsales\Eshop\Application\Control...
    method getQuery (line 56) | protected function getQuery()
    method addFilter (line 94) | protected function addFilter($query)
    method removeManufacturer (line 109) | public function removeManufacturer()
    method formManufacturerRemovalQuery (line 135) | protected function formManufacturerRemovalQuery($articlesToRemove)
    method addManufacturer (line 146) | public function addManufacturer()
    method formArticleToManufacturerAdditionQuery (line 175) | protected function formArticleToManufacturerAdditionQuery($manufacture...

FILE: source/Application/Controller/Admin/ManufacturerPicture.php
  class ManufacturerPicture (line 20) | class ManufacturerPicture extends AdminDetailsController
    method render (line 22) | public function render(): string
    method save (line 36) | public function save(): void
    method deletePicture (line 64) | public function deletePicture(): void
    method fetchChanges (line 91) | private function fetchChanges(Manufacturer $manufacturer): array
    method checkNewImagesCount (line 104) | private function checkNewImagesCount(): void
    method showError (line 111) | private function showError(string $message, bool $isBlFull = false): void

FILE: source/Application/Controller/Admin/ManufacturerSeo.php
  class ManufacturerSeo (line 15) | class ManufacturerSeo extends \OxidEsales\Eshop\Application\Controller\A...
    method save (line 22) | public function save()
    method getEncoder (line 41) | protected function getEncoder()
    method isSuffixSupported (line 51) | public function isSuffixSupported()
    method getType (line 61) | protected function getType()
    method isEntrySuffixed (line 71) | public function isEntrySuffixed()
    method getEntryUri (line 84) | public function getEntryUri()

FILE: source/Application/Controller/Admin/ModuleConfiguration.php
  class ModuleConfiguration (line 18) | #[\AllowDynamicProperties]
    method __construct (line 24) | public function __construct()
    method render (line 31) | public function render()
    method saveConfVars (line 66) | public function saveConfVars()
    method getSelectedModuleId (line 82) | private function getSelectedModuleId(): string
    method saveModuleConfigVariables (line 95) | private function saveModuleConfigVariables(string $moduleId, array $va...
    method getConfigVariablesFromRequest (line 135) | private function getConfigVariablesFromRequest(): array
    method formatModuleSettingsForTemplate (line 156) | private function formatModuleSettingsForTemplate(array $moduleSettings...

FILE: source/Application/Controller/Admin/ModuleController.php
  class ModuleController (line 16) | class ModuleController extends \OxidEsales\Eshop\Application\Controller\...
    method render (line 24) | public function render()

FILE: source/Application/Controller/Admin/ModuleList.php
  class ModuleList (line 20) | class ModuleList extends \OxidEsales\Eshop\Application\Controller\Admin\...
    method render (line 33) | public function render()
    method getInstalledModules (line 45) | private function getInstalledModules(): array
    method sortModulesByTitleAlphabetically (line 68) | private function sortModulesByTitleAlphabetically(array $modules): array
    method convertModulesToAssociativeArray (line 81) | private function convertModulesToAssociativeArray(array $modules): array

FILE: source/Application/Controller/Admin/ModuleMain.php
  class ModuleMain (line 14) | class ModuleMain extends \OxidEsales\Eshop\Application\Controller\Admin\...
    method render (line 17) | public function render()
    method activateModule (line 49) | public function activateModule()
    method deactivateModule (line 75) | public function deactivateModule()

FILE: source/Application/Controller/Admin/ModuleSortList.php
  class ModuleSortList (line 22) | class ModuleSortList extends \OxidEsales\Eshop\Application\Controller\Ad...
    method render (line 36) | public function render()
    method save (line 70) | public function save()
    method remove (line 90) | public function remove()
    method sanitizeClassExtensionsChain (line 107) | private function sanitizeClassExtensionsChain(array $chain): array
    method getShopConfiguration (line 122) | private function getShopConfiguration(): ShopConfiguration

FILE: source/Application/Controller/Admin/NavigationController.php
  class NavigationController (line 18) | class NavigationController extends \OxidEsales\Eshop\Application\Control...
    method render (line 28) | public function render()
    method chshp (line 95) | public function chshp()
    method logout (line 109) | public function logout()
    method exturl (line 131) | public function exturl()
    method doStartUpChecks (line 148) | protected function doStartUpChecks()
    method checkVersion (line 184) | protected function checkVersion()

FILE: source/Application/Controller/Admin/NavigationTree.php
  class NavigationTree (line 20) | class NavigationTree extends Base
    method cleanEmptyParents (line 46) | protected function cleanEmptyParents($dom, $parentXPath, $childXPath)
    method addLinks (line 65) | protected function addLinks($dom)
    method loadFromFile (line 92) | protected function loadFromFile($menuFile, $dom)
    method sessionizeLocalUrls (line 127) | protected function sessionizeLocalUrls($dom)
    method checkRights (line 148) | protected function checkRights($dom)
    method checkGroups (line 179) | protected function checkGroups($dom)
    method checkDemoShopDenials (line 212) | protected function checkDemoShopDenials($dom)
    method removeInvisibleMenuNodes (line 233) | protected function removeInvisibleMenuNodes($dom)
    method copyAttributes (line 250) | protected function copyAttributes($domElemTo, $domElemFrom)
    method mergeNodes (line 266) | protected function mergeNodes($domElemTo, $domElemFrom, $xPathTo, $dom...
    method merge (line 300) | protected function merge($domNew, $dom)
    method getTabs (line 315) | public function getTabs($id, $act, $setActive = true)
    method getActiveTab (line 343) | public function getActiveTab($id, $act)
    method getBtn (line 359) | public function getBtn($class)
    method getMenuFiles (line 380) | protected function getMenuFiles()
    method processCachedFile (line 393) | protected function processCachedFile($cacheContents)
    method getInitialDom (line 398) | protected function getInitialDom()
    method getDomXml (line 439) | public function getDomXml()
    method getListNodes (line 470) | public function getListNodes($nodes)
    method markNodeActive (line 483) | public function markNodeActive($nodeId)
    method getListUrl (line 504) | public function getListUrl($id)
    method getEditUrl (line 527) | public function getEditUrl($id, $actTab)
    method getAdminUrl (line 553) | protected function getAdminUrl()
    method hasRights (line 573) | protected function hasRights($rights)
    method hasGroup (line 585) | protected function hasGroup($groupId)
    method getClassId (line 597) | public function getClassId($className)
    method getTemplateLanguageCode (line 612) | protected function getTemplateLanguageCode()
    method onGettingDomXml (line 623) | protected function onGettingDomXml()
    method isMenuCacheOutdated (line 627) | private function isMenuCacheOutdated($cache, string $cacheName, array ...
    method generateInitialMenuDomXml (line 645) | private function generateInitialMenuDomXml(array $filesToLoad): string

FILE: source/Application/Controller/Admin/ObjectSeo.php
  class ObjectSeo (line 16) | class ObjectSeo extends \OxidEsales\Eshop\Application\Controller\Admin\A...
    method render (line 25) | public function render()
    method save (line 61) | public function save()
    method getAdditionalParamsFromSeoData (line 105) | protected function getAdditionalParamsFromSeoData($aSeoData)
    method getSaveObjectId (line 122) | protected function getSaveObjectId()
    method getEntryMetaData (line 134) | public function getEntryMetaData($sMetaType)
    method isEntryFixed (line 144) | public function isEntryFixed()
    method getType (line 167) | protected function getType()
    method getStdUrl (line 178) | protected function getStdUrl($sOxid)
    method getEditLang (line 193) | public function getEditLang()
    method getAltSeoEntryId (line 201) | protected function getAltSeoEntryId()
    method getSeoEntryType (line 210) | protected function getSeoEntryType()
    method processParam (line 222) | public function processParam($sParam)
    method getEncoder (line 230) | protected function getEncoder()
    method getEntryUri (line 237) | public function getEntryUri()
    method isEntrySuffixed (line 246) | public function isEntrySuffixed()
    method isSuffixSupported (line 256) | public function isSuffixSupported()
    method showCatSelect (line 266) | public function showCatSelect()
    method getActCatType (line 276) | public function getActCatType()

FILE: source/Application/Controller/Admin/OrderAddress.php
  class OrderAddress (line 17) | class OrderAddress extends \OxidEsales\Eshop\Application\Controller\Admi...
    method render (line 20) | public function render()
    method processAddress (line 51) | protected function processAddress($aData, $sTypeToProcess, $aIgnore)
    method save (line 87) | public function save()

FILE: source/Application/Controller/Admin/OrderArticle.php
  class OrderArticle (line 21) | class OrderArticle extends \OxidEsales\Eshop\Application\Controller\Admi...
    method render (line 54) | public function render()
    method getEditObject (line 71) | public function getEditObject()
    method getSearchProductArtNr (line 87) | public function getSearchProductArtNr()
    method getSearchProduct (line 97) | public function getSearchProduct()
    method getMainProduct (line 119) | public function getMainProduct()
    method getProductList (line 152) | public function getProductList()
    method addThisArticle (line 175) | public function addThisArticle()
    method deleteThisArticle (line 200) | public function deleteThisArticle()
    method storno (line 222) | public function storno()
    method updateOrder (line 264) | public function updateOrder()

FILE: source/Application/Controller/Admin/OrderDownloads.php
  class OrderDownloads (line 17) | class OrderDownloads extends \OxidEsales\Eshop\Application\Controller\Ad...
    method render (line 27) | public function render()
    method getEditObject (line 43) | public function getEditObject()
    method resetDownloadLink (line 57) | public function resetDownloadLink()

FILE: source/Application/Controller/Admin/OrderList.php
  class OrderList (line 17) | class OrderList extends \OxidEsales\Eshop\Application\Controller\Admin\A...
    method render (line 46) | public function render()
    method cancelOrder (line 75) | public function cancelOrder()
    method getListSorting (line 92) | public function getListSorting()
    method prepareWhereQuery (line 110) | protected function prepareWhereQuery($whereQuery, $fullQuery)
    method buildSelectString (line 135) | protected function buildSelectString($listObject = null)

FILE: source/Application/Controller/Admin/OrderMain.php
  class OrderMain (line 17) | class OrderMain extends \OxidEsales\Eshop\Application\Controller\Admin\A...
    method render (line 32) | public function render()
    method save (line 83) | public function save()
    method sendOrder (line 153) | public function sendOrder()
    method sendDownloadLinks (line 176) | public function sendDownloadLinks()
    method resetOrder (line 189) | public function resetOrder()
    method onOrderSend (line 203) | protected function onOrderSend()
    method onOrderReset (line 210) | protected function onOrderReset()

FILE: source/Application/Controller/Admin/OrderOverview.php
  class OrderOverview (line 19) | class OrderOverview extends \OxidEsales\Eshop\Application\Controller\Adm...
    method render (line 22) | public function render()
    method getPaymentType (line 69) | protected function getPaymentType($oOrder)
    method makeValidFileName (line 90) | public function makeValidFileName($sFilename)
    method sendorder (line 101) | public function sendorder()
    method resetorder (line 128) | public function resetorder()
    method canResetShippingDate (line 142) | public function canResetShippingDate()

FILE: source/Application/Controller/Admin/OrderRemark.php
  class OrderRemark (line 17) | class OrderRemark extends \OxidEsales\Eshop\Application\Controller\Admin...
    method render (line 20) | public function render()
    method save (line 62) | public function save()
    method delete (line 82) | public function delete()

FILE: source/Application/Controller/Admin/PaymentCountry.php
  class PaymentCountry (line 18) | class PaymentCountry extends \OxidEsales\Eshop\Application\Controller\Ad...
    method render (line 21) | public function render()
    method addcountry (line 67) | public function addcountry()
    method removecountry (line 86) | public function removecountry()

FILE: source/Application/Controller/Admin/PaymentCountryAjax.php
  class PaymentCountryAjax (line 15) | class PaymentCountryAjax extends \OxidEsales\Eshop\Application\Controlle...
    method getQuery (line 43) | protected function getQuery()
    method addPayCountry (line 72) | public function addPayCountry()
    method removePayCountry (line 96) | public function removePayCountry()

FILE: source/Application/Controller/Admin/PaymentList.php
  class PaymentList (line 15) | class PaymentList extends \OxidEsales\Eshop\Application\Controller\Admin...

FILE: source/Application/Controller/Admin/PaymentMain.php
  class PaymentMain (line 18) | class PaymentMain extends \OxidEsales\Eshop\Application\Controller\Admin...
    method render (line 26) | public function render()
    method save (line 77) | public function save()
    method saveinnlang (line 134) | public function saveinnlang()
    method delFields (line 162) | public function delFields()
    method addField (line 186) | public function addField()

FILE: source/Application/Controller/Admin/PaymentMainAjax.php
  class PaymentMainAjax (line 15) | class PaymentMainAjax extends \OxidEsales\Eshop\Application\Controller\A...
    method getQuery (line 41) | protected function getQuery()
    method removePayGroup (line 78) | public function removePayGroup()
    method addPayGroup (line 94) | public function addPayGroup()

FILE: source/Application/Controller/Admin/PaymentRdfa.php
  class PaymentRdfa (line 20) | class PaymentRdfa extends \OxidEsales\Eshop\Application\Controller\Admin...
    method render (line 53) | public function render()
    method save (line 65) | public function save()
    method getAllRDFaPayments (line 91) | public function getAllRDFaPayments()
    method getAssignedRDFaPayments (line 111) | public function getAssignedRDFaPayments()
    method getPayment (line 125) | private function getPayment(string $paymentId): Payment

FILE: source/Application/Controller/Admin/PriceAlarmList.php
  class PriceAlarmList (line 17) | class PriceAlarmList extends \OxidEsales\Eshop\Application\Controller\Ad...
    method buildSelectString (line 47) | protected function buildSelectString($oListObject = null)
    method buildWhere (line 64) | public function buildWhere()

FILE: source/Application/Controller/Admin/PriceAlarmMail.php
  class PriceAlarmMail (line 17) | class PriceAlarmMail extends \OxidEsales\Eshop\Application\Controller\Ad...
    method render (line 20) | public function render()

FILE: source/Application/Controller/Admin/PriceAlarmMain.php
  class PriceAlarmMain (line 18) | class PriceAlarmMain extends \OxidEsales\Eshop\Application\Controller\Ad...
    method render (line 21) | public function render()
    method send (line 81) | public function send()
    method getActivePriceAlarmsCount (line 118) | protected function getActivePriceAlarmsCount()

FILE: source/Application/Controller/Admin/PriceAlarmSend.php
  class PriceAlarmSend (line 16) | class PriceAlarmSend extends \OxidEsales\Eshop\Application\Controller\Ad...
    method render (line 32) | public function render()
    method setupNavigation (line 70) | protected function setupNavigation($sId)
    method countActivePriceAlerts (line 80) | protected function countActivePriceAlerts()
    method sendPriceChangeNotifications (line 112) | protected function sendPriceChangeNotifications($start, $limit)
    method sendeMail (line 147) | public function sendeMail($emailAddress, $productID, $priceAlarmId, $b...

FILE: source/Application/Controller/Admin/SelectListController.php
  class SelectListController (line 15) | class SelectListController extends \OxidEsales\Eshop\Application\Control...

FILE: source/Application/Controller/Admin/SelectListList.php
  class SelectListList (line 13) | class SelectListList extends \OxidEsales\Eshop\Application\Controller\Ad...

FILE: source/Application/Controller/Admin/SelectListMain.php
  class SelectListMain (line 27) | class SelectListMain extends \OxidEsales\Eshop\Application\Controller\Ad...
    method render (line 35) | public function render()
    method save (line 111) | public function save()
    method saveinnlang (line 164) | public function saveinnlang()
    method delFields (line 201) | public function delFields()
    method addField (line 233) | public function addField()
    method changeField (line 272) | public function changeField()
    method rearrangeFields (line 315) | protected function rearrangeFields($oField, $iPos)
    method parseFieldName (line 370) | public function parseFieldName($sInput)

FILE: source/Application/Controller/Admin/SelectListMainAjax.php
  class SelectListMainAjax (line 17) | class SelectListMainAjax extends \OxidEsales\Eshop\Application\Controlle...
    method getQuery (line 64) | protected function getQuery()
    method removeArtFromSel (line 108) | public function removeArtFromSel()
    method addArtToSel (line 128) | public function addArtToSel()
    method onArticleAddToSelectionList (line 167) | protected function onArticleAddToSelectionList($articleId)

FILE: source/Application/Controller/Admin/SelectListOrderAjax.php
  class SelectListOrderAjax (line 16) | class SelectListOrderAjax extends \OxidEsales\Eshop\Application\Controll...
    method getQuery (line 37) | protected function getQuery()
    method getSorting (line 51) | protected function getSorting()
    method setSorting (line 59) | public function setSorting()

FILE: source/Application/Controller/Admin/ShopConfiguration.php
  class ShopConfiguration (line 29) | class ShopConfiguration extends \OxidEsales\Eshop\Application\Controller...
    method render (line 50) | public function render()
    method getModuleForConfigVars (line 131) | protected function getModuleForConfigVars()
    method saveConfVars (line 139) | public function saveConfVars()
    method save (line 170) | public function save()
    method loadConfVars (line 196) | public function loadConfVars($shopId, $moduleId)
    method informationSendingToOxidConfigurable (line 255) | public function informationSendingToOxidConfigurable()
    method parseConstraint (line 268) | protected function parseConstraint($type, $constraint)
    method serializeConstraint (line 286) | protected function serializeConstraint($type, $constraint)
    method unserializeConfVar (line 305) | public function unserializeConfVar($type, $name, $value)
    method serializeConfVar (line 355) | public function serializeConfVar($type, $name, $value)
    method arrayToMultiline (line 392) | protected function arrayToMultiline($input)
    method multilineToArray (line 404) | protected function multilineToArray($multiline)
    method aarrayToMultiline (line 426) | protected function aarrayToMultiline($input)
    method multilineToAarray (line 456) | protected function multilineToAarray($multiline)
    method getEditObjectId (line 480) | public function getEditObjectId()
    method saveSetting (line 495) | private function saveSetting(string $configName, string $existingConfi...

FILE: source/Application/Controller/Admin/ShopController.php
  class ShopController (line 18) | class ShopController extends \OxidEsales\Eshop\Application\Controller\Ad...
    method render (line 28) | public function render()

FILE: source/Application/Controller/Admin/ShopDefaultCategoryAjax.php
  class ShopDefaultCategoryAjax (line 15) | class ShopDefaultCategoryAjax extends \OxidEsales\Eshop\Application\Cont...
    method getQuery (line 35) | protected function getQuery()
    method unassignCat (line 48) | public function unassignCat()
    method assignCat (line 61) | public function assignCat()

FILE: source/Application/Controller/Admin/ShopLicense.php
  class ShopLicense (line 23) | class ShopLicense extends \OxidEsales\Eshop\Application\Controller\Admin...
    method render (line 32) | public function render()
    method canUpdate (line 66) | protected function canUpdate(): bool
    method fetchCurVersionInfo (line 88) | protected function fetchCurVersionInfo($sUrl): string
    method requestVersionInfo (line 106) | private function requestVersionInfo(string $url): string
    method getLanguageAbbreviation (line 123) | private function getLanguageAbbreviation(): string
    method handleConnectionError (line 129) | private function handleConnectionError(Throwable $e): void
    method displayErrorMessage (line 134) | private function displayErrorMessage(string $message): void
    method filterVersionCheckerResponse (line 145) | private function filterVersionCheckerResponse(string $response): string
    method parseResponseForTheNewestShopVersion (line 152) | private function parseResponseForTheNewestShopVersion(string $response...
    method shopIsOutdated (line 159) | private function shopIsOutdated(string $newestShopVersion): bool
    method insertLinkToShopUpdateDocumentation (line 164) | private function insertLinkToShopUpdateDocumentation(string $response)...

FILE: source/Application/Controller/Admin/ShopList.php
  class ShopList (line 18) | class ShopList extends \OxidEsales\Eshop\Application\Controller\Admin\Ad...
    method render (line 57) | public function render()
    method buildWhere (line 99) | public function buildWhere()
    method updateNavigation (line 116) | protected function updateNavigation()

FILE: source/Application/Controller/Admin/ShopMain.php
  class ShopMain (line 22) | class ShopMain extends \OxidEsales\Eshop\Application\Controller\Admin\Ad...
    method render (line 39) | public function render()
    method save (line 87) | public function save()
    method getNonCopyConfigVars (line 150) | protected function getNonCopyConfigVars(): array
    method copyConfigVars (line 173) | protected function copyConfigVars($shop)
    method renderNewShop (line 223) | protected function renderNewShop()
    method updateShopIdByUser (line 237) | protected function updateShopIdByUser($user, $shopId, $updateViewData ...
    method checkParent (line 247) | protected function checkParent($shop)
    method updateParameters (line 258) | protected function updateParameters($parameters)
    method checkExceptionType (line 270) | protected function checkExceptionType($exception)
    method canCreateShop (line 282) | protected function canCreateShop($shopId, $shop)
    method updateShopInformation (line 294) | protected function updateShopInformation($config, $shop, $shopId)

FILE: source/Application/Controller/Admin/ShopPerformance.php
  class ShopPerformance (line 15) | class ShopPerformance extends \OxidEsales\Eshop\Application\Controller\A...

FILE: source/Application/Controller/Admin/ShopRdfa.php
  class ShopRdfa (line 18) | class ShopRdfa extends \OxidEsales\Eshop\Application\Controller\Admin\Sh...
    method getContentList (line 43) | public function getContentList()
    method getCustomers (line 66) | public function getCustomers()

FILE: source/Application/Controller/Admin/ShopSeo.php
  class ShopSeo (line 17) | class ShopSeo extends \OxidEsales\Eshop\Application\Controller\Admin\Sho...
    method render (line 30) | public function render()
    method loadActiveUrl (line 64) | protected function loadActiveUrl($iShopId)
    method save (line 95) | public function save()
    method processUrls (line 126) | protected function processUrls($aUrls)
    method cleanupUrl (line 148) | protected function cleanupUrl($sUrl)
    method dropSeoIds (line 163) | public function dropSeoIds()
    method deleteStaticUrl (line 171) | public function deleteStaticUrl()
    method deleteStaticUrlFromDb (line 187) | protected function deleteStaticUrlFromDb($staticUrlId)

FILE: source/Application/Controller/Admin/ShopSystem.php
  class ShopSystem (line 15) | class ShopSystem extends \OxidEsales\Eshop\Application\Controller\Admin\...

FILE: source/Application/Controller/Admin/SystemInfoController.php
  class SystemInfoController (line 18) | class SystemInfoController extends \OxidEsales\Eshop\Application\Control...
    method render (line 26) | public function render()
    method getRenderer (line 79) | private function getRenderer()
    method isClassVariableVisible (line 91) | protected function isClassVariableVisible($varName)

FILE: source/Application/Controller/Admin/SystemRequirements.php
  class SystemRequirements (line 14) | class SystemRequirements extends \OxidEsales\Eshop\Application\Controlle...

FILE: source/Application/Controller/Admin/SystemRequirementsList.php
  class SystemRequirementsList (line 14) | class SystemRequirementsList extends \OxidEsales\Eshop\Application\Contr...

FILE: source/Application/Controller/Admin/SystemRequirementsMain.php
  class SystemRequirementsMain (line 14) | class SystemRequirementsMain extends \OxidEsales\Eshop\Application\Contr...
    method render (line 17) | public function render()
    method getModuleClass (line 36) | public function getModuleClass($iModuleState)
    method getReqInfoUrl (line 62) | public function getReqInfoUrl($sIdent)

FILE: source/Application/Controller/Admin/ThemeConfiguration.php
  class ThemeConfiguration (line 13) | class ThemeConfiguration extends \OxidEsales\Eshop\Application\Controlle...
    method render (line 18) | public function render()
    method getModuleForConfigVars (line 56) | protected function getModuleForConfigVars()
    method saveConfVars (line 68) | public function saveConfVars()

FILE: source/Application/Controller/Admin/ThemeController.php
  class ThemeController (line 16) | class ThemeController extends \OxidEsales\Eshop\Application\Controller\A...
    method render (line 24) | public function render()

FILE: source/Application/Controller/Admin/ThemeList.php
  class ThemeList (line 16) | class ThemeList extends \OxidEsales\Eshop\Application\Controller\Admin\A...
    method render (line 23) | public function render()

FILE: source/Application/Controller/Admin/ThemeMain.php
  class ThemeMain (line 15) | class ThemeMain extends \OxidEsales\Eshop\Application\Controller\Admin\A...
    method render (line 18) | public function render()
    method themeInConfigFile (line 48) | public function themeInConfigFile()
    method setTheme (line 62) | public function setTheme()

FILE: source/Application/Controller/Admin/ToolsController.php
  class ToolsController (line 17) | class ToolsController extends \OxidEsales\Eshop\Application\Controller\A...
    method render (line 25) | public function render()

FILE: source/Application/Controller/Admin/ToolsList.php
  class ToolsList (line 19) | class ToolsList extends \OxidEsales\Eshop\Application\Controller\Admin\A...
    method updateViews (line 31) | public function updateViews()
    method performsql (line 43) | public function performsql()
    method processFiles (line 125) | protected function processFiles()
    method prepareSQL (line 169) | protected function prepareSQL($sSQL, $iSQLlen)

FILE: source/Application/Controller/Admin/ToolsMain.php
  class ToolsMain (line 19) | class ToolsMain extends \OxidEsales\Eshop\Application\Controller\Admin\A...
    method render (line 22) | public function render()

FILE: source/Application/Controller/Admin/UserAddress.php
  class UserAddress (line 17) | class UserAddress extends \OxidEsales\Eshop\Application\Controller\Admin...
    method render (line 27) | public function render()
    method save (line 75) | public function save()
    method delAddress (line 98) | public function delAddress()

FILE: source/Application/Controller/Admin/UserArticle.php
  class UserArticle (line 15) | class UserArticle extends \OxidEsales\Eshop\Application\Controller\Admin...
    method render (line 23) | public function render()

FILE: source/Application/Controller/Admin/UserExtend.php
  class UserExtend (line 17) | class UserExtend extends \OxidEsales\Eshop\Application\Controller\Admin\...
    method render (line 25) | public function render()
    method save (line 55) | public function save()

FILE: source/Application/Controller/Admin/UserGroupController.php
  class UserGroupController (line 16) | class UserGroupController extends \OxidEsales\Eshop\Application\Controll...

FILE: source/Application/Controller/Admin/UserGroupList.php
  class UserGroupList (line 15) | class UserGroupList extends \OxidEsales\Eshop\Application\Controller\Adm...
    method render (line 37) | public function render()

FILE: source/Application/Controller/Admin/UserGroupMain.php
  class UserGroupMain (line 18) | class UserGroupMain extends \OxidEsales\Eshop\Application\Controller\Adm...
    method render (line 21) | public function render()
    method save (line 65) | public function save()
    method saveinnlang (line 95) | public function saveinnlang()

FILE: source/Application/Controller/Admin/UserGroupMainAjax.php
  class UserGroupMainAjax (line 15) | class UserGroupMainAjax extends \OxidEsales\Eshop\Application\Controller...
    method getQuery (line 53) | protected function getQuery()
    method removeUserFromUGroup (line 90) | public function removeUserFromUGroup()
    method addUserToUGroup (line 106) | public function addUserToUGroup()

FILE: source/Application/Controller/Admin/UserList.php
  class UserList (line 18) | class UserList extends \OxidEsales\Eshop\Application\Controller\Admin\Ad...
    method render (line 53) | public function render()
    method deleteEntry (line 74) | public function deleteEntry()
    method prepareWhereQuery (line 93) | public function prepareWhereQuery($whereQuery, $fullQuery)

FILE: source/Application/Controller/Admin/UserMain.php
  class UserMain (line 20) | class UserMain extends \OxidEsales\Eshop\Application\Controller\Admin\Ad...
    method render (line 25) | public function render()
    method save (line 102) | public function save()
    method calculateAdditionalRights (line 160) | protected function calculateAdditionalRights($userRights)
    method onUserCreation (line 172) | protected function onUserCreation($user)

FILE: source/Application/Controller/Admin/UserMainAjax.php
  class UserMainAjax (line 15) | class UserMainAjax extends \OxidEsales\Eshop\Application\Controller\Admi...
    method getQuery (line 39) | protected function getQuery()
    method removeUserFromGroup (line 66) | public function removeUserFromGroup()
    method addUserToGroup (line 81) | public function addUserToGroup()

FILE: source/Application/Controller/Admin/UserOverview.php
  class UserOverview (line 13) | class UserOverview extends \OxidEsales\Eshop\Application\Controller\Admi...
    method render (line 16) | public function render()

FILE: source/Application/Controller/Admin/UserPayment.php
  class UserPayment (line 17) | class UserPayment extends \OxidEsales\Eshop\Application\Controller\Admin...
    method render (line 67) | public function render()
    method save (line 87) | public function save()
    method delPayment (line 114) | public function delPayment()
    method getUser (line 133) | public function getUser()
    method getPaymentId (line 153) | public function getPaymentId()
    method getPaymentTypes (line 178) | public function getPaymentTypes()
    method getSelUserPayment (line 197) | public function getSelUserPayment()
    method getUserPayments (line 231) | public function getUserPayments()

FILE: source/Application/Controller/Admin/UserRemark.php
  class UserRemark (line 17) | class UserRemark extends \OxidEsales\Eshop\Application\Controller\Admin\...
    method render (line 20) | public function render()
    method save (line 63) | public function save()
    method delete (line 82) | public function delete()

FILE: source/Application/Controller/Admin/VendorController.php
  class VendorController (line 15) | class VendorController extends \OxidEsales\Eshop\Application\Controller\...

FILE: source/Application/Controller/Admin/VendorList.php
  class VendorList (line 13) | class VendorList extends \OxidEsales\Eshop\Application\Controller\Admin\...

FILE: source/Application/Controller/Admin/VendorMain.php
  class VendorMain (line 18) | class VendorMain extends \OxidEsales\Eshop\Application\Controller\Admin\...
    method render (line 27) | public function render()
    method save (line 84) | public function save()
    method saveinnlang (line 122) | public function saveinnlang()

FILE: source/Application/Controller/Admin/VendorMainAjax.php
  class VendorMainAjax (line 15) | class VendorMainAjax extends \OxidEsales\Eshop\Application\Controller\Ad...
    method getQuery (line 54) | protected function getQuery()
    method addFilter (line 91) | protected function addFilter($sQ)
    method removeVendor (line 105) | public function removeVendor()
    method addVendor (line 129) | public function addVendor()
    method onVendorActionArticleUpdateConditions (line 160) | protected function onVendorActionArticleUpdateConditions($articleIds)
    method onVendorAction (line 170) | protected function onVendorAction($vendorOxid)

FILE: source/Application/Controller/Admin/VendorSeo.php
  class VendorSeo (line 15) | class VendorSeo extends \OxidEsales\Eshop\Application\Controller\Admin\O...
    method save (line 22) | public function save()
    method getEncoder (line 41) | protected function getEncoder()
    method isSuffixSupported (line 51) | public function isSuffixSupported()
    method isEntrySuffixed (line 61) | public function isEntrySuffixed()
    method getType (line 74) | protected function getType()
    method getEntryUri (line 84) | public function getEntryUri()

FILE: source/Application/Controller/Admin/VoucherSerieController.php
  class VoucherSerieController (line 16) | class VoucherSerieController extends \OxidEsales\Eshop\Application\Contr...

FILE: source/Application/Controller/Admin/VoucherSerieExport.php
  class VoucherSerieExport (line 18) | class VoucherSerieExport extends \OxidEsales\Eshop\Application\Controlle...
    method __construct (line 51) | public function __construct()
    method getDownloadUrl (line 67) | public function getDownloadUrl()
    method getExportFileName (line 85) | protected function getExportFileName()
    method getExportFilePath (line 102) | protected function getExportFilePath()
    method download (line 114) | public function download()
    method run (line 132) | public function run()
    method exportVouchers (line 170) | public function exportVouchers($iStart)
    method write (line 212) | public function write($sLine)

FILE: source/Application/Controller/Admin/VoucherSerieGenerate.php
  class VoucherSerieGenerate (line 15) | class VoucherSerieGenerate extends \OxidEsales\Eshop\Application\Control...
    method nextTick (line 59) | public function nextTick($cnt)
    method generateVoucher (line 75) | public function generateVoucher($iCnt)
    method run (line 102) | public function run()

FILE: source/Application/Controller/Admin/VoucherSerieGroups.php
  class VoucherSerieGroups (line 18) | class VoucherSerieGroups extends \OxidEsales\Eshop\Application\Controlle...
    method render (line 21) | public function render()

FILE: source/Application/Controller/Admin/VoucherSerieGroupsAjax.php
  class VoucherSerieGroupsAjax (line 15) | class VoucherSerieGroupsAjax extends \OxidEsales\Eshop\Application\Contr...
    method getQuery (line 39) | protected function getQuery()
    method removeGroupFromVoucher (line 66) | public function removeGroupFromVoucher()
    method addGroupToVoucher (line 81) | public function addGroupToVoucher()

FILE: source/Application/Controller/Admin/VoucherSerieList.php
  class VoucherSerieList (line 16) | class VoucherSerieList extends \OxidEsales\Eshop\Application\Controller\...
    method deleteEntry (line 35) | public function deleteEntry()

FILE: source/Application/Controller/Admin/VoucherSerieMain.php
  class VoucherSerieMain (line 18) | class VoucherSerieMain extends \OxidEsales\Eshop\Application\Controller\...
    method render (line 54) | public function render()
    method save (line 79) | public function save()
    method getStatus (line 115) | public function getStatus()
    method prepareExport (line 125) | public function prepareExport()
    method getVoucherSerie (line 135) | protected function getVoucherSerie()
    method start (line 153) | public function start()
    method getViewId (line 182) | public function getViewId()

FILE: source/Application/Controller/Admin/WrappingList.php
  class WrappingList (line 15) | class WrappingList extends \OxidEsales\Eshop\Application\Controller\Admi...
    method render (line 37) | public function render()

FILE: source/Application/Controller/Admin/WrappingMain.php
  class WrappingMain (line 19) | class WrappingMain extends \OxidEsales\Eshop\Application\Controller\Admi...
    method render (line 22) | public function render()
    method save (line 69) | public function save()
    method saveinnlang (line 118) | public function saveinnlang()

FILE: source/Application/Controller/ArticleDetailsController.php
  class ArticleDetailsController (line 22) | class ArticleDetailsController extends \OxidEsales\Eshop\Application\Con...
    method getParentProduct (line 168) | protected function getParentProduct($parentId)
    method getAddDynUrlParams (line 187) | protected function getAddDynUrlParams()
    method getNavigationParams (line 202) | public function getNavigationParams()
    method processProduct (line 233) | protected function processProduct($article)
    method generateViewId (line 246) | protected function generateViewId()
    method render (line 262) | public function render()
    method prepareMetaDescription (line 306) | protected function prepareMetaDescription($meta, $length = 200, $descr...
    method prepareMetaKeyword (line 331) | protected function prepareMetaKeyword($keywords, $removeDuplicatedWord...
    method saveReview (line 359) | public function saveReview()
    method addToRecomm (line 407) | public function addToRecomm()
    method getSeoObjectId (line 433) | protected function getSeoObjectId()
    method getProduct (line 445) | public function getProduct()
    method additionalChecksForArticle (line 483) | protected function additionalChecksForArticle()
    method getLinkType (line 512) | public function getLinkType()
    method drawParentUrl (line 543) | public function drawParentUrl()
    method getPictureGallery (line 553) | public function getPictureGallery()
    method getActPicture (line 569) | public function getActPicture()
    method getSelectLists (line 580) | public function getSelectLists()
    method getReviews (line 597) | public function getReviews()
    method getCrossSelling (line 614) | public function getCrossSelling()
    method getSimilarProducts (line 631) | public function getSimilarProducts()
    method getSimilarRecommListIds (line 650) | public function getSimilarRecommListIds()
    method getAccessoires (line 668) | public function getAccessoires()
    method getAlsoBoughtTheseProducts (line 685) | public function getAlsoBoughtTheseProducts()
    method isPriceAlarm (line 702) | public function isPriceAlarm()
    method getSubject (line 715) | protected function getSubject($languageId)
    method getSearchTitle (line 725) | public function getSearchTitle()
    method setSearchTitle (line 735) | public function setSearchTitle($title)
    method setCatTreePath (line 745) | public function setCatTreePath($activeCategoryPath)
    method noIndex (line 756) | public function noIndex()
    method getTitle (line 771) | public function getTitle()
    method getCanonicalUrl (line 788) | public function getCanonicalUrl()
    method getBreadCrumb (line 811) | public function getBreadCrumb()
    method addMe (line 836) | public function addMe()
    method getPriceAlarmStatus (line 875) | public function getPriceAlarmStatus()
    method getBidPrice (line 885) | public function getBidPrice()
    method getVariantSelections (line 904) | public function getVariantSelections()
    method getPicturesProduct (line 920) | public function getPicturesProduct()
    method getSearchParamForHtml (line 935) | public function getSearchParamForHtml()
    method showRdfa (line 949) | public function showRdfa()
    method getRDFaNormalizedRating (line 959) | public function getRDFaNormalizedRating()
    method getRDFaValidityPeriod (line 986) | public function getRDFaValidityPeriod($configVariableName)
    method getRDFaBusinessFnc (line 1008) | public function getRDFaBusinessFnc()
    method getRDFaCustomers (line 1018) | public function getRDFaCustomers()
    method getRDFaVAT (line 1028) | public function getRDFaVAT()
    method getRDFaGenericCondition (line 1038) | public function getRDFaGenericCondition()
    method getBundleArticle (line 1048) | public function getBundleArticle()
    method getRDFaPaymentMethods (line 1066) | public function getRDFaPaymentMethods()
    method getRDFaDeliverySetMethods (line 1080) | public function getRDFaDeliverySetMethods()
    method getProductsDeliveryList (line 1093) | public function getProductsDeliveryList()
    method getRDFaDeliveryChargeSpecLoc (line 1107) | public function getRDFaDeliveryChargeSpecLoc()
    method getRDFaPaymentChargeSpecLoc (line 1117) | public function getRDFaPaymentChargeSpecLoc()
    method getRDFaBusinessEntityLoc (line 1127) | public function getRDFaBusinessEntityLoc()
    method showRDFaProductStock (line 1137) | public function showRDFaProductStock()
    method isReviewActive (line 1148) | public function isReviewActive()
    method getDefaultSorting (line 1158) | public function getDefaultSorting()
    method getSortingParameters (line 1178) | public function getSortingParameters()
    method getVendorBreadCrumb (line 1193) | protected function getVendorBreadCrumb()
    method _getRecommendationListBredCrumb (line 1222) | protected function _getRecommendationListBredCrumb() // phpcs:ignore P...
    method getSearchBreadCrumb (line 1238) | protected function getSearchBreadCrumb()
    method getCategoryBreadCrumb (line 1262) | protected function getCategoryBreadCrumb()

FILE: source/Application/Controller/ArticleListController.php
  class ArticleListController (line 25) | class ArticleListController extends \OxidEsales\Eshop\Application\Contro...
    method generateViewId (line 151) | protected function generateViewId()
    method render (line 176) | public function render()
    method getCategoryToRender (line 207) | protected function getCategoryToRender()
    method checkRequestedPage (line 234) | protected function checkRequestedPage()
    method processListArticles (line 253) | protected function processListArticles()
    method getAddUrlParams (line 280) | public function getAddUrlParams()
    method getAddSeoUrlParams (line 298) | public function getAddSeoUrlParams()
    method getProductLinkType (line 310) | protected function getProductLinkType()
    method executefilter (line 326) | public function executefilter()
    method resetFilter (line 346) | public function resetFilter()
    method loadArticles (line 362) | protected function loadArticles($category)
    method getActPage (line 396) | public function getActPage()
    method getRequestPageNr (line 416) | protected function getRequestPageNr()
    method getArticleListDisplayType (line 426) | protected function getArticleListDisplayType()
    method getSeoObjectId (line 442) | protected function getSeoObjectId()
    method getCatPathString (line 454) | protected function getCatPathString()
    method prepareMetaDescription (line 485) | protected function prepareMetaDescription($meta, $length = 1024, $desc...
    method getMetaDescription (line 519) | public function getMetaDescription()
    method collectMetaDescription (line 545) | protected function collectMetaDescription($meta, $length = 1024, $desc...
    method collectCategoryMetaDescription (line 562) | private function collectCategoryMetaDescription(Category $category): s...
    method getRenderer (line 576) | private function getRenderer(): TemplateRendererInterface
    method collectProductMetaDescription (line 582) | private function collectProductMetaDescription(): string
    method prepareMetaKeyword (line 603) | protected function prepareMetaKeyword($keywords, $removeDuplicatedWord...
    method collectMetaKeyword (line 640) | protected function collectMetaKeyword($keywords)
    method getTemplateName (line 689) | public function getTemplateName()
    method addPageNrParam (line 709) | protected function addPageNrParam($url, $currentPage, $languageId = null)
    method isActCategory (line 728) | protected function isActCategory()
    method generatePageNavigationUrl (line 738) | public function generatePageNavigationUrl()
    method getDefaultSorting (line 752) | public function getDefaultSorting()
    method getTitleSuffix (line 776) | public function getTitleSuffix()
    method getTitlePageSuffix (line 788) | public function getTitlePageSuffix()
    method getSubject (line 803) | protected function getSubject($languageId)
    method getAttributes (line 814) | public function getAttributes()
    method getArticleList (line 833) | public function getArticleList()
    method getArticleCount (line 852) | public function getArticleCount()
    method getSimilarRecommListIds (line 864) | public function getSimilarRecommListIds()
    method getCatTreePath (line 882) | public function getCatTreePath()
    method getTreePath (line 900) | public function getTreePath()
    method getBreadCrumb (line 912) | public function getBreadCrumb()
    method hasVisibleSubCats (line 953) | public function hasVisibleSubCats()
    method getSubCatList (line 970) | public function getSubCatList()
    method getPageNavigation (line 987) | public function getPageNavigation()
    method getTitle (line 1001) | public function getTitle()
    method getBargainArticleList (line 1025) | public function getBargainArticleList()
    method getActiveCategory (line 1046) | public function getActiveCategory()
    method getCanonicalUrl (line 1064) | public function getCanonicalUrl()
    method canSelectDisplayType (line 1087) | public function canSelectDisplayType()
    method getPageCount (line 1097) | public function getPageCount()

FILE: source/Application/Controller/BasketController.php
  class BasketController (line 22) | class BasketController extends \OxidEsales\Eshop\Application\Controller\...
    method render (line 106) | public function render()
    method getBasketArticles (line 127) | public function getBasketArticles()
    method getFirstBasketProduct (line 147) | public function getFirstBasketProduct()
    method getBasketSimilarList (line 166) | public function getBasketSimilarList()
    method getSimilarRecommListIds (line 187) | public function getSimilarRecommListIds()
    method showBackToShop (line 205) | public function showBackToShop()
    method addVoucher (line 218) | public function addVoucher()
    method removeVoucher (line 246) | public function removeVoucher()
    method backToShop (line 271) | public function backToShop()
    method getErrorDestination (line 288) | public function getErrorDestination()
    method isWrapping (line 298) | public function isWrapping()
    method getWrappingList (line 316) | public function getWrappingList()
    method getCardList (line 335) | public function getCardList()
    method changeWrapping (line 357) | public function changeWrapping()
    method getBreadCrumb (line 383) | public function getBreadCrumb()
    method getBasketContentMarkGenerator (line 401) | public function getBasketContentMarkGenerator()
    method setWrappingInfo (line 415) | protected function setWrappingInfo($oBasket, $aWrapping)

FILE: source/Application/Controller/ClearCookiesController.php
  class ClearCookiesController (line 17) | class ClearCookiesController extends \OxidEsales\Eshop\Application\Contr...
    method render (line 33) | public function render()
    method removeCookies (line 45) | protected function removeCookies()
    method getBreadCrumb (line 66) | public function getBreadCrumb()

FILE: source/Application/Controller/CompareController.php
  class CompareController (line 16) | class CompareController extends \OxidEsales\Eshop\Application\Controller...
    method moveLeft (line 109) | public function moveLeft() //#777C
    method moveRight (line 145) | public function moveRight() //#777C
    method inPopup (line 181) | public function inPopup() // #777C
    method setCompareItemsCnt (line 192) | public function setCompareItemsCnt($iCount)
    method getCompareItemsCnt (line 202) | public function getCompareItemsCnt()
    method getCompareItems (line 219) | public function getCompareItems()
    method setCompareItems (line 236) | public function setCompareItems($aItems)
    method setArticlesPerPage (line 247) | protected function setArticlesPerPage($iNumber)
    method setNoPaging (line 255) | public function setNoPaging()
    method getCompArtList (line 267) | public function getCompArtList()
    method getAttributeList (line 293) | public function getAttributeList()
    method getSimilarRecommListIds (line 319) | public function getSimilarRecommListIds()
    method getPageNavigation (line 337) | public function getPageNavigation()
    method removeArticlesFromPage (line 355) | protected function removeArticlesFromPage($aItems, $oList)
    method changeArtListOrder (line 383) | protected function changeArtListOrder($aItems, $oList)
    method getOrderCnt (line 419) | public function getOrderCnt()
    method getBreadCrumb (line 436) | public function getBreadCrumb()

FILE: source/Application/Controller/ContactController.php
  class ContactController (line 23) | class ContactController extends \OxidEsales\Eshop\Application\Controller...
    method render (line 70) | public function render()
    method send (line 93) | public function send()
    method getUserData (line 120) | public function getUserData()
    method getContactSubject (line 134) | public function getContactSubject()
    method getContactMessage (line 148) | public function getContactMessage()
    method getContactSendStatus (line 162) | public function getContactSendStatus()
    method getBreadCrumb (line 172) | public function getBreadCrumb()
    method getTitle (line 193) | public function getTitle()
    method getMappedContactFormRequest (line 201) | private function getMappedContactFormRequest()
    method sendContactMail (line 223) | private function sendContactMail($email, $subject, $message)

FILE: source/Application/Controller/ContentController.php
  class ContentController (line 20) | class ContentController extends \OxidEsales\Eshop\Application\Controller...
    method getViewId (line 118) | public function getViewId()
    method render (line 128) | public function render()
    method canShowContent (line 157) | protected function canShowContent($sContentIdent)
    method prepareMetaDescription (line 175) | protected function prepareMetaDescription($sMeta, $iLength = 200, $blD...
    method prepareMetaKeyword (line 193) | protected function prepareMetaKeyword($sKeywords, $blRemoveDuplicatedW...
    method getContentCategory (line 207) | public function getContentCategory()
    method showPlainTemplate (line 226) | public function showPlainTemplate()
    method getSeoObjectId (line 247) | protected function getSeoObjectId()
    method getContentId (line 258) | public function getContentId()
    method getContent (line 290) | public function getContent()
    method getSubject (line 310) | protected function getSubject($iLang)
    method getTplName (line 320) | protected function getTplName()
    method getBreadCrumb (line 336) | public function getBreadCrumb()
    method getTitle (line 355) | public function getTitle()
    method showRdfa (line 370) | public function showRdfa()
    method getContentPageTpl (line 381) | public function getContentPageTpl()
    method getBusinessEntityExtends (line 404) | public function getBusinessEntityExtends()
    method getNotMappedToRDFaPayments (line 423) | public function getNotMappedToRDFaPayments()
    method getNotMappedToRDFaDeliverySets (line 438) | public function getNotMappedToRDFaDeliverySets()
    method getDeliveryChargeSpecs (line 451) | public function getDeliveryChargeSpecs()
    method getDeliveryList (line 472) | public function getDeliveryList()
    method getRdfaVAT (line 487) | public function getRdfaVAT()
    method getRdfaPriceValidity (line 497) | public function getRdfaPriceValidity()
    method getParsedContent (line 514) | public function getParsedContent()
    method getRenderer (line 524) | private function getRenderer(): TemplateRendererInterface
    method getCanonicalUrl (line 535) | public function getCanonicalUrl()
    method validateContentAccessPermissions (line 555) | private function validateContentAccessPermissions(string $contentId): ...

FILE: source/Application/Controller/CreditsController.php
  class CreditsController (line 13) | class CreditsController extends \OxidEsales\Eshop\Application\Controller...
    method getSeoObjectId (line 27) | protected function getSeoObjectId()
    method getContent (line 37) | public function getContent()

FILE: source/Application/Controller/DownloadController.php
  class DownloadController (line 15) | class DownloadController extends \OxidEsales\Eshop\Application\Controlle...
    method init (line 21) | public function init()
    method render (line 32) | public function render()

FILE: source/Application/Controller/ExceptionErrorController.php
  class ExceptionErrorController (line 13) | class ExceptionErrorController extends \OxidEsales\Eshop\Application\Con...
    method displayExceptionError (line 28) | public function displayExceptionError()
    method getErrors (line 50) | protected function getErrors()

FILE: source/Application/Controller/ForgotPasswordController.php
  class ForgotPasswordController (line 20) | class ForgotPasswordController extends \OxidEsales\Eshop\Application\Con...
    method forgotPassword (line 62) | public function forgotPassword()
    method updatePassword (line 80) | public function updatePassword()
    method updateSuccess (line 121) | public function updateSuccess()
    method showUpdateScreen (line 131) | public function showUpdateScreen()
    method getUpdateId (line 141) | public function getUpdateId()
    method isExpiredLink (line 151) | public function isExpiredLink()
    method getForgotEmail (line 163) | public function getForgotEmail()
    method getBreadCrumb (line 173) | public function getBreadCrumb()
    method getTitle (line 191) | public function getTitle()

FILE: source/Application/Controller/FrontendController.php
  class FrontendController (line 33) | #[\AllowDynamicProperties]
    method isUserAllowedToManageOwnReviews (line 420) | public function isUserAllowedToManageOwnReviews()
    method getReviewAndRatingItemsCount (line 430) | public function getReviewAndRatingItemsCount()
    method getComponentNames (line 451) | protected function getComponentNames()
    method processRequest (line 476) | protected function processRequest()
    method init (line 509) | public function init()
    method shouldInitializeComponents (line 548) | protected function shouldInitializeComponents()
    method getViewId (line 559) | public function getViewId()
    method generateViewId (line 573) | protected function generateViewId()
    method generateViewIdBase (line 602) | protected function generateViewIdBase()
    method showSorting (line 615) | public function showSorting()
    method setComponents (line 625) | public function setComponents($components = null)
    method getComponents (line 635) | public function getComponents()
    method getComponent (line 647) | public function getComponent($name)
    method setIsOrderStep (line 659) | public function setIsOrderStep($isOrderStep = null)
    method getIsOrderStep (line 669) | public function getIsOrderStep()
    method setActiveCategory (line 680) | public function setActiveCategory($category)
    method getActiveCategory (line 690) | public function getActiveCategory()
    method getListType (line 700) | public function getListType()
    method getListDisplayType (line 718) | public function getListDisplayType()
    method getCustomListDisplayType (line 744) | public function getCustomListDisplayType()
    method setListType (line 762) | public function setListType($type)
    method loadCurrency (line 773) | public function loadCurrency()
    method dontShowEmptyCategories (line 790) | public function dontShowEmptyCategories()
    method showCategoryArticlesCount (line 807) | public function showCategoryArticlesCount()
    method isLanguageLoaded (line 817) | public function isLanguageLoaded()
    method getTopNavigationCatCnt (line 834) | public function getTopNavigationCatCnt()
    method getSortOrderByParameterName (line 849) | public function getSortOrderByParameterName()
    method getSortOrderParameterName (line 859) | public function getSortOrderParameterName()
    method getSortIdent (line 870) | public function getSortIdent()
    method getDefaultSorting (line 880) | public function getDefaultSorting()
    method getUserSelectedSorting (line 890) | public function getUserSelectedSorting()
    method getSavedSorting (line 908) | public function getSavedSorting($sortIdent)
    method setListOrderBy (line 921) | public function setListOrderBy($column)
    method setListOrderDirection (line 931) | public function setListOrderDirection($direction)
    method getListOrderBy (line 941) | public function getListOrderBy()
    method getListOrderDirection (line 957) | public function getListOrderDirection()
    method setMetaDescription (line 969) | public function setMetaDescription($description)
    method setMetaKeywords (line 981) | public function setMetaKeywords($keywords)
    method getMetaFromSeo (line 993) | protected function getMetaFromSeo($dataType)
    method getMetaFromContent (line 1014) | protected function getMetaFromContent($metaIdent)
    method getMetaKeywords (line 1032) | public function getMetaKeywords()
    method getMetaDescription (line 1055) | public function getMetaDescription()
    method getActCurrency (line 1078) | public function getActCurrency()
    method setActCurrency (line 1088) | public function setActCurrency($currency)
    method getCompareItemCount (line 1098) | public function getCompareItemCount()
    method forceNoIndex (line 1111) | protected function forceNoIndex()
    method noIndex (line 1122) | public function noIndex()
    method getMenueList (line 1147) | public function getMenueList()
    method setMenueList (line 1157) | public function setMenueList($menu)
    method setNrOfArtPerPage (line 1165) | protected function setNrOfArtPerPage()
    method getSeoObjectId (line 1220) | protected function getSeoObjectId()
    method prepareMetaDescription (line 1233) | protected function prepareMetaDescription($meta, $length = 1024, $remo...
    method prepareMetaKeyword (line 1279) | protected function prepareMetaKeyword($keywords, $removeDuplicatedWord...
    method removeDuplicatedWords (line 1298) | protected function removeDuplicatedWords($input, $skipTags = [])
    method getNavigationParams (line 1336) | public function getNavigationParams()
    method setItemSorting (line 1372) | public function setItemSorting($sortIdent, $sortBy, $sortDir = null)
    method getSorting (line 1388) | public function getSorting($sortIdent)
    method getSortingSql (line 1413) | public function getSortingSql($ident)
    method getTitleSuffix (line 1430) | public function getTitleSuffix()
    method getTitlePageSuffix (line 1438) | public function getTitlePageSuffix()
    method getTitlePrefix (line 1447) | public function getTitlePrefix()
    method getPageTitle (line 1458) | public function getPageTitle()
    method getSubject (line 1481) | protected function getSubject($languageId)
    method getDynUrlParams (line 1491) | public function getDynUrlParams()
    method getBaseLink (line 1519) | public function getBaseLink($languageId = null)
    method getLink (line 1553) | public function getLink($languageId = null)
    method getCanonicalUrl (line 1561) | public function getCanonicalUrl()
    method getSimilarRecommListIds (line 1573) | public function getSimilarRecommListIds()
    method getSearchParamForHtml (line 1582) | public function getSearchParamForHtml()
    method getRequestParams (line 1593) | protected function getRequestParams($addPageNumber = true)
    method getSeoRequestParams (line 1648) | protected function getSeoRequestParams()
    method showSearch (line 1677) | public function showSearch()
    method getSortColumns (line 1687) | public function getSortColumns()
    method setSortColumns (line 1702) | public function setSortColumns($sortColumns)
    method getRecommSearch (line 1712) | public function getRecommSearch()
    method getPaymentList (line 1719) | public function getPaymentList()
    method getActiveRecommList (line 1730) | public function getActiveRecommList()
    method getAccessoires (line 1746) | public function getAccessoires()
    method getCrossSelling (line 1753) | public function getCrossSelling()
    method getSimilarProducts (line 1760) | public function getSimilarProducts()
    method getAlsoBoughtTheseProducts (line 1767) | public function getAlsoBoughtTheseProducts()
    method getArticleId (line 1774) | public function getArticleId()
    method getTitle (line 1783) | public function getTitle()
    method getActiveLangAbbr (line 1798) | public function getActiveLangAbbr()
    method addGlobalParams (line 1828) | public function addGlobalParams($shop = null)
    method getAdditionalParams (line 1842) | public function getAdditionalParams()
    method generatePageNavigationUrl (line 1868) | public function generatePageNavigationUrl()
    method addPageNrParam (line 1882) | protected function addPageNrParam($url, $page, $languageId = null)
    method getPageNavigation (line 1903) | public function getPageNavigation()
    method getPageNavigationLimitedTop (line 1914) | public function getPageNavigationLimitedTop($positionCount = 7)
    method getPageNavigationLimitedBottom (line 1926) | public function getPageNavigationLimitedBottom($positionCount = 11)
    method generatePageNavigation (line 1938) | public function generatePageNavigation($positionCount = 0)
    method render (line 2007) | public function render()
    method addListIdAndWidgetIdToViewData (line 2032) | private function addListIdAndWidgetIdToViewData()
    method getViewProduct (line 2063) | public function getViewProduct()
    method setViewProduct (line 2073) | public function setViewProduct($product)
    method getViewProductList (line 2083) | public function getViewProductList()
    method getActPage (line 2093) | public function getActPage()
    method getActVendor (line 2110) | public function getActVendor()
    method getActManufacturer (line 2135) | public function getActManufacturer()
    method setActVendor (line 2157) | public function setActVendor($vendor)
    method setActManufacturer (line 2167) | public function setActManufacturer($manufacturer)
    method getActSearch (line 2177) | public function getActSearch()
    method getCategoryTree (line 2193) | public function getCategoryTree()
    method setCategoryTree (line 2203) | public function setCategoryTree($categoryTree)
    method getManufacturerTree (line 2213) | public function getManufacturerTree()
    method setManufacturerTree (line 2223) | public function setManufacturerTree($manufacturerTree)
    method getAddUrlParams (line 2231) | public function getAddUrlParams()
    method getTop5ArticleList (line 2243) | public function getTop5ArticleList($count = null)
    method getBargainArticleList (line 2269) | public function getBargainArticleList()
    method isLowOrderPrice (line 2295) | public function isLowOrderPrice()
    method getMinOrderPrice (line 2312) | public function getMinOrderPrice()
    method getNewsRealStatus (line 2327) | public function getNewsRealStatus()
    method canRedirect (line 2337) | protected function canRedirect()
    method getProduct (line 2351) | public function getProduct()
    method getManufacturerList (line 2360) | public function getManufacturerList()
    method setManufacturerList (line 2370) | public function setManufacturerList($list)
    method setRootVendor (line 2380) | public function setRootVendor($vendor)
    method getRootVendor (line 2390) | public function getRootVendor()
    method setRootManufacturer (line 2400) | public function setRootManufacturer($manufacturer)
    method getRootManufacturer (line 2410) | public function getRootManufacturer()
    method getVendorId (line 2420) | public function getVendorId()
    method getManufacturerId (line 2437) | public function getManufacturerId()
    method getCatMoreUrl (line 2456) | public function getCatMoreUrl()
    method getCatTreePath (line 2466) | public function getCatTreePath()
    method getContentByIdent (line 2478) | public function getContentByIdent($ident)
    method getContentCategory (line 2493) | public function getContentCategory()
    method getMustFillFields (line 2503) | public function getMustFillFields()
    method isFieldRequired (line 2525) | public function isFieldRequired($field)
    method getFormId (line 2535) | public function getFormId()
    method canAcceptFormData (line 2550) | public function canAcceptFormData()
    method getPromoFinishedList (line 2575) | public function getPromoFinishedList()
    method getPromoCurrentList (line 2591) | public function getPromoCurrentList()
    method getPromoFutureList (line 2607) | public function getPromoFutureList()
    method getShowPromotionList (line 2623) | public function getShowPromotionList()
    method isEnabledPrivateSales (line 2642) | public function isEnabledPrivateSales()
    method getFieldValidationErrors (line 2659) | public function getFieldValidationErrors()
    method getBreadCrumb (line 2669) | public function getBreadCrumb()
    method setRootCatChanged (line 2679) | public function setRootCatChanged($rootCategoryChanged)
    method isRootCatChanged (line 2689) | public function isRootCatChanged()
    method getInvoiceAddress (line 2699) | public function getInvoiceAddress()
    method getDeliveryAddress (line 2716) | public function getDeliveryAddress()
    method setDeliveryAddress (line 2734) | public function setDeliveryAddress($deliveryAddress)
    method setInvoiceAddress (line 2744) | public function setInvoiceAddress($address)
    method getActiveUsername (line 2754) | public function getActiveUsername()
    method getWishlistUserId (line 2774) | public function getWishlistUserId()
    method getSearchCatId (line 2782) | public function getSearchCatId()
    method getSearchVendor (line 2789) | public function getSearchVendor()
    method getSearchManufacturer (line 2796) | public function getSearchManufacturer()
    method getLastProducts (line 2803) | public function getLastProducts()
    method getNewBasketItemMsgType (line 2812) | public function getNewBasketItemMsgType()
    method isActive (line 2824) | public function isActive($name)
    method isEnabledDownloadableFiles (line 2834) | public function isEnabledDownloadableFiles()
    method showRememberMe (line 2844) | public function showRememberMe()
    method isVatIncluded (line 2855) | public function isVatIncluded()
    method isPriceCalculated (line 2907) | public function isPriceCalculated()
    method getWishlistName (line 2917) | public function getWishlistName()
    method getWidgetLink (line 2938) | public function getWidgetLink()
    method getCompareItemsCnt (line 2948) | public function getCompareItemsCnt()
    method isAllowedSortingOrder (line 2960) | private function isAllowedSortingOrder($sortOrder)
    method replaceDoubleQuotesWithHTMLCharacters (line 2970) | private function replaceDoubleQuotesWithHTMLCharacters(string $title):...
    method appendValue (line 2975) | private function appendValue(string $param): string
    method appendBasenameValue (line 2982) | private function appendBasenameValue(string $param): string
    method appendUnescapedEncodedValue (line 2989) | private function appendUnescapedEncodedValue(string $param): string
    method appendUnescapedValue (line 2996) | private function appendUnescapedValue(string $param): string

FILE: source/Application/Controller/LinksController.php
  class LinksController (line 18) | class LinksController extends \OxidEsales\Eshop\Application\Controller\F...
    method getLinksList (line 39) | public function getLinksList()
    method getBreadCrumb (line 58) | public function getBreadCrumb()

FILE: source/Application/Controller/ManufacturerListController.php
  class ManufacturerListController (line 21) | class ManufacturerListController extends \OxidEsales\Eshop\Application\C...
    method render (line 98) | public function render()
    method getProductLinkType (line 126) | protected function getProductLinkType()
    method loadArticles (line 138) | protected function loadArticles($oManufacturer)
    method getSeoObjectId (line 164) | protected function getSeoObjectId()
    method addPageNrParam (line 181) | protected function addPageNrParam($sUrl, $iPage, $iLang = null)
    method generatePageNavigationUrl (line 198) | public function generatePageNavigationUrl()
    method hasVisibleSubCats (line 212) | public function hasVisibleSubCats()
    method getSubCatList (line 234) | public function getSubCatList()
    method getArticleList (line 248) | public function getArticleList()
    method getTitle (line 271) | public function getTitle()
    method getTreePath (line 290) | public function getTreePath()
    method getActiveCategory (line 302) | public function getActiveCategory()
    method getCatTreePath (line 321) | public function getCatTreePath()
    method getTitleSuffix (line 338) | public function getTitleSuffix()
    method prepareMetaKeyword (line 355) | protected function prepareMetaKeyword($aCatPath, $blRemoveDuplicatedWo...
    method prepareMetaDescription (line 372) | protected function prepareMetaDescription($aCatPath, $iLength = 1024, ...
    method getSubject (line 385) | protected function getSubject($iLang)
    method getAddUrlParams (line 395) | public function getAddUrlParams()
    method getBreadCrumb (line 411) | public function getBreadCrumb()
    method getAttributes (line 436) | public function getAttributes()

FILE: source/Application/Controller/MoreDetailsController.php
  class MoreDetailsController (line 17) | class MoreDetailsController extends \OxidEsales\Eshop\Application\Contro...
    method getProductId (line 59) | public function getProductId()
    method getActPictureId (line 73) | public function getActPictureId()
    method getArtZoomPics (line 93) | public function getArtZoomPics()
    method getProduct (line 115) | public function getProduct()

FILE: source/Application/Controller/NewsletterController.php
  class NewsletterController (line 21) | class NewsletterController extends \OxidEsales\Eshop\Application\Control...
    method fill (line 64) | public function fill()
    method send (line 80) | public function send()
    method addme (line 154) | public function addme()
    method removeme (line 172) | public function removeme()
    method rmvm (line 189) | public function rmvm()
    method getHomeCountryId (line 199) | public function getHomeCountryId()
    method getNewsletterStatus (line 217) | public function getNewsletterStatus()
    method getRegParams (line 227) | public function getRegParams()
    method getBreadCrumb (line 237) | public function getBreadCrumb()
    method getTitle (line 255) | public function getTitle()

FILE: source/Application/Controller/OrderController.php
  class OrderController (line 24) | class OrderController extends \OxidEsales\Eshop\Application\Controller\F...
    method init (line 120) | public function init()
    method render (line 136) | public function render()
    method execute (line 205) | public function execute()
    method getPayment (line 262) | public function getPayment()
    method getBasket (line 296) | public function getBasket()
    method getExecuteFnc (line 314) | public function getExecuteFnc()
    method getOrderRemark (line 324) | public function getOrderRemark()
    method getBasketArticles (line 341) | public function getBasketArticles()
    method getDelAddress (line 358) | public function getDelAddress()
    method getShipSet (line 374) | public function getShipSet()
    method isConfirmAGBActive (line 394) | public function isConfirmAGBActive()
    method isConfirmAGBError (line 409) | public function isConfirmAGBError()
    method showOrderButtonOnTop (line 419) | public function showOrderButtonOnTop()
    method isWrapping (line 434) | public function isWrapping()
    method getBreadCrumb (line 456) | public function getBreadCrumb()
    method getAddressError (line 475) | public function getAddressError()
    method getDeliveryAddressMD5 (line 485) | public function getDeliveryAddressMD5()
    method getBasketContentMarkGenerator (line 507) | public function getBasketContentMarkGenerator()
    method getNextStep (line 521) | protected function getNextStep($iSuccess)
    method validateTermsAndConditions (line 568) | protected function validateTermsAndConditions()
    method getUtilsObjectInstance (line 597) | protected function getUtilsObjectInstance()
    method getBasketSummaryHash (line 602) | private function getBasketSummaryHash(): string
    method notifyIfBasketSummaryValidationIsNotPossible (line 607) | private function notifyIfBasketSummaryValidationIsNotPossible(): void
    method addBasketSummaryValidationError (line 616) | private function addBasketSummaryValidationError(string $controller): ...

FILE: source/Application/Controller/OxidStartController.php
  class OxidStartController (line 16) | class OxidStartController extends \OxidEsales\Eshop\Application\Controll...
    method appInit (line 23) | public function appInit()
    method render (line 40) | public function render()
    method pageStart (line 57) | public function pageStart()
    method pageClose (line 68) | public function pageClose()
    method getErrorNumber (line 84) | public function getErrorNumber()
    method getErrorTemplates (line 94) | protected function getErrorTemplates()
    method getSystemEventHandler (line 106) | protected function getSystemEventHandler()

FILE: source/Application/Controller/PaymentController.php
  class PaymentController (line 17) | class PaymentController extends \OxidEsales\Eshop\Application\Controller...
    method init (line 113) | public function init()
    method render (line 129) | public function render()
    method setDefaultEmptyPayment (line 193) | protected function setDefaultEmptyPayment()
    method unsetPaymentErrors (line 212) | protected function unsetPaymentErrors()
    method changeshipping (line 236) | public function changeshipping()
    method validatePayment (line 257) | public function validatePayment()
    method getPaymentList (line 326) | public function getPaymentList()
    method getAllSets (line 359) | public function getAllSets()
    method getAllSetsCnt (line 377) | public function getAllSetsCnt()
    method setValues (line 396) | protected function setValues(&$aPaymentList, $oBasket = null)
    method getEmptyPayment (line 414) | public function getEmptyPayment()
    method getPaymentError (line 424) | public function getPaymentError()
    method getPaymentErrorText (line 434) | public function getPaymentErrorText()
    method isOldDebitValidationEnabled (line 444) | public function isOldDebitValidationEnabled()
    method getDynValue (line 454) | public function getDynValue()
    method assignDebitNoteParams (line 481) | protected function assignDebitNoteParams()
    method getCheckedPaymentId (line 508) | public function getCheckedPaymentId()
    method getPaymentCnt (line 551) | public function getPaymentCnt()
    method checkArrValuesEmpty (line 572) | protected function checkArrValuesEmpty($aData, $aKeys)
    method getBreadCrumb (line 592) | public function getBreadCrumb()
    method isPaymentVatSplitted (line 612) | public function isPaymentVatSplitted()

FILE: source/Application/Controller/PriceAlarmController.php
  class PriceAlarmController (line 23) | class PriceAlarmController extends \OxidEsales\Eshop\Application\Control...
    method addme (line 62) | public function addme()
    method getBidPrice (line 101) | public function getBidPrice()
    method getProduct (line 120) | public function getProduct()
    method getParams (line 138) | private function getParams()
    method getPriceAlarmStatus (line 148) | public function getPriceAlarmStatus()

FILE: source/Application/Controller/RecommListController.php
  class RecommListController (line 20) | class RecommListController extends \OxidEsales\Eshop\Application\Control...
    method render (line 102) | public function render()
    method getProductLinkType (line 140) | protected function getProductLinkType()
    method getAddUrlParams (line 150) | public function getAddUrlParams()
    method getAddSeoUrlParams (line 167) | public function getAddSeoUrlParams()
    method saveReview (line 182) | public function saveReview()
    method getNavigationParams (line 228) | public function getNavigationParams()
    method getArticleList (line 241) | public function getArticleList()
    method getSimilarRecommLists (line 275) | public function getSimilarRecommLists()
    method getReviews (line 295) | public function getReviews()
    method isReviewActive (line 312) | public function isReviewActive()
    method canRate (line 322) | public function canRate()
    method getRatingValue (line 341) | public function getRatingValue()
    method getRatingCount (line 358) | public function getRatingCount()
    method getRecommLists (line 375) | public function getRecommLists()
    method getRecommSearch (line 397) | public function getRecommSearch()
    method getTreePath (line 414) | public function getTreePath()
    method getSearchForHtml (line 440) | public function getSearchForHtml()
    method generatePageNavigationUrl (line 455) | public function generatePageNavigationUrl()
    method addPageNrParam (line 473) | protected function addPageNrParam($sUrl, $iPage, $iLang = null)
    method getAdditionalParams (line 492) | public function getAdditionalParams()
    method getLink (line 514) | public function getLink($iLang = null)
    method getBreadCrumb (line 534) | public function getBreadCrumb()
    method getTitle (line 552) | public function getTitle()

FILE: source/Application/Controller/RecommendationAddController.php
  class RecommendationAddController (line 19) | class RecommendationAddController extends \OxidEsales\Eshop\Application\...
    method render (line 40) | public function render()
    method getRecommLists (line 52) | public function getRecommLists()
    method getTitle (line 69) | public function getTitle()

FILE: source/Application/Controller/RegisterController.php
  class RegisterController (line 16) | class RegisterController extends \OxidEsales\Eshop\Application\Controlle...
    method render (line 59) | public function render()
    method getRegistrationError (line 80) | public function getRegistrationError()
    method getRegistrationStatus (line 90) | public function getRegistrationStatus()
    method isFieldRequired (line 102) | public function isFieldRequired($sField)
    method confirmRegistration (line 114) | public function confirmRegistration()
    method getUpdateId (line 144) | public function getUpdateId()
    method isConfirmed (line 154) | public function isConfirmed()
    method getBreadCrumb (line 164) | public function getBreadCrumb()

FILE: source/Application/Controller/ReviewController.php
  class ReviewController (line 17) | class ReviewController extends \OxidEsales\Eshop\Application\Controller\...
    method generateViewId (line 124) | public function generateViewId()
    method init (line 132) | public function init()
    method render (line 152) | public function render()
    method saveReview (line 188) | public function saveReview()
    method getReviewUser (line 241) | public function getReviewUser()
    method getReviewUserHash (line 266) | public function getReviewUserHash()
    method getActiveObject (line 276) | protected function getActiveObject()
    method getActiveType (line 298) | protected function getActiveType()
    method getActiveRecommList (line 316) | public function getActiveRecommList()
    method canRate (line 341) | public function canRate()
    method getReviews (line 363) | public function getReviews()
    method getRecommList (line 382) | public function getRecommList()
    method getActiveRecommItems (line 402) | public function getActiveRecommItems()
    method getReviewSendStatus (line 434) | public function getReviewSendStatus()
    method getPageNavigation (line 444) | public function getPageNavigation()
    method getAdditionalParams (line 463) | public function getAdditionalParams()
    method getDynUrlParams (line 480) | public function getDynUrlParams()

FILE: source/Application/Controller/SearchController.php
  class SearchController (line 30) | class SearchController extends \OxidEsales\Eshop\Application\Controller\...
    method init (line 156) | public function init()
    method loadSearchResults (line 197) | private function loadSearchResults(int $itemsPerPage, string $searchTe...
    method loadProductsWithCustomSearch (line 217) | private function loadProductsWithCustomSearch(int $itemsPerPage, strin...
    method buildSearchCriteria (line 234) | private function buildSearchCriteria(int $itemsPerPage, string $search...
    method buildSorting (line 246) | private function buildSorting(): array
    method loadProductsFromDatabase (line 259) | private function loadProductsFromDatabase(string $searchTerm, array $f...
    method render (line 293) | public function render()
    method processListArticles (line 306) | protected function processListArticles()
    method getAddUrlParams (line 327) | public function getAddUrlParams()
    method isSearchClass (line 357) | protected function isSearchClass()
    method isEmptySearch (line 374) | public function isEmptySearch()
    method getArticleList (line 384) | public function getArticleList()
    method getSimilarRecommListIds (line 396) | public function getSimilarRecommListIds()
    method getSearchParamForHtml (line 415) | public function getSearchParamForHtml()
    method getSearchParam (line 432) | public function getSearchParam()
    method getSearchCatId (line 449) | public function getSearchCatId()
    method getSearchVendor (line 466) | public function getSearchVendor()
    method getSearchManufacturer (line 484) | public function getSearchManufacturer()
    method getPageNavigation (line 503) | public function getPageNavigation()
    method getActiveCategory (line 519) | public function getActiveCategory()
    method getBreadCrumb (line 529) | public function getBreadCrumb()
    method canSelectDisplayType (line 547) | public function canSelectDisplayType()
    method canRedirect (line 557) | protected function canRedirect()
    method getArticleCount (line 567) | public function getArticleCount()
    method getTitle (line 577) | public function getTitle()

FILE: source/Application/Controller/StartController.php
  class StartController (line 16) | class StartController extends \OxidEsales\Eshop\Application\Controller\F...
    method render (line 81) | public function render()
    method getLoadActionsParam (line 96) | protected function getLoadActionsParam()
    method getNewestArticles (line 113) | public function getNewestArticles()
    method getTitleSuffix (line 135) | public function getTitleSuffix()
    method getCanonicalUrl (line 145) | public function getCanonicalUrl()
    method getBanners (line 157) | public function getBanners()
    method getManufacturerForSlider (line 174) | public function getManufacturerForSlider()

FILE: source/Application/Controller/TemplateController.php
  class TemplateController (line 17) | class TemplateController extends \OxidEsales\Eshop\Application\Controlle...
    method render (line 20) | public function render()

FILE: source/Application/Controller/TextEditorHandler.php
  class TextEditorHandler (line 15) | class TextEditorHandler
    method renderTextEditor (line 38) | public function renderTextEditor($width, $height, $objectValue, $field...
    method renderPlainTextEditor (line 57) | public function renderPlainTextEditor($width, $height, $objectValue, $...
    method renderRichTextEditor (line 82) | public function renderRichTextEditor($width, $height, $objectValue, $f...
    method setStyleSheet (line 92) | public function setStyleSheet($stylesheet)
    method getStyleSheet (line 102) | public function getStyleSheet()
    method disableTextEditor (line 110) | public function disableTextEditor()
    method isTextEditorDisabled (line 120) | public function isTextEditorDisabled()

FILE: source/Application/Controller/ThankYouController.php
  class ThankYouController (line 16) | class ThankYouController extends \OxidEsales\Eshop\Application\Controlle...
    method init (line 94) | public function init()
    method render (line 124) | public function render()
    method getBasket (line 158) | public function getBasket()
    method getAlsoBoughtTheseProducts (line 168) | public function getAlsoBoughtTheseProducts()
    method getCurrencyCovIndex (line 189) | public function getCurrencyCovIndex()
    method getIPaymentBasket (line 205) | public function getIPaymentBasket()
    method getIPaymentAccount (line 219) | public function getIPaymentAccount()
    method getIPaymentUser (line 234) | public function getIPaymentUser()
    method getIPaymentPassword (line 249) | public function getIPaymentPassword()
    method getMailError (line 264) | public function getMailError()
    method getOrder (line 279) | public function getOrder()
    method getCountryISO3 (line 297) | public function getCountryISO3()
    method getActionClassName (line 314) | public function getActionClassName()
    method getBreadCrumb (line 324) | public function getBreadCrumb()

FILE: source/Application/Controller/UserController.php
  class UserController (line 16) | class UserController extends \OxidEsales\Eshop\Application\Controller\Fr...
    method render (line 82) | public function render()
    method getShowNoRegOption (line 115) | public function getShowNoRegOption()
    method getLoginOption (line 129) | public function getLoginOption()
    method getOrderRemark (line 149) | public function getOrderRemark()
    method isNewsSubscribed (line 172) | public function isNewsSubscribed()
    method showShipAddress (line 196) | public function showShipAddress()
    method modifyBillAddress (line 206) | public function modifyBillAddress()
    method getBreadCrumb (line 216) | public function getBreadCrumb()
    method isDownloadableProductWarning (line 235) | public function isDownloadableProductWarning()

FILE: source/Application/Controller/VendorListController.php
  class VendorListController (line 18) | class VendorListController extends \OxidEsales\Eshop\Application\Control...
    method render (line 93) | public function render()
    method getProductLinkType (line 121) | protected function getProductLinkType()
    method loadArticles (line 133) | protected function loadArticles($oVendor)
    method getSeoObjectId (line 159) | protected function getSeoObjectId()
    method addPageNrParam (line 176) | protected function addPageNrParam($sUrl, $iPage, $iLang = null)
    method generatePageNavigationUrl (line 195) | public function generatePageNavigationUrl()
    method hasVisibleSubCats (line 209) | public function hasVisibleSubCats()
    method getSubCatList (line 231) | public function getSubCatList()
    method getArticleList (line 248) | public function getArticleList()
    method getTitle (line 268) | public function getTitle()
    method getTreePath (line 285) | public function getTreePath()
    method getVendorIdFromRequest (line 297) | protected function getVendorIdFromRequest()
    method getActiveCategory (line 307) | public function getActiveCategory()
    method getCatTreePath (line 326) | public function getCatTreePath()
    method getTitleSuffix (line 343) | public function getTitleSuffix()
    method prepareMetaKeyword (line 359) | protected function prepareMetaKeyword($sKeywords, $blRemoveDuplicatedW...
    method prepareMetaDescription (line 374) | protected function prepareMetaDescription($sMeta, $iLength = 1024, $bl...
    method getSubject (line 387) | protected function getSubject($iLang)
    method getAddUrlParams (line 397) | public function getAddUrlParams()
    method getBreadCrumb (line 413) | public function getBreadCrumb()
    method getVendorTree (line 438) | public function getVendorTree()
    method setVendorTree (line 459) | public function setVendorTree($oVendorTree)
    method getAttributes (line 470) | public function getAttributes()

FILE: source/Application/Controller/WishListController.php
  class WishListController (line 15) | class WishListController extends \OxidEsales\Eshop\Application\Controlle...
    method getWishUser (line 64) | public function getWishUser()
    method getWishList (line 91) | public function getWishList()
    method searchForWishList (line 117) | public function searchForWishList()
    method getWishListUsers (line 136) | public function getWishListUsers()
    method getWishListSearchParam (line 146) | public function getWishListSearchParam()
    method getBreadCrumb (line 156) | public function getBreadCrumb()
    method getTitle (line 174) | public function getTitle()

FILE: source/Application/Controller/WrappingController.php
  class WrappingController (line 16) | class WrappingController extends \OxidEsales\Eshop\Application\Controlle...
    method getBasketItems (line 47) | public function getBasketItems()
    method getWrappingList (line 67) | public function getWrappingList()
    method getCardList (line 86) | public function getCardList()
    method changeWrapping (line 111) | public function changeWrapping()

FILE: source/Application/Model/ActionList.php
  class ActionList (line 17) | class ActionList extends \OxidEsales\Eshop\Core\Model\ListModel
    method loadFinishedByCount (line 31) | public function loadFinishedByCount($iCount)
    method loadFinishedByTimespan (line 49) | public function loadFinishedByTimespan($iTimespan)
    method loadCurrent (line 64) | public function loadCurrent()
    method loadFutureByCount (line 80) | public function loadFutureByCount($iCount)
    method loadFutureByTimespan (line 96) | public function loadFutureByTimespan($iTimespan)
    method getUserGroupFilter (line 115) | protected function getUserGroupFilter($oUser = null)
    method areAnyActivePromotions (line 143) | public function areAnyActivePromotions()
    method fetchExistsActivePromotion (line 154) | protected function fetchExistsActivePromotion()
    method loadBanners (line 171) | public function loadBanners()

FILE: source/Application/Model/Actions.php
  class Actions (line 16) | class Actions extends \OxidEsales\Eshop\Core\Model\MultiLanguageModel
    method __construct (line 28) | public function __construct()
    method addArticle (line 39) | public function addArticle($articleId)
    method removeArticle (line 68) | public function removeArticle($articleId)
    method delete (line 91) | public function delete($articleId = null)
    method getTimeLeft (line 114) | public function getTimeLeft()
    method getTimeUntilStart (line 127) | public function getTimeUntilStart()
    method start (line 138) | public function start()
    method stop (line 154) | public function stop()
    method isRunning (line 165) | public function isRunning()
    method getBannerArticle (line 197) | public function getBannerArticle()
    method fetchBannerArticleId (line 222) | protected function fetchBannerArticleId()
    method getBannerPictureUrl (line 243) | public function getBannerPictureUrl()
    method getBannerLink (line 258) | public function getBannerLink()
    method isDefault (line 282) | public function isDefault()

FILE: source/Application/Model/Address.php
  class Address (line 13) | class Address extends \OxidEsales\Eshop\Core\Model\BaseModel
    method getStateObject (line 39) | protected function getStateObject()
    method __construct (line 51) | public function __construct()
    method __toString (line 62) | public function __toString()
    method toString (line 72) | public function toString()
    method getEncodedDeliveryAddress (line 95) | public function getEncodedDeliveryAddress()
    method getStateId (line 105) | public function getStateId()
    method getStateTitle (line 118) | public function getStateTitle($sId = null)
    method isSelected (line 134) | public function isSelected()
    method setSelected (line 142) | public function setSelected()
    method getMergedAddressFields (line 152) | protected function getMergedAddressFields()

FILE: source/Application/Model/AmountPriceList.php
  class AmountPriceList (line 15) | class AmountPriceList extends \OxidEsales\Eshop\Core\Model\ListModel
    method __construct (line 34) | public function __construct()
    method getArticle (line 45) | public function getArticle()
    method setArticle (line 55) | public function setArticle($oArticle)
    method load (line 65) | public function load($article)
    method loadFromDb (line 79) | protected function loadFromDb()

FILE: source/Application/Model/Article.php
  class Article (line 42) | class Article extends MultiLanguageModel implements ArticleInterface, IUrl
    method __construct (line 486) | public function __construct($aParams = null)
    method __get (line 505) | public function __get($sName)
    method setAmountPriceList (line 519) | public function setAmountPriceList($amountPriceList)
    method getAmountPriceList (line 527) | protected function getAmountPriceList()
    method isInList (line 538) | public function isInList()
    method setId (line 550) | public function setId($sId = null)
    method getActiveCheckQuery (line 569) | public function getActiveCheckQuery($blForceCoreTable = null)
    method getStockCheckQuery (line 597) | public function getStockCheckQuery($blForceCoreTable = null)
    method getVariantsQuery (line 634) | public function getVariantsQuery($blRemoveNotOrderables, $blForceCoreT...
    method getUnitQuantity (line 656) | public function getUnitQuantity()
    method getSize (line 666) | public function getSize()
    method getWeight (line 678) | public function getWeight()
    method getSqlActiveSnippet (line 690) | public function getSqlActiveSnippet($blForceCoreTable = null)
    method getActionType (line 701) | public function getActionType()
    method createSqlActiveSnippet (line 713) | protected function createSqlActiveSnippet($forceCoreTable)
    method setSkipAssign (line 730) | public function setSkipAssign($blSkipAssign)
    method disablePriceLoad (line 738) | public function disablePriceLoad()
    method enablePriceLoad (line 746) | public function enablePriceLoad()
    method getItemKey (line 756) | public function getItemKey()
    method setItemKey (line 766) | public function setItemKey($sItemKey)
    method setNoVariantLoading (line 776) | public function setNoVariantLoading($blLoadVariants)
    method isBuyable (line 786) | public function isBuyable()
    method isPriceAlarm (line 796) | public function isPriceAlarm()
    method isOnComparisonList (line 813) | public function isOnComparisonList()
    method setOnComparisonList (line 823) | public function setOnComparisonList($blOnList)
    method setLoadParentData (line 833) | public function setLoadParentData($blLoadParentData)
    method getLoadParentData (line 843) | public function getLoadParentData()
    method isMultilingualField (line 855) | public function isMultilingualField($sFieldName)
    method getFUnitPrice (line 870) | public function getFUnitPrice()
    method getUnitPrice (line 888) | public function getUnitPrice()
    method getFMinPrice (line 911) | public function getFMinPrice()
    method getFVarMinPrice (line 929) | public function getFVarMinPrice()
    method getVarMinPrice (line 945) | public function getVarMinPrice()
    method calculateVarMinPrice (line 967) | protected function calculateVarMinPrice()
    method getMinPrice (line 979) | public function getMinPrice()
    method prepareModifiedPrice (line 1005) | protected function prepareModifiedPrice($dPrice)
    method isRangePrice (line 1017) | public function isRangePrice()
    method setRangePrice (line 1046) | public function setRangePrice($blIsRangePrice = true)
    method hasActiveTimeRange (line 1051) | public function hasActiveTimeRange(): bool
    method isVisible (line 1071) | public function isVisible()
    method assign (line 1109) | public function assign($aRecord)
    method setShopValues (line 1144) | protected function setShopValues($article)
    method load (line 1158) | public function load($sOXID)
    method loadData (line 1187) | protected function loadData($articleId)
    method hasSortingFieldsChanged (line 1197) | public function hasSortingFieldsChanged()
    method addToRatingAverage (line 1220) | public function addToRatingAverage($rating)
    method setRatingAverage (line 1247) | public function setRatingAverage($iRating)
    method setRatingCount (line 1257) | public function setRatingCount($iRatingCnt)
    method getArticleRatingAverage (line 1269) | public function getArticleRatingAverage($blIncludeVariants = false)
    method getArticleRatingCount (line 1287) | public function getArticleRatingCount($blIncludeVariants = false)
    method getReviews (line 1304) | public function getReviews()
    method getCrossSelling (line 1336) | public function getCrossSelling()
    method getAccessoires (line 1350) | public function getAccessoires()
    method getSimilarProducts (line 1373) | public function getSimilarProducts()
    method getCustomerAlsoBoughtThisProducts (line 1421) | public function getCustomerAlsoBoughtThisProducts()
    method loadAmountPriceInfo (line 1446) | public function loadAmountPriceInfo()
    method getSelectLists (line 1475) | public function getSelectLists($sKeyPrefix = null)
    method getVariantsCount (line 1526) | public function getVariantsCount()
    method hasMdVariants (line 1536) | public function hasMdVariants()
    method hasIntangibleAgreement (line 1546) | public function hasIntangibleAgreement()
    method hasDownloadableAgreement (line 1558) | public function hasDownloadableAgreement()
    method getVariantSelections (line 1573) | public function getVariantSelections($aFilterIds = null, $sActVariantI...
    method getSelections (line 1607) | public function getSelections($iLimit = null, $aFilter = null)
    method getFullVariants (line 1668) | public function getFullVariants($blRemoveNotOrderables = true, $blForc...
    method getVariants (line 1683) | public function getVariants($blRemoveNotOrderables = true, $blForceCor...
    method getSimpleVariants (line 1693) | public function getSimpleVariants()
    method getAdminVariants (line 1708) | public function getAdminVariants($sLanguage = null)
    method getCategory (line 1742) | public function getCategory()
    method initializeShopArticleCategoryCache (line 1795) | private function initializeShopArticleCategoryCache($shopId): void
    method getCategoryIds (line 1810) | public function getCategoryIds($blActCats = false, $blSkipCache = false)
    method getVendor (line 1836) | public function getVendor($blShopCheck = true)
    method createMultilanguageVendorObject (line 1855) | protected function createMultilanguageVendorObject()
    method getVendorId (line 1869) | public function getVendorId()
    method getManufacturerId (line 1884) | public function getManufacturerId()
    method getManufacturer (line 1898) | public function getManufacturer($blShopCheck = true)
    method inCategory (line 1928) | public function inCategory($sCatNid)
    method isAssignedToCategory (line 1941) | public function isAssignedToCategory($sCatId)
    method getTPrice (line 1978) | public function getTPrice()
    method skipDiscounts (line 2022) | public function skipDiscounts()
    method setPrice (line 2061) | public function setPrice(Price $oPrice)
    method getBasePrice (line 2074) | public function getBasePrice($dAmount = 1)
    method getModifiedAmountPrice (line 2098) | protected function getModifiedAmountPrice($amount)
    method getPrice (line 2110) | public function getPrice($dAmount = 1)
    method setArticleUser (line 2149) | public function setArticleUser($oUser)
    method getArticleUser (line 2157) | public function getArticleUser()
    method getBasketPrice (line 2175) | public function getBasketPrice($dAmount, $aSelList, $oBasket)
    method delete (line 2213) | public function delete($sOXID = null)
    method reduceStock (line 2262) | public function reduceStock($dAmount, $blAllowNegativeStock = false)
    method updateSoldAmount (line 2300) | public function updateSoldAmount($dAmount = 0)
    method disableReminder (line 2336) | public function disableReminder()
    method save (line 2349) | public function save()
    method resetParent (line 2362) | public function resetParent()
    method getPictureGallery (line 2381) | public function getPictureGallery()
    method determineActiveMedia (line 2396) | private function determineActiveMedia(array $mediaItems): ?ProductMedi...
    method onChange (line 2425) | public function onChange($action = null, $articleId = null, $parentArt...
    method getCustomVAT (line 2488) | public function getCustomVAT()
    method checkForStock (line 2504) | public function checkForStock($dAmount, $dArtStockAmount = 0, $selectF...
    method getLongDescription (line 2567) | public function getLongDescription()
    method setArticleLongDesc (line 2603) | public function setArticleLongDesc($longDescription)
    method newAttributeList (line 2615) | protected function newAttributeList()
    method getAttributes (line 2625) | public function getAttributes()
    method getAttributesDisplayableInBasket (line 2640) | public function getAttributesDisplayableInBasket()
    method appendLink (line 2657) | public function appendLink($sAddParams, $iLang = null)
    method getBaseSeoLink (line 2679) | public function getBaseSeoLink($iLang, $blMain = false)
    method getLink (line 2698) | public function getLink($iLang = null, $blMain = false)
    method getMainLink (line 2730) | public function getMainLink($iLang = null)
    method setLinkType (line 2740) | public function setLinkType($iType)
    method getLinkType (line 2754) | public function getLinkType()
    method appendStdLink (line 2765) | public function appendStdLink($sAddParams, $iLang = null)
    method getBaseStdLink (line 2788) | public function getBaseStdLink($iLang, $blAddId = true, $blFull = true)
    method getStdLink (line 2809) | public function getStdLink($iLang = null, $aParams = [])
    method getMediaUrls (line 2827) | public function getMediaUrls()
    method getDynImageDir (line 2850) | public function getDynImageDir()
    method getDispSelList (line 2860) | public function getDispSelList()
    method getMoreDetailLink (line 2879) | public function getMoreDetailLink()
    method getToBasketLink (line 2900) | public function getToBasketLink()
    method getStockStatus (line 2939) | public function getStockStatus()
    method getStockStatusOnLoad (line 2949) | public function getStockStatusOnLoad()
    method getStock (line 2959) | public function getStock()
    method getDeliveryDate (line 2970) | public function getDeliveryDate()
    method getRestockDate (line 2980) | public function getRestockDate()
    method getFTPrice (line 2997) | public function getFTPrice()
    method getFPrice (line 3014) | public function getFPrice()
    method resetRemindStatus (line 3027) | public function resetRemindStatus()
    method getFNetPrice (line 3044) | public function getFNetPrice()
    method isParentNotBuyable (line 3056) | public function isParentNotBuyable()
    method isNotBuyable (line 3066) | public function isNotBuyable()
    method setBuyableState (line 3076) | public function setBuyableState($blBuyable = false)
    method setSelectlist (line 3086) | public function setSelectlist($aSelList)
    method getMedia (line 3091) | public function getMedia(int $position): ProductMediaView
    method getIcon (line 3097) | public function getIcon(): ProductMediaView
    method getThumbnail (line 3105) | public function getThumbnail(): ProductMediaView
    method applyVats (line 3119) | public function applyVats(Price $oPrice)
    method applyDiscountsForVariant (line 3129) | public function applyDiscountsForVariant($oPrice)
    method getParentArticle (line 3149) | public function getParentArticle()
    method updateVariantsRemind (line 3171) | public function updateVariantsRemind()
    method getProductId (line 3194) | public function getProductId()
    method getParentId (line 3204) | public function getParentId()
    method isOrderArticle (line 3214) | public function isOrderArticle()
    method isVariant (line 3224) | public function isVariant(): bool
    method isMdVariant (line 3239) | public function isMdVariant()
    method getSqlForPriceCategories (line 3253) | public function getSqlForPriceCategories($sFields = '')
    method inPriceCategory (line 3276) | public function inPriceCategory($categoryPriceId)
    method fetchFirstInPriceCategory (line 3288) | protected function fetchFirstInPriceCategory($categoryPriceId)
    method createFetchFirstInPriceCategorySql (line 3306) | protected function createFetchFirstInPriceCategorySql($categoryPriceId)
    method getDatabase (line 3328) | protected function getDatabase()
    method getMdVariants (line 3338) | public function getMdVariants()
    method getMdSubvariants (line 3363) | public function getMdSubvariants()
    method getPictureFieldValue (line 3376) | public function getPictureFieldValue($sFieldName, $iIndex = null)
    method getMasterPicturePath (line 3395) | public function getMasterPicturePath(string $file): string
    method getUnitName (line 3405) | public function getUnitName()
    method getArticleFiles (line 3412) | public function getArticleFiles($addFromParent = false)
    method isDownloadable (line 3439) | public function isDownloadable()
    method hasAmountPrice (line 3449) | public function hasAmountPrice()
    method loadVariantList (line 3476) | protected function loadVariantList($loadSimpleVariants, $blRemoveNotOr...
    method selectCategoryIds (line 3568) | protected function selectCategoryIds($query, $field)
    method getCategoryIdsSelect (line 3590) | protected function getCategoryIdsSelect($blActCats = false)
    method getActiveCategorySelectSnippet (line 3619) | protected function getActiveCategorySelectSnippet()
    method calculatePrice (line 3637) | protected function calculatePrice($oPrice, $dVat = null)
    method hasAnyVariant (line 3668) | protected function hasAnyVariant($blForceCoreTable = null)
    method isStockStatusChanged (line 3690) | protected function isStockStatusChanged()
    method isVisibilityChanged (line 3700) | protected function isVisibilityChanged()
    method saveArtLongDesc (line 3710) | protected function saveArtLongDesc()
    method skipSaveFields (line 3762) | protected function skipSaveFields()
    method mergeDiscounts (line 3791) | protected function mergeDiscounts($aDiscounts, $aItemDiscounts)
    method getGroupPrice (line 3810) | protected function getGroupPrice()
    method getAmountPrice (line 3832) | protected function getAmountPrice($amount = 1)
    method modifySelectListPrice (line 3861) | protected function modifySelectListPrice($dPrice, $aChosenList = null)
    method fillAmountPriceList (line 3893) | protected function fillAmountPriceList($aAmPriceList)
    method getVariantIds (line 3937) | public function getVariantIds($activeVariants = true)
    method getArticleVat (line 3966) | public function getArticleVat()
    method hasProductValidTimeRange (line 3977) | public function hasProductValidTimeRange(): bool
    method isProductAlwaysActive (line 3983) | public function isProductAlwaysActive(): bool
    method applyVAT (line 3994) | protected function applyVAT(Price $oPrice, $dVat)
    method applyCurrency (line 4012) | protected function applyCurrency(Price $oPrice, $oCur = null)
    method getAttribsString (line 4027) | protected function getAttribsString(&$sAttributeSql, &$iCnt)
    method getSimList (line 4056) | protected function getSimList($sAttributeSql, $iCnt)
    method generateSimListSearchStr (line 4091) | protected function generateSimListSearchStr($sArticleTable, $aList)
    method generateSearchStr (line 4115) | protected function generateSearchStr($sOXID, $blSearchPriceCat = false)
    method generateSearchStrForCustomerBought (line 4138) | protected function generateSearchStrForCustomerBought()
    method generateSelectCatStr (line 4191) | protected function generateSelectCatStr($sOXID, $sCatId, $dPriceFromTo...
    method buildAmountPriceList (line 4221) | protected function buildAmountPriceList()
    method isFieldEmpty (line 4257) | protected function isFieldEmpty($sFieldName)
    method assignParentFieldValue (line 4312) | protected function assignParentFieldValue($sFieldName)
    method isImageField (line 4355) | protected function isImageField($sFieldName)
    method assignParentFieldValues (line 4366) | protected function assignParentFieldValues()
    method assignNotBuyableParent (line 4383) | protected function assignNotBuyableParent()
    method assignStock (line 4400) | protected function assignStock()
    method assignDynImageDir (line 4474) | protected function assignDynImageDir()
    method assignComparisonListFlag (line 4489) | protected function assignComparisonListFlag()
    method insert (line 4506) | protected function insert()
    method update (line 4523) | protected function update()
    method deleteRecords (line 4540) | protected function deleteRecords($articleId)
    method deleteVariantRecords (line 4620) | protected function deleteVariantRecords($sOXID)
    method deletePics (line 4639) | protected functio
Condensed preview — 2624 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (8,112K chars).
[
  {
    "path": ".github/oxid-esales/install.sh",
    "chars": 2251,
    "preview": "#!/bin/bash\n# shellcheck disable=SC2154\n# Lower case environment variables are passed from the workflow and used here\n# "
  },
  {
    "path": ".github/oxid-esales/shop_ce.yaml",
    "chars": 1003,
    "preview": "install:\n  add_services: 'selenium-chrome'\n  git:\n    sdk_ref: b-8.0.x\n  script: 'source/.github/oxid-esales/install.sh'"
  },
  {
    "path": ".github/workflows/dispatch-manual.yaml",
    "chars": 4158,
    "preview": "name: Manual run\n\non:\n  workflow_dispatch:\n    inputs:\n      scenario:\n        type: choice\n        options:\n          -"
  },
  {
    "path": ".github/workflows/trigger.yaml",
    "chars": 1817,
    "preview": "name: Auto trigger on push or pull requests\n\non:\n  pull_request: {}\n  push: {}\n\njobs:\n  build_testplan:\n    runs-on: 'ub"
  },
  {
    "path": ".gitignore",
    "chars": 433,
    "preview": "# Log\n!/source/log/\n/source/log/*\n!/source/log/.htaccess\n\n/.phpunit.result.cache\n\n# Export\n!/source/export/\n/source/expo"
  },
  {
    "path": "CHANGELOG-8.0.md",
    "chars": 7402,
    "preview": "# Change Log for OXID eShop Community Edition Core Component\n\n## v8.0.0-alpha.3 - Unreleased\n*Compilation release*\n\n### "
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1073,
    "preview": "Contributing to OXID eShop\n==========================\n\nOXID eShop is available under two different licenses, OXID Commun"
  },
  {
    "path": "LICENSE",
    "chars": 16277,
    "preview": "OXID eShop Community Edition Lizenz 2022\n\n1.\tPräambel\n    Mit der OXID eShop Community Edition stellen wir Ihnen die jew"
  },
  {
    "path": "README.md",
    "chars": 1224,
    "preview": "OXID eShop\n==========\n\nThis repository contains the sources of OXID eShop Community Edition Core Component.\n\n### About O"
  },
  {
    "path": "bin/oe-console",
    "chars": 2293,
    "preview": "#!/usr/bin/env php\n<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license detail"
  },
  {
    "path": "composer.json",
    "chars": 3745,
    "preview": "{\n    \"name\": \"oxid-esales/oxideshop-ce\",\n    \"description\": \"This package contains OXID eShop CE source code.\",\n    \"li"
  },
  {
    "path": "phpcs.xml.dist",
    "chars": 641,
    "preview": "<?xml version=\"1.0\"?>\n<ruleset xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" name=\"PHP_CodeSniffer\" xsi:noNamesp"
  },
  {
    "path": "phpunit.xml",
    "chars": 1206,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit\n        xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n        xs"
  },
  {
    "path": "source/.htaccess",
    "chars": 2066,
    "preview": "<IfModule mod_rewrite.c>\n    Options +FollowSymLinks\n    RewriteEngine On\n    RewriteBase /\n\n    RewriteCond %{HTTP:Auth"
  },
  {
    "path": "source/Application/Component/BasketComponent.php",
    "chars": 22011,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/CategoriesComponent.php",
    "chars": 10472,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/CurrencyComponent.php",
    "chars": 3391,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/LanguageComponent.php",
    "chars": 1211,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Locator.php",
    "chars": 20460,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/ShopComponent.php",
    "chars": 1246,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/UserComponent.php",
    "chars": 30361,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/UtilsComponent.php",
    "chars": 6317,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Widget/Actions.php",
    "chars": 1867,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Widget/ArticleBox.php",
    "chars": 7136,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Widget/ArticleDetails.php",
    "chars": 26689,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Widget/CategoryTree.php",
    "chars": 1929,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace  "
  },
  {
    "path": "source/Application/Component/Widget/CookieNote.php",
    "chars": 998,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Widget/CurrencyList.php",
    "chars": 699,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Widget/Information.php",
    "chars": 1463,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Widget/LanguageList.php",
    "chars": 699,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Widget/ManufacturerList.php",
    "chars": 744,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Widget/MiniBasket.php",
    "chars": 725,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Widget/Rating.php",
    "chars": 2424,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Widget/Recommendation.php",
    "chars": 1396,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Widget/Review.php",
    "chars": 2549,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Widget/ServiceList.php",
    "chars": 470,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Widget/ServiceMenu.php",
    "chars": 1227,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Widget/VendorList.php",
    "chars": 971,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Component/Widget/WidgetController.php",
    "chars": 1991,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/AccountController.php",
    "chars": 11814,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/AccountDownloadsController.php",
    "chars": 3497,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/AccountNewsletterController.php",
    "chars": 3544,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/AccountNoticeListController.php",
    "chars": 4740,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/AccountOrderController.php",
    "chars": 4458,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/AccountPasswordController.php",
    "chars": 4982,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/AccountRecommlistController.php",
    "chars": 10581,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/AccountReviewController.php",
    "chars": 6321,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/AccountUserController.php",
    "chars": 2625,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/AccountWishlistController.php",
    "chars": 9986,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ActionsArticleAjax.php",
    "chars": 4868,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ActionsController.php",
    "chars": 553,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ActionsGroupsAjax.php",
    "chars": 4298,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ActionsList.php",
    "chars": 2612,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ActionsMain.php",
    "chars": 6086,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ActionsMainAjax.php",
    "chars": 10540,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ActionsOrderAjax.php",
    "chars": 3347,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AdminContent.php",
    "chars": 548,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AdminController.php",
    "chars": 17909,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AdminDetailsController.php",
    "chars": 10081,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AdminLinks.php",
    "chars": 571,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AdminListController.php",
    "chars": 25855,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AdminNewsletter.php",
    "chars": 2354,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AdminOrder.php",
    "chars": 564,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AdminPayment.php",
    "chars": 584,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AdminPriceAlarm.php",
    "chars": 710,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AdminStart.php",
    "chars": 523,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AdminUser.php",
    "chars": 559,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AdminWrapping.php",
    "chars": 567,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AdminlinksList.php",
    "chars": 1172,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AdminlinksMain.php",
    "chars": 5792,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleAccessoriesAjax.php",
    "chars": 10430,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleAttribute.php",
    "chars": 1708,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleAttributeAjax.php",
    "chars": 6433,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleBundleAjax.php",
    "chars": 4304,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleController.php",
    "chars": 549,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleCrossselling.php",
    "chars": 1902,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleCrosssellingAjax.php",
    "chars": 7788,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleExtend.php",
    "chars": 10658,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleExtendAjax.php",
    "chars": 10657,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleFiles.php",
    "chars": 7755,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleList.php",
    "chars": 10946,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleMain.php",
    "chars": 26758,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleOverview.php",
    "chars": 4417,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticlePictures.php",
    "chars": 2863,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\ndeclare(str"
  },
  {
    "path": "source/Application/Controller/Admin/ArticlePicturesAjax.php",
    "chars": 6881,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\ndeclare(str"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleReview.php",
    "chars": 5447,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleSelectionAjax.php",
    "chars": 5651,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleSeo.php",
    "chars": 11586,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleStock.php",
    "chars": 8272,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleUserdef.php",
    "chars": 903,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ArticleVariant.php",
    "chars": 9689,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AttributeCategory.php",
    "chars": 1314,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AttributeCategoryAjax.php",
    "chars": 6044,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AttributeController.php",
    "chars": 562,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AttributeList.php",
    "chars": 884,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AttributeMain.php",
    "chars": 4373,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AttributeMainAjax.php",
    "chars": 6765,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/AttributeOrderAjax.php",
    "chars": 3262,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/CategoryController.php",
    "chars": 600,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/CategoryList.php",
    "chars": 3341,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/CategoryMain.php",
    "chars": 12785,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/CategoryMainAjax.php",
    "chars": 10880,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/CategoryOrder.php",
    "chars": 1628,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/CategoryOrderAjax.php",
    "chars": 10197,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/CategoryPictures.php",
    "chars": 858,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/CategorySeo.php",
    "chars": 2388,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/CategoryText.php",
    "chars": 2816,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/CategoryUpdate.php",
    "chars": 1215,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ContentList.php",
    "chars": 2472,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ContentMain.php",
    "chars": 7646,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ContentSeo.php",
    "chars": 1116,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/CountryController.php",
    "chars": 549,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/CountryList.php",
    "chars": 1945,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/CountryMain.php",
    "chars": 3995,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliveryArticles.php",
    "chars": 1798,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliveryArticlesAjax.php",
    "chars": 5559,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliveryCategoriesAjax.php",
    "chars": 4815,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliveryController.php",
    "chars": 600,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliveryGroupsAjax.php",
    "chars": 4406,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliveryList.php",
    "chars": 1005,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliveryMain.php",
    "chars": 6455,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliveryMainAjax.php",
    "chars": 4561,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliverySetController.php",
    "chars": 620,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliverySetCountryAjax.php",
    "chars": 4627,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliverySetGroupsAjax.php",
    "chars": 4292,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliverySetList.php",
    "chars": 1030,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliverySetMain.php",
    "chars": 4637,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliverySetMainAjax.php",
    "chars": 4807,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliverySetPayment.php",
    "chars": 2100,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliverySetPaymentAjax.php",
    "chars": 4934,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliverySetRdfa.php",
    "chars": 3312,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliverySetUsers.php",
    "chars": 2877,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliverySetUsersAjax.php",
    "chars": 5339,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliveryUsers.php",
    "chars": 2894,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DeliveryUsersAjax.php",
    "chars": 5603,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DiagnosticsController.php",
    "chars": 491,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DiagnosticsList.php",
    "chars": 493,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DiagnosticsMain.php",
    "chars": 6868,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DiscountArticles.php",
    "chars": 1855,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DiscountArticlesAjax.php",
    "chars": 6004,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DiscountCategoriesAjax.php",
    "chars": 5088,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DiscountController.php",
    "chars": 590,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DiscountGroupsAjax.php",
    "chars": 4349,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DiscountItemAjax.php",
    "chars": 7341,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DiscountList.php",
    "chars": 995,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DiscountMain.php",
    "chars": 7305,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DiscountMainAjax.php",
    "chars": 4464,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DiscountUsers.php",
    "chars": 2727,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DiscountUsersAjax.php",
    "chars": 5560,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/DynamicExportBaseController.php",
    "chars": 31632,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/GenericExport.php",
    "chars": 841,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/GenericExportDo.php",
    "chars": 3598,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/GenericExportMain.php",
    "chars": 1111,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/GenericImport.php",
    "chars": 446,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/GenericImportMain.php",
    "chars": 11302,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/LanguageController.php",
    "chars": 551,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/LanguageList.php",
    "chars": 6193,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/LanguageMain.php",
    "chars": 17449,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ListComponentAjax.php",
    "chars": 17060,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ListReview.php",
    "chars": 3553,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ListUser.php",
    "chars": 895,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/LoginController.php",
    "chars": 7425,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ManufacturerController.php",
    "chars": 569,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ManufacturerList.php",
    "chars": 733,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ManufacturerMain.php",
    "chars": 4792,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ManufacturerMainAjax.php",
    "chars": 7213,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ManufacturerPicture.php",
    "chars": 3523,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ManufacturerSeo.php",
    "chars": 2416,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ModuleConfiguration.php",
    "chars": 7219,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ModuleController.php",
    "chars": 676,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ModuleList.php",
    "chars": 2331,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ModuleMain.php",
    "chars": 3093,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ModuleSortList.php",
    "chars": 4357,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/NavigationController.php",
    "chars": 7202,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/NavigationTree.php",
    "chars": 19761,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ObjectSeo.php",
    "chars": 7156,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/OrderAddress.php",
    "chars": 3241,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/OrderArticle.php",
    "chars": 10031,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/OrderDownloads.php",
    "chars": 1753,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/OrderList.php",
    "chars": 5287,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/OrderMain.php",
    "chars": 7391,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/OrderOverview.php",
    "chars": 5403,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/OrderRemark.php",
    "chars": 3179,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/PaymentCountry.php",
    "chars": 3676,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/PaymentCountryAjax.php",
    "chars": 4576,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/PaymentList.php",
    "chars": 839,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/PaymentMain.php",
    "chars": 6992,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/PaymentMainAjax.php",
    "chars": 4143,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/PaymentRdfa.php",
    "chars": 3847,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/PriceAlarmList.php",
    "chars": 2803,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/PriceAlarmMail.php",
    "chars": 2094,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/PriceAlarmMain.php",
    "chars": 5304,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/PriceAlarmSend.php",
    "chars": 5523,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/SelectListController.php",
    "chars": 549,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/SelectListList.php",
    "chars": 725,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/SelectListMain.php",
    "chars": 13179,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/SelectListMainAjax.php",
    "chars": 6816,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/SelectListOrderAjax.php",
    "chars": 3370,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ShopConfiguration.php",
    "chars": 17508,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  },
  {
    "path": "source/Application/Controller/Admin/ShopController.php",
    "chars": 857,
    "preview": "<?php\n\n/**\n * Copyright © OXID eSales AG. All rights reserved.\n * See LICENSE file for license details.\n */\n\nnamespace O"
  }
]

// ... and 2424 more files (download for full content)

About this extraction

This page contains the full source code of the OXID-eSales/oxideshop_ce GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2624 files (7.2 MB), approximately 2.1M tokens, and a symbol index with 10543 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!